diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index a45d336f86c..e5997c2e707 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: diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index b3f845a053e..bd6d7f215ba 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 2ab116a6bca..835db630f12 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 4c78bbb4e21..6c2ee266cea 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/BuildLinux.sh b/BuildLinux.sh index 772617aaf35..f60e5c5f346 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" + 1 ) + export CMAKE_BUILD_PARALLEL_LEVEL=1 ;; - i ) - BUILD_IMAGE="1" + b ) + BUILD_DEBUG="1" + ;; + c ) + CLEAN_BUILD=1 ;; d ) BUILD_DEPS="1" ;; - s ) - BUILD_ORCA="1" - ;; - b ) - BUILD_DEBUG="1" + h ) usage + exit 0 ;; - g ) - FOUND_GTK3="" + i ) + BUILD_IMAGE="1" ;; r ) - SKIP_RAM_CHECK="1" + SKIP_RAM_CHECK="1" ;; - h ) usage - exit 0 + 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 +DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release) +# treat ubuntu as debian +if [ "${DISTRIBUTION}" == "ubuntu" ] +then + DISTRIBUTION="debian" fi - -#FIXME: require root for -u option -if [[ -n "$UPDATE_LIB" ]] +if [ ! -f ./linux.d/${DISTRIBUTION} ] 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 + echo "Your distribution does not appear to be currently supported by these build scripts" + exit 1 fi +source ./linux.d/${DISTRIBUTION} -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" ]] -then -if [[ -z "$FOUND_GTK3_DEV" ]] +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" ] -then - mkdir deps/build -fi -if ! [[ -n "$SKIP_RAM_CHECK" ]] +if ! [[ -n "${SKIP_RAM_CHECK}" ]] then -check_available_memory_and_disk + check_available_memory_and_disk fi -if [[ -n "$BUILD_DEPS" ]] +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 + rm -fr deps/build + fi + if [ ! -d "deps/build" ] then - BUILD_ARGS="-DDEP_WX_GTK3=ON" + mkdir deps/build fi - if [[ -n "$BUILD_DEBUG" ]] + 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/DockerRun.sh b/DockerRun.sh index da49bd3e61e..c06628e6bee 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 befcc33de46..868779b0afe 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/deps/CMakeLists.txt b/deps/CMakeLists.txt index 02a07ffd3be..a21cc1bb5cc 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -253,6 +253,7 @@ include(JPEG/JPEG.cmake) include(TIFF/TIFF.cmake) include(wxWidgets/wxWidgets.cmake) include(OCCT/OCCT.cmake) +include(OpenCV/OpenCV.cmake) include(FREETYPE/FREETYPE.cmake) set(_dep_list @@ -264,6 +265,7 @@ set(_dep_list dep_NLopt dep_OpenVDB dep_OpenCSG + dep_OpenCV dep_CGAL dep_OpenSSL dep_GLFW diff --git a/deps/OpenCV/OpenCV.cmake b/deps/OpenCV/OpenCV.cmake new file mode 100644 index 00000000000..f19569e86e0 --- /dev/null +++ b/deps/OpenCV/OpenCV.cmake @@ -0,0 +1,72 @@ +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 + 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=ON + ${_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/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 e96c1f4d52e..00000000000 --- 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 325b933f663..00000000000 --- 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 f84f9a070f1..fdc1abdc9a0 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -20,16 +20,6 @@ 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. @@ -44,12 +34,12 @@ endif () 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_TAG ${_wx_git_tag} GIT_SHALLOW ON # URL ${_wx_tarball_url} # URL_HASH SHA256=${_wx_tarball_hash} - PATCH_COMMAND ${_patch_cmd} + # PATCH_COMMAND ${_patch_cmd} DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG CMAKE_ARGS -DwxBUILD_PRECOMP=ON diff --git a/linux.d/README.md b/linux.d/README.md new file mode 100644 index 00000000000..7f05a77cd4e --- /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 00000000000..bae4c06e993 --- /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 00000000000..fd13c706c1e --- /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 00000000000..3a34072891e --- /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 d091dd350b1..bed88115d4f 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-05-01 00:42+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 "" @@ -1738,7 +1741,7 @@ msgstr "" msgid "Filament %d" msgstr "" -msgid "active" +msgid "current" msgstr "" msgid "Scale to build volume" @@ -1882,6 +1885,12 @@ msgstr "" msgid "arrange current plate" msgstr "" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "" @@ -1915,9 +1924,6 @@ msgstr "" msgid "Set Filament for selected items" msgstr "" -msgid "current" -msgstr "" - msgid "Unlock" msgstr "" @@ -2234,9 +2240,6 @@ msgstr "" msgid "Jump to Layer" msgstr "" -msgid "Jump to layer" -msgstr "" - msgid "Please enter the layer number" msgstr "" @@ -2330,10 +2333,10 @@ msgstr "" msgid "AMS not connected" msgstr "" -msgid "Load Filament" +msgid "Load" msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "" msgid "Ext Spool" @@ -2351,7 +2354,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 +2395,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" @@ -2824,27 +2827,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 +2884,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "" @@ -2906,7 +2902,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 +2943,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,21 +3016,59 @@ msgstr "" msgid "Stack overflow" msgstr "" -msgid "Unknown error when export G-code." +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 "" -"Failed to save gcode file.\n" -"Error message: %1%.\n" -"Source file %2%." +"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 "Succeed to export G-code to %1%" +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 "" -msgid "Running post-processing scripts" +#, 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 "" + +#, possible-boost-format +msgid "" +"Failed to save gcode file.\n" +"Error message: %1%.\n" +"Source file %2%." msgstr "" msgid "Copying of the temporary G-code to the output G-code failed" @@ -3101,6 +3143,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 +3213,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 +3257,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 +3376,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "" @@ -3492,6 +3535,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 "" @@ -3569,10 +3616,10 @@ msgstr "" msgid "Flushed" msgstr "" -msgid "Total" +msgid "Tower" msgstr "" -msgid "Tower" +msgid "Total" msgstr "" msgid "Total Estimation" @@ -3677,6 +3724,12 @@ msgstr "" msgid "Normal mode" msgstr "" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "" @@ -3770,6 +3823,9 @@ msgstr "" msgid "Spacing" msgstr "" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "" @@ -3908,6 +3964,9 @@ msgstr "" msgid "Go Live" msgstr "" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "" @@ -3967,6 +4026,9 @@ msgstr "" msgid "Device" msgstr "" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "" @@ -4006,6 +4068,9 @@ msgstr "" msgid "Send all" msgstr "" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "" @@ -4408,39 +4473,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,14 +4541,13 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "" -msgid "Information" +msgid "Network unreachable" msgstr "" -msgid "Playing..." +msgid "Information" msgstr "" -#, possible-c-format, possible-boost-format -msgid "Load failed [%d]!" +msgid "Playing..." msgstr "" msgid "Loading..." @@ -4528,6 +4601,12 @@ msgstr "" msgid "Batch manage files." msgstr "" +msgid "Refresh" +msgstr "" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "" @@ -4538,12 +4617,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 +4664,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 +4679,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 +4701,17 @@ 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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4707,6 +4815,9 @@ msgstr "" msgid "Control" msgstr "" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "" @@ -4725,9 +4836,6 @@ msgstr "" msgid "Bed" msgstr "" -msgid "Unload" -msgstr "" - msgid "Debug Info" msgstr "" @@ -4895,9 +5003,6 @@ msgstr "" msgid "Update" msgstr "" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "" @@ -4928,6 +5033,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 "" @@ -5108,6 +5242,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 +5446,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 " @@ -5505,15 +5655,21 @@ 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 "" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5594,7 +5750,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 "" @@ -5755,6 +5927,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 +5951,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 +5977,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 +6001,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 Studio)." +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 "" @@ -6010,6 +6238,18 @@ 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 "" + msgid "Plate name" msgstr "" @@ -6019,7 +6259,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" @@ -6202,9 +6448,6 @@ msgstr "" msgid "Send print job to" msgstr "" -msgid "Refresh" -msgstr "" - msgid "Bed Leveling" msgstr "" @@ -6285,7 +6528,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." @@ -6338,22 +6584,22 @@ 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?" +"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" -msgstr "" - msgid "" -"Please click the confirm button if you still want to proceed with printing." +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -msgid "Hardened Steel" +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" -msgid "Stainless Steel" +msgid "" +"Please click the confirm button if you still want to proceed with printing." msgstr "" msgid "" @@ -6380,12 +6626,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 +6680,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 +6851,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" @@ -7024,16 +7310,27 @@ msgid "" msgstr "" #, possible-boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"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, 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 +7362,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 "" @@ -7505,10 +7802,46 @@ msgstr "" msgid "New version of Orca Slicer" msgstr "" -msgid "Skip this Version" +msgid "Skip this Version" +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 "Done" +msgid "View Liveview" msgstr "" msgid "Confirm and Update Nozzle" @@ -8269,6 +8602,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 "" @@ -8954,6 +9296,12 @@ msgid "" "printing." msgstr "" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9324,6 +9672,9 @@ msgstr "" msgid "Lightning" msgstr "" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -9551,6 +9902,15 @@ 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 "" @@ -10296,6 +10656,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 "" @@ -10626,9 +11004,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 " @@ -11844,6 +12219,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 +12297,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 +12338,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 +12355,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 "" @@ -12104,6 +12497,12 @@ msgstr "" msgid "Failed" msgstr "" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to overrides the other results?" @@ -12194,12 +12593,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "" @@ -12243,12 +12636,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 +12648,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -12273,9 +12663,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 "" @@ -12640,6 +13043,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 "" @@ -12831,10 +13241,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -12923,6 +13342,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 +13415,15 @@ msgstr "" msgid "Daily Tips" 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 "" @@ -13172,6 +13603,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 "" @@ -13212,151 +13812,151 @@ msgstr "" msgid "User cancelled." msgstr "" - -#: resources/data/hints.ini: [hint:Precise wall] -msgid "Precise wall\nDid you know that turning on precise wall can improve precision and layer consistency?" -msgstr "" - -#: resources/data/hints.ini: [hint:Sandwich mode] -msgid "Sandwich mode\nDid 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 "" - -#: resources/data/hints.ini: [hint:Chamber temperature] -msgid "Chamber temperature\nDid you know that OrcaSlicer supports chamber temperature?" -msgstr "" - -#: resources/data/hints.ini: [hint:Calibration] -msgid "Calibration\nDid you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer." -msgstr "" - -#: resources/data/hints.ini: [hint:Auxiliary fan] -msgid "Auxiliary fan\nDid you know that OrcaSlicer supports Auxiliary part cooling fan?" -msgstr "" - -#: resources/data/hints.ini: [hint:Air filtration] -msgid "Air filtration/Exhaust Fan\nDid you know that OrcaSlicer can support Air filtration/Exhaust Fan?" -msgstr "" - -#: resources/data/hints.ini: [hint:G-code window] -msgid "G-code window\nYou can turn on/off the G-code window by pressing the C key." -msgstr "" - -#: resources/data/hints.ini: [hint:Switch workspaces] -msgid "Switch workspaces\nYou can switch between Prepare and Preview workspaces by pressing the Tab key." -msgstr "" - -#: resources/data/hints.ini: [hint:How to use keyboard shortcuts] -msgid "How to use keyboard shortcuts\nDid you know that Orca Slicer offers a wide range of keyboard shortcuts and 3D scene operations." -msgstr "" - -#: resources/data/hints.ini: [hint:Reverse on odd] -msgid "Reverse on odd\nDid you know that Reverse on odd feature can significantly improve the surface quality of your overhangs?" -msgstr "" - -#: resources/data/hints.ini: [hint:Cut Tool] -msgid "Cut Tool\nDid you know that you can cut a model at any angle and position with the cutting tool?" -msgstr "" - -#: resources/data/hints.ini: [hint:Fix Model] -msgid "Fix Model\nDid you know that you can fix a corrupted 3D model to avoid a lot of slicing problems on the Windows system?" -msgstr "" - -#: resources/data/hints.ini: [hint:Timelapse] -msgid "Timelapse\nDid you know that you can generate a timelapse video during each print?" -msgstr "" - -#: resources/data/hints.ini: [hint:Auto-Arrange] -msgid "Auto-Arrange\nDid you know that you can auto-arrange all objects in your project?" -msgstr "" - -#: resources/data/hints.ini: [hint:Auto-Orient] -msgid "Auto-Orient\nDid you know that you can rotate objects to an optimal orientation for printing by a simple click?" -msgstr "" - -#: resources/data/hints.ini: [hint:Lay on Face] -msgid "Lay on Face\nDid 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 "" - -#: resources/data/hints.ini: [hint:Object List] -msgid "Object List\nDid you know that you can view all objects/parts in a list and change settings for each object/part?" -msgstr "" - -#: resources/data/hints.ini: [hint:Search Functionality] -msgid "Search Functionality\nDid you know that you use the Search tool to quickly find a specific Orca Slicer setting?" -msgstr "" - -#: resources/data/hints.ini: [hint:Simplify Model] -msgid "Simplify Model\nDid 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 "" - -#: resources/data/hints.ini: [hint:Slicing Parameter Table] -msgid "Slicing Parameter Table\nDid you know that you can view all objects/parts on a table and change settings for each object/part?" -msgstr "" - -#: resources/data/hints.ini: [hint:Split to Objects/Parts] -msgid "Split to Objects/Parts\nDid you know that you can split a big object into small ones for easy colorizing or printing?" -msgstr "" - -#: resources/data/hints.ini: [hint:Subtract a Part] -msgid "Subtract a Part\nDid you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Orca Slicer." -msgstr "" - -#: resources/data/hints.ini: [hint:STEP] -msgid "STEP\nDid you know that you can improve your print quality by slicing a STEP file instead of an STL?\nOrca Slicer supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" -msgstr "" - -#: resources/data/hints.ini: [hint:Z seam location] -msgid "Z seam location\nDid 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 "" - -#: resources/data/hints.ini: [hint:Fine-tuning for flow rate] -msgid "Fine-tuning for flow rate\nDid 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 "" - -#: resources/data/hints.ini: [hint:Split your prints into plates] -msgid "Split your prints into plates\nDid 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 "" - -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] -msgid "Speed up your print with Adaptive Layer Height\nDid you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!" -msgstr "" - -#: resources/data/hints.ini: [hint:Support painting] -msgid "Support painting\nDid 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 "" - -#: resources/data/hints.ini: [hint:Different types of supports] -msgid "Different types of supports\nDid 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 "" - -#: resources/data/hints.ini: [hint:Printing Silk Filament] -msgid "Printing Silk Filament\nDid 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 "" - -#: resources/data/hints.ini: [hint:Brim for better adhesion] -msgid "Brim for better adhesion\nDid you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?" -msgstr "" - -#: resources/data/hints.ini: [hint:Set parameters for multiple objects] -msgid "Set parameters for multiple objects\nDid you know that you can set slicing parameters for all selected objects at one time?" -msgstr "" - -#: resources/data/hints.ini: [hint:Stack objects] -msgid "Stack objects\nDid you know that you can stack objects as a whole one?" -msgstr "" - -#: resources/data/hints.ini: [hint:Flush into support/objects/infill] -msgid "Flush into support/objects/infill\nDid you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?" -msgstr "" - -#: resources/data/hints.ini: [hint:Improve strength] -msgid "Improve strength\nDid you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?" -msgstr "" - -#: resources/data/hints.ini: [hint:When need to print with the printer door opened] -msgid "When need to print with the printer door opened\nDid 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 "" - -#: resources/data/hints.ini: [hint:Avoid warping] -msgid "Avoid warping\nDid 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 "" + +#: resources/data/hints.ini: [hint:Precise wall] +msgid "Precise wall\nDid you know that turning on precise wall can improve precision and layer consistency?" +msgstr "" + +#: resources/data/hints.ini: [hint:Sandwich mode] +msgid "Sandwich mode\nDid 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 "" + +#: resources/data/hints.ini: [hint:Chamber temperature] +msgid "Chamber temperature\nDid you know that OrcaSlicer supports chamber temperature?" +msgstr "" + +#: resources/data/hints.ini: [hint:Calibration] +msgid "Calibration\nDid you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer." +msgstr "" + +#: resources/data/hints.ini: [hint:Auxiliary fan] +msgid "Auxiliary fan\nDid you know that OrcaSlicer supports Auxiliary part cooling fan?" +msgstr "" + +#: resources/data/hints.ini: [hint:Air filtration] +msgid "Air filtration/Exhaust Fan\nDid you know that OrcaSlicer can support Air filtration/Exhaust Fan?" +msgstr "" + +#: resources/data/hints.ini: [hint:G-code window] +msgid "G-code window\nYou can turn on/off the G-code window by pressing the C key." +msgstr "" + +#: resources/data/hints.ini: [hint:Switch workspaces] +msgid "Switch workspaces\nYou can switch between Prepare and Preview workspaces by pressing the Tab key." +msgstr "" + +#: resources/data/hints.ini: [hint:How to use keyboard shortcuts] +msgid "How to use keyboard shortcuts\nDid you know that Orca Slicer offers a wide range of keyboard shortcuts and 3D scene operations." +msgstr "" + +#: resources/data/hints.ini: [hint:Reverse on odd] +msgid "Reverse on odd\nDid you know that Reverse on odd feature can significantly improve the surface quality of your overhangs?" +msgstr "" + +#: resources/data/hints.ini: [hint:Cut Tool] +msgid "Cut Tool\nDid you know that you can cut a model at any angle and position with the cutting tool?" +msgstr "" + +#: resources/data/hints.ini: [hint:Fix Model] +msgid "Fix Model\nDid you know that you can fix a corrupted 3D model to avoid a lot of slicing problems on the Windows system?" +msgstr "" + +#: resources/data/hints.ini: [hint:Timelapse] +msgid "Timelapse\nDid you know that you can generate a timelapse video during each print?" +msgstr "" + +#: resources/data/hints.ini: [hint:Auto-Arrange] +msgid "Auto-Arrange\nDid you know that you can auto-arrange all objects in your project?" +msgstr "" + +#: resources/data/hints.ini: [hint:Auto-Orient] +msgid "Auto-Orient\nDid you know that you can rotate objects to an optimal orientation for printing by a simple click?" +msgstr "" + +#: resources/data/hints.ini: [hint:Lay on Face] +msgid "Lay on Face\nDid 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 "" + +#: resources/data/hints.ini: [hint:Object List] +msgid "Object List\nDid you know that you can view all objects/parts in a list and change settings for each object/part?" +msgstr "" + +#: resources/data/hints.ini: [hint:Search Functionality] +msgid "Search Functionality\nDid you know that you use the Search tool to quickly find a specific Orca Slicer setting?" +msgstr "" + +#: resources/data/hints.ini: [hint:Simplify Model] +msgid "Simplify Model\nDid 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 "" + +#: resources/data/hints.ini: [hint:Slicing Parameter Table] +msgid "Slicing Parameter Table\nDid you know that you can view all objects/parts on a table and change settings for each object/part?" +msgstr "" + +#: resources/data/hints.ini: [hint:Split to Objects/Parts] +msgid "Split to Objects/Parts\nDid you know that you can split a big object into small ones for easy colorizing or printing?" +msgstr "" + +#: resources/data/hints.ini: [hint:Subtract a Part] +msgid "Subtract a Part\nDid you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Orca Slicer." +msgstr "" + +#: resources/data/hints.ini: [hint:STEP] +msgid "STEP\nDid you know that you can improve your print quality by slicing a STEP file instead of an STL?\nOrca Slicer supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" +msgstr "" + +#: resources/data/hints.ini: [hint:Z seam location] +msgid "Z seam location\nDid 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 "" + +#: resources/data/hints.ini: [hint:Fine-tuning for flow rate] +msgid "Fine-tuning for flow rate\nDid 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 "" + +#: resources/data/hints.ini: [hint:Split your prints into plates] +msgid "Split your prints into plates\nDid 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 "" + +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] +msgid "Speed up your print with Adaptive Layer Height\nDid you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!" +msgstr "" + +#: resources/data/hints.ini: [hint:Support painting] +msgid "Support painting\nDid 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 "" + +#: resources/data/hints.ini: [hint:Different types of supports] +msgid "Different types of supports\nDid 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 "" + +#: resources/data/hints.ini: [hint:Printing Silk Filament] +msgid "Printing Silk Filament\nDid 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 "" + +#: resources/data/hints.ini: [hint:Brim for better adhesion] +msgid "Brim for better adhesion\nDid you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?" +msgstr "" + +#: resources/data/hints.ini: [hint:Set parameters for multiple objects] +msgid "Set parameters for multiple objects\nDid you know that you can set slicing parameters for all selected objects at one time?" +msgstr "" + +#: resources/data/hints.ini: [hint:Stack objects] +msgid "Stack objects\nDid you know that you can stack objects as a whole one?" +msgstr "" + +#: resources/data/hints.ini: [hint:Flush into support/objects/infill] +msgid "Flush into support/objects/infill\nDid you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?" +msgstr "" + +#: resources/data/hints.ini: [hint:Improve strength] +msgid "Improve strength\nDid you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?" +msgstr "" + +#: resources/data/hints.ini: [hint:When need to print with the printer door opened] +msgid "When need to print with the printer door opened\nDid 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 "" + +#: resources/data/hints.ini: [hint:Avoid warping] +msgid "Avoid warping\nDid 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 "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 08595eec2f6..02750582624 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2024-03-17 22:08+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -260,6 +260,9 @@ msgstr "Reinicialitza la Rotació" msgid "World coordinates" msgstr "Coordenades cartesianes" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1815,8 +1818,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" @@ -1961,6 +1964,12 @@ msgstr "Ordenar" msgid "arrange current plate" msgstr "organitza la placa actual" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rota automàticament" @@ -1994,9 +2003,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 +2337,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" @@ -2429,11 +2432,11 @@ msgstr "Recàrrega automàtica" msgid "AMS not connected" msgstr "AMS no connectat" -msgid "Load Filament" -msgstr "Carregar Filament" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Descarregar Filament" +msgid "Unload" +msgstr "Descarregar" msgid "Ext Spool" msgstr "Bobina Ext" @@ -2450,7 +2453,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 +2495,8 @@ 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." msgid "Edit" msgstr "Editar" @@ -2977,38 +2978,15 @@ 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" -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.)" +msgid "Current Cabin humidity" 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.)" +"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 "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3067,6 +3045,12 @@ msgstr "" "( Actualment només admet el subministrament automàtic de consumibles amb la " "mateixa marca, tipus de material i color )" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Configuració AMS" @@ -3081,11 +3065,9 @@ 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à " -"automàticament cap informació fins que es completi la impressió." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3137,6 +3119,14 @@ 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 "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fitxer" @@ -3210,6 +3200,51 @@ 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 "" + +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 "Error desconegut en exportar el Codi-G." @@ -3223,13 +3258,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" @@ -3311,6 +3339,19 @@ 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 "" + +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" @@ -3399,26 +3440,6 @@ 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. " @@ -3481,6 +3502,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 "" +"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 +3630,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" @@ -3775,6 +3804,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 "" + msgid "Value is out of range." msgstr "El valor introduït és fora de rang." @@ -3855,12 +3888,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 +3996,12 @@ msgstr "Estimació temporal" msgid "Normal mode" msgstr "Mode Normal" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Planificar el temps" @@ -4056,6 +4095,9 @@ msgstr "Opcions d'ordenació" msgid "Spacing" msgstr "Espaiat" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Gir automàtic per a l'arranjament" @@ -4203,6 +4245,9 @@ msgstr "Monitorització de gravació automàtica" msgid "Go Live" msgstr "Entra en directe" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolució" @@ -4264,6 +4309,9 @@ msgstr "Previsualització" msgid "Device" msgstr "Dispositiu" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projecte" @@ -4303,6 +4351,9 @@ msgstr "Imprimeix-ho tot" msgid "Send all" msgstr "Envia-ho tot" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Dreceres de teclat" @@ -4721,44 +4772,49 @@ 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 "" + +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"Inicialització fallida ( la connexió del Dispositiu no està preparada )!" -msgid "Initialize failed (No Camera Device)!" -msgstr "Inicialització fallida ( Sense Dispositiu de Càmera )!" +msgid "Please confirm if the printer is connected." +msgstr "" -msgid "Printer is busy downloading, Please wait for the downloading to finish." +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 "" -"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 "Problem occured. Please update the printer firmware and try again." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicialització fallida ( Manca la IP LAN de la impressora )!" +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 "Inicialitzant..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Inicialització fallida ( %s )!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Aturat [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Aturat." @@ -4791,16 +4847,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…" @@ -4852,6 +4907,12 @@ msgstr "Seleccionar" msgid "Batch manage files." msgstr "Gestió per lots de fitxers." +msgid "Refresh" +msgstr "Actualitzar" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "No hi ha cap Impressora." @@ -4862,13 +4923,33 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "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 +4975,11 @@ msgstr "Suprimir el fitxer" msgid "Fetching model infomations ..." msgstr "Obtenint infomacions del model ..." -msgid "Failed to fetching model infomations from printer." -msgstr "No s'ha pogut obtenir la informació del model de la impressora." +msgid "Failed to fetch model information from printer." +msgstr "" -msgid "Failed to parse model infomations." -msgstr "No s'han pogut analitzar les informacions del model." +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4911,6 +4992,12 @@ 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 "" + msgid "Download waiting..." msgstr "Descàrrega en espera..." @@ -4927,14 +5014,18 @@ 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 "" -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 "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." +msgstr "" -msgid "File not exists." -msgstr "El fitxer no existeix." +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Error de checksum de fitxer. Si us plau, torna-ho a intentar." @@ -5041,6 +5132,9 @@ msgstr "Canviar Vista de Càmera" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Opcions d'impressió" @@ -5059,9 +5153,6 @@ msgstr "Cambra" msgid "Bed" msgstr "Llit" -msgid "Unload" -msgstr "Descarregar" - msgid "Debug Info" msgstr "Informació de depuració" @@ -5248,9 +5339,6 @@ msgstr "Estat" msgid "Update" msgstr "Actualitzar" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "No tornis a mostrar" @@ -5281,6 +5369,35 @@ 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 "" + +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 "S'ha desconnectat el ratolí 3D." @@ -5468,6 +5585,25 @@ msgstr "Permet senyals acústics" msgid "Filament Tangle Detect" msgstr "Detecció de filament enredat" +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 "Acer Inoxidable" + +msgid "Hardened Steel" +msgstr "Acer Endurit" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "Global" @@ -5675,9 +5811,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 " @@ -5918,19 +6051,23 @@ msgstr "Important Model" msgid "prepare 3mf file..." msgstr "preparar el fitxer 3MF..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "descarregant projecte ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projecte descarregat %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"La importació a Orca Slicer ha fallat. Descarregueu el fitxer manualment i " -"importeu-lo." msgid "Import SLA archive" msgstr "Importar fitxer SLA" @@ -6012,10 +6149,24 @@ 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 "" -"No s'ha pogut realitzar l'operació booleana a les malles del model. Només " -"s'exportaran les parts positives." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6189,6 +6340,21 @@ msgstr "Imperial" msgid "Units" msgstr "Unitats" +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 "Inici" @@ -6198,6 +6364,18 @@ msgstr "Pàgina predeterminada" msgid "Set the page opened on startup." msgstr "Definiu la pàgina a obrir a l'inici." +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 "Fer zoom a la posició del ratolí" @@ -6216,6 +6394,12 @@ 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 "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "Mostrar pantalla de presentació" @@ -6237,6 +6421,29 @@ msgstr "" "Si està activat, fa els clculs automàticament cada vegada que canviï el " "color." +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 Studio)." +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 "" @@ -6461,6 +6668,18 @@ msgstr "Incompatible" msgid "The selected preset is null!" msgstr "El perfil seleccionat és nul!" +msgid "End" +msgstr "" + +msgid "Customize" +msgstr "Personalitzar" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." +msgstr "" + msgid "Plate name" msgstr "Nom de la placa" @@ -6470,8 +6689,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 "" + +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "Gerro en Espiral" msgid "First layer filament sequence" msgstr "Seqüència d'impressió de la primera capa" @@ -6655,9 +6880,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" @@ -6759,10 +6981,11 @@ 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." msgid "An SD card needs to be inserted to record timelapse." msgstr "Cal inserir una targeta SD per gravar el timelapse." @@ -6826,27 +7049,25 @@ 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?" +"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?" #, 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 "" + +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 "" "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 "" @@ -6875,6 +7096,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 "" + msgid "Send to Printer SD card" msgstr "Enviar a la targeta SD de la impressora" @@ -6882,6 +7106,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 +7154,26 @@ 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 "" + +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 "Iniciar sessió a la impressora" @@ -7124,6 +7373,20 @@ 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 "" + +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" @@ -7616,21 +7879,28 @@ msgstr "" "següents canvis no desats:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." msgstr "" -"Heu canviat alguns paràmetres del perfil \"%1%\". \n" -"Voleu mantenir aquests paràmetres modificats després de canviar el perfil?" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Heu canviat algunes opcions de configuració del perfil. \n" -"Voleu mantenir aquests paràmetres modificats després de canviar el perfil?" msgid "Extruders count" msgstr "Nombre d'extrusors" @@ -7665,11 +7935,9 @@ 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 " -"seleccionats del perfil esquerra cap a la dreta." msgid "Add File" msgstr "Afegir arxiu" @@ -8135,14 +8403,50 @@ msgstr "" msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "Un nou plugin de Xarxa( %s ) disponible, Vols instal·lar-lo?" -msgid "New version of Orca Slicer" -msgstr "Nova versió d'Orca Slicer" +msgid "New version of Orca Slicer" +msgstr "Nova versió d'Orca Slicer" + +msgid "Skip this Version" +msgstr "Omet aquesta versió" + +msgid "Done" +msgstr "Fet" + +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 "Carregar Filament" -msgid "Skip this Version" -msgstr "Omet aquesta versió" +msgid "Filament Loaded, Resume" +msgstr "" -msgid "Done" -msgstr "Fet" +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "Confirmar i Actualitzar el broquet" @@ -9054,6 +9358,15 @@ msgstr "Base d'Enginyeria" msgid "First layer print sequence" msgstr "Seqüència d'impressió de primera capa" +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 "Aquest Codi-G s'insereix en cada canvi de capa abans d'aixecar z" @@ -9983,6 +10296,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 "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "Malla de llit mínim" @@ -10459,6 +10778,9 @@ msgstr "Suport Cúbic" msgid "Lightning" msgstr "Llampec" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Longitud d'ancoratge de farciment poc dens" @@ -10746,6 +11068,15 @@ 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 "" + +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 "Ajustament en Arc( Arc fitting )" @@ -11688,6 +12019,24 @@ msgstr "" "l'Ooze( goteig ) durant el llarg desplaçament. Definiu zero per desactivar " "la retracció" +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 "Salt en Z quan hi ha retracció" @@ -12108,9 +12457,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 " @@ -13632,6 +13978,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 "" + 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 +14060,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 +14107,14 @@ 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 "" + msgid "Connecting to printer..." msgstr "Connectant amb la impressora..." @@ -13775,6 +14126,19 @@ 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 "" + +#, 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 "Error intern" @@ -13978,6 +14342,12 @@ 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?" @@ -14077,12 +14447,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 +14495,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 +14508,9 @@ msgstr "A la Velocitat Volumètrica" msgid "Flow Dynamics Calibration Result" msgstr "Resultat del Calibratge de Dinàmiques de Flux" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Sense Resultats Històrics" @@ -14163,9 +14524,22 @@ msgstr "" msgid "Action" msgstr "Acció" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Editeu el Calibratge de Dinàmiques de Flux" +msgid "New Flow Dynamic Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "" + msgid "Network lookup" msgstr "Cerca de xarxa" @@ -14563,6 +14937,13 @@ 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 "" + 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" @@ -14786,14 +15167,18 @@ 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 " -"necessiteu.\n" -"Tingueu en compte que la temperatura del broquet, la temperatura del llit i " -"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" +"Studio 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 "Configuració de la Impressora" @@ -14905,6 +15290,9 @@ 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 "" + msgid "Edit Filament" msgstr "Edita el Filament" @@ -14981,6 +15369,17 @@ msgstr "Replegar" msgid "Daily Tips" msgstr "Consells diaris" +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" @@ -15184,6 +15583,175 @@ msgstr "" "Cos del missatge: \"%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 "" + +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 "" @@ -15614,6 +16182,187 @@ msgstr "" "augmentar adequadament la temperatura del llit pot reduir la probabilitat de " "deformació." +#~ msgid "Unload Filament" +#~ msgstr "Descarregar Filament" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Trieu una ranura AMS i premeu el botó \"Carregar\" o \"Descarregar\" per " +#~ "carregar o descarregar el filament automàticament." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Placa Base" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "La importació a Orca Slicer ha fallat. Descarregueu el fitxer manualment " +#~ "i importeu-lo." + +#~ 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 "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.)" +#~ 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ó." + +#~ msgid "" +#~ "Note: if 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à " +#~ "automàticament cap informació fins que es completi la impressió." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Aconseguida l'exportació del Codi-G a %1%" + +#~ 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 "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "" +#~ "La impressora està ocupada descarregant, espereu que finalitzi la " +#~ "descàrrega." + +#~ 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]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Sense fitxers [%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Càrrega fallida [%d]" + +#~ msgid "Failed to fetching model infomations 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 "Connection lost. Please retry." +#~ msgstr "S'ha perdut la connexió. Si us plau, torna-ho a intentar." + +#~ msgid "File not exists." +#~ msgstr "El fitxer no existeix." + +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "No s'ha pogut realitzar l'operació booleana a les malles del model. Només " +#~ "s'exportaran les parts positives." + +#, 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 "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new 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?" + +#~ 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 "" +#~ "Aneu a la configuració del filament per editar els perfils si ho " +#~ "necessiteu.\n" +#~ "Tingueu en compte que la temperatura del broquet, la temperatura del llit " +#~ "i la velocitat volumètrica màxima tenen un impacte significatiu en la " +#~ "qualitat d'impressió. Si us plau, configureu-los amb cura." + #~ msgid "" #~ "Alternate extra wall only works with ensure vertical shell thickness " #~ "disabled. " diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 242262cf636..cb3c5ce17a9 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-05-01 00:42+0800\n" "PO-Revision-Date: 2023-09-30 15:15+0200\n" "Last-Translator: René Mošner \n" "Language-Team: \n" @@ -260,6 +260,9 @@ msgstr "Výchozí Natočení" msgid "World coordinates" msgstr "Světové souřadnice" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1771,8 +1774,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" @@ -1915,6 +1918,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 +1957,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 +2293,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" @@ -2383,11 +2386,11 @@ msgstr "Automatické Doplnění" msgid "AMS not connected" msgstr "AMS není připojen" -msgid "Load Filament" -msgstr "Zavézt Filament" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Vysunout Filament" +msgid "Unload" +msgstr "Vysunout" msgid "Ext Spool" msgstr "Ext Cívka" @@ -2404,7 +2407,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 +2448,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" @@ -2922,36 +2923,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 "" -"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.)" +msgid "Current Cabin humidity" 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." +"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 "" -"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 +2990,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 +3010,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 +3061,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 +3140,51 @@ 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 "" + +#, 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 "Neznámá chyba při exportu G-kódu." @@ -3161,13 +3198,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" @@ -3248,6 +3278,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 +3376,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 +3435,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 +3560,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ý" @@ -3700,6 +3731,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." @@ -3780,12 +3815,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 +3923,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 +4022,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í" @@ -4127,6 +4171,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í" @@ -4188,6 +4235,9 @@ msgstr "Náhled" msgid "Device" msgstr "Zařízení" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projekt" @@ -4227,6 +4277,9 @@ msgstr "Vytisknout vše" msgid "Send all" msgstr "Odeslat vše" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" @@ -4642,42 +4695,49 @@ msgstr "" msgid "Synchronization" msgstr "Synchronizace" -msgid "Initialize failed (No Device)!" -msgstr "Inicializace se nezdařila (žádné zařízení)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" -msgid "Initialize failed (Device connection not ready)!" -msgstr "Inicializace se nezdařila (Připojení zařízení není připraveno)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" + +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "Inicializace se nezdařila (žádné kamerové zařízení)!" +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 is busy downloading, Please wait for the downloading to finish." +msgid "Printer camera is malfunctioning." 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 "Problem occured. Please update the printer firmware and try again." 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 "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicializace se nezdařila (chybějící LAN IP tiskárny)!" +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,16 +4768,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í..." @@ -4769,6 +4828,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 +4844,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 +4894,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 +4911,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 +4933,17 @@ 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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4955,6 +5049,9 @@ msgstr "" msgid "Control" msgstr "Ovládání" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Možnosti tisku" @@ -4973,9 +5070,6 @@ msgstr "Komora" msgid "Bed" msgstr "Podložka" -msgid "Unload" -msgstr "Vysunout" - msgid "Debug Info" msgstr "Informace o ladění" @@ -5159,9 +5253,6 @@ msgstr "Stav" msgid "Update" msgstr "Aktualizovat" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Znovu Nezobrazovat" @@ -5192,6 +5283,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." @@ -5380,6 +5500,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í" @@ -5589,9 +5728,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 " @@ -5821,18 +5957,23 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Import do Orca Sliceru selhal. Stáhněte soubor a proveďte jeho ruční import." msgid "Import SLA archive" msgstr "" @@ -5913,10 +6054,24 @@ 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 " @@ -6084,6 +6239,21 @@ msgstr "Imperiální" msgid "Units" msgstr "Jednotky" +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 "" @@ -6093,6 +6263,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 "Přiblížit na pozici myši" @@ -6109,6 +6291,12 @@ msgstr "" "Pokud je povoleno, použijte volnou kameru. Pokud není povoleno, použijte " "omezenou kameru." +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "" @@ -6127,6 +6315,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 Studio)." +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 "" @@ -6349,6 +6560,18 @@ msgstr "Nekompatibilní" msgid "The selected preset is null!" msgstr "Vybrané přednastavení je nula!" +msgid "End" +msgstr "" + +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 +6581,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" @@ -6542,9 +6771,6 @@ msgstr "" msgid "Send print job to" msgstr "Odeslat tiskovou úlohu na" -msgid "Refresh" -msgstr "Obnovit" - msgid "Bed Leveling" msgstr "Vyrovnání podložky" @@ -6638,9 +6864,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." @@ -6701,24 +6929,24 @@ 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?" +"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 "" - msgid "" -"Please click the confirm button if you still want to proceed with printing." +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"Pokud stále chcete pokračovat v tisku, klikněte prosím na tlačítko Potvrdit." -msgid "Hardened Steel" +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" -msgid "Stainless Steel" +msgid "" +"Please click the confirm button if you still want to proceed with printing." msgstr "" +"Pokud stále chcete pokračovat v tisku, klikněte prosím na tlačítko Potvrdit." msgid "" "Connecting to the printer. Unable to cancel during the connection process." @@ -6746,12 +6974,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 +7029,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ě" @@ -6980,6 +7235,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" @@ -7472,23 +7741,28 @@ msgstr "" "následující neuložené změny:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"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, 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ů" @@ -7519,7 +7793,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 "" @@ -7964,24 +8238,60 @@ msgstr "informace o aktualizaci verze %s:" msgid "Network plug-in update" msgstr "Aktualizace síťového zásuvného modulu" -msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "" +"Klepnutím na OK aktualizujte síťový zásuvný modul při příštím spuštění Orca " +"Sliceru." + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "Nový síťový plug-in (%s) k dispozici, chcete jej nainstalovat?" + +msgid "New version of Orca Slicer" +msgstr "Nová verze Orca Slicer" + +msgid "Skip this Version" +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 "" -"Klepnutím na OK aktualizujte síťový zásuvný modul při příštím spuštění Orca " -"Sliceru." -#, c-format, boost-format -msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "Nový síťový plug-in (%s) k dispozici, chcete jej nainstalovat?" +msgid "Finished, Continue" +msgstr "" -msgid "New version of Orca Slicer" -msgstr "Nová verze Orca Slicer" +msgid "Load Filament" +msgstr "Zavézt Filament" -msgid "Skip this Version" +msgid "Filament Loaded, Resume" msgstr "" -msgid "Done" -msgstr "Hotovo" +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "" @@ -8843,6 +9153,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" @@ -9619,6 +9938,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 "" @@ -10051,6 +10376,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ě" @@ -10328,6 +10656,15 @@ 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" @@ -11217,6 +11554,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" @@ -11592,9 +11947,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 " @@ -13005,6 +13357,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 +13437,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 +13485,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 +13502,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" @@ -13338,6 +13708,12 @@ 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?" @@ -13435,12 +13811,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametry tisku" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Typ Podložky" @@ -13488,12 +13858,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 +13870,9 @@ msgstr "Do objemové rychlosti" msgid "Flow Dynamics Calibration Result" msgstr "Výsledek kalibrace dynamiky průtoku" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Žádný historický výsledek" @@ -13518,9 +13885,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" @@ -13903,6 +14283,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 "" @@ -14094,10 +14481,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -14186,6 +14582,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 "" @@ -14257,6 +14656,15 @@ msgstr "" msgid "Daily Tips" 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" @@ -14446,6 +14854,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 "" @@ -14824,6 +15401,168 @@ msgid "" "probability of warping." msgstr "" +#~ 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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Import do Orca Sliceru selhal. Stáhněte soubor a proveďte jeho ruční " +#~ "import." + +#~ 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 b5c906d8a07..6f046ab33d6 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-05 11:32+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -256,6 +256,9 @@ msgstr "Rotation zurücksetzen" msgid "World coordinates" msgstr "Weltkoordinaten" +msgid "Object coordinates" +msgstr "Objektkoordinaten" + msgid "°" msgstr "°" @@ -1814,8 +1817,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" @@ -1960,6 +1963,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 +2002,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 +2350,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" @@ -2444,10 +2447,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 +2468,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 +2511,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" @@ -2999,39 +3002,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 "" -"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 "Current Cabin humidity" +msgstr "Aktuelle Kabinenfeuchtigkeit" 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 "" -"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 +3074,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 +3094,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 +3152,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 +3236,69 @@ 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 +3312,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." @@ -3342,6 +3397,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 +3502,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 +3572,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 +3702,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" @@ -3818,6 +3878,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." @@ -3898,12 +3964,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 +4072,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 +4171,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" @@ -4168,7 +4243,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 +4321,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" @@ -4308,6 +4386,9 @@ msgstr "Vorschau" msgid "Device" msgstr "Gerät" +msgid "Multi-device" +msgstr "Multi-Gerät" + msgid "Project" msgstr "Projekt" @@ -4349,6 +4430,9 @@ msgstr "Alle Platten drucken" msgid "Send all" msgstr "Sende alle" +msgid "Send to Multi-device" +msgstr "An Multi-Gerät senden" + msgid "Keyboard Shortcuts" msgstr "Tastaturkürzel" @@ -4770,45 +4854,67 @@ msgstr "" msgid "Synchronization" msgstr "Synchronisierung" -msgid "Initialize failed (No Device)!" -msgstr "Initialisierung fehlgeschlagen (Kein Gerät)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" +"Das Gerät kann keine weiteren Gespräche führen. Bitte versuchen Sie es " +"später erneut." -msgid "Initialize failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Die Initialisierung ist fehlgeschlagen (Geräteverbindung nicht bereit)!" +"Die Wiedergabe funktioniert nicht richtig. Bitte installieren Sie den " +"Systemplayer neu." + +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"Der Player ist nicht geladen. Klicken Sie auf die Schaltfläche „Wiedergabe“, " +"um es erneut zu versuchen." -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialisierung fehlgeschlagen (keine Kamera)!" +msgid "Please confirm if the printer is connected." +msgstr "Bitte bestätigen Sie, ob der Drucker verbunden ist." -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -"Der Drucker ist mit dem Herunterladen beschäftigt; Bitte warten Sie, bis der " -"Download beendet ist." +"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 "Initialize failed (Not supported on the current printer version)!" +msgid "Problem occured. Please update the printer firmware and try again." msgstr "" -"Initialisierung fehlgeschlagen (Nicht unterstützt auf der aktuellen " -"Druckerversion)!" +"Problem aufgetreten. Bitte aktualisieren Sie die Drucker-Firmware und " +"versuchen Sie es erneut." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisierung fehlgeschlagen (Kein Zugriff im reinen LAN-Modus)!" +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 "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialisierung fehlgeschlagen (Fehlende LAN IP des Druckers)!" +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,16 +4945,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..." @@ -4900,6 +5005,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 +5021,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 +5075,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 +5093,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 +5117,21 @@ msgstr "Herunterladen abgeschlossen" msgid "Downloading %d%%..." msgstr "%d%% wird heruntergeladen..." -msgid "Connection lost. Please retry." -msgstr "Verbindung verloren. Bitte versuchen Sie es erneut." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"Der Drucker wird neu verbunden, die Operation kann nicht sofort " +"abgeschlossen werden. Bitte versuchen Sie es später erneut." -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -"Das Gerät kann keine weiteren Gespräche führen. Bitte versuchen Sie es " -"später erneut." +"Mehr als 4 Systeme/Handy verwenden den Remote-Zugriff. Sie können einige " +"schließen und es erneut versuchen." -msgid "File not exists." +msgid "File does not exist." msgstr "Datei existiert nicht." msgid "File checksum error. Please retry." @@ -5088,6 +5239,9 @@ msgstr "Schalte Kameraperspektive" msgid "Control" msgstr "Steuerung" +msgid "Printer Parts" +msgstr "Drucker-Teile" + msgid "Print Options" msgstr "Druckoptionen" @@ -5106,9 +5260,6 @@ msgstr "Cham" msgid "Bed" msgstr "Druckbett" -msgid "Unload" -msgstr "Entladen" - msgid "Debug Info" msgstr "Debug-Informationen" @@ -5298,9 +5449,6 @@ msgstr "Status" msgid "Update" msgstr "Update" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Nicht erneut anzeigen" @@ -5331,6 +5479,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." @@ -5518,6 +5700,25 @@ 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 +5931,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 " @@ -5978,19 +6176,25 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" "Der Import in Orca Slicer ist fehlgeschlagen. Bitte laden Sie die Datei " -"manuell herunter und importieren Sie sie." +"herunter und importieren Sie sie manuell." msgid "Import SLA archive" msgstr "SLA-Archiv importieren" @@ -6073,10 +6277,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 " @@ -6252,6 +6473,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,16 +6558,43 @@ 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 "Network" -msgstr "Netzwerk" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Reinigungsvolumen: Auto-Berechnung bei jedem Filamentwechsel." -msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Benutzerprofile automatisch synchronisieren (Drucker/Filament/Prozess)" +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "Wenn aktiviert, wird bei jedem Filamentwechsel automatisch berechnet." -msgid "User Sync" -msgstr "Benutzer-Synchronisation" +msgid "Remember printer configuration" +msgstr "Druckerkonfiguration merken" -msgid "Update built-in Presets automatically." +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 Studio)." +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" + +msgid "Auto sync user presets(Printer/Filament/Process)" +msgstr "Benutzerprofile automatisch synchronisieren (Drucker/Filament/Prozess)" + +msgid "User Sync" +msgstr "Benutzer-Synchronisation" + +msgid "Update built-in Presets automatically." msgstr "Aktualisiere integrierte Voreinstellungen automatisch." msgid "System Sync" @@ -6538,6 +6807,18 @@ 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 +6828,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" @@ -6735,9 +7022,6 @@ msgstr "Bambu strukturierte PEI-Platte" msgid "Send print job to" msgstr "Druckauftrag senden an" -msgid "Refresh" -msgstr "Aktualisieren" - msgid "Bed Leveling" msgstr "Druckbettnivellierung" @@ -6841,8 +7125,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 +7161,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" @@ -6908,16 +7197,26 @@ 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?" +"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,12 +7224,6 @@ 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 "" @@ -6957,6 +7250,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 +7261,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 +7309,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 +7539,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" @@ -7722,23 +8066,38 @@ msgstr "" "die folgenden nicht gespeicherten Änderungen:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Sie haben einige Einstellungen des Profils \"%1%\" geändert. " + msgid "" -"You have changed some settings of preset \"%1%\". \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" +"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 "" -"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?" +"\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 "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" 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 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 +8133,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" @@ -8230,8 +8589,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?" @@ -8247,6 +8606,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" @@ -9173,6 +9568,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." @@ -10094,6 +10498,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" @@ -10567,6 +10977,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" @@ -10777,13 +11190,13 @@ 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 " @@ -10861,6 +11274,19 @@ 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" @@ -11792,6 +12218,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" @@ -12221,9 +12671,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 " @@ -13749,6 +14196,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." @@ -13827,14 +14277,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" @@ -13885,6 +14327,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..." @@ -13894,6 +14349,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" @@ -14096,6 +14569,14 @@ 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?" @@ -14196,12 +14677,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Druckparameter" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Druckbetttyp" @@ -14250,12 +14725,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" @@ -14268,6 +14737,9 @@ msgstr "zur volumetrischen Geschwindigkeit" msgid "Flow Dynamics Calibration Result" msgstr "Flussdynamik-Kalibrierungsergebnis" +msgid "New" +msgstr "Neu" + msgid "No History Result" msgstr "Kein historisches Ergebnis" @@ -14280,9 +14752,22 @@ 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" @@ -14683,6 +15168,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 " @@ -14696,8 +15191,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, " @@ -14908,7 +15403,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 " @@ -14917,6 +15412,22 @@ msgstr "" "maximale volumetrische Geschwindigkeit einen erheblichen Einfluss auf die " "Druckqualität haben. Bitte stellen Sie sie sorgfältig ein." +msgid "" +"\n" +"\n" +"Studio 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" @@ -15025,6 +15536,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" @@ -15104,6 +15620,18 @@ msgstr "Zuklappen" msgid "Daily Tips" msgstr "Tägliche Tipps" +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" @@ -15305,6 +15833,272 @@ 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!" @@ -15747,6 +16541,258 @@ msgstr "" "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "Wahrscheinlichkeit von Verwerfungen verringert werden kann." +#~ 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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Der Import in Orca Slicer ist fehlgeschlagen. Bitte laden Sie die Datei " +#~ "manuell herunter und importieren Sie sie." + +#~ 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." @@ -15890,8 +16936,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 73905820252..0e8af19aea4 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -254,6 +254,9 @@ msgstr "Reset rotation" msgid "World coordinates" msgstr "World coordinates" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1746,8 +1749,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" @@ -1890,6 +1893,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 +1932,6 @@ msgstr "Change Filament" msgid "Set Filament for selected items" msgstr "Set Filament for selected items" -msgid "current" -msgstr "current" - msgid "Unlock" msgstr "Unlock" @@ -2255,9 +2261,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." @@ -2351,10 +2354,10 @@ msgstr "" msgid "AMS not connected" msgstr "AMS not connected" -msgid "Load Filament" -msgstr "Load" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "Unload" msgid "Ext Spool" @@ -2372,8 +2375,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" @@ -2413,10 +2416,8 @@ 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." msgid "Edit" msgstr "Edit" @@ -2886,36 +2887,15 @@ 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 "" -"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.)" +msgid "Current Cabin humidity" 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." +"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 "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -2965,6 +2945,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS Settings" @@ -2979,11 +2965,9 @@ 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." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3035,6 +3019,14 @@ msgstr "" "AMS will continue to another spool with the same filament properties " "automatically when current filament runs out." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "File" @@ -3108,6 +3100,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 "" + +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 +3158,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." @@ -3205,6 +3235,19 @@ 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 "" + +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" @@ -3287,25 +3330,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 +3389,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 "" + +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" @@ -3470,18 +3513,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Unknown" @@ -3641,6 +3672,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 "" + msgid "Value is out of range." msgstr "Value is out of range." @@ -3721,12 +3756,12 @@ msgstr "Display" msgid "Flushed" msgstr "Flushed" -msgid "Total" -msgstr "Total" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "Total" + msgid "Total Estimation" msgstr "Total estimation" @@ -3829,6 +3864,12 @@ msgstr "Time Estimation" msgid "Normal mode" msgstr "Normal mode" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Prepare time" @@ -3922,6 +3963,9 @@ msgstr "Arrange options" msgid "Spacing" msgstr "Spacing" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Auto rotate for arrangement" @@ -4067,6 +4111,9 @@ msgstr "Auto-record Monitoring" msgid "Go Live" msgstr "Go Live" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolution" @@ -4128,6 +4175,9 @@ msgstr "Preview" msgid "Device" msgstr "Device" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Project" @@ -4167,6 +4217,9 @@ msgstr "Print all" msgid "Send all" msgstr "Send all" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Keyboard Shortcuts" @@ -4574,40 +4627,49 @@ 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 "" -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -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 "" -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 "" -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)!" -msgstr "Initialization failed (Not accessible in LAN-only mode)!" +msgid "Printer camera is malfunctioning." +msgstr "" -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 "" + +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 "Initializing..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Initialization failed (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Stopped [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Stopped." @@ -4638,16 +4700,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..." @@ -4699,6 +4760,12 @@ msgstr "Select" msgid "Batch manage files." msgstr "Batch manage files." +msgid "Refresh" +msgstr "Refresh" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "No printers." @@ -4709,13 +4776,32 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "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 +4823,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 "" -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4752,6 +4838,12 @@ 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 "" + msgid "Download waiting..." msgstr "Download waiting..." @@ -4768,13 +4860,17 @@ 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 "" -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4878,6 +4974,9 @@ msgstr "" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Print Options" @@ -4896,9 +4995,6 @@ msgstr "Cham" msgid "Bed" msgstr "Bed" -msgid "Unload" -msgstr "Unload" - msgid "Debug Info" msgstr "Debug Info" @@ -5068,9 +5164,6 @@ msgstr "Status" msgid "Update" msgstr "Update" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Don't show again" @@ -5101,6 +5194,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 "" + +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 Mouse disconnected." @@ -5287,6 +5409,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 "Global" @@ -5485,9 +5626,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 " @@ -5715,15 +5853,21 @@ msgstr "Importing Model" msgid "prepare 3mf file..." msgstr "preparing 3mf file..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "downloading project ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Project downloaded %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5808,10 +5952,24 @@ 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 "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -5976,6 +6134,21 @@ 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 "" + +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 +6158,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 +6186,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 "" @@ -6019,6 +6210,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 Studio)." +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 "" @@ -6241,6 +6455,18 @@ msgstr "Incompatible" 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 "" + msgid "Plate name" msgstr "Plate name" @@ -6250,9 +6476,15 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Print sequence" -msgid "Customize" +msgid "Same as Global" msgstr "" +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "Spiral vase" + msgid "First layer filament sequence" msgstr "" @@ -6434,9 +6666,6 @@ msgstr "" msgid "Send print job to" msgstr "Send print job to" -msgid "Refresh" -msgstr "Refresh" - msgid "Bed Leveling" msgstr "Bed leveling" @@ -6532,7 +6761,10 @@ 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 "" msgid "An SD card needs to be inserted to record timelapse." @@ -6591,24 +6823,24 @@ 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?" +"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 "" - msgid "" -"Please click the confirm button if you still want to proceed with printing." +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" -msgid "Stainless Steel" +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 "" "Connecting to the printer. Unable to cancel during the connection process." @@ -6634,12 +6866,18 @@ msgstr "" msgid "Modifying the device name" msgstr "Modifying the device name" +msgid "Bind with Pin Code" +msgstr "" + 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 "" + 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." @@ -6683,6 +6921,26 @@ 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 "" + +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 "Log in printer" @@ -6868,6 +7126,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" @@ -7346,23 +7618,28 @@ msgstr "" "contains the following unsaved changes:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"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?" +"\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 "" -"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 +7670,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 "" @@ -7823,30 +8100,66 @@ msgstr "Shift+Mouse wheel" msgid "Release Note" msgstr "Release Note" -#, c-format, boost-format -msgid "version %s update information :" -msgstr "version %s update information:" +#, c-format, boost-format +msgid "version %s update information :" +msgstr "version %s update information:" + +msgid "Network plug-in update" +msgstr "Network plug-in update" + +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "" +"Click OK to update the Network plug-in the next time Orca Slicer launches." + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "A new network plug-in (%s) is available. Do you want to install it?" + +msgid "New version of Orca Slicer" +msgstr "New version of Orca Slicer" + +msgid "Skip this Version" +msgstr "" + +msgid "Done" +msgstr "Done" + +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 "Network plug-in update" -msgstr "Network plug-in update" +msgid "Filament Extruded, Continue" +msgstr "" -msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgid "Not Extruded Yet, Retry" msgstr "" -"Click OK to update the Network plug-in the next time Orca Slicer launches." -#, c-format, boost-format -msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "A new network plug-in (%s) is available. Do you want to install it?" +msgid "Finished, Continue" +msgstr "" -msgid "New version of Orca Slicer" -msgstr "New version of Orca Slicer" +msgid "Load Filament" +msgstr "Load" -msgid "Skip this Version" +msgid "Filament Loaded, Resume" msgstr "" -msgid "Done" -msgstr "Done" +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "" @@ -8689,6 +9002,15 @@ msgstr "Engineering Plate" 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 "This G-code is inserted at every layer change before lifting z." @@ -9433,6 +9755,12 @@ msgstr "" "Clearance radius around extruder: used for collision avoidance in by-object " "printing." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9829,6 +10157,9 @@ msgstr "Support Cubic" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10073,6 +10404,15 @@ 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 "" + +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 "Arc fitting" @@ -10868,6 +11208,24 @@ 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 "" + +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 when retracting" @@ -11212,9 +11570,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 " @@ -12552,6 +12907,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12627,12 +12985,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 "" - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -12674,6 +13026,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 "" @@ -12683,6 +13043,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 "" @@ -12812,6 +13185,12 @@ msgstr "" msgid "Failed" msgstr "Failed" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to overrides the other results?" @@ -12902,12 +13281,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -12951,12 +13324,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 "" @@ -12969,6 +13336,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -12981,9 +13351,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 "" @@ -13348,6 +13731,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 "" @@ -13539,10 +13929,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -13631,6 +14030,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 "" @@ -13701,6 +14103,15 @@ msgstr "" msgid "Daily Tips" 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 "" @@ -13881,6 +14292,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 "" @@ -14253,6 +14833,145 @@ msgid "" "probability of warping." msgstr "" +#~ 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 " #~ "thickness (top+bottom solid layers)" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 4bc39e0b558..dcfac06c880 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -257,6 +257,9 @@ msgstr "Reiniciar rotación" msgid "World coordinates" msgstr "Coordenadas cartesianas" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1822,8 +1825,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" @@ -1967,6 +1970,12 @@ msgstr "Organizar" msgid "arrange current plate" msgstr "posicionar la bandeja actual" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rotación Automática" @@ -2000,9 +2009,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 +2348,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" @@ -2438,11 +2441,11 @@ msgstr "Auto Rellenado" msgid "AMS not connected" msgstr "AMS no conectado" -msgid "Load Filament" -msgstr "Cargar" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Descargar" +msgid "Unload" +msgstr "Descarga" msgid "Ext Spool" msgstr "Carrete Externo" @@ -2459,7 +2462,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." @@ -2502,10 +2505,8 @@ 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 "" -"Elija una ranura AMS y pulse el botón \"Cargar\" o \"Descargar\" para cargar " -"o descargar automáticamente el filamento." msgid "Edit" msgstr "Editar" @@ -2989,38 +2990,15 @@ 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 "" -"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 "" -"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." +"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 "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3080,6 +3058,12 @@ msgstr "" "(Actualmente admite el suministro automático de consumibles con la misma " "marca, tipo de material y color)." +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Ajustes del AMS" @@ -3094,11 +3078,9 @@ 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." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3150,6 +3132,14 @@ 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 "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Archivo" @@ -3223,6 +3213,51 @@ 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 "" + +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 "Error desconocido al exportar el G-Code." @@ -3236,13 +3271,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" @@ -3324,6 +3352,19 @@ 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 "" + +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" @@ -3412,27 +3453,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 +3523,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 +3653,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" @@ -3800,6 +3829,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 "" + msgid "Value is out of range." msgstr "El valor está fuera de rango." @@ -3880,12 +3913,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 +4021,12 @@ msgstr "Estimación de Tiempo" msgid "Normal mode" msgstr "Modo normal" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Planificar tiempo" @@ -4081,6 +4120,9 @@ msgstr "Opciones de Organización" msgid "Spacing" msgstr "Separación" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Rotación automática para el posicionamiento" @@ -4228,6 +4270,9 @@ msgstr "Monitorización de Auto-Grabado" msgid "Go Live" msgstr "Ir A En Vivo" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolución" @@ -4289,6 +4334,9 @@ msgstr "Previsualización" msgid "Device" msgstr "Dispositivo" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Proyecto" @@ -4328,6 +4376,9 @@ msgstr "Imprimir todo" msgid "Send all" msgstr "Mandar todo" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Atajos de teclado" @@ -4746,42 +4797,51 @@ msgstr "" msgid "Synchronization" msgstr "Sincronización" -msgid "Initialize failed (No Device)!" -msgstr "¡Inicialización fallida (No hay dispositivo)!" +msgid "The device cannot handle more conversations. Please retry 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." -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "¡Inicialización fallida (No hay Cámara)!" +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 "" -"La impresora está ocupada descargando. Por favor, espere a que finalice." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." 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 "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicialización fallida (Perdida la IP de red de la impresora)" +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 "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 "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Parado [%d]" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Detenido." @@ -4812,16 +4872,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..." @@ -4873,6 +4932,12 @@ msgstr "Seleccionar" msgid "Batch manage files." msgstr "Arhivos de proceso por lotes." +msgid "Refresh" +msgstr "Actualizar" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "No hay impresoras." @@ -4883,13 +4948,32 @@ 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 "" + +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 "" + +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 "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 +4995,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 "" -msgid "Failed to parse model infomations." -msgstr "Fallo al analizar la información de modelado." +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4928,6 +5012,12 @@ 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 "" + msgid "Download waiting..." msgstr "Descarga esperando..." @@ -4944,16 +5034,18 @@ msgstr "Descarga finalizada" msgid "Downloading %d%%..." msgstr "Descargando %d%%..." -msgid "Connection lost. Please retry." -msgstr "Conexión perdida. Por favor, reinténtelo." +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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." 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." -msgid "File not exists." -msgstr "El archivo no existe." +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Checksum de archivo erróneo. Por favor, reinténtelo." @@ -5060,6 +5152,9 @@ msgstr "Cambiar vista de cámara" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Opciones de Impresora" @@ -5078,9 +5173,6 @@ msgstr "Costura" msgid "Bed" msgstr "Cama" -msgid "Unload" -msgstr "Descarga" - msgid "Debug Info" msgstr "Información de Depuración" @@ -5270,9 +5362,6 @@ msgstr "Estado" msgid "Update" msgstr "Actualizar" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "No mostrar de nuevo" @@ -5303,6 +5392,35 @@ 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 "" + +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 "Ratón 3D desconectado." @@ -5489,6 +5607,25 @@ msgstr "Permitir Sonido de Aviso" msgid "Filament Tangle Detect" msgstr "Detección de Enredos de Filamentos" +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 "Acero Inoxidable" + +msgid "Hardened Steel" +msgstr "Acero endurecido" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "Global" @@ -5697,9 +5834,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 " @@ -5944,19 +6078,23 @@ msgstr "Importando modelo" msgid "prepare 3mf file..." msgstr "preparar el archivo 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "descargando proyecto..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Proyecto descargado %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"La importación a Orca Slicer ha fallado. Descargue el archivo e impórtelo " -"manualmente." msgid "Import SLA archive" msgstr "Importar archivo SLA" @@ -6039,10 +6177,24 @@ 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 "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6219,6 +6371,21 @@ msgstr "Imperial" msgid "Units" msgstr "Unidades" +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 "Página de Inicio" @@ -6228,6 +6395,18 @@ 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 "" + +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 "Hacer zoom en la posición del ratón" @@ -6246,6 +6425,12 @@ msgstr "" "Si está activada, utiliza la cámara libre. Si no está activada, utiliza la " "cámara restringida." +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "Mostrar pantalla de inicio" @@ -6264,6 +6449,29 @@ 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 "" + +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 Studio)." +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 "Red" @@ -6488,6 +6696,18 @@ msgstr "Incompatible" msgid "The selected preset is null!" msgstr "¡El ajuste seleccionado es nulo!" +msgid "End" +msgstr "" + +msgid "Customize" +msgstr "Personalizar" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." +msgstr "" + msgid "Plate name" msgstr "Nombre de Bandeja" @@ -6497,8 +6717,14 @@ 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 "" + +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "Vaso en espiral" msgid "First layer filament sequence" msgstr "Secuencia de primera capa de filamento" @@ -6684,9 +6910,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" @@ -6787,9 +7010,11 @@ 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." msgid "An SD card needs to be inserted to record timelapse." msgstr "Es necesario insertar una tarjeta SD para guardar el timelapse." @@ -6853,15 +7078,19 @@ 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?" +"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?" #, 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 "" + +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." @@ -6869,12 +7098,6 @@ 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." @@ -6901,6 +7124,9 @@ msgstr "Calibración automática de caudal usando Micro Lidar" msgid "Modifying the device name" msgstr "Modificar el nombre del dispositivo" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Enviar a la tarjeta SD de la impresora" @@ -6909,6 +7135,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 " @@ -6954,6 +7184,26 @@ msgstr "Receive login report timeout" 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 "" + +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 "Iniciar sesión en la impresora" @@ -7154,11 +7404,25 @@ 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 "" + +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 "" "Cuando grabamos timelapse sin cabezal de impresión, es recomendable añadir " "un \"Torre de Purga de Intervalo\" \n" @@ -7656,23 +7920,28 @@ msgstr "" "los siguientes cambios no guardados:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"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?" +"\n" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"Has cambiado algunos ajustes de perfil. \n" -"¿Deseas mantener estas modificaciones en los ajustes (nuevo valor) después " -"de cambiar de perfil?" msgid "Extruders count" msgstr "Contador de extrusores" @@ -7707,7 +7976,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 " @@ -8178,6 +8447,42 @@ msgstr "Saltar esta Versión" msgid "Done" msgstr "Hecho" +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 "Cargar" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmar y Actualizar la Boquilla" @@ -9099,6 +9404,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 "" + +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 "Este G-Code se inserta en cada cambio de capa antes de levantar z" @@ -10030,6 +10344,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 "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "Malla de cama mínimo" @@ -10506,6 +10826,9 @@ msgstr "Soporte Cúbico" msgid "Lightning" msgstr "Rayo" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Longitud del anclaje de relleno de baja densidad" @@ -10710,10 +11033,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\". " @@ -10794,6 +11117,15 @@ 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 "" + +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 "Activar movimientos en arco" @@ -11737,6 +12069,24 @@ msgstr "" "rezumado durante el recorrido largo. Ajustar el cero para desactivar la " "retracción" +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 "Salto en Z al retraerse" @@ -11942,6 +12292,17 @@ 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 "" + +msgid "Conditional overhang threshold" +msgstr "" + #, no-c-format, no-boost-format msgid "" "This option determines the overhang threshold for the application of scarf " @@ -12155,9 +12516,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 " @@ -13173,10 +13531,9 @@ msgstr "" "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 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." msgid "First layer minimum wall width" msgstr "Ancho mínimo del perímetro de la primera capa" @@ -13675,6 +14032,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -13752,12 +14112,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 +14160,14 @@ 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 "" + msgid "Connecting to printer..." msgstr "Conectando a la impresora." @@ -13817,6 +14179,19 @@ 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 "" + +#, 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 "Error interno" @@ -13882,12 +14257,12 @@ msgstr "" "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 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 " @@ -14023,6 +14398,12 @@ 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?" @@ -14123,12 +14504,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parámetros de Impresión" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Plate Type" @@ -14178,12 +14553,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 +14567,9 @@ msgstr "A Velocidad Volúmetrica" msgid "Flow Dynamics Calibration Result" msgstr "Resultado de Calibración de Dinámicas de Flujo" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Sin Resultados Históricos" @@ -14211,9 +14583,22 @@ msgstr "" msgid "Action" msgstr "Acción" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Editar Calibración de Dinámicas de Flujo" +msgid "New Flow Dynamic Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "" + msgid "Network lookup" msgstr "Búsqueda de red" @@ -14612,6 +14997,13 @@ 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 "" + 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 +15017,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 " @@ -14837,14 +15229,18 @@ 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" -"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 "" +"\n" +"\n" +"Studio 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 "Ajustes de Impresora" @@ -14956,6 +15352,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 "" + msgid "Edit Filament" msgstr "Editar Filamento" @@ -15032,6 +15431,17 @@ msgstr "Colapsar" msgid "Daily Tips" msgstr "Consejos Diarios" +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" @@ -15234,6 +15644,175 @@ 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 "" + +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 "¡Conectado a Obico con éxito!" @@ -15670,6 +16249,189 @@ msgstr "" "aumentar adecuadamente la temperatura del lecho térmico puede reducir la " "probabilidad de deformaciones." +#~ 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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "La importación a Orca Slicer ha fallado. Descargue el archivo e impórtelo " +#~ "manualmente." + +#~ 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 +16548,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 +17387,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!" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 8d9de157dd5..e68bc4b18c3 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-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -260,6 +260,9 @@ msgstr "Réinitialiser la Rotation" msgid "World coordinates" msgstr "Coordonnées" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -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" @@ -1829,8 +1832,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" @@ -1975,6 +1978,12 @@ msgstr "Organiser" msgid "arrange current plate" msgstr "organiser la plaque actuelle" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rotation automatique" @@ -1994,7 +2003,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 +2017,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 +2356,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" @@ -2446,11 +2449,11 @@ msgstr "Recharge Automatique" msgid "AMS not connected" msgstr "AMS non connecté" -msgid "Load Filament" -msgstr "Charger" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Déchargement" +msgid "Unload" +msgstr "Décharger" msgid "Ext Spool" msgstr "Bobine Ext" @@ -2467,7 +2470,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 +2513,8 @@ 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." msgid "Edit" msgstr "Éditer" @@ -3000,39 +3001,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 "" -"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 "Current Cabin humidity" +msgstr "Humidité dans le caisson" 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 "" -"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 +3076,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 +3097,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 +3155,14 @@ 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 "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fichier" @@ -3239,6 +3236,51 @@ 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 "" + +#, 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 "Erreur inconnue lors de l'exportation du G-code." @@ -3251,13 +3293,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é" @@ -3341,6 +3376,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" @@ -3414,34 +3466,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 +3542,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" @@ -3622,18 +3674,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" @@ -3810,6 +3850,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." @@ -3887,12 +3932,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 +4040,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 +4139,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" @@ -4235,6 +4289,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" @@ -4298,6 +4355,9 @@ msgstr "Aperçu" msgid "Device" msgstr "Appareil" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projet" @@ -4337,6 +4397,9 @@ msgstr "Tout imprimer" msgid "Send all" msgstr "Tout envoyer" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Raccourcis Clavier" @@ -4758,45 +4821,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 "Player is malfunctioning. Please reinstall the system player." +msgstr "" +"Le lecteur ne fonctionne pas correctement. Veuillez réinstaller le lecteur " +"système." -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 "" -"L'imprimante est occupée à télécharger, veuillez attendre la fin du " -"téléchargement." +"Le lecteur n’est pas chargé, veuillez cliquer sur le bouton « play » pour " +"réessayer." + +msgid "Please confirm if the printer is connected." +msgstr "Veuillez vérifier que l’imprimante est bien connectée." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -"Échec de l'initialisation (non pris en charge par l'imprimante actuelle) !" +"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 "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "L'initialisation a échoué (Non accessible en mode LAN uniquement) !" +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 "Initialize failed (Missing LAN ip of printer)!" +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." msgstr "" -"Échec de l'initialisation (adresse IP réseau manquante de l'imprimante) !" +"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,16 +4910,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…" @@ -4890,6 +4970,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 +4986,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 +5046,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 +5063,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 +5087,22 @@ 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 "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"Reconnexion de l’imprimante, l’opération ne peut être effectuée maintenant, " +"veuillez réessayer plus tard." -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -"L'appareil ne peut pas gérer plus de conversations. Veuillez réessayer plus " -"tard." +"Plus de 4 orca/handy utilisent l’accès à distance, vous pouvez en fermer " +"certains et réessayer." -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." @@ -5080,6 +5207,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 +5228,6 @@ msgstr "Chamb" msgid "Bed" msgstr "Plateau" -msgid "Unload" -msgstr "Décharger" - msgid "Debug Info" msgstr "Les informations de débogage" @@ -5288,9 +5415,6 @@ msgstr "État" msgid "Update" msgstr "Mise à jour" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Ne plus afficher" @@ -5321,6 +5445,39 @@ 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 "" + +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." @@ -5506,6 +5663,25 @@ msgstr "Autoriser le son d’invite" msgid "Filament Tangle Detect" msgstr "Détection de filament coincé" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + +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 "" + msgid "Global" msgstr "Global" @@ -5716,9 +5892,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 " @@ -5964,19 +6137,23 @@ msgstr "Importation du modèle" msgid "prepare 3mf file..." msgstr "préparation du fichier 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "téléchargement du projet..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projet téléchargé à %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"L’importation vers OrcaSlicer a échoué. Veuillez télécharger le fichier et " -"l’importer manuellement." msgid "Import SLA archive" msgstr "Importer les archives SLA" @@ -6062,10 +6239,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 " @@ -6245,15 +6439,47 @@ msgstr "Impérial" msgid "Units" msgstr "Unités" -msgid "Home" -msgstr "Accueil" +msgid "Allow only one OrcaSlicer instance" +msgstr "" -msgid "Default Page" +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 "Accueil" + +msgid "Default Page" 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 +6498,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 +6527,33 @@ 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 Studio)." +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 "Réseau" @@ -6518,6 +6779,18 @@ 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 +6800,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" @@ -6717,9 +6996,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" @@ -6824,10 +7100,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." @@ -6892,27 +7171,32 @@ 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?" +"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 "" @@ -6942,6 +7226,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 "" + msgid "Send to Printer SD card" msgstr "Envoyer sur la carte SD de l'imprimante" @@ -6950,6 +7237,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 +7286,26 @@ 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 "" + +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 "Connectez-vous à l'imprimante" @@ -7205,6 +7517,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" @@ -7715,23 +8052,28 @@ msgstr "" "traitement et contient les modifications non enregistrées suivantes :" #, boost-format +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 settings of preset \"%1%\". \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 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?" +"\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 "" -"Vous avez modifié certains paramètres prédéfinis. \n" -"Souhaitez-vous conserver ces paramètres modifiés (nouvelle valeur) après " -"avoir changé de préréglage ?" msgid "Extruders count" msgstr "Nombre d'extrudeurs" @@ -7768,7 +8110,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 " @@ -8250,6 +8592,42 @@ msgstr "Sauter cette version" msgid "Done" msgstr "Terminé" +msgid "resume" +msgstr "reprendre" + +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 "Charger" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmation et mise à jour de la buse" @@ -8940,11 +9318,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 +9330,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 +9563,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 +10273,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." @@ -10127,6 +10514,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" @@ -10604,6 +10997,9 @@ msgstr "Support Cubique" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Longueur de l’ancrage de remplissage interne" @@ -10896,6 +11292,18 @@ 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" @@ -11853,6 +12261,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 +12424,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 +12506,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 +12516,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" @@ -12274,9 +12713,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 " @@ -13809,6 +14245,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 "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Le fichier contient des polygones comportant plus de 4 sommets." @@ -13889,13 +14328,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 +14376,14 @@ 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 "" + msgid "Connecting to printer..." msgstr "Connexion à l’imprimante…" @@ -13955,6 +14395,22 @@ 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 "" + msgid "Internal Error" msgstr "Erreur interne" @@ -14175,6 +14631,13 @@ 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?" @@ -14275,12 +14738,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Paramètres d’impression" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Type de plaque" @@ -14328,12 +14785,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 +14799,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 +14814,22 @@ 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 "" + msgid "Edit Flow Dynamics Calibration" msgstr "Editer la calibration dynamique du débit" +msgid "New Flow Dynamic Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "Le filament doit être sélectionné." + msgid "Network lookup" msgstr "Recherche de réseau" @@ -14767,6 +15234,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" @@ -14993,14 +15470,30 @@ 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" +"Studio 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" @@ -15114,6 +15607,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 +15691,17 @@ msgstr "Réduire" msgid "Daily Tips" msgstr "Astuces quotidiennes" +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" @@ -15396,46 +15905,223 @@ msgstr "" "Corps du message : « %1% »\n" "Erreur : « %2% »" -msgid "Connected to Obico successfully!" +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 "Could not connect to Obico" +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 "Connected to SimplyPrint successfully!" +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 "Could not connect to SimplyPrint" +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 "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 "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 "" "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 "Unknown error" -msgstr "" +msgstr "Erreur inconnue" 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 "" @@ -15833,6 +16519,258 @@ 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 "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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "L’importation vers OrcaSlicer a échoué. Veuillez télécharger le fichier " +#~ "et l’importer manuellement." + +#~ 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 8e523074062..2d4d4cd89b8 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -251,6 +251,9 @@ msgstr "Forgatás visszaállítása" msgid "World coordinates" msgstr "Világkoordináták" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1748,8 +1751,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" @@ -1894,6 +1897,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 +1936,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" @@ -2268,9 +2274,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." @@ -2364,11 +2367,11 @@ msgstr "" msgid "AMS not connected" msgstr "Az AMS nincs csatlakoztatva" -msgid "Load Filament" -msgstr "Filament betöltés" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Filament kitöltése" +msgid "Unload" +msgstr "Kitöltés" msgid "Ext Spool" msgstr "Kül. tekercs" @@ -2385,7 +2388,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." @@ -2428,10 +2431,8 @@ 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." msgid "Edit" msgstr "Szerkesztés" @@ -2908,37 +2909,15 @@ 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 "" -"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.)" +msgid "Current Cabin humidity" 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." +"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 "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -2989,6 +2968,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS beállítások" @@ -3003,11 +2988,9 @@ 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 " -"fogja automatikusan kiolvasni az információkat a nyomtatás végéig." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3059,6 +3042,14 @@ msgstr "" "Az AMS automatikusan egy másik, azonos tulajdonságú filamentre vált, ha az " "aktuális filament kifogy." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fájl" @@ -3131,6 +3122,51 @@ 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 "" + +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 "Ismeretlen hiba a G-kód exportálásakor." @@ -3144,13 +3180,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." @@ -3227,6 +3256,19 @@ 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 "" + +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" @@ -3309,26 +3351,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 +3411,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 "" +"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 "Auto bed leveling" msgstr "Automatikus asztalszintezés" @@ -3494,18 +3536,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Ismeretlen" @@ -3665,6 +3695,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 "" + msgid "Value is out of range." msgstr "Az érték tartományon kívül esik." @@ -3745,12 +3779,12 @@ msgstr "Megjelenítés" msgid "Flushed" msgstr "Öblített" -msgid "Total" -msgstr "Összesen" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "Összesen" + msgid "Total Estimation" msgstr "Összesített becslés" @@ -3853,6 +3887,12 @@ msgstr "Időbecslés" msgid "Normal mode" msgstr "Normál mód" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Előkészítési idő" @@ -3946,6 +3986,9 @@ msgstr "Elrendezési lehetőségek" msgid "Spacing" msgstr "Térköz" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Automatikus forgatás az elrendezéshez" @@ -4091,6 +4134,9 @@ msgstr "Automatikus felügyelet" msgid "Go Live" msgstr "Streamelés indítása" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Felbontás" @@ -4152,6 +4198,9 @@ msgstr "Előnézet" msgid "Device" msgstr "Nyomtató" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projekt" @@ -4191,6 +4240,9 @@ msgstr "Összes nyomtatása" msgid "Send all" msgstr "Összes elküldése" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Gyorsbillentyűk" @@ -4598,42 +4650,49 @@ 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 "" -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "Sikertelen inicializálás (nem található kamera)!" +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 "" -"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 "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Sikertelen inicializálás (nem elérhető LAN-módban)!" +msgid "Printer camera is malfunctioning." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Az inicializálás sikertelen (hiányzó nyomtató LAN IP-cím)!" +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 "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 "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Megállítva [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Megállítva." @@ -4664,16 +4723,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…" @@ -4725,6 +4783,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 "" + msgid "No printers." msgstr "No printers." @@ -4735,13 +4799,32 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "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 +4846,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 "" -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4778,6 +4861,12 @@ 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 "" + msgid "Download waiting..." msgstr "Várakozás letöltésre..." @@ -4794,13 +4883,17 @@ 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 "" -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4904,6 +4997,9 @@ msgstr "" msgid "Control" msgstr "Vezérlés" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Nyomtatási lehetőségek" @@ -4922,9 +5018,6 @@ msgstr "Cham" msgid "Bed" msgstr "Asztal" -msgid "Unload" -msgstr "Kitöltés" - msgid "Debug Info" msgstr "Hibakeresési infó" @@ -5094,9 +5187,6 @@ msgstr "Állapot" msgid "Update" msgstr "Frissítés" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Ne mutasd újra" @@ -5127,6 +5217,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 "" + +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 Mouse csatlakoztatva." @@ -5314,6 +5433,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 "Globális" @@ -5512,9 +5650,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 " @@ -5745,15 +5880,21 @@ 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 "" + msgid "downloading project ..." msgstr "projekt letöltése ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt letöltve %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5837,10 +5978,24 @@ 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 "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6007,6 +6162,21 @@ msgstr "Angolszász" msgid "Units" msgstr "Mértékegység" +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 "" @@ -6016,6 +6186,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" @@ -6032,6 +6214,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 "" @@ -6050,6 +6238,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 Studio)." +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 "" @@ -6274,6 +6485,18 @@ msgstr "Incompatible" 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 "" + msgid "Plate name" msgstr "Plate name" @@ -6283,9 +6506,15 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Nyomtatás sorrendje" -msgid "Customize" +msgid "Same as Global" +msgstr "" + +msgid "Disable" msgstr "" +msgid "Spiral vase" +msgstr "Spirál (váza)" + msgid "First layer filament sequence" msgstr "" @@ -6466,9 +6695,6 @@ 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" @@ -6568,7 +6794,10 @@ 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 "" msgid "An SD card needs to be inserted to record timelapse." @@ -6629,24 +6858,24 @@ 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?" +"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 "" - msgid "" -"Please click the confirm button if you still want to proceed with printing." +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" -msgid "Stainless Steel" +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 "" "Connecting to the printer. Unable to cancel during the connection process." @@ -6672,6 +6901,9 @@ msgstr "" msgid "Modifying the device name" msgstr "Eszköz nevének módosítása" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Küldés a nyomtatóban lévő MicroSD kártyára" @@ -6680,6 +6912,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 "" + 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." @@ -6724,6 +6959,26 @@ 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 "" + +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 "Bejelentkezés a nyomtatóra" @@ -6910,6 +7165,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" @@ -7396,22 +7665,28 @@ msgstr "" "következő elmentetlen változásokat tartalmazza:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"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?" +"\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 "" -"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 +7717,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 "" @@ -7878,27 +8153,63 @@ msgstr "Verzióinformáció" msgid "version %s update information :" msgstr "%s verzió frissítési információi:" -msgid "Network plug-in update" -msgstr "Hálózati bővítmény frissítése" +msgid "Network plug-in update" +msgstr "Hálózati bővítmény frissítése" + +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "" +"Kattints az OK gombra a hálózati bővítmény frissítéséhez a Orca Slicer " +"következő indításakor." + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "Új hálózati bővítmény (%s) érhető el. Szeretnéd telepíteni?" + +msgid "New version of Orca Slicer" +msgstr "A Orca Slicer új verziója" + +msgid "Skip this Version" +msgstr "" + +msgid "Done" +msgstr "Done" + +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 "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgid "Filament Extruded, Continue" msgstr "" -"Kattints az OK gombra a hálózati bővítmény frissítéséhez a Orca Slicer " -"következő indításakor." -#, c-format, boost-format -msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "Új hálózati bővítmény (%s) érhető el. Szeretnéd telepíteni?" +msgid "Not Extruded Yet, Retry" +msgstr "" -msgid "New version of Orca Slicer" -msgstr "A Orca Slicer új verziója" +msgid "Finished, Continue" +msgstr "" -msgid "Skip this Version" +msgid "Load Filament" +msgstr "Filament betöltés" + +msgid "Filament Loaded, Resume" msgstr "" -msgid "Done" -msgstr "Done" +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "" @@ -8757,6 +9068,15 @@ msgstr "Engineering Plate" 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 "Ez a G-kód minden rétegváltáshoz bekerül a Z tengely emelése előtt." @@ -9502,6 +9822,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 "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9902,6 +10228,9 @@ msgstr "Támasz kocka" msgid "Lightning" msgstr "Világítás" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10144,6 +10473,15 @@ 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 "" + +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 "Íves illesztés" @@ -10947,6 +11285,24 @@ 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 "" + +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-tengely emelés visszahúzáskor" @@ -11296,9 +11652,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 " @@ -12645,6 +12998,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12720,12 +13076,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 "" - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -12767,6 +13117,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 "" @@ -12776,6 +13134,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 "" @@ -12905,6 +13276,12 @@ msgstr "" msgid "Failed" msgstr "Sikertelen" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to overrides the other results?" @@ -12995,12 +13372,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -13044,12 +13415,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 "" @@ -13062,6 +13427,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13074,9 +13442,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 "" @@ -13441,6 +13822,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 "" @@ -13632,10 +14020,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -13724,6 +14121,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 "" @@ -13794,6 +14194,15 @@ msgstr "" msgid "Daily Tips" 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 "" @@ -13973,6 +14382,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 "" @@ -14345,6 +14923,146 @@ msgid "" "probability of warping." msgstr "" +#~ 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 " #~ "thickness (top+bottom solid layers)" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 7227cb2d0ec..55c5d23e326 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -255,6 +255,9 @@ msgstr "Reimposta rotazione" msgid "World coordinates" msgstr "Coordinate reali" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1815,8 +1818,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" @@ -1959,6 +1962,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 +2001,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 +2343,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" @@ -2434,11 +2437,11 @@ msgstr "Ricarica automatica" msgid "AMS not connected" msgstr "AMS non collegato" -msgid "Load Filament" -msgstr "Carica" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Scarica Filamento" +msgid "Unload" +msgstr "Scarica" msgid "Ext Spool" msgstr "Bobina esterna" @@ -2455,7 +2458,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 +2501,8 @@ 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." msgid "Edit" msgstr "Modifica" @@ -2987,38 +2988,15 @@ 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 "" -"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 "" -"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." +"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 "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3077,6 +3055,12 @@ msgstr "" "(Attualmente supporta la fornitura automatica di materiali di consumo con lo " "stesso marchio, tipo di materiale e colore)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Impostazioni AMS" @@ -3092,11 +3076,9 @@ 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 " -"leggerà automaticamente alcuna informazione fino al termine della stampa." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3148,6 +3130,14 @@ msgstr "" "L'AMS passerà automaticamente a un altro filamento con stesse proprietà " "quando il filamento corrente si esaurisce" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "File" @@ -3222,6 +3212,51 @@ 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 "" + +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 "Errore sconosciuto nell'esportazione del G-code." @@ -3235,13 +3270,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." @@ -3322,6 +3350,19 @@ 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 "" + +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" @@ -3410,26 +3451,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 +3518,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 +3643,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" @@ -3788,6 +3817,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 "" + msgid "Value is out of range." msgstr "Valore fuori intervallo." @@ -3868,12 +3901,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 +4009,12 @@ msgstr "Tempo stimato" msgid "Normal mode" msgstr "Modalità normale" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Tempo preparazione" @@ -4069,6 +4108,9 @@ msgstr "Opzioni di disposizione" msgid "Spacing" msgstr "Spaziatura" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Ruota automaticamente per disporre" @@ -4216,6 +4258,9 @@ msgstr "Monitora registrazione automatica" msgid "Go Live" msgstr "Vai in diretta" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Risoluzione" @@ -4277,6 +4322,9 @@ msgstr "Anteprima" msgid "Device" msgstr "Dispositivo" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Progetto" @@ -4316,6 +4364,9 @@ msgstr "Stampa tutto" msgid "Send all" msgstr "Invia tutto" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Scorciatoie Tastiera" @@ -4732,44 +4783,51 @@ msgstr "" msgid "Synchronization" msgstr "Sincronizzazione" -msgid "Initialize failed (No Device)!" -msgstr "Inizializzazione fallita (nessun dispositivo)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" +"Il dispositivo non è in grado di gestire più conversazioni. Riprova più " +"tardi." + +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (Device connection not ready)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" + +msgid "Please confirm if the printer is connected." msgstr "" -"Inizializzazione fallita (la connessione del dispositivo non è pronta)!" -msgid "Initialize failed (No Camera Device)!" -msgstr "Inizializzazione fallita (Nessun dispositivo fotocamera)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Printer camera is malfunctioning." msgstr "" -"Stampante in fase di caricamento; attendi il completamento del caricamento." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Problem occured. Please update the printer firmware and try again." 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 "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" -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 "" 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 "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Interrotto [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Interrotto." @@ -4800,16 +4858,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…" @@ -4861,6 +4918,12 @@ msgstr "Seleziona" msgid "Batch manage files." msgstr "Gestione batch dei file." +msgid "Refresh" +msgstr "Aggiorna" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Nessuna stampante." @@ -4871,13 +4934,33 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "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 +4984,11 @@ msgstr "Elimina file" msgid "Fetching model infomations ..." msgstr "Recupero informazioni del modello..." -msgid "Failed to fetching model infomations from printer." -msgstr "Impossibile recuperare le informazioni del modello dalla stampante." +msgid "Failed to fetch model information from printer." +msgstr "" -msgid "Failed to parse model infomations." -msgstr "Impossibile analizzare le informazioni del modello." +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4918,6 +5001,12 @@ 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 "" + msgid "Download waiting..." msgstr "Download in attesa..." @@ -4934,16 +5023,18 @@ msgstr "Download completato" msgid "Downloading %d%%..." msgstr "Scaricamento %d%%..." -msgid "Connection lost. Please retry." -msgstr "Connessione persa. Si prega di riprovare." +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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -"Il dispositivo non è in grado di gestire più conversazioni. Riprova più " -"tardi." -msgid "File not exists." -msgstr "Il file non esiste." +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Errore di checksum del file. Si prega di riprovare." @@ -5051,6 +5142,9 @@ msgstr "Cambia inquadratura" msgid "Control" msgstr "Controllo" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Opzioni stampa" @@ -5069,9 +5163,6 @@ msgstr "Camera" msgid "Bed" msgstr "Piano" -msgid "Unload" -msgstr "Scarica" - msgid "Debug Info" msgstr "Informazioni di debug" @@ -5258,9 +5349,6 @@ msgstr "Stato" msgid "Update" msgstr "Aggiorna" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Non mostrare più" @@ -5291,6 +5379,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 "" + +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 "Mouse 3D disconnesso." @@ -5477,6 +5594,25 @@ msgstr "Consenti suono di richiesta" msgid "Filament Tangle Detect" msgstr "Rilevamento del groviglio del filamento" +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 "Acciaio inox" + +msgid "Hardened Steel" +msgstr "Acciaio temprato" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "Globale" @@ -5687,9 +5823,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 " @@ -5933,19 +6066,23 @@ msgstr "Importazione del modello" msgid "prepare 3mf file..." msgstr "preparazione file 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "Download progetto..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Progetto scaricato %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"L'importazione di Orca Slicer non è riuscita. Si prega di scaricare il file " -"e importarlo manualmente." msgid "Import SLA archive" msgstr "Importa archivio SLA" @@ -6028,10 +6165,24 @@ 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 "" -"Impossibile eseguire operazioni booleane sulle mesh del modello. Verranno " -"esportate solo le parti positive." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6205,6 +6356,21 @@ 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 "" + +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 +6380,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 +6409,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 +6434,29 @@ 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 "" + +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 Studio)." +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 "Rete" @@ -6476,6 +6683,18 @@ msgstr "Non compatibile" msgid "The selected preset is null!" msgstr "Il preset selezionato è nullo!" +msgid "End" +msgstr "" + +msgid "Customize" +msgstr "Personalizza" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." +msgstr "" + msgid "Plate name" msgstr "Nome Piatto" @@ -6485,8 +6704,14 @@ msgstr "Uguale a Sequenza stampa globale" msgid "Print sequence" msgstr "Sequenza di stampa" -msgid "Customize" -msgstr "Personalizza" +msgid "Same as Global" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "Vaso a spirale" msgid "First layer filament sequence" msgstr "Sequenza di filamenti di primo Layer" @@ -6671,9 +6896,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" @@ -6772,9 +6994,11 @@ 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." msgid "An SD card needs to be inserted to record timelapse." msgstr "È necessario inserire una scheda microSD per registrare un timelapse." @@ -6838,27 +7062,25 @@ msgid "nozzle memorized: %.1f %s" msgstr "ugello memorizzato: %.1f %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?" #, 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 "" + +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 "" "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 "" @@ -6887,6 +7109,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 "" + msgid "Send to Printer SD card" msgstr "Invia a microSD stampante" @@ -6894,6 +7119,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 +7167,26 @@ 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 "" + +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 "Log in stampante" @@ -7139,6 +7388,20 @@ 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 "" + +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" @@ -7638,21 +7901,28 @@ msgstr "" "modifiche non salvate:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." 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?" +"\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 +7959,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 " @@ -8165,11 +8435,47 @@ msgstr "Disponibile nuovo plug-in di rete (%s). Vuoi installarlo?" msgid "New version of Orca Slicer" msgstr "Nuova versione di Orca Slicer" -msgid "Skip this Version" -msgstr "Salta questa versione" +msgid "Skip this Version" +msgstr "Salta questa versione" + +msgid "Done" +msgstr "Fine" + +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 "Carica" -msgid "Done" -msgstr "Fine" +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "Conferma e aggiorna l'ugello" @@ -9094,6 +9400,15 @@ msgstr "Engineering Plate" msgid "First layer print sequence" msgstr "Sequenza di stampa del primo strato" +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 "" "Questo G-code viene inserito ad ogni cambio layer prima del sollevamento z." @@ -10029,6 +10344,12 @@ msgstr "" "Raggio di sicurezza attorno all'estrusore: utilizzato per evitare collisioni " "nella stampa per oggetto." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "Maglia del letto min" @@ -10507,6 +10828,9 @@ msgstr "Supporto cubico" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Lunghezza dell'ancora di riempimento sparsa" @@ -10798,6 +11122,15 @@ 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 "" + +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 "Arc fitting" @@ -11747,6 +12080,24 @@ msgstr "" "la trasudazione durante le lunghe distanze. Imposta su 0 per disattivare la " "retrazione." +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 in fase retrazione" @@ -12171,9 +12522,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 " @@ -13701,6 +14049,9 @@ msgstr "Annullato" msgid "load_obj: failed to parse" msgstr "load_obj: analisi non riuscita" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Il file contiene poligoni con più di 4 vertici." @@ -13781,12 +14132,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 +14180,14 @@ 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 "" + msgid "Connecting to printer..." msgstr "Collegamento alla stampante..." @@ -13846,6 +14199,19 @@ 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-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 "Errore interno" @@ -14056,6 +14422,12 @@ 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?" @@ -14155,12 +14527,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametri di stampa" -msgid "- ℃" -msgstr "- °C" - -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Tipo di piatto" @@ -14210,12 +14576,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 +14590,9 @@ msgstr "Velocità volumetrica" msgid "Flow Dynamics Calibration Result" msgstr "Risultato della calibrazione della dinamica del flusso" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Nessun risultato della cronologia" @@ -14242,9 +14605,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 "" + msgid "Edit Flow Dynamics Calibration" msgstr "Modifica calibrazione dinamica flusso (Edit Flow Dynamics)" +msgid "New Flow Dynamic Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "" + msgid "Network lookup" msgstr "Ricerca network" @@ -14637,6 +15013,13 @@ 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 "" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "" "Non è stato possibile creare alcuni preset esistenti, come indicato di " @@ -14866,14 +15249,18 @@ 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." + +msgid "" +"\n" +"\n" +"Studio 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" @@ -14987,6 +15374,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 "" + msgid "Edit Filament" msgstr "Modifica filamento" @@ -15065,6 +15455,17 @@ msgstr "Riduci" msgid "Daily Tips" msgstr "Consigli giornalieri" +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" @@ -15266,6 +15667,175 @@ 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 "" + +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 "" @@ -15695,6 +16265,189 @@ msgstr "" "aumentare in modo appropriato la temperatura del piano riscaldato può " "ridurre la probabilità di deformazione." +#~ 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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "L'importazione di Orca Slicer non è riuscita. Si prega di scaricare il " +#~ "file e importarlo manualmente." + +#~ 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 175fc21b829..eeb821b872a 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -253,6 +253,9 @@ msgstr "回転をリセット" msgid "World coordinates" msgstr "空間座標" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1738,8 +1741,8 @@ msgstr "デフォルト" msgid "Filament %d" msgstr "フィラメント %d" -msgid "active" -msgstr "アクティブ" +msgid "current" +msgstr "現在" msgid "Scale to build volume" msgstr "ビルド容積に合わせる" @@ -1882,6 +1885,12 @@ msgstr "レイアウト" msgid "arrange current plate" msgstr "現在のプレートをレイアウト" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自動回転" @@ -1915,9 +1924,6 @@ msgstr "フィラメントを変更" msgid "Set Filament for selected items" msgstr "選択した項目のフィラメントを設定" -msgid "current" -msgstr "現在" - msgid "Unlock" msgstr "ロック解除" @@ -2240,9 +2246,6 @@ msgstr "現在の積層にカスタムG-codeを追加" msgid "Jump to Layer" msgstr "積層に移動" -msgid "Jump to layer" -msgstr "積層に移動" - msgid "Please enter the layer number" msgstr "層の番号をご入力ください" @@ -2336,11 +2339,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 "外部スプールホルダー" @@ -2357,7 +2360,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 "" "キャリブレーション中に問題が発生しました。クリックして解決策をご確認くださ" "い。" @@ -2400,10 +2403,8 @@ 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 スロットを選択し、[ロード] または [アンロード] をタップすると、フィラメン" -"トが自動的にロードまたはアンロードされます。" msgid "Edit" msgstr "編集" @@ -2863,33 +2864,15 @@ msgstr "AMSを無効" msgid "Print with the filament mounted on the back of chassis" msgstr "外部スプールホルダーのフィラメントで造形します" -msgid "Cabin humidity" -msgstr "湿度" - -msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" -msgstr "湿度インジケータ (緑色: 正常 オレンジ\": やや高い 赤色: 高い)" - -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.)" +msgid "Current Cabin humidity" 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." +"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" @@ -2938,6 +2921,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 設定" @@ -2952,9 +2941,9 @@ 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 "注意:造形時に入れる場合、造形が完成したから読込みます。" +msgstr "" msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -2997,6 +2986,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 "ファイル" @@ -3066,6 +3063,51 @@ msgstr "Floating reserved operand" msgid "Stack overflow" msgstr "Stack Overflow" +msgid "Running post-processing scripts" +msgstr "後処理スクリプトを実行" + +msgid "Successfully executed post-processing script" +msgstr "" + +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 "不明なエラー: G-codeエクスポート" @@ -3079,13 +3121,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の出力が失敗しました" @@ -3160,6 +3195,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" @@ -3228,25 +3276,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 +3335,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 "" + +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 "自動ベッドレベリング" @@ -3411,18 +3459,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 "不明" @@ -3582,6 +3618,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 "値が範囲外です。" @@ -3661,12 +3701,12 @@ msgstr "表示" msgid "Flushed" msgstr "フラッシュ" -msgid "Total" -msgstr "合計" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "合計" + msgid "Total Estimation" msgstr "予測合計" @@ -3769,6 +3809,12 @@ msgstr "予測時間" msgid "Normal mode" msgstr "通常モード" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "準備時間" @@ -3862,6 +3908,9 @@ msgstr "レイアウト設定" msgid "Spacing" msgstr "間隔" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "自動回転" @@ -4004,6 +4053,9 @@ msgstr "自動録画モニタリング" msgid "Go Live" msgstr "公開" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "分解能" @@ -4064,6 +4116,9 @@ msgstr "プレビュー" msgid "Device" msgstr "デバイス" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "プロジェクト" @@ -4103,6 +4158,9 @@ msgstr "造形開始 (全プレート)" msgid "Send all" msgstr "送信 (全プレート)" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "ショートカット" @@ -4507,40 +4565,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 "Initialization failed (Device connection not ready)!" +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)!" +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 "初期化失敗 (プリンター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 "" 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 "中止しました" @@ -4568,16 +4635,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 "読込み中" @@ -4629,6 +4695,12 @@ msgstr "選択" msgid "Batch manage files." msgstr "ファイルのバッチ処理" +msgid "Refresh" +msgstr "再読込" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "プリンタなし" @@ -4639,13 +4711,32 @@ 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 "" + +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 "" + +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 "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 +4757,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 "" -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4681,6 +4772,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 "ダウンロード待ち" @@ -4697,13 +4794,17 @@ 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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4807,6 +4908,9 @@ msgstr "" msgid "Control" msgstr "コントロール" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "造型オプション" @@ -4825,9 +4929,6 @@ msgstr "筐体" msgid "Bed" msgstr "ベッド" -msgid "Unload" -msgstr "アンロード" - msgid "Debug Info" msgstr "デバッグ情報" @@ -4997,9 +5098,6 @@ msgstr "デバイス状態" msgid "Update" msgstr "更新" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "次回から表示しない" @@ -5030,6 +5128,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 Mouseが切断されました。" @@ -5210,6 +5337,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 "全般" @@ -5405,9 +5551,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 " @@ -5632,15 +5775,21 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5722,10 +5871,24 @@ 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 "" + +#, 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 "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -5893,6 +6056,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 "" @@ -5902,6 +6080,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" @@ -5918,6 +6108,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 "" @@ -5936,6 +6132,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 Studio)." +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 "" @@ -6152,6 +6371,18 @@ msgstr "Incompatible" 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 "" + msgid "Plate name" msgstr "Plate name" @@ -6161,9 +6392,15 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "造形シーケンス" -msgid "Customize" +msgid "Same as Global" msgstr "" +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "スパイラル" + msgid "First layer filament sequence" msgstr "" @@ -6344,9 +6581,6 @@ msgstr "" msgid "Send print job to" msgstr "造形タスクを送信" -msgid "Refresh" -msgstr "再読込" - msgid "Bed Leveling" msgstr "ベッドレベリング" @@ -6428,7 +6662,10 @@ 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 "" msgid "An SD card needs to be inserted to record timelapse." @@ -6486,24 +6723,24 @@ 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?" +"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 "" - msgid "" -"Please click the confirm button if you still want to proceed with printing." +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" -msgid "Stainless Steel" +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 "" "Connecting to the printer. Unable to cancel during the connection process." @@ -6529,12 +6766,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 "" "A MicroSD card needs to be inserted before sending to the printer SD card." @@ -6579,6 +6822,26 @@ 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 "" + +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 "プリンターを登録" @@ -6759,6 +7022,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" @@ -7222,19 +7499,28 @@ msgstr "" "存の変更があります" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"プリセット %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" +"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 "押出機台数" @@ -7265,7 +7551,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 "" @@ -7715,6 +8001,42 @@ msgstr "" msgid "Done" msgstr "Done" +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 "" @@ -8520,6 +8842,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-codeです。" @@ -9243,6 +9574,12 @@ msgstr "" "押出機のクリアランス(半径):オブジェクト順で造形する時にこのパラメータでオ" "ブジェクトの間隔を計算します。" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9627,6 +9964,9 @@ msgstr "キュービックサポート" msgid "Lightning" msgstr "ライトニング" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -9861,6 +10201,15 @@ 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 "曲線フィッティング" @@ -10634,6 +10983,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方向調整" @@ -10971,9 +11338,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 " @@ -12271,6 +12635,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12346,12 +12713,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 "" - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -12393,6 +12754,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 "" @@ -12402,6 +12771,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 "" @@ -12531,6 +12913,12 @@ msgstr "" msgid "Failed" msgstr "失敗" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to overrides the other results?" @@ -12621,12 +13009,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -12670,12 +13052,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 "" @@ -12688,6 +13064,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -12700,9 +13079,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 "" @@ -13067,6 +13459,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 "" @@ -13258,10 +13657,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -13350,6 +13758,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 "" @@ -13419,6 +13830,15 @@ msgstr "" msgid "Daily Tips" 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 "" @@ -13598,6 +14018,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 "" @@ -13949,6 +14538,135 @@ msgid "" "probability of warping." 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 " #~ "thickness (top+bottom solid layers)" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 65475066f0b..dfa4ce9e986 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" -"PO-Revision-Date: 2024-03-15 23:12+0900\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" +"PO-Revision-Date: 2024-05-01 04:51+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" @@ -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. @@ -1786,8 +1789,8 @@ msgstr "기본값" msgid "Filament %d" msgstr "필라멘트 %d" -msgid "active" -msgstr "활성화" +msgid "current" +msgstr "현재" msgid "Scale to build volume" msgstr "출력 가능 영역에 맞게 확장" @@ -1930,6 +1933,12 @@ msgstr "정렬" msgid "arrange current plate" msgstr "현재 플레이트 정렬" +msgid "Reload All" +msgstr "모두 다시 불러오기" + +msgid "reload all from disk" +msgstr "디스크에서 모두 다시 로드" + msgid "Auto Rotate" msgstr "자동 회전" @@ -1963,9 +1972,6 @@ msgstr "필라멘트 변경" msgid "Set Filament for selected items" msgstr "선택한 항목의 필라멘트로 설정" -msgid "current" -msgstr "현재" - msgid "Unlock" msgstr "잠금 해제" @@ -2286,9 +2292,6 @@ msgstr "현재 레이어에 사용될 사용자 정의 G코드 입력:" msgid "Jump to Layer" msgstr "다음 레이어로 이동" -msgid "Jump to layer" -msgstr "다음 레이어로 이동" - msgid "Please enter the layer number" msgstr "레이어 번호를 입력하세요" @@ -2382,11 +2385,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 +2406,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 +2447,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 "편집" @@ -2913,35 +2916,18 @@ msgstr "AMS 미사용" msgid "Print with the filament mounted on the back of chassis" 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 "Current Cabin humidity" +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" @@ -2993,6 +2979,12 @@ msgstr "" "다. \n" "(현재 동일한 브랜드, 재질, 색상의 소모품 자동 공급 지원)" +msgid "DRY" +msgstr "DRY" + +msgid "WET" +msgstr "WET" + msgid "AMS Settings" msgstr "AMS 설정" @@ -3007,11 +2999,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 +3052,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 +3134,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 +3203,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코드를 복사하지 못했습니다" @@ -3224,6 +3275,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 +3369,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 +3431,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 +3558,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 +3677,7 @@ msgid "Slicing State" msgstr "슬라이싱 상태" msgid "Print Statistics" -msgstr "통계 인쇄" +msgstr "통계 출력" msgid "Objects Info" msgstr "개체 정보" @@ -3673,6 +3727,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 "값이 범위를 벗어났습니다." @@ -3753,12 +3811,12 @@ msgstr "표시" msgid "Flushed" msgstr "버리기" -msgid "Total" -msgstr "합계" - msgid "Tower" msgstr "타워" +msgid "Total" +msgstr "합계" + msgid "Total Estimation" msgstr "추정치 합계" @@ -3861,6 +3919,12 @@ msgstr "추정 시간" msgid "Normal mode" msgstr "일반 모드" +msgid "Total Filament" +msgstr "총 필라멘트" + +msgid "Model Filament" +msgstr "모델 필라멘트" + msgid "Prepare time" msgstr "준비 시간" @@ -3954,6 +4018,9 @@ msgstr "정렬 옵션" msgid "Spacing" msgstr "간격" +msgid "0 means auto spacing." +msgstr "0은 자동 간격을 의미합니다." + msgid "Auto rotate for arrangement" msgstr "자동 회전 후 정렬" @@ -4099,6 +4166,9 @@ msgstr "모니터링 자동 기록" msgid "Go Live" msgstr "실시간" +msgid "Liveview Retry" +msgstr "라이브뷰 재시도" + msgid "Resolution" msgstr "해상도" @@ -4160,6 +4230,9 @@ msgstr "미리 보기" msgid "Device" msgstr "장치" +msgid "Multi-device" +msgstr "멀티 디바이스" + msgid "Project" msgstr "프로젝트" @@ -4199,6 +4272,9 @@ msgstr "모두 출력" msgid "Send all" msgstr "모두 전송" +msgid "Send to Multi-device" +msgstr "여러 장치로 보내기" + msgid "Keyboard Shortcuts" msgstr "키보드 단축키" @@ -4606,40 +4682,53 @@ msgstr "" msgid "Synchronization" msgstr "동기화" -msgid "Initialize failed (No Device)!" -msgstr "초기화 실패 (장치 없음)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "장치에서 더 많은 대화를 처리할 수 없습니다. 나중에 다시 시도해 주세요." + +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "플레이어가 오작동합니다. 시스템 플레이어를 다시 설치하세요." -msgid "Initialize failed (Device connection not ready)!" -msgstr "초기화 실패 (장치 연결 준비 안 됨)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" +"플레이어가 로드되지 않았습니다. 다시 시도하려면 '재생' 버튼을 클릭하세요." -msgid "Initialize failed (No Camera Device)!" -msgstr "초기화 실패 (카메라 없음)!" +msgid "Please confirm if the printer is connected." +msgstr "프린터가 연결되어 있는지 확인하세요." -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "프린터가 다운로드 중입니다. 다운로드가 완료될 때까지 기다리십시오." +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "프린터가 현재 다운로드 중입니다. 다운로드가 완료된 후 다시 시도하세요." -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "초기화 실패(현재 프린터 버전에서는 지원되지 않음)!" +msgid "Printer camera is malfunctioning." +msgstr "프린터 카메라가 오작동합니다." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "초기화 실패 (LAN 전용 모드에서는 액세스할 수 없음)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "문제가 발생했습니다. 프린터 펌웨어를 업데이트하고 다시 시도하세요." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "초기화 실패 (프린터의 LAN IP 누락)!" +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,16 +4759,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 "로딩 중..." @@ -4714,7 +4802,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 +4819,12 @@ msgstr "선택" msgid "Batch manage files." msgstr "파일을 일괄 관리합니다." +msgid "Refresh" +msgstr "새로 고침" + +msgid "Reload file list from printer." +msgstr "프린터에서 파일 목록을 다시 로드합니다." + msgid "No printers." msgstr "프린터 없음." @@ -4741,13 +4835,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 +4884,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 +4901,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 +4925,22 @@ 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 "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." +msgstr "" +"4개 이상의 시스템/핸디가 원격 액세스를 사용하고 있습니다. 일부 시스템을 닫고 " +"다시 시도할 수 있습니다." -msgid "File not exists." -msgstr "파일이 존재하지 않습니다." +msgid "File does not exist." +msgstr "파일이 없습니다." msgid "File checksum error. Please retry." msgstr "파일 체크섬 오류입니다. 다시 시도해 주세요." @@ -4914,6 +5046,9 @@ msgstr "카메라 보기 전환" msgid "Control" msgstr "제어" +msgid "Printer Parts" +msgstr "프린터 부품" + msgid "Print Options" msgstr "출력 옵션" @@ -4932,9 +5067,6 @@ msgstr "챔버" msgid "Bed" msgstr "베드" -msgid "Unload" -msgstr "언로드" - msgid "Debug Info" msgstr "디버그 정보" @@ -5117,9 +5249,6 @@ msgstr "상태" msgid "Update" msgstr "업데이트" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "다시 표시하지 않음" @@ -5150,6 +5279,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 마우스가 분리됨." @@ -5333,6 +5493,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 +5717,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 " @@ -5772,19 +5948,25 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Orca Slicer로 가져오는 데 실패했습니다. 파일을 다운로드하여 수동으로 가져오세" -"요." +"Bambu Studio로 가져오는 데 실패했습니다. 파일을 다운로드하여 수동으로 가져오" +"세요." msgid "Import SLA archive" msgstr "SLA 압축파일 가져오기" @@ -5866,9 +6048,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 " @@ -6022,7 +6221,7 @@ msgid "Stealth Mode" msgstr "스텔스 모드" msgid "Enable network plugin" -msgstr "" +msgstr "네트워크 플러그인 사용" msgid "Check for stable updates only" msgstr "안정적인 업데이트만 확인" @@ -6036,6 +6235,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 +6264,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 +6295,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 +6319,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 Studio)." +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 "사용자 사전 설정 자동 동기화(프린터/필라멘트/프로세스)" @@ -6297,6 +6564,18 @@ 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 +6585,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 "첫 번째 레이어 필라멘트 순서" @@ -6489,9 +6774,6 @@ msgstr "뱀부 텍스처 PEI 플레이트" msgid "Send print job to" msgstr "출력 작업 보내기" -msgid "Refresh" -msgstr "새로 고침" - msgid "Bed Leveling" msgstr "베드 레벨링" @@ -6584,8 +6866,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 카드를 삽입해야 합니다." @@ -6644,26 +6931,26 @@ 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?" +"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 "프린터에 연결 중입니다. 연결 진행 중에는 취소할 수 없습니다." @@ -6690,12 +6977,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 +7031,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 +7210,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,11 +7240,32 @@ 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" @@ -7404,21 +7740,36 @@ msgstr "" "않은 변경 사항을 포함:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "사전 설정 \"%1%\"의 일부 설정을 변경했습니다. " + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"사전 설정 \"%1%\"의 일부 설정을 변경했습니다.\n" -"사전 설정 전환 후 변경된 설정(새 값)을 유지하시겠습니까?" +"\n" +"수정한 사전 설정 값을 저장하거나 삭제할 수 있습니다." 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, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -"일부 사전 설정을 변경했습니다.\n" -"사전 설정 전환 후 변경된 설정(새 값)을 유지하시겠습니까?" +"\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 +7803,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 "" "이 대화 상자를 활성화하면 선택한 값을 왼쪽에서 오른쪽으로 사전 설정으로 변환" @@ -7914,8 +8265,44 @@ msgstr "Orca Slicer의 새 버전" msgid "Skip this Version" msgstr "이 버전 건너뛰기" -msgid "Done" -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 "노즐 확인 및 업데이트" @@ -8510,6 +8897,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 +8985,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 +9169,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 +9450,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" @@ -9204,7 +9606,7 @@ msgid "Intra-layer order" msgstr "레이어 내 순서" msgid "Print order within a single layer" -msgstr "단일 레이어 내의 인쇄 순서" +msgstr "단일 레이어 내의 출력 순서" msgid "As object list" msgstr "개체 목록으로" @@ -9343,14 +9745,14 @@ msgstr "" "이는 데 도움이 될 수 있습니다.\n" "\n" "기본적으로 작은 내부 브릿지는 필터링되고 내부 솔리드 채우기는 희박한 채우기 " -"위에 직접 인쇄됩니다. 이는 대부분의 경우에 잘 작동하여 상단 표면 품질을 크게 " -"저하시키지 않고 인쇄 속도를 높입니다.\n" +"위에 직접 출력됩니다. 이는 대부분의 경우에 잘 작동하여 상단 표면 품질을 크게 " +"저하시키지 않고 출력 속도를 높입니다.\n" "\n" "그러나 특히 너무 낮은 희박 채우기 밀도가 사용되는 심하게 기울어지거나 곡선 모" "델에서는 지지되지 않는 고체 채우기가 말려 베개 현상이 발생할 수 있습니다.\n" "\n" "이 옵션을 활성화하면 약간 지원되지 않는 내부 솔리드 채우기 위에 내부 브릿지 " -"레이어가 인쇄됩니다. 아래 옵션은 필터링 양, 즉 생성된 내부 브릿지 양을 제어합" +"레이어가 출력됩니다. 아래 옵션은 필터링 양, 즉 생성된 내부 브릿지 양을 제어합" "니다.\n" "\n" "비활성화됨 - 이 옵션을 비활성화합니다. 이는 기본 동작이며 대부분의 경우 잘 작" @@ -9633,6 +10035,12 @@ msgid "" "printing." msgstr "압출기 주변의 회피 반경. 개체별 출력에서 충돌 방지에 사용됩니다." +msgid "Nozzle height" +msgstr "노즐 높이" + +msgid "The height of nozzle tip." +msgstr "노즐 팁의 높이." + msgid "Bed mesh min" msgstr "배드 메쉬 최소" @@ -9646,8 +10054,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 +10076,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 +10112,7 @@ msgid "Only used as a visual help on UI" msgstr "UI의 시각적 도움말로만 사용됨" msgid "Extruder offset" -msgstr "압출기 오프셋" +msgstr "압출기 옵셋" msgid "Flow ratio" msgstr "유량 비율" @@ -10072,6 +10480,9 @@ msgstr "정육면체 지지대" msgid "Lightning" msgstr "번개" +msgid "Cross Hatch" +msgstr "크로스 해치" + msgid "Sparse infill anchor length" msgstr "드문 채우기 고정점 길이" @@ -10263,10 +10674,10 @@ msgstr "팬 최대 속도 레이어" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer " +"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " +"than \"close_fan_the_first_x_layers\", in which case the fan will be running " +"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "팬 속도는 \"close_fan_the_first_x_layers\" 의 0에서 \"full_fan_speed_layer\" " "의 최고 속도까지 선형적으로 증가합니다. \"full_fan_speed_layer\"가 " @@ -10341,6 +10752,18 @@ 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 "원호 맞춤" @@ -10953,7 +11376,7 @@ msgid "" "cooling is enabled." msgstr "" "더 나은 레이어 냉각을 위해 속도를 낮추는 경우 위의 최소 레이어 시간을 유지하" -"기 위해 프린터가 느려지는 최소 인쇄 속도입니다." +"기 위해 프린터가 느려지는 최소 출력 속도입니다." msgid "Nozzle diameter" msgstr "노즐 직경" @@ -11227,6 +11650,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 +11804,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 +11880,7 @@ msgstr "" "냄) 스카프 조인트 솔기가 사용됩니다. 기본값은 155°입니다." msgid "Conditional overhang threshold" -msgstr "" +msgstr "조건부 오버행 임계값" #, no-c-format, no-boost-format msgid "" @@ -11446,6 +11890,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 +11908,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 +11997,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 "닦기 속도" @@ -11620,9 +12068,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 +12213,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 " @@ -12565,8 +13010,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 +13163,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 +13178,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 +13187,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 +13205,7 @@ msgid "Total toolchanges" msgstr "총 도구 변경" msgid "Number of toolchanges during the print." -msgstr "인쇄 중 도구 교환 횟수." +msgstr "출력 중 도구 교환 횟수." msgid "Total volume" msgstr "총량" @@ -12785,25 +13230,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 +13298,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 +13322,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 +13361,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 +13487,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 +13567,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 +13613,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 +13634,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 "내부 오류" @@ -13364,6 +13835,12 @@ 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?" @@ -13459,12 +13936,6 @@ msgstr "" msgid "Printing Parameters" msgstr "출력 매개변수" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "플레이트 타입" @@ -13511,12 +13982,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 +13994,9 @@ msgstr "체적 속도로" msgid "Flow Dynamics Calibration Result" msgstr "동적 유량 교정 결과" +msgid "New" +msgstr "새로운" + msgid "No History Result" msgstr "기록 결과 없음" @@ -13541,9 +14009,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 "네트워크 조회" @@ -13824,7 +14305,7 @@ msgid "Export Log" msgstr "로그 내보내기" msgid "OrcaSlicer Version:" -msgstr "" +msgstr "OrcaSlicer 버전:" msgid "System Version:" msgstr "시스템 버전:" @@ -13833,10 +14314,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 +14414,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" @@ -13944,8 +14435,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" @@ -14144,13 +14635,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" +"Studio 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에서는 사용자 사전 설정 동기화 기능이 활성화되어 있지 않아 장치 페이지" +"에서 필라멘트 설정이 실패할 수 있음을 감지했습니다.\n" +"동기화 기능을 활성화하려면 \"사용자 사전 설정 동기화\"를 클릭하세요." + msgid "Printer Setting" msgstr "프린터 설정" @@ -14255,6 +14760,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 +14837,17 @@ msgstr "무너짐" msgid "Daily Tips" 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 "*%s 재료를 %s로 출력하면 노즐이 손상될 수 있습니다" + msgid "Need select printer" msgstr "프린터 선택 필요" @@ -14355,7 +14874,7 @@ msgid "Success!" msgstr "성공!" msgid "Are you sure to log out?" -msgstr "" +msgstr "정말 로그아웃하시겠습니까?" msgid "Refresh Printers" msgstr "프린터 새로 고침" @@ -14388,7 +14907,7 @@ msgstr "" "시오." msgid "Login/Test" -msgstr "" +msgstr "로그인/테스트" msgid "Connection to printers connected via the print host failed." msgstr "출력 호스트를 통해 연결된 프린터에 연결하지 못했습니다." @@ -14524,46 +15043,287 @@ msgstr "" "메시지 본문: \"%1%\"\n" "오류: \"%2%\"" -msgid "Connected to Obico successfully!" +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 "Could not connect to Obico" +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.2mm 노즐의 기본 프로파일과 비교하면 속도와 가속도가 낮고 성긴 채우기 패턴" +"은 자이로이드입니다. 따라서 출력 품질은 훨씬 높아지지만 출력 시간은 훨씬 길어" +"집니다." -msgid "Connected to SimplyPrint successfully!" +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 "Could not connect to SimplyPrint" +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 "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 "" +"파일 크기가 업로드 제한인 100MB를 초과했습니다. 패널을 통해 파일을 업로드하세" +"요." msgid "Unknown error" -msgstr "" +msgstr "알 수 없는 오류" 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 +15703,177 @@ msgstr "" "ABS 등 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이" "면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ 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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Orca Slicer로 가져오는 데 실패했습니다. 파일을 다운로드하여 수동으로 가져" +#~ "오세요." + +#~ 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 "스튜디오 버전:" @@ -15056,8 +15987,8 @@ msgstr "" #~ msgstr "드문 레이어 없음(실험적)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" -#~ "\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you " +#~ "selected\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "사전 설정의 이름을 \"선택한 공급업체 유형 직렬 @프린터\"로 변경합니다.\n" diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index 381e1b1f66f..68eb1c4cf3d 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -159,6 +159,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 cdb1b24ba70..a483824300e 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -252,6 +252,9 @@ msgstr "Rotatie herstellen" msgid "World coordinates" msgstr "Wereldcoördinaten" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1756,8 +1759,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" @@ -1903,6 +1906,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 +1945,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" @@ -2285,9 +2291,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." @@ -2381,10 +2384,10 @@ msgstr "" msgid "AMS not connected" msgstr "AMS niet aangesloten" -msgid "Load Filament" -msgstr "Filament laden" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "Lossen" msgid "Ext Spool" @@ -2402,7 +2405,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." @@ -2445,10 +2448,8 @@ 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." msgid "Edit" msgstr "Bewerken" @@ -2929,37 +2930,15 @@ 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 "" -"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.)" +msgid "Current Cabin humidity" 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." +"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 "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3010,6 +2989,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS Instellingen" @@ -3024,11 +3009,9 @@ 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." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3080,6 +3063,14 @@ msgstr "" "AMS gaat automatisch verder met een andere spoel met dezelfde filament " "eigenschappen wanneer het huidige filament op is." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Bestand" @@ -3153,6 +3144,51 @@ 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 "" + +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 "Onbekende fout tijdens het exporteren van de G-code" @@ -3166,13 +3202,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." @@ -3254,6 +3283,19 @@ 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 "" + +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" @@ -3339,25 +3381,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 +3441,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 "" + +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" @@ -3523,18 +3565,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Moederbord" - -msgid "TH" -msgstr "th" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Onbekend" @@ -3694,6 +3724,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 "" + msgid "Value is out of range." msgstr "Waarde is buiten het bereik." @@ -3774,12 +3808,12 @@ msgstr "Tonen" msgid "Flushed" msgstr "Flushed" -msgid "Total" -msgstr "Totaal" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "Totaal" + msgid "Total Estimation" msgstr "Schatting totaal" @@ -3882,6 +3916,12 @@ msgstr "Geschatte duur" msgid "Normal mode" msgstr "Normale modus" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Voorbereidingstijd" @@ -3975,6 +4015,9 @@ msgstr "Rangschik opties" msgid "Spacing" msgstr "Uitlijning" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Automatisch roteren voor rankschikking" @@ -4120,6 +4163,9 @@ msgstr "Automatische opnamebewaking" msgid "Go Live" msgstr "Live gaan" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolutie" @@ -4181,6 +4227,9 @@ msgstr "Voorvertoning" msgid "Device" msgstr "Apparaat" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Project" @@ -4220,6 +4269,9 @@ msgstr "Print alles" msgid "Send all" msgstr "Alles verzenden" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Sneltoesten" @@ -4627,41 +4679,49 @@ 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 "" -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" + +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialisatie is mislukt (geen camera-apparaat)!" +msgid "Please confirm if the printer is connected." +msgstr "" -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -"De printer is bezig met downloaden. Wacht tot het downloaden is voltooid." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Printer camera is malfunctioning." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisatie mislukt (niet toegankelijk in alleen LAN-modus)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialisatie is mislukt (LAN-IP van de printer ontbreekt)!" +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 "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 "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Gestopt [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Gestopt." @@ -4692,16 +4752,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..." @@ -4753,6 +4812,12 @@ msgstr "Selecteren" msgid "Batch manage files." msgstr "Batchbeheer van bestanden." +msgid "Refresh" +msgstr "Vernieuwen" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Geen printers" @@ -4763,13 +4828,32 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "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 +4875,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 "" -msgid "Failed to parse model infomations." -msgstr "Failed to parse model infomation" +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4806,6 +4890,12 @@ 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 "" + msgid "Download waiting..." msgstr "Download wacht..." @@ -4822,13 +4912,17 @@ 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 "" -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4932,6 +5026,9 @@ msgstr "" msgid "Control" msgstr "Besturing" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Print Opties" @@ -4950,9 +5047,6 @@ msgstr "Kamer" msgid "Bed" msgstr "Printbed" -msgid "Unload" -msgstr "Lossen" - msgid "Debug Info" msgstr "Informatie over Debuggen" @@ -5122,9 +5216,6 @@ msgstr "Status" msgid "Update" msgstr "Updaten" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Niet nogmaals tonen" @@ -5155,6 +5246,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 "" + +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-muis losgekoppeld." @@ -5350,6 +5470,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 "Globale" @@ -5552,9 +5691,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 " @@ -5792,15 +5928,21 @@ msgstr "Model importeren" msgid "prepare 3mf file..." msgstr "voorbereiden van 3mf bestand..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "project downloaden..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Project %d%% gedownload" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5885,10 +6027,24 @@ 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 "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6058,6 +6214,21 @@ msgstr "Imperiaal" msgid "Units" msgstr "Eenheden" +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 "" @@ -6067,6 +6238,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" @@ -6083,6 +6266,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 "" @@ -6102,6 +6291,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 Studio)." +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 "" @@ -6326,6 +6538,18 @@ msgstr "Incompatible" 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 "" + msgid "Plate name" msgstr "Plate name" @@ -6335,9 +6559,15 @@ msgstr "Same as Global Print Sequence" msgid "Print sequence" msgstr "Afdrukvolgorde" -msgid "Customize" +msgid "Same as Global" +msgstr "" + +msgid "Disable" msgstr "" +msgid "Spiral vase" +msgstr "Spiraalvaas" + msgid "First layer filament sequence" msgstr "" @@ -6526,9 +6756,6 @@ msgstr "" msgid "Send print job to" msgstr "Stuur de printtaak naar" -msgid "Refresh" -msgstr "Vernieuwen" - msgid "Bed Leveling" msgstr "Bed leveling" @@ -6627,7 +6854,10 @@ 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 "" msgid "An SD card needs to be inserted to record timelapse." @@ -6690,24 +6920,24 @@ 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?" +"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 "" - msgid "" -"Please click the confirm button if you still want to proceed with printing." +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" -msgid "Stainless Steel" +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 "" "Connecting to the printer. Unable to cancel during the connection process." @@ -6733,12 +6963,18 @@ msgstr "" msgid "Modifying the device name" msgstr "De naam van het apparaat wijzigen" +msgid "Bind with Pin Code" +msgstr "" + 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 "" + 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." @@ -6784,6 +7020,26 @@ 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 "" + +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 "Inloggen op printer" @@ -6975,6 +7231,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" @@ -7466,23 +7736,28 @@ msgstr "" "bevat de navolgende nog niet opgeslagen aanpassingen:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"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?" +"\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 "" -"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 +7788,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 "" @@ -7950,32 +8225,68 @@ msgstr "Shift+Muiswiel" msgid "Release Note" msgstr "Release-opmerkingen" -#, c-format, boost-format -msgid "version %s update information :" -msgstr "versie %s update informatie:" +#, c-format, boost-format +msgid "version %s update information :" +msgstr "versie %s update informatie:" + +msgid "Network plug-in update" +msgstr "Netwerk plug-in update" + +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "" +"Klik op OK om de netwerkplug-in bij te werken wanneer Orca Slicer de " +"volgende keer wordt gestart." + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "" +"Een nieuwe netwerk plug-in (%s) is beschikbaar. Wilt je deze installeren?" + +msgid "New version of Orca Slicer" +msgstr "Nieuwe versie van Orca Slicer" + +msgid "Skip this Version" +msgstr "" + +msgid "Done" +msgstr "Done" + +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 "Network plug-in update" -msgstr "Netwerk plug-in update" +msgid "Filament Extruded, Continue" +msgstr "" -msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgid "Not Extruded Yet, Retry" msgstr "" -"Klik op OK om de netwerkplug-in bij te werken wanneer Orca Slicer de " -"volgende keer wordt gestart." -#, c-format, boost-format -msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgid "Finished, Continue" msgstr "" -"Een nieuwe netwerk plug-in (%s) is beschikbaar. Wilt je deze installeren?" -msgid "New version of Orca Slicer" -msgstr "Nieuwe versie van Orca Slicer" +msgid "Load Filament" +msgstr "Filament laden" -msgid "Skip this Version" +msgid "Filament Loaded, Resume" msgstr "" -msgid "Done" -msgstr "Done" +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "" @@ -8839,6 +9150,15 @@ msgstr "Engineering plate (technisch printbed)" 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 "" "De G-code wordt bij iedere laagwisseling toegevoegd voor het optillen van Z" @@ -9591,6 +9911,12 @@ msgstr "" "Afstandsradius rond de extruder: gebruikt om botsingen te vermijden bij het " "printen per object." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9992,6 +10318,9 @@ msgstr "Ondersteuning Cubic" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10239,6 +10568,15 @@ 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 "" + +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 "Boog montage" @@ -11051,6 +11389,24 @@ 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 "" + +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 tijdens terugtrekken (retraction)" @@ -11397,9 +11753,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 " @@ -12759,6 +13112,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12834,12 +13190,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 "" - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -12881,6 +13231,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 "" @@ -12890,6 +13248,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 "" @@ -13019,6 +13390,12 @@ msgstr "" msgid "Failed" msgstr "Mislukt" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to overrides the other results?" @@ -13109,12 +13486,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -13158,12 +13529,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 "" @@ -13176,6 +13541,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13188,9 +13556,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 "" @@ -13555,6 +13936,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 "" @@ -13746,10 +14134,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -13838,6 +14235,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 "" @@ -13908,6 +14308,15 @@ msgstr "" msgid "Daily Tips" 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 "" @@ -14087,6 +14496,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 "" @@ -14459,6 +15037,147 @@ msgid "" "probability of warping." msgstr "" +#~ 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 " #~ "thickness (top+bottom solid layers)" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 0aef501d5c9..1b9d28651c7 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -1,8 +1,8 @@ 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-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga \n" "Language-Team: \n" @@ -256,6 +256,9 @@ msgstr "Zresetuj obrót" msgid "World coordinates" msgstr "Współrzędne" +msgid "Object coordinates" +msgstr "Koordynaty obiektu" + msgid "°" msgstr "°" @@ -1773,10 +1776,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,8 +1806,8 @@ 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" @@ -1947,6 +1950,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 z dysku" + msgid "Auto Rotate" msgstr "Automatyczna rotacja" @@ -1980,9 +1989,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" @@ -2324,9 +2330,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" @@ -2421,10 +2424,10 @@ 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" @@ -2442,7 +2445,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." @@ -2488,10 +2491,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." +"aby automatycznie załadować lub wyładować filamenty." msgid "Edit" msgstr "Edytuj" @@ -2975,37 +2978,20 @@ 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 "" -"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 "Current Cabin humidity" +msgstr "Aktualna wilgotność w kabinie" 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 "" -"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" @@ -3066,6 +3052,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 +3072,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 +3129,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" @@ -3208,6 +3211,66 @@ 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 kodu 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 "" +"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." @@ -3221,13 +3284,6 @@ 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ę" @@ -3305,14 +3361,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 @@ -3392,26 +3465,6 @@ msgstr "" "\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. " @@ -3482,6 +3535,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" @@ -3587,18 +3660,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" @@ -3771,6 +3832,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." @@ -3851,12 +3916,12 @@ 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" @@ -3959,6 +4024,12 @@ msgstr "Szacowany czas" msgid "Normal mode" msgstr "Tryb normalny" +msgid "Total Filament" +msgstr "Całkowita ilość filamentu" + +msgid "Model Filament" +msgstr "Filament dla modelu" + msgid "Prepare time" msgstr "Czas przygotowania" @@ -4052,6 +4123,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" @@ -4198,6 +4272,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ść" @@ -4259,6 +4336,9 @@ msgstr "Podgląd" msgid "Device" msgstr "Urządzenie" +msgid "Multi-device" +msgstr "Wiele-Urządzeń" + msgid "Project" msgstr "Projekt" @@ -4299,6 +4379,9 @@ msgstr "Drukuj wszystko" msgid "Send all" msgstr "Wyślij wszystko" +msgid "Send to Multi-device" +msgstr "Wyślij do wielu urządzeń" + msgid "Keyboard Shortcuts" msgstr "Skróty klawiszowe" @@ -4717,43 +4800,65 @@ msgstr "" msgid "Synchronization" msgstr "Synchronizacja" -msgid "Initialize failed (No Device)!" -msgstr "Inicjalizacja nie powiodła się (Brak urządzenia)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" +"Urządzenie nie może obsłużyć więcej rozmów. Proszę spróbować ponownie " +"później." + +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" +"Odtwarzacz nie działa poprawnie. Proszę ponownie zainstalować odtwarzacz " +"systemowy." -msgid "Initialize failed (Device connection not ready)!" -msgstr "Inicjalizacja nie powiodła się (Brak gotowości połączenia urządzenia)!" +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 (No Camera Device)!" -msgstr "Inicjalizacja nie powiodła się (Brak urządzenia kamery)!" +msgid "Please confirm if the printer is connected." +msgstr "Proszę potwierdzić, czy drukarka jest podłączona." -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -"Drukarka jest zajęta pobieraniem. Proszę czekać, aż pobieranie zostanie " -"zakończone." +"Drukarka aktualnie pobiera dane. Proszę spróbować ponownie po zakończeniu " +"tego procesu." + +msgid "Printer camera is malfunctioning." +msgstr "Kamera drukarki jest uszkodzona." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Problem occured. Please update the printer firmware and try again." msgstr "" -"Inicjalizacja nie powiodła się (Nieobsługiwane w obecnej wersji drukarki)!" +"Wystąpił problem. Proszę zaktualizować oprogramowanie drukarki i spróbować " +"ponownie." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicjalizacja nie powiodła się (Niedostępne w trybie tylko LAN)!" +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 "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicjalizacja nie powiodła się (Brak adresu IP drukarki w sieci LAN)!" +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,16 +4889,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..." @@ -4845,6 +4949,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 +4965,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 gotowości połączenia urządzenia)!" + +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 +5020,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 +5037,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 +5061,21 @@ msgstr "Pobieranie zakończone" msgid "Downloading %d%%..." msgstr "Pobieranie %d%%..." -msgid "Connection lost. Please retry." -msgstr "Utracono połączenie. Proszę spróbować ponownie." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"Ponowne łączenie z drukarką, operacja nie może być teraz zakończona, spróbuj " +"ponownie później." -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -"Urządzenie nie może obsłużyć więcej rozmów. Proszę spróbować ponownie " -"później." +"Więcej niż 4 aplikacje Studio/Handy korzystają z dostępu zdalnego, możesz " +"zamknąć kilka z nich i spróbować ponownie." -msgid "File not exists." +msgid "File does not exist." msgstr "Plik nie istnieje." msgid "File checksum error. Please retry." @@ -5034,6 +5181,9 @@ msgstr "Zmień widok kamery" msgid "Control" msgstr "Sterowanie" +msgid "Printer Parts" +msgstr "Części drukarki" + msgid "Print Options" msgstr "Opcje drukowania" @@ -5052,9 +5202,6 @@ msgstr "Cham" msgid "Bed" msgstr "Stół" -msgid "Unload" -msgstr "Wyładowaj" - msgid "Debug Info" msgstr "Informacje debugowania" @@ -5240,9 +5387,6 @@ msgstr "Status" msgid "Update" msgstr "Aktualizacja" -msgid "HMS" -msgstr "Stan drukarki (HMS)" - msgid "Don't show again" msgstr "Nie pokazuj ponownie" @@ -5273,6 +5417,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." @@ -5462,6 +5639,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 innych obcych " +"przedmiotem." + +msgid "Nozzle Type" +msgstr "Rodzaj dyszy" + +msgid "Stainless Steel" +msgstr "Stal nierdzewna" + +msgid "Hardened Steel" +msgstr "Stal utwardzana" + +#, c-format, boost-format +msgid "%.1f" +msgstr "%.1f" + msgid "Global" msgstr "Globalne" @@ -5669,9 +5867,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 " @@ -5912,18 +6107,25 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio 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 OrcaSlicer nie powiodło się. Proszę pobrać plik i ręcznie go " +"zaimportować." msgid "Import SLA archive" msgstr "Importuj archiwum SLA" @@ -6005,10 +6207,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 "" -"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 " @@ -6185,6 +6403,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 +6433,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" @@ -6211,6 +6465,12 @@ 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 +6492,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 Studio)." +msgstr "" +"Obsługa wielu urządzeń (zacznie być aktywna po ponownym uruchomieniu Slicera)" + +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ć" @@ -6455,7 +6747,19 @@ msgstr "Niekompatybilne" msgid "The selected preset is null!" msgstr "Wybrany profil jest pusty!" -msgid "Plate name" +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" msgid "Same as Global Print Sequence" @@ -6464,8 +6768,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" @@ -6648,9 +6958,6 @@ 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" @@ -6748,9 +7055,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." @@ -6813,16 +7124,26 @@ 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?" +"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 > " +"Części drukarki, 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,12 +7151,6 @@ 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." @@ -6862,12 +7177,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 +7232,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,6 +7450,29 @@ 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" @@ -7607,23 +7974,36 @@ msgstr "" "następujące niezapisane zmiany:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Zmieniono niektóre ustawienia profilu \"%1%\"." + msgid "" -"You have changed some settings of preset \"%1%\". \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 \"%1%\". \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 "" -"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, or choose to " +"transfer the values you have modified to the new preset." 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ć 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 +8039,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 " @@ -7796,8 +8176,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." @@ -8129,6 +8509,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 "Ekstruzja filamentu, Kontynuuj" + +msgid "Not Extruded Yet, Retry" +msgstr "Jeszcze nie wydrukowano, 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ę" @@ -8947,7 +9363,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 " @@ -9045,6 +9461,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 " @@ -9975,6 +10400,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" @@ -10431,17 +10862,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" @@ -10733,6 +11167,19 @@ msgstr "" "Prędkość wypełniania przerw. 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" @@ -11675,6 +12122,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łuższa retrakcja podczas cięcia (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 +12166,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 +12177,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,7 +12233,7 @@ 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 " @@ -12096,9 +12569,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 " @@ -12127,7 +12597,8 @@ msgid "" "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" +"Jeśli zostanie wyrażona w procentach, będzie obliczona na podstawie średnicy " +"dyszy" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -13598,6 +14069,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." @@ -13677,12 +14151,6 @@ msgstr "Flow Rate" 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 +14198,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 +14219,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" @@ -13941,6 +14438,12 @@ 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?" @@ -14039,12 +14542,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametry drukowania" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Typ Płyty" @@ -14092,12 +14589,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 +14601,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" @@ -14122,9 +14616,23 @@ msgstr "Odświeżanie historii zapisów kalibracji Flow Dynamics" 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" @@ -14521,6 +15029,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" @@ -14738,14 +15256,28 @@ 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" +"Studio 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" +"Slicer 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" @@ -14856,6 +15388,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 +15472,18 @@ msgstr "Zwiń" msgid "Daily Tips" msgstr "Porada Dnia" +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" @@ -15134,6 +15683,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!" @@ -15567,6 +16382,237 @@ msgstr "" "takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może " "zmniejszyć prawdopodobieństwo odkształceń." +#~ 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." @@ -16777,10 +17823,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 +17949,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 00000000000..f84e1d99c50 --- /dev/null +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -0,0 +1,16338 @@ +msgid "" +msgstr "" +"Project-Id-Version: OrcaSlicer\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" +"PO-Revision-Date: 2024-04-16 11:17-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-Project: orcaslicer-pt-br\n" +"X-Crowdin-Project-ID: 664934\n" +"X-Crowdin-Language: pt-BR\n" +"X-Crowdin-File: OrcaSlicer.pot\n" +"X-Crowdin-File-ID: 10\n" +"X-Generator: Poedit 3.4.2\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 "Ajustar 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 "Rodar 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 "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." +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 "WebView2 Runtime" + +#, 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 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 "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 "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 "" + +msgid "reload all from disk" +msgstr "" + +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 Studio." +msgstr "Por favor, verifique a conexão de rede da impressora e do Studio." + +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 "" + +msgid "Unload" +msgstr "Descarregar" + +msgid "Ext Spool" +msgstr "Bobina Externa" + +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 BambuStudio by Bambulab, which is from PrusaSlicer " +"by Prusa Research. PrusaSlicer is from Slic3r by Alessandro Ranellucci and " +"the RepRap community" +msgstr "" +"O Orca Slicer é baseado no BambuStudio da Bambulab, que é derivado do " +"PrusaSlicer da Prusa Research. O PrusaSlicer vem do Slic3r de Alessandro " +"Ranellucci e da comunidade RepRap" + +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." + +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 "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 úmido. 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" +"(Atualmente suportando o fornecimento automático de consumíveis da mesma " +"marca, tipo de material e cor)" + +msgid "DRY" +msgstr "SECO" + +msgid "WET" +msgstr "ÚMIDO" + +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 "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + +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 "" + +#, 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 "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 "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 de priming 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 de Priming\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 de priming não funciona quando a Altura de Camada Adaptativa está " +"ativada.\n" +"Qual você deseja manter?\n" +"SIM - Manter a Torre de Priming\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 de priming não funciona quando a Altura da Camada de Suporte " +"Independente está ativada.\n" +"Qual você deseja manter?\n" +"SIM - Manter a Torre de Priming\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" + +msgid "N/A" +msgstr "N/D" + +#, 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 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 "Fluido" + +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 "Tempo de mudança 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" +msgstr "Adicionar" + +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 "Prepare" +msgstr "Preparar" + +msgid "Preview" +msgstr "Pré-visualizar" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Multi-device" +msgstr "" + +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 "Send" +msgstr "Enviar" + +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 "Send to Multi-device" +msgstr "" + +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 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 &Configs" +msgstr "Exportar &Configurações" + +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 "View" +msgstr "Visualizar" + +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 &Studio" +msgstr "Abrir &Estúdio" + +msgid "Open Studio" +msgstr "Abrir Estúdio" + +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 "Loading..." +msgstr "Carregando..." + +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 "Timelapse" +msgstr "Timelapse" + +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 "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." +msgstr "" + +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 "Resume" +msgstr "Continuar" + +msgid "Stop" +msgstr "Parar" + +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 "" + +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "Baixar versão 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 "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 "CANCELED" +msgstr "CANCELADO" + +msgid "COMPLETED" +msgstr "CONCLUÍDO" + +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 "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + +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 lavagem" + +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!" + +#, 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 "Slicing" +msgstr "Fatiando" + +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 "" + +msgid "downloading project ..." +msgstr "baixando projeto..." + +msgid "Download failed, File size exception." +msgstr "" + +#, c-format, boost-format +msgid "Project downloaded %d%%" +msgstr "Projeto baixado %d%%" + +msgid "" +"Importing to Bambu Studio failed. Please download the file and manually " +"import it." +msgstr "" + +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" + +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 "Add Models" +msgstr "Adicionar Modelos" + +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 "Remember my choice." +msgstr "Lembrar minha escolha." + +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 "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 "" + +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 "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 movimento " +"lateral.\n" +"Touchpad: Alt + mover para rotacionar, Shift + mover para movimento lateral." + +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 descarga: 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 descarga: 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 Studio)." +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 "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 "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 "Incompatible" +msgstr "Incompatível" + +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 invalid;" +msgstr "O nome é inválido;" + +msgid "illegal characters:" +msgstr "caracteres ilegais:" + +msgid "illegal suffix:" +msgstr "sufixo ilegal:" + +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 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 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 "Offline" +msgstr "Desconectado" + +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 "Bed Leveling" +msgstr "Nivelamento da mesa" + +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 "Printer local connection failed, please try again." +msgstr "Falha na conexão local da impressora, por favor, tente novamente." + +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: %.1f %s" +msgstr "bico memorizado: %.1f %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 "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 "The name length exceeds the limit." +msgstr "O comprimento do nome excede o limite." + +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 "" + +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 "" + +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 "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 predefinido" + +msgid "Search in preset" +msgstr "Pesquisar nos predefinidos" + +msgid "Click to reset all settings to the last saved preset." +msgstr "" +"Clique para redefinir todas as configurações para o último predefinido 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 de purga é necessária para um timelapse suave. Pode haver falhas no " +"modelo sem a torre de purga. Tem certeza de que deseja desativar a torre de " +"purga?" + +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 de purga é necessária para um timelapse suave. Pode haver falhas no " +"modelo sem a torre de purga. Deseja ativar a torre de purga?" + +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 descarga. Embora possa " +"reduzir notavelmente a descarga, 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 mudanças de filamento para minimizar a descarga. Embora possa " +"reduzir notavelmente a descarga, ele também pode elevar o risco de bolhas 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 aparecer a hotend, é recomendável adicionar uma " +"\"Torre de Limpeza de Timelapse\" \n" +"clique com o botão direito na posição vazia da mesa e escolha \"Adicionar " +"Primitivo\"->\"Torre de Limpeza de 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 "Base" + +msgid "Support filament" +msgstr "Filamento de suporte" + +msgid "Tree supports" +msgstr "Suportes de árvore" + +msgid "Prime tower" +msgstr "Torre de purga" + +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 "Substituições de configuração" + +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 "Cool plate (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 de limpeza" + +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 empurrar" + +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" + +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 de limpeza" + +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 "" + +msgid "Old Value" +msgstr "" + +msgid "New Value" +msgstr "" + +msgid "Transfer" +msgstr "Transferir" + +msgid "Don't save" +msgstr "Não salvar" + +msgid "Discard" +msgstr "" + +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 "" + +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 "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 "Ramming customization" +msgstr "Customização de ramming" + +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 de extremidade 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 à extremidade 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 de extremidade 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 de extremidade" + +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 de extremidade" + +msgid "Ramming line spacing" +msgstr "Espaçamento da linha de moldeamento de extremidade" + +msgid "Auto-Calc" +msgstr "Auto-Calc" + +msgid "Re-calculate" +msgstr "Recalcular" + +msgid "Flushing volumes for filament change" +msgstr "Volumes de limpeza 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 limpeza 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 limpeza (mm³) para cada par de filamentos." + +#, c-format, boost-format +msgid "Suggestion: Flushing Volume in range [%d, %d]" +msgstr "Sugestão: Volume de Limpeza 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 "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 "Rodar 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 "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 "" + +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 "Carregar Filamento" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + +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 "Printing" +msgstr "Imprimindo" + +msgid "Idle" +msgstr "Inativo" + +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 the studio." +msgstr "" +"A versão do firmware está anormal. É necessário reparar e atualizar antes de " +"imprimir. Deseja atualizar agora? Você também pode atualizar mais tarde na " +"impressora ou na próxima vez que iniciar o estúdio." + +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 "Skirt" +msgstr "Saia" + +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 Principal" + +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 bocal diferentes e diâmetros de filamento diferentes não são " +"permitidos quando a torre principal está ativada." + +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"A Torre de Limpeza atualmente só é suportada com o endereçamento relativo do " +"extrusor (use_relative_e_distances=1)." + +msgid "" +"Ooze prevention is currently not supported with the prime tower enabled." +msgstr "" +"A prevenção de oozing não é atualmente suportada com a torre principal " +"ativada." + +msgid "" +"The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"A torre principal atualmente só é suportada para os G-code tipo Marlin, " +"RepRap/Sprinter, RepRapFirmware e Repetier." + +msgid "The prime tower is not supported in \"By object\" print." +msgstr "A torre principal 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 principal não é suportada quando a altura de camada adaptativa está " +"ativada. 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 principal requer que o \"espaço 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 principal 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 principal requer que todos os objetos sejam impressos sobre o mesmo " +"número de camadas de base" + +msgid "" +"The prime tower requires that all objects are sliced with the same layer " +"heights." +msgstr "" +"A torre principal 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 principal 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 principal 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 "Cool Plate (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 "Limiar de resfriamento de Overhang" + +#, 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 da 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 o primeiro" + +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 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 "" +"Ordem de perímetro/preenchimento. Quando a caixa de seleção não está " +"marcada, 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 "Deslocamento do extrusor" + +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 "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 de limpeza." + +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 de limpeza (não afeta " +"a parte inicial do descarregamento logo após o esmagamento)." + +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 " +"esmagamento." + +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 de limpeza" + +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 ferramenta, 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 objeto sacrificial, o Orca Slicer sempre irá primear essa " +"quantidade de material na torre de limpeza para produzir extrusões de " +"preenchimento ou objeto sacrificial sucessivas 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 esmagamento" + +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 " +"esmagamento." + +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 esmagamento para configurações de várias ferramentas" + +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 esmagamento ao usar impressora multitool (ou seja, quando a opção " +"'Único Extrusor Multimaterial' em Configurações de Impressora está " +"desmarcada). Quando ativado, uma pequena quantidade de filamento é " +"rapidamente extrudada na torre de limpeza logo antes da troca de ferramenta. " +"Esta opção é usada apenas quando a torre de limpeza está habilitada." + +msgid "Multitool ramming volume" +msgstr "Volume de esmagamento multitool" + +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-extrusor" + +msgid "Flow used for ramming the filament before the toolchange." +msgstr "Fluxo usado para esmagar o filamento antes da troca de ferramenta." + +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 "Infill direction" +msgstr "Direção de 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 "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 "" + +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 "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. And the fitting " +"tolerance is same with resolution" +msgstr "" +"Habilitar isso para obter um arquivo G-code que tenha movimentos G2 e G3. E " +"a tolerância de ajuste é a mesma que a resolução" + +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 em Objeto / " +"Limpeza em 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" + +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 "" +"A área de preenchimento é ligeiramente ampliada para se sobrepor ao " +"perímetro para melhor aderência. O valor percentual é relativo à largura da " +"linha do preenchimento não sólido" + +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 do extrusor 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 do extrusor durante a " +"sequência de troca de filamento para permitir taxas de avanço rápidas e para " +"superar a resistência ao carregar um filamento com uma ponta com forma " +"desagradável." + +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 base" + +msgid "Z gap between object and raft. Ignored for soluble interface" +msgstr "Intervalo Z entre o objeto e a base. Ignorado para interface solúvel" + +msgid "Raft expansion" +msgstr "Expansão da base" + +msgid "Expand all raft layers in XY plane" +msgstr "Expandir todas as camadas da base 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 base 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 base ou suporte para melhorar a adesão à mesa " +"de impressão" + +msgid "Raft layers" +msgstr "Camadas da base" + +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ção. Isto reduz " +"significativamente o destaque, 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 reinicializaçã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 "Junta Scarf (beta)" + +msgid "Use scarf joint to minimize seam visibility and increase seam strength." +msgstr "" +"Use a junta Scarf para minimizar a visibilidade da costura e aumentar a " +"resistência da costura." + +msgid "Conditional scarf joint" +msgstr "Junta Scarf condicional" + +msgid "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." +msgstr "" +"Aplique juntas 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 de junta de " +"cachecol 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 de junta 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 juntas " +"Scarf. Se a parte sem suporte do perímetro for inferior a esse limite, as " +"juntas 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 junta 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 juntas Scarf. É " +"recomendável imprimir as juntas 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 junta Scarf" + +msgid "This factor affects the amount of material for scarf joints." +msgstr "Este fator afeta a quantidade de material para as juntas 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 junta 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 "Junta Scarf em todo o 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 junta Scarf" + +msgid "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." +msgstr "" +"Comprimento da junta Scarf. Definir este parâmetro como zero efetivamente " +"desabilita a junta 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." + +msgid "Scarf joint for inner walls" +msgstr "Junta Scarf em paredes internas" + +msgid "Use scarf joint for inner walls as well." +msgstr "Usar junta Scarf em paredes internas também." + +msgid "Role base wipe speed" +msgstr "Velocidade de limpeza baseada no tipo de extrusã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 "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 "" +"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 de priming 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 de priming" + +msgid "Purge remaining filament into prime tower" +msgstr "Purgar o filamento restante na torre de priming" + +msgid "Enable filament ramming" +msgstr "Ativar inserção 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 de limpeza não será impressa em camadas sem trocas de " +"ferramentas. Em camadas com uma troca de ferramentas, o extrusor viajará " +"para baixo para imprimir a torre de limpeza. 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/base" + +msgid "" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" +msgstr "" +"Filamento para imprimir a base 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/plataforma" + +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 de priming estiver " +"ativada." + +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 "Limpeza ao retrair" + +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 de limpeza 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 descarga" + +msgid "" +"The actual flushing volumes is equal to the flush multiplier multiplied by " +"the flushing volumes in the table." +msgstr "" +"Os volumes de descarga reais são iguais ao multiplicador de descarga " +"multiplicado pelos volumes de descarga na tabela." + +msgid "Prime volume" +msgstr "Volume de priming" + +msgid "The volume of material to prime extruder on tower." +msgstr "O volume de material para inicializar o extrusor na torre." + +msgid "Width of prime tower" +msgstr "Largura da torre de inicialização" + +msgid "Wipe tower rotation angle" +msgstr "Ângulo de rotação da torre de limpeza" + +msgid "Wipe tower rotation angle with respect to x-axis." +msgstr "Ângulo de rotação da torre de limpeza 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 que é usado para estabilizar a torre de limpeza. Um " +"ângulo maior significa uma base mais larga." + +msgid "Wipe tower purge lines spacing" +msgstr "Espaçamento das linhas de purga da torre de limpeza" + +msgid "Spacing of purge lines on the wipe tower." +msgstr "Espaçamento das linhas de purga na torre de limpeza." + +msgid "Wipe tower extruder" +msgstr "Extrusor da torre de limpeza" + +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 "" +"O extrusor a ser usado ao imprimir o perímetro da torre de limpeza. Defina " +"como 0 para usar o 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 de limpeza. 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á visto por fora. Isso não terá efeito, a " +"menos que a torre de inicialização esteja ativada." + +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 de inicialização esteja ativada." + +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 a 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 " +"de inicialização esteja ativada." + +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 de limpeza é 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 de limpeza" + +msgid "Whether or not wipe tower is being generated in the print." +msgstr "Se a torre de limpeza 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 "" + +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 "" + +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 "" + +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 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 "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 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 best line on your plate" +msgstr "Por favor, encontre a melhor linha em sua mesa" + +msgid "Please find the cornor with perfect degree of extrusion" +msgstr "Por favor, encontre o canto com o grau perfeito de extrusão" + +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 "" + +msgid "Edit Flow Dynamics Calibration" +msgstr "Editar Calibração de Dinâmica de Fluxo" + +msgid "New Flow Dynamic Calibration" +msgstr "" + +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 "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" + +#, 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 predefinição criada será exibida 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 "X" +msgstr "X" + +msgid "Y" +msgstr "A" + +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" +"Studio 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 detectou que sua função de sincronização predefinida não está ativa, " +"o que pode resultar em configurações de arquivo malsucedidas na página do " +"dispositivo. \n" +"Clique em \"Sincronizar pressets do usuário\" para habilitar a função de " +"sincronização." + +msgid "Printer Setting" +msgstr "Configuração da Impressora" + +msgid "Export Configs" +msgstr "Exportar Configurações" + +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] "As seguintes predefinições herdam esta predefinição." +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" + +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 "" +"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 à 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 à 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 "" + +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 "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 "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 "" +"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 "Unknown error" +msgstr "Erro desconhecido" + +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-arranjar 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 "" +"Ajustar 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 \"Colocar 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 "Actions For Unsaved Changes" +#~ msgstr "Ações para Alterações Não Salvas" + +#~ msgid "Preset Value" +#~ msgstr "Valor Predefinido" + +#~ msgid "Modified Value" +#~ msgstr "Valor Modificado" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Transferir Valor Modificado" + +#~ msgid "Use Preset Value" +#~ msgstr "Usar Valor Predefinido" + +#~ msgid "Save Modified Value" +#~ msgstr "Salvar Valor Modificado" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Você gostaria de salvar estas configurações alteradas (valor modificado)?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Você gostaria de manter estas configurações alteradas (valores " +#~ "modificados) após mudar o preset?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Você modificou suas configurações anteriormente e está prestes a " +#~ "substituí-las por novas." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Você quer manter suas configurações atuais modificadas ou usar as " +#~ "configurações predefinidas?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Você quer salvar suas configurações atuais modificadas?" + +#~ msgid "Unload Filament" +#~ msgstr "Descarregar Filamento" + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Placa principal" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "" +#~ "Over 4 studio/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "Mais de 4 estúdio/prático estão usando o acesso remoto, você pode fechar " +#~ "alguns e tentar novamente." + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "The 3mf file version is in Beta and it is newer than the current Bambu " +#~ "Studio version." +#~ msgstr "" +#~ "A versão do arquivo 3mf está em Beta e é mais recente que a versão atual " +#~ "do Bambu Studio." + +#~ msgid "If you would like to try Bambu Studio Beta, you may click to" +#~ msgstr "Se você gostaria de testar o Bambu Studio Beta, clique para" + +#~ msgid "The 3mf file version is newer than the current Bambu Studio version." +#~ msgstr "" +#~ "A versão do arquivo 3mf é mais recente que a versão atual do Bambu Studio." + +#~ msgid "" +#~ "Update your Bambu Studio could enable all functionality in the 3mf file." +#~ msgstr "" +#~ "Atualizar seu Bambu Studio pode habilitar todas as funcionalidades do " +#~ "arquivo 3mf." + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "A importação para o Orca Slicer falhou. Por favor, baixe o arquivo e " +#~ "importe manualmente." + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Nova Calibração de Dinâmica de Fluxo" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 82ceeb5cfb4..ea2a0c00885 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-05-01 00:42+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 "°" @@ -1809,8 +1812,8 @@ msgstr "По умолчанию" msgid "Filament %d" msgstr "Пруток %d" -msgid "active" -msgstr "активный" +msgid "current" +msgstr "текущий" msgid "Scale to build volume" msgstr "Отмасштабировать под область печати" @@ -1954,6 +1957,12 @@ msgstr "Расставить" msgid "arrange current plate" msgstr "Расстановка моделей на текущем столе" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Автоповорот" @@ -1987,9 +1996,6 @@ msgstr "Сменить пруток" msgid "Set Filament for selected items" msgstr "Задать пруток для выбранных элементов" -msgid "current" -msgstr "текущий" - msgid "Unlock" msgstr "Разблокировать" @@ -2332,9 +2338,6 @@ msgstr "Введите пользовательский G-код для теку msgid "Jump to Layer" msgstr "Перейти к слою" -msgid "Jump to layer" -msgstr "Перейти к слою" - msgid "Please enter the layer number" msgstr "Пожалуйста, введите номер слоя" @@ -2429,11 +2432,11 @@ msgstr "Дозаправка" msgid "AMS not connected" msgstr "АСПП не подключена" -msgid "Load Filament" -msgstr "Загрузить" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Выгрузить" +msgid "Unload" +msgstr "Выгруз." msgid "Ext Spool" msgstr "Внеш. катушка" @@ -2450,7 +2453,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,10 +2495,8 @@ 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" msgstr "Правка" @@ -2982,37 +2983,15 @@ msgstr "Отключить АСПП" msgid "Print with the filament mounted on the back of chassis" msgstr "Печать материалом, установленным на задней части корпуса." -msgid "Cabin humidity" -msgstr "Влажность внутри" - -msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" -msgstr "" -"Зелёный цвет означает, что влажность в системе АСПП нормальная, оранжевый - " -"высокая, красный - слишком высокая. Чем ниже значение гигрометра, тем лучше." - -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.)" +msgid "Current Cabin humidity" 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" @@ -3074,6 +3053,12 @@ msgstr "" "(В настоящее время поддерживается автоматическая дозаправка материала только " "одного производителя, типа и цвета)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Настройки АСПП" @@ -3088,11 +3073,9 @@ 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 "" -"Примечание: если во время печати вставляется новая пластиковая нить, АСПП " -"автоматически считает информацию о ней только по завершению печати." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3145,6 +3128,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 +3209,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 "" + +#, 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 "Неизвестная ошибка при экспорте G-кода." @@ -3231,13 +3267,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-" @@ -3319,6 +3348,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" @@ -3407,31 +3449,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 +3518,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 +3650,6 @@ msgstr "Пауза при ошибке на первом слое" msgid "Nozzle clog pause" msgstr "Пауза при засорении сопла" -msgid "MC" -msgstr "Плата управления" - -msgid "MainBoard" -msgstr "Материнская плата" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Неизвестно" @@ -3794,6 +3824,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 "Введённое значение вне диапазона." @@ -3874,12 +3908,12 @@ msgstr "Видимость" msgid "Flushed" msgstr "Очищено" -msgid "Total" -msgstr "Общее" - msgid "Tower" msgstr "Башня" +msgid "Total" +msgstr "Общее" + msgid "Total Estimation" msgstr "Общая оценка" @@ -3982,6 +4016,12 @@ msgstr "Оценка времени" msgid "Normal mode" msgstr "Нормальный режим" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Время подготовки" @@ -4075,6 +4115,9 @@ msgstr "Параметры расстановки" msgid "Spacing" msgstr "Интервал" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Разрешить вращение при расстановке" @@ -4222,6 +4265,9 @@ msgstr "Автозапись мониторинга" msgid "Go Live" msgstr "Запустить трансляцию" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Разрешение" @@ -4284,6 +4330,9 @@ msgstr "Предпросмотр нарезки" msgid "Device" msgstr "Принтер" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Проект" @@ -4323,6 +4372,9 @@ msgstr "Распечатать все столы" msgid "Send all" msgstr "Отправить G-код всех столов на SD-карту" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Горячие клавиши" @@ -4737,40 +4789,51 @@ 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 "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 "Initialize failed (Missing LAN ip of printer)!" -msgstr "Ошибка инициализации (отсутствует IP-адрес принтера в локальной сети)!" +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 "Остановлено." @@ -4803,16 +4866,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 "Загрузка..." @@ -4864,6 +4926,12 @@ msgstr "Выбрать" msgid "Batch manage files." msgstr "Пакетное управление файлами." +msgid "Refresh" +msgstr "Обновить" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Принтеры отсутствуют." @@ -4874,13 +4942,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?" @@ -4909,11 +4996,11 @@ msgstr "Удалить файл" msgid "Fetching model infomations ..." 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 " @@ -4926,6 +5013,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 "Ожидание загрузки..." @@ -4942,16 +5035,18 @@ 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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -"Устройство не может обработать больше сообщений. Пожалуйста, повторите " -"попытку позже." -msgid "File not exists." -msgstr "Файл не существует." +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Ошибка контрольной суммы файла. Повторите попытку." @@ -5056,6 +5151,9 @@ msgstr "Переключение позиции камеры" msgid "Control" msgstr "Управление" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Настройки печати" @@ -5074,9 +5172,6 @@ msgstr "Выдув" msgid "Bed" msgstr "Стол" -msgid "Unload" -msgstr "Выгруз." - msgid "Debug Info" msgstr "Отладочная информация" @@ -5265,9 +5360,6 @@ msgstr "Статус" msgid "Update" msgstr "Обновление" -msgid "HMS" -msgstr "Здоровье принтера" - msgid "Don't show again" msgstr "Больше не показывать" @@ -5298,6 +5390,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-мышь отключена." @@ -5486,6 +5607,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 "Общие" @@ -5694,9 +5834,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 " @@ -5938,19 +6075,23 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Не удалось импортировать в Orca Slicer. Загрузите файл и импортируйте его " -"вручную." msgid "Import SLA archive" msgstr "Импорт SLA архива" @@ -6031,10 +6172,24 @@ 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 "" + +#, 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 " @@ -6211,6 +6366,21 @@ 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 "" + +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 +6392,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 +6422,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 +6450,29 @@ 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 Studio)." +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 "Сеть" @@ -6485,6 +6696,18 @@ 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 "" + msgid "Plate name" msgstr "Имя печатной пластины" @@ -6494,8 +6717,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 "Последовательность прутков на первом слое" @@ -6682,9 +6911,6 @@ msgstr "Текстурированная PEI пластина Bambu" msgid "Send print job to" msgstr "Отправка задания на печать" -msgid "Refresh" -msgstr "Обновить" - msgid "Bed Leveling" msgstr "" "Выравнивание\n" @@ -6791,8 +7017,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 "" msgid "An SD card needs to be inserted to record timelapse." msgstr "Для записи таймлапсов необходимо вставить SD-карту." @@ -6855,26 +7084,24 @@ 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?" +"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 "" + +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 "" @@ -6902,12 +7129,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 +7183,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 +7226,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 +7405,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" -"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" @@ -7650,30 +7917,37 @@ msgstr "" "Профиль \"%1%\" несовместим с новым профилем принтера, и имеет следующие " "несохранённые изменения:" -#, boost-format +#, boost-format +msgid "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" +msgstr "" +"Профиль \"%1%\" несовместим с новым профилем процесса, и имеет следующие " +"несохранённые изменения:" + +#, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + msgid "" -"Preset \"%1%\" is not compatible with the new process profile and it " -"contains the following unsaved changes:" +"\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 "" -"Профиль \"%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?" +msgid "You have previously modified your settings." msgstr "" -"Вы изменили некоторые параметры профиля \"%1%\". \n" -"Хотите сохранить эти изменения (новые значения)?" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\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 +7982,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 "" "Если включено, это диалоговое окно можно использовать для переноса выбранных " @@ -8181,6 +8455,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 "Подтвердить и обновить сопло" @@ -8802,7 +9112,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 +9409,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 +9511,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 " @@ -9603,11 +9923,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 "Скорость вентилятора" @@ -10017,6 +10338,12 @@ msgstr "" "Безопасное расстояние вокруг экструдера. Используется для предотвращения " "столкновений при печати отдельно стоящих моделей." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "Мин. сетка стола" @@ -10487,6 +10814,9 @@ msgstr "Динам. куб. поддержка" msgid "Lightning" msgstr "Молния" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Длина привязок разреженного заполнения" @@ -10697,17 +11027,17 @@ 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 "Support interface fan speed" msgstr "Скорость вентилятора на связующем слое" @@ -10782,6 +11112,15 @@ 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 "Поддержка движения по дуге окружности" @@ -10942,15 +11281,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-кода" @@ -11720,6 +12059,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 при откате" @@ -12144,9 +12501,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 " @@ -13686,6 +14040,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 +14121,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 +14169,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 +14186,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 "Внутренняя ошибка" @@ -14030,6 +14402,12 @@ 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?" @@ -14128,12 +14506,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Параметры печати" -msgid "- ℃" -msgstr "- ℃" - -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Типа печатной пластины" @@ -14181,12 +14553,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 +14565,9 @@ msgstr "К объёмной скорости" msgid "Flow Dynamics Calibration Result" msgstr "Результаты калибровки динамики потока" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Журнал результатов пуст" @@ -14211,9 +14580,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 "Поиск по сети" @@ -14604,6 +14986,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 "" "При создании некоторых имеющихся профилей произошла ошибка, а именно:\n" @@ -14616,8 +15005,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" @@ -14822,14 +15211,18 @@ 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" +"Studio 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 "Настройка принтера" @@ -14935,6 +15328,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 "Изменение прутка" @@ -15011,6 +15407,17 @@ msgstr "Свернуть" msgid "Daily Tips" 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 "*Печать %s материалом %s может привести к повреждению сопла." + msgid "Need select printer" msgstr "Нужно выбрать принтер" @@ -15209,6 +15616,175 @@ 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 "" + +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 "Соединение с Obico успешно установлено." @@ -15311,9 +15887,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 "" @@ -15646,96 +16221,183 @@ msgstr "" "ABS, повышение температуры подогреваемого стола может снизить эту " "вероятность?" +#~ msgid "Unload Filament" +#~ msgstr "Выгрузить" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Выберите слот АСПП, затем нажмите кнопку «Загрузить» или «Выгрузить» для " +#~ "автоматической загрузки или выгрузки прутка." + +#~ msgid "MC" +#~ msgstr "Плата управления" + +#~ msgid "MainBoard" +#~ msgstr "Материнская плата" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "Здоровье принтера" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Не удалось импортировать в Orca Slicer. Загрузите файл и импортируйте его " +#~ "вручную." + +#~ 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 "" -#~ "Alternate extra wall only works with ensure vertical shell thickness " -#~ "disabled. " +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" #~ 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" +#~ "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" -#~ "Нет - Отказаться от использования альтернативного дополнительного " -#~ "периметра" +#~ "Примечание: при открытой крышке или заменённом влагопоглотителе, может " +#~ "потребоваться несколько часов или ночь для поглощения влаги. Кроме того, " +#~ "процесс может замедлиться из-за низкой температуры окружающей среды. В " +#~ "течение этого времени значения индикатора могут быть неточными." #~ 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." +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." #~ msgstr "" -#~ "Значение максимальной скорости перемещения (machine_max_speed_x/" -#~ "machine_max_speed_y) превышает значение заданное в настройках принтера.\n" -#~ "Программа автоматически ограничит это ускорение, чтобы оно не превышало " -#~ "возможности принтера.\n" -#~ "Если хотите получить более высокие скорости, вы можете изменить это " -#~ "значение в настройках принтера (вкладка «Ограничение принтера»)." +#~ "Примечание: если во время печати вставляется новая пластиковая нить, АСПП " +#~ "автоматически считает информацию о ней только по завершению печати." + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Файл G-кода экспортирован в %1%" -#~ msgid "Bridge counterbole holes" -#~ msgstr "Мост для зенкованных отверстий" +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Ошибка инициализации (устройство не обнаружено)!" -#~ msgid "Studio Version:" -#~ msgstr "Версия программы:" +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Ошибка инициализации (камера не обнаружена)!" -#~ msgid "Test BambuLab" -#~ msgstr "Тест BambuLab" +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "Принтер занят загрузкой. Дождитесь завершения загрузки." -#~ msgid "Test BambuLab:" -#~ msgstr "Тест BambuLab:" +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "Ошибка инициализации (не поддерживается в текущей версии принтера)!" -#~ msgid "Test HTTP" -#~ msgstr "Тест HTTP" +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Ошибка инициализации (Недоступно в режиме «Только LAN»)!" -#~ msgid "Test HTTP Service:" -#~ msgstr "Тест HTTP сервера:" +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "" +#~ "Ошибка инициализации (отсутствует IP-адрес принтера в локальной сети)!" -#~ msgid "Test storage" -#~ msgstr "Тест накопителя" +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Остановлено [%d]!" -#~ msgid "Test Storage Upload:" -#~ msgstr "Тест накопителя (отправка):" +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Ошибка загрузки [%d]!" -#~ msgid "Test storage upgrade" -#~ msgstr "Тест накопителя (обновление)" +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Файлы отсутствуют [%d]" -#~ msgid "Test Storage Upgrade:" -#~ msgstr "Тест накопителя (обновление):" +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Ошибка загрузки [%d]" -#~ msgid "Test storage download" -#~ msgstr "Тест накопителя (загрузка)" +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Не удалось получить информацию о модели с принтера." -#~ msgid "Test Storage Download:" -#~ msgstr "Тест накопителя (загрузка):" +#~ msgid "Failed to parse model infomations." +#~ msgstr "Не удалось проанализировать информацию о модели." -#~ msgid "Test plugin download" -#~ msgstr "Тест загрузки плагина" +#~ msgid "Connection lost. Please retry." +#~ msgstr "Соединение потеряно. Пожалуйста, повторите попытку." -#~ msgid "Test Plugin Download:" -#~ msgstr "Тест загрузки плагина:" +#~ msgid "File not exists." +#~ msgstr "Файл не существует." -#~ msgid "Test Storage Upload" -#~ msgstr "Тест накопителя (отправка)" +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "" +#~ "Невозможно выполнить булевы операции над сетками модели. Будут " +#~ "экспортированы только положительные части." -#~ msgid "AMS %s" -#~ msgstr "АСПП №%s" +#, 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 "Left Preset Value" -#~ msgstr "Значение в левом профиле" +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Вы изменили некоторые параметры профиля.\n" +#~ "Хотите сохранить эти изменения (новые значения)?" -#~ msgid "Right Preset Value" -#~ msgstr "Значение в правом профиле" +#~ msgid " ℃" +#~ msgstr " ℃" -#~ msgid "Undef category" -#~ 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 "Undef group" -#~ msgstr "Неопределённая группа" +#~ msgid "AMS %s" +#~ msgstr "АСПП №%s" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 656fca2e4e9..edc30815c76 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -252,6 +252,9 @@ msgstr "Återställ Rotation" msgid "World coordinates" msgstr "Världskoordinater" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1745,8 +1748,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" @@ -1889,6 +1892,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 +1931,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" @@ -2261,9 +2267,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." @@ -2357,10 +2360,10 @@ msgstr "" msgid "AMS not connected" msgstr "AMS ej ansluten" -msgid "Load Filament" -msgstr "Ladda Filament" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "Mata ut" msgid "Ext Spool" @@ -2378,7 +2381,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" @@ -2419,10 +2422,8 @@ 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." msgid "Edit" msgstr "Redigera" @@ -2898,37 +2899,15 @@ 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 "" -"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.)" +msgid "Current Cabin humidity" 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." +"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 "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -2979,6 +2958,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS Inställningar" @@ -2993,11 +2978,9 @@ 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." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3048,6 +3031,14 @@ 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 "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fil" @@ -3119,6 +3110,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 "" + +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 +3168,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." @@ -3218,6 +3247,19 @@ 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 "" + +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" @@ -3300,25 +3342,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 +3401,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 "" + +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" @@ -3483,18 +3525,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Moderkort" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "X Kamera" - msgid "Unknown" msgstr "Okänd" @@ -3654,6 +3684,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 "" + msgid "Value is out of range." msgstr "Värdet är utanför intervallet." @@ -3734,12 +3768,12 @@ msgstr "Visa" msgid "Flushed" msgstr "Rensad" -msgid "Total" -msgstr "Totalt" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "Totalt" + msgid "Total Estimation" msgstr "Total Uppskattning" @@ -3842,6 +3876,12 @@ msgstr "Beräknad tid" msgid "Normal mode" msgstr "Normalt läge" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Förbered tid" @@ -3935,6 +3975,9 @@ msgstr "Arrangera val" msgid "Spacing" msgstr "Mellanrum" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Auto rotera för arrangemang" @@ -4079,6 +4122,9 @@ msgstr "Automatisk inspelning av övervakning" msgid "Go Live" msgstr "Sänd live" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Upplösning" @@ -4140,6 +4186,9 @@ msgstr "Förhandsvisning" msgid "Device" msgstr "Enhet" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projekt" @@ -4179,6 +4228,9 @@ msgstr "Skriv ut allt" msgid "Send all" msgstr "Skicka alla" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Kortkommando" @@ -4586,41 +4638,49 @@ 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 "" -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initieringen misslyckades (Enhets anslutningen är inte klar)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" + +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" + +msgid "Please confirm if the printer is connected." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "Initieringen misslyckades (ingen kamera enhet)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Printer camera is malfunctioning." msgstr "" -"Skrivaren är upptagen med att ladda ner; vänta tills nedladdningen är klar." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Problem occured. Please update the printer firmware and try again." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initieringen misslyckades (Ej tillgängligt i endast LAN-läge)!" +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initieringen misslyckades (skrivarens LAN-IP saknas)!" +msgid "Please enter the IP of printer to connect." +msgstr "" 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 "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Stoppad [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Avbruten." @@ -4651,16 +4711,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..." @@ -4712,6 +4771,12 @@ msgstr "Välj" msgid "Batch manage files." msgstr "Batch hantera filer." +msgid "Refresh" +msgstr "Uppdatera" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Ingen printer." @@ -4722,13 +4787,32 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "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,11 +4834,11 @@ 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 "" -msgid "Failed to parse model infomations." -msgstr "Det gick inte att analysera modellinformation" +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4765,6 +4849,12 @@ 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 "" + msgid "Download waiting..." msgstr "Nedladdning väntar..." @@ -4781,13 +4871,17 @@ 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 "" -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4891,6 +4985,9 @@ msgstr "" msgid "Control" msgstr "Kontroll" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Utskriftsalternativ" @@ -4909,9 +5006,6 @@ msgstr "Kammare" msgid "Bed" msgstr "Byggplattan" -msgid "Unload" -msgstr "Mata ut" - msgid "Debug Info" msgstr "Felsöknings Information" @@ -5081,9 +5175,6 @@ msgstr "Status" msgid "Update" msgstr "Uppdatera" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Visa inte igen" @@ -5114,6 +5205,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 "" + +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 mus bortkopplad." @@ -5299,6 +5419,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 "Global" @@ -5497,9 +5636,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 " @@ -5731,15 +5867,21 @@ msgstr "Importerar Modell" msgid "prepare 3mf file..." msgstr "förbereder 3mf-filen..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "laddar ner projekt ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projektet har laddats ned %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5822,10 +5964,24 @@ 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 "" -"Det går inte att utföra booleska operationer på modell mesh. Endast positiva " -"delar kommer att exporteras." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -5990,6 +6146,21 @@ 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 "" + +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 +6170,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 +6198,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 "" @@ -6033,6 +6222,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 Studio)." +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 "" @@ -6251,6 +6463,18 @@ msgstr "Inkompatibel" 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 "" + msgid "Plate name" msgstr "Plattans namn" @@ -6260,9 +6484,15 @@ msgstr "Samma som Global Utskrifts Sekvens" msgid "Print sequence" msgstr "Utskrifts sekvens" -msgid "Customize" +msgid "Same as Global" msgstr "" +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "Spiral vas" + msgid "First layer filament sequence" msgstr "" @@ -6446,9 +6676,6 @@ msgstr "" msgid "Send print job to" msgstr "Skicka utskriftsjobb till" -msgid "Refresh" -msgstr "Uppdatera" - msgid "Bed Leveling" msgstr "Justering av Byggplattan" @@ -6546,7 +6773,10 @@ 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 "" msgid "An SD card needs to be inserted to record timelapse." @@ -6607,24 +6837,24 @@ 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?" +"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 "" - msgid "" -"Please click the confirm button if you still want to proceed with printing." +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" msgstr "" -"Klicka på knappen Bekräfta om du fortfarande vill fortsätta med utskriften." -msgid "Hardened Steel" +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" -msgid "Stainless Steel" +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 "" "Connecting to the printer. Unable to cancel during the connection process." @@ -6650,12 +6880,18 @@ msgstr "" msgid "Modifying the device name" msgstr "Ändra enhetens namn" +msgid "Bind with Pin Code" +msgstr "" + 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 "" + 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." @@ -6698,6 +6934,26 @@ 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 "" + +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 "Logga in skrivare" @@ -6888,6 +7144,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" @@ -7375,22 +7645,28 @@ msgstr "" "innehåller följande osparade ändringar:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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 "" -"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?" +"\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 "" -"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 +7697,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 "" @@ -7853,27 +8129,63 @@ msgstr "Meddelande om utgåvan" msgid "version %s update information :" msgstr "version %s uppdaterings information:" -msgid "Network plug-in update" -msgstr "Uppdatering av nätverks plugin" +msgid "Network plug-in update" +msgstr "Uppdatering av nätverks plugin" + +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "" +"Klicka på OK för att uppdatera Nätverks plugin programmet nästa gång Bambu " +"Studio startar." + +#, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "En ny nätverksplugin (%s) är tillgänglig. Vill du installera den?" + +msgid "New version of Orca Slicer" +msgstr "Ny version av Orca Slicer" + +msgid "Skip this Version" +msgstr "" + +msgid "Done" +msgstr "Klar" + +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 "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgid "Filament Extruded, Continue" msgstr "" -"Klicka på OK för att uppdatera Nätverks plugin programmet nästa gång Bambu " -"Studio startar." -#, c-format, boost-format -msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "En ny nätverksplugin (%s) är tillgänglig. Vill du installera den?" +msgid "Not Extruded Yet, Retry" +msgstr "" -msgid "New version of Orca Slicer" -msgstr "Ny version av Orca Slicer" +msgid "Finished, Continue" +msgstr "" -msgid "Skip this Version" +msgid "Load Filament" +msgstr "Ladda Filament" + +msgid "Filament Loaded, Resume" msgstr "" -msgid "Done" -msgstr "Klar" +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "" @@ -8705,6 +9017,15 @@ msgstr "Engineering Plate" 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 "Denna G-kod används för varje lager innan Z axis lyfts" @@ -9444,6 +9765,12 @@ msgstr "" "Frigångsradie runt extrudern: används för att undvika kollisioner vid " "utskrift av flera objekt." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9841,6 +10168,9 @@ msgstr "Kubik Support" msgid "Lightning" msgstr "Blixt" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10084,6 +10414,15 @@ msgstr "" "Hastigheten för fyllning av mellanrum. Mellanrum har vanligtvis oregelbunden " "linjebredd och bör skrivas ut långsammare" +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 "Arc passning" @@ -10883,6 +11222,24 @@ 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 "" + +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 hopp vid retraktion" @@ -11225,9 +11582,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 " @@ -12571,6 +12925,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 "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Filen innehåller polygoner med fler än 4 hörn." @@ -12646,12 +13003,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 "" - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -12693,6 +13044,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 "" @@ -12702,6 +13061,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 "" @@ -12831,6 +13203,12 @@ msgstr "" msgid "Failed" msgstr "Misslyckades" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to overrides the other results?" @@ -12921,12 +13299,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Typ av byggplatta" @@ -12970,12 +13342,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 "" @@ -12988,6 +13354,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13000,9 +13369,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 "" @@ -13367,6 +13749,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 "" @@ -13558,10 +13947,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -13650,6 +14048,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 "" @@ -13720,6 +14121,15 @@ msgstr "" msgid "Daily Tips" 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 "" @@ -13899,6 +14309,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 "" @@ -14271,6 +14850,146 @@ msgid "" "probability of warping." msgstr "" +#~ 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 " #~ "thickness (top+bottom solid layers)" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index b4417e90195..65a60b1c715 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -2,8 +2,8 @@ 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-29 21:50+0300\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" +"PO-Revision-Date: 2024-05-02 19:55+0300\n" "Last-Translator: Olcay ÖREN\n" "Language-Team: \n" "Language: tr\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" msgstr "Destek Boyama" @@ -255,6 +255,9 @@ msgstr "Döndürmeyi Sıfırla" msgid "World coordinates" msgstr "Dünya koordinatları" +msgid "Object coordinates" +msgstr "Nesne koordinatları" + msgid "°" msgstr "°" @@ -495,14 +498,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ş" @@ -724,8 +727,8 @@ msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." msgstr "" -"Metin seçilen yazı tipi kullanılarak yazılamıyor. Lütfen farklı bir yazı " -"tipi seçmeyi deneyin." +"Metin seçilen yazı tipi kullanılarak yazılamıyor. Lütfen farklı bir yazı tipi " +"seçmeyi deneyin." msgid "Embossed text cannot contain only white spaces." msgstr "Kabartmalı metin yalnızca beyaz boşluklardan oluşamaz." @@ -1006,15 +1009,15 @@ msgstr "Metni kameraya doğru yönlendirin." #, boost-format msgid "" -"Can't load exactly same font(\"%1%\"). Aplication selected a similar " -"one(\"%2%\"). You have to specify font for enable edit text." +"Can't load exactly same font(\"%1%\"). Aplication selected a similar one(\"%2%" +"\"). You have to specify font for enable edit text." msgstr "" -"Tam olarak aynı yazı tipi yüklenemiyor(\"%1%\"). Uygulama benzer bir " -"uygulama seçti(\"%2%\"). Metni düzenlemeyi etkinleştirmek için yazı tipini " -"belirtmeniz gerekir." +"Tam olarak aynı yazı tipi yüklenemiyor(\"%1%\"). Uygulama benzer bir uygulama " +"seçti(\"%2%\"). Metni düzenlemeyi etkinleştirmek için yazı tipini belirtmeniz " +"gerekir." msgid "No symbol" -msgstr "No symbol" +msgstr "Sembol yok" msgid "Loading" msgstr "Yükleniyor" @@ -1100,13 +1103,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ü" @@ -1133,22 +1136,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" @@ -1201,9 +1204,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." @@ -1246,21 +1249,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ı" @@ -1296,7 +1299,7 @@ msgid "Select point" msgstr "Nokta seç" msgid "Delete" -msgstr "Sil" +msgstr "Delete" msgid "Restart selection" msgstr "Seçimi sıfırla" @@ -1466,8 +1469,8 @@ msgstr "Bilgi" msgid "" "The OrcaSlicer configuration file may be corrupted and cannot be parsed.\n" "OrcaSlicer has attempted to recreate the configuration file.\n" -"Please note, application settings will be lost, but printer profiles will " -"not be affected." +"Please note, application settings will be lost, but printer profiles will not " +"be affected." msgstr "" "OrcaSlicer konfigürasyon dosyası bozulmuş olabilir ve ayrıştırılamayabilir.\n" "OrcaSlicer, konfigürasyon dosyasını yeniden oluşturmayı denedi.\n" @@ -1795,8 +1798,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" @@ -1937,13 +1940,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" @@ -1972,9 +1981,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ç" @@ -2080,8 +2086,8 @@ msgid "" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed .\n" "\n" -"To manipulate with solid parts or negative volumes you have to invalidate " -"cut infornation first." +"To manipulate with solid parts or negative volumes you have to invalidate cut " +"infornation first." msgstr "" "Bu eylem kesilmiş bir yazışmayı bozacaktır.\n" "Bundan sonra model tutarlılığı garanti edilemez.\n" @@ -2144,8 +2150,7 @@ msgstr "İlk seçilen öğe bir nesne ise ikincisi de nesne olmalıdır." msgid "" "If first selected item is a part, the second one should be part in the same " "object." -msgstr "" -"İlk seçilen öğe bir parça ise ikincisi aynı nesnenin parçası olmalıdır." +msgstr "İlk seçilen öğe bir parça ise ikincisi aynı nesnenin parçası olmalıdır." msgid "The type of the last solid object part is not to be changed." msgstr "Son katı nesne parçasının tipi değiştirilNozullidir." @@ -2302,9 +2307,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" @@ -2399,11 +2401,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" @@ -2420,7 +2422,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." @@ -2462,10 +2464,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" @@ -2505,16 +2507,14 @@ msgstr "" msgid "Arranging done." msgstr "Hizalama tamamlandı." -msgid "" -"Arrange failed. Found some exceptions when processing object geometries." +msgid "Arrange failed. Found some exceptions when processing object geometries." msgstr "" "Hizalama başarısız oldu. Nesne geometrilerini işlerken bazı istisnalar " "bulundu." #, c-format, boost-format msgid "" -"Arrangement ignored the following objects which can't fit into a single " -"bed:\n" +"Arrangement ignored the following objects which can't fit into a single bed:\n" "%s" msgstr "" "Hizalama tek tablaya sığmayan aşağıdaki nesneler göz ardı edildi:\n" @@ -2614,8 +2614,7 @@ msgstr "" "deneyin." msgid "Print file not found, Please slice it again and send it for printing." -msgstr "" -"Yazdırma dosyası bulunamadı. Lütfen tekrar dilimleyip baskıya gönderin." +msgstr "Yazdırma dosyası bulunamadı. Lütfen tekrar dilimleyip baskıya gönderin." msgid "" "Failed to upload print file to FTP. Please check the network status and try " @@ -2671,8 +2670,8 @@ msgid "Importing SLA archive" msgstr "SLA arşivi içe aktarılıyor" msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." +"The SLA archive doesn't contain any presets. Please activate some SLA printer " +"preset first before importing that SLA archive." msgstr "" "SLA arşivi herhangi bir ön ayar içermez. Lütfen SLA arşivini içe aktarmadan " "önce bazı SLA yazıcı ön ayarlarını etkinleştirin." @@ -2684,8 +2683,8 @@ msgid "Importing done." msgstr "İçe aktarma tamamlandı." msgid "" -"The imported SLA archive did not contain any presets. The current SLA " -"presets were used as fallback." +"The imported SLA archive did not contain any presets. The current SLA presets " +"were used as fallback." msgstr "" "İçe aktarılan SLA arşivi herhangi bir ön ayar içermiyordu. Geçerli SLA ön " "ayarları geri dönüş olarak kullanıldı." @@ -2733,13 +2732,13 @@ 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" +"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" +"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 "Libraries" msgstr "Kütüphaneler" @@ -2748,8 +2747,8 @@ msgid "" "This software uses open source components whose copyright and other " "proprietary rights belong to their respective owners" msgstr "" -"Bu yazılım, telif hakkı ve diğer mülkiyet hakları ilgili sahiplerine ait " -"olan açık kaynaklı bileşenleri kullanır" +"Bu yazılım, telif hakkı ve diğer mülkiyet hakları ilgili sahiplerine ait olan " +"açık kaynaklı bileşenleri kullanır" #, c-format, boost-format msgid "About %s" @@ -2763,8 +2762,7 @@ msgstr "OrcaSlicer, BambuStudio, PrusaSlicer ve SuperSlicer'ı temel alır." msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." msgstr "" -"BambuStudio orijinal olarak PrusaResearch'ün PrusaSlicer'ını temel " -"almaktadır." +"BambuStudio orijinal olarak PrusaResearch'ün PrusaSlicer'ını temel almaktadır." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "" @@ -2801,10 +2799,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%" @@ -2853,9 +2851,9 @@ msgid "Dynamic flow calibration" msgstr "Dinamik akış kalibrasyonu" msgid "" -"The nozzle temp and max volumetric speed will affect the calibration " -"results. Please fill in the same values as the actual printing. They can be " -"auto-filled by selecting a filament preset." +"The nozzle temp and max volumetric speed will affect the calibration results. " +"Please fill in the same values as the actual printing. They can be auto-" +"filled by selecting a filament preset." msgstr "" "Nozul sıcaklığı ve maksimum hacimsel hız kalibrasyon sonuçlarını " "etkileyecektir. Lütfen gerçek yazdırmayla aynı değerleri girin. Bir filament " @@ -2945,37 +2943,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" @@ -3008,8 +2988,7 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" -"Mevcut malzeme bittiğinde yazıcı aşağıdaki sırayla yazdırmaya devam " -"edecektir." +"Mevcut malzeme bittiğinde yazıcı aşağıdaki sırayla yazdırmaya devam edecektir." msgid "Group" msgstr "Grup" @@ -3034,6 +3013,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ı" @@ -3041,17 +3026,17 @@ msgid "Insertion update" msgstr "Ekleme güncellemesi" msgid "" -"The AMS will automatically read the filament information when inserting a " -"new Bambu Lab filament. This takes about 20 seconds." +"The AMS will automatically read the filament information when inserting a new " +"Bambu Lab filament. This takes about 20 seconds." msgstr "" "AMS, yeni bir Bambu Lab filamenti takıldığında filament bilgilerini otomatik " "olarak okuyacaktır. Bu yaklaşık 20 saniye sürer." 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 "" @@ -3065,17 +3050,16 @@ msgid "Power on update" msgstr "Güncellemeyi aç" msgid "" -"The AMS will automatically read the information of inserted filament on " -"start-up. It will take about 1 minute.The reading process will roll filament " -"spools." +"The AMS will automatically read the information of inserted filament on start-" +"up. It will take about 1 minute.The reading process will roll filament spools." msgstr "" "AMS, başlangıçta takılan filamentin bilgilerini otomatik olarak okuyacaktır. " "Yaklaşık 1 dakika sürecektir. Okuma işlemi filament makaralarını saracaktır." msgid "" -"The AMS will not automatically read information from inserted filament " -"during startup and will continue to use the information recorded before the " -"last shutdown." +"The AMS will not automatically read information from inserted filament during " +"startup and will continue to use the information recorded before the last " +"shutdown." msgstr "" "AMS, başlatma sırasında takılan filamentden bilgileri otomatik olarak okumaz " "ve son kapatmadan önce kaydedilen bilgileri kullanmaya devam eder." @@ -3089,8 +3073,8 @@ msgid "" "automatically." msgstr "" "AMS, filament bilgisi güncellendikten sonra Bambu filamentin kalan " -"kapasitesini tahmin edecek. Yazdırma sırasında kalan kapasite otomatik " -"olarak güncellenecektir." +"kapasitesini tahmin edecek. Yazdırma sırasında kalan kapasite otomatik olarak " +"güncellenecektir." msgid "AMS filament backup" msgstr "AMS filament yedeklemesi" @@ -3102,6 +3086,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" @@ -3112,8 +3106,8 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Eklenti indirilemedi. Lütfen güvenlik duvarı ayarlarınızı ve vpn " -"yazılımınızı kontrol edin, kontrol edip yeniden deneyin." +"Eklenti indirilemedi. Lütfen güvenlik duvarı ayarlarınızı ve vpn yazılımınızı " +"kontrol edin, kontrol edip yeniden deneyin." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " @@ -3175,6 +3169,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." @@ -3188,13 +3239,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" @@ -3205,7 +3249,7 @@ msgstr "" "Sırasını Yazdır" 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ı." @@ -3269,6 +3313,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" @@ -3295,13 +3355,13 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe temperature,it " +"may result in material softening and clogging.The maximum safe temperature " +"for the material is %d" msgstr "" -"Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksektir, " -"malzemenin yumuşamasına ve tıkanmasına neden olabilir Malzeme için maksimum " -"güvenli sıcaklık %d'dir" +"Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksektir, malzemenin " +"yumuşamasına ve tıkanmasına neden olabilir Malzeme için maksimum güvenli " +"sıcaklık %d'dir" msgid "" "Too small layer height.\n" @@ -3355,38 +3415,16 @@ msgstr "" "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. " +"Alternate extra wall does't work well when ensure vertical shell thickness is " +"set to All. " msgstr "" -"Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak " -"ayarlandığından emin olunduğunda iyi çalışmaz. " +"Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak ayarlandığından " +"emin olunduğunda iyi çalışmaz. " msgid "" "Change these settings automatically? \n" -"Yes - Change ensure vertical shell thickness to Moderate and enable " -"alternate extra wall\n" +"Yes - Change ensure vertical shell thickness to Moderate and enable alternate " +"extra wall\n" "No - Dont use alternate extra wall" msgstr "" "Bu ayarlar otomatik olarak değiştirilsin mi? \n" @@ -3441,9 +3479,31 @@ 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" @@ -3549,18 +3609,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" @@ -3586,9 +3634,9 @@ msgid "Update failed." msgstr "Güncelleme başarısız." msgid "" -"The current chamber temperature or the target chamber temperature exceeds " -"45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" -"TPU) is not allowed to be loaded." +"The current chamber temperature or the target chamber temperature exceeds 45℃." +"In order to avoid extruder clogging,low temperature filament(PLA/PETG/TPU) is " +"not allowed to be loaded." msgstr "" "Mevcut hazne sıcaklığı veya hedef hazne sıcaklığı 45 ° C'yi aşıyor Ekstruder " "tıkanmasını önlemek için düşük sıcaklıkta filament (PLA / PETG / TPU) " @@ -3615,8 +3663,7 @@ msgstr "" msgid "Failed to start printing job" msgstr "Yazdırma işi başlatılamadı" -msgid "" -"This calibration does not support the currently selected nozzle diameter" +msgid "This calibration does not support the currently selected nozzle diameter" msgstr "Bu kalibrasyon, şu anda seçilen nozzle çapını desteklememektedir" msgid "Current flowrate cali param is invalid" @@ -3641,12 +3688,12 @@ msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." msgstr "" -"Nemli PVA esnekleşecek ve AMS'nin içine sıkışacaktır, lütfen kullanmadan " -"önce kurutmaya dikkat edin." +"Nemli PVA esnekleşecek ve AMS'nin içine sıkışacaktır, lütfen kullanmadan önce " +"kurutmaya dikkat edin." msgid "" -"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " -"AMS, please use with caution." +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, " +"please use with caution." msgstr "" "CF/GF filamentleri sert ve kırılgandır. AMS'de kırılması veya sıkışması " "kolaydır, lütfen dikkatli kullanın." @@ -3733,6 +3780,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." @@ -3813,12 +3864,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" @@ -3921,6 +3972,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" @@ -4014,6 +4071,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" @@ -4160,6 +4220,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" @@ -4219,7 +4282,10 @@ msgid "Preview" msgstr "Ön İzleme" msgid "Device" -msgstr "Yazıcı" +msgstr "Cihaz" + +msgid "Multi-device" +msgstr "Çoklu cihaz" msgid "Project" msgstr "Proje" @@ -4228,7 +4294,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 "" @@ -4261,6 +4327,9 @@ msgstr "Tümünü yazdır" msgid "Send all" msgstr "Hepsini gönder" +msgid "Send to Multi-device" +msgstr "Çoklu cihaza gönder" + msgid "Keyboard Shortcuts" msgstr "Klavye kısayolları" @@ -4642,8 +4711,8 @@ msgstr[1] "" msgid "" "\n" -"Hint: Make sure you have added the corresponding printer before importing " -"the configs." +"Hint: Make sure you have added the corresponding printer before importing the " +"configs." msgstr "" "\n" "İpucu: Yapılandırmaları içe aktarmadan önce ilgili yazıcıyı eklediğinizden " @@ -4677,41 +4746,55 @@ msgstr "" msgid "Synchronization" msgstr "Senkronizasyon" -msgid "Initialize failed (No Device)!" -msgstr "Başlatma başarısız (Cihaz Yok)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "" +"Cihaz daha fazla konuşmayı yönetemiyor. Lütfen daha sonra tekrar deneyin." + +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 (Device connection not ready)!" -msgstr "Başlatma başarısız oldu (Cihaz bağlantısı hazır değil)!" +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 (No Camera Device)!" -msgstr "Başlatma başarısız oldu (Kamera Cihazı Yok)!" +msgid "Please confirm if the printer is connected." +msgstr "Lütfen yazıcının bağlı olup olmadığını onaylayın." -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "" +"The printer is currently busy downloading. Please try again after it finishes." msgstr "" -"Yazıcı indirme işlemiyle meşgul. Lütfen indirme işleminin bitmesini bekleyin." +"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 "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 "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 "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Başlatma başarısız oldu (Yalnızca LAN modunda erişilemez)!" +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 "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 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." @@ -4742,16 +4825,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..." @@ -4803,6 +4885,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." @@ -4813,13 +4901,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?" @@ -4827,8 +4937,7 @@ msgid_plural "" "You are going to delete %u files from printer. Are you sure to continue?" msgstr[0] "" "%u dosyasını yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" -msgstr[1] "" -"%u dosyayı yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" +msgstr[1] "%u dosyayı yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" msgid "Delete files" msgstr "Dosyaları sil" @@ -4843,10 +4952,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 "" @@ -4860,6 +4969,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..." @@ -4876,15 +4993,22 @@ msgstr "İndirme tamamlandı" msgid "Downloading %d%%..." msgstr "%d%% indiriliyor..." -msgid "Connection lost. Please retry." -msgstr "Bağlantı koptu. Lütfen tekrar deneyiniz." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"Yazıcıyı yeniden bağladığınızda işlem hemen tamamlanamıyor, lütfen daha sonra " +"tekrar deneyin." -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -"Cihaz daha fazla konuşmayı yönetemiyor. Lütfen daha sonra tekrar deneyin." +"4’ten fazla sistem/kullanışlı uzaktan erişimi kullanıyor, bazılarını kapatıp " +"tekrar deneyebilirsiniz." -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." @@ -4970,8 +5094,8 @@ msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" msgstr "" -"(Model zaten derecelendirilmiştir. Derecelendirmeniz önceki " -"derecelendirmenin üzerine yazılacaktır)" +"(Model zaten derecelendirilmiştir. Derecelendirmeniz önceki derecelendirmenin " +"üzerine yazılacaktır)" msgid "Rate" msgstr "Derecelendir" @@ -4991,6 +5115,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" @@ -5004,14 +5131,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" @@ -5198,9 +5322,6 @@ msgstr "Durum" msgid "Update" msgstr "Güncelle" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Bir daha gösterme" @@ -5231,6 +5352,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." @@ -5417,6 +5570,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" @@ -5511,8 +5685,8 @@ msgstr "Arama plakası, nesne ve parça." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"AMS filamentleri yok. AMS bilgilerini yüklemek için lütfen 'Cihaz' " -"sayfasında bir yazıcı seçin." +"AMS filamentleri yok. AMS bilgilerini yüklemek için lütfen 'Cihaz' sayfasında " +"bir yazıcı seçin." msgid "Sync filaments with AMS" msgstr "Filamentleri AMS ile senkronize et" @@ -5525,8 +5699,7 @@ msgstr "" "ayarlarını ve renklerini kaldıracaktır. Devam etmek istiyor musun?" msgid "" -"Already did a synchronization, do you want to sync only changes or resync " -"all?" +"Already did a synchronization, do you want to sync only changes or resync all?" msgstr "" "Zaten bir senkronizasyon yaptınız. Yalnızca değişiklikleri senkronize etmek " "mi yoksa tümünü yeniden senkronize etmek mi istiyorsunuz?" @@ -5541,13 +5714,13 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "Uyumlu filament yok ve senkronizasyon gerçekleştirilmiyor." msgid "" -"There are some unknown filaments mapped to generic preset. Please update " -"Orca Slicer or restart Orca Slicer to check if there is an update to system " +"There are some unknown filaments mapped to generic preset. Please update Orca " +"Slicer or restart Orca Slicer to check if there is an update to system " "presets." msgstr "" -"Genel ön ayara eşlenen bazı bilinmeyen filamentler var. Sistem ön " -"ayarlarında bir güncelleme olup olmadığını kontrol etmek için lütfen Orca " -"Slicer'ı güncelleyin veya Orca Slicer'ı yeniden başlatın." +"Genel ön ayara eşlenen bazı bilinmeyen filamentler var. Sistem ön ayarlarında " +"bir güncelleme olup olmadığını kontrol etmek için lütfen Orca Slicer'ı " +"güncelleyin veya Orca Slicer'ı yeniden başlatın." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -5572,13 +5745,13 @@ msgid "Restore" msgstr "Geri Yükleme" msgid "" -"The current hot bed temperature is relatively high. The nozzle may be " -"clogged when printing this filament in a closed enclosure. Please open the " -"front door and/or remove the upper glass." +"The current hot bed temperature is relatively high. The nozzle may be clogged " +"when printing this filament in a closed enclosure. Please open the front door " +"and/or remove the upper glass." msgstr "" -"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti kapalı bir " -"muhafaza içinde bastırırken nozzle tıkanabilir. Lütfen ön kapağı açın ve/" -"veya üst camı çıkarın." +"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti kapalı bir muhafaza " +"içinde bastırırken nozzle tıkanabilir. Lütfen ön kapağı açın ve/veya üst camı " +"çıkarın." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5625,9 +5798,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 " @@ -5644,8 +5814,8 @@ msgstr "Lütfen bunları parametre sekmelerinde düzeltin" msgid "The 3mf has following modified G-codes in filament or printer presets:" msgstr "" -"3mf dosyasında filament veya yazıcı ön ayarlarında şu değiştirilmiş G-" -"kodları bulunmaktadır:" +"3mf dosyasında filament veya yazıcı ön ayarlarında şu değiştirilmiş G-kodları " +"bulunmaktadır:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " @@ -5863,19 +6033,25 @@ 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" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Orca Slicer'ya aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel " -"olarak İçe aktarın." +"Bambu Studio’ya içe aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel " +"olarak içe aktarın." msgid "Import SLA archive" msgstr "SLA arşivini içe aktar" @@ -5950,18 +6126,34 @@ msgstr "Dilimlenmiş dosyayı şu şekilde kaydedin:" #, c-format, boost-format msgid "" -"The file %s has been sent to the printer's storage space and can be viewed " -"on the printer." +"The file %s has been sent to the printer's storage space and can be viewed on " +"the printer." msgstr "" "%s dosyası yazıcının depolama alanına gönderildi ve yazıcıda " "görüntülenebiliyor." msgid "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be exported." +"Unable to perform boolean operation on model meshes. Only positive parts 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 " @@ -6056,8 +6248,8 @@ msgstr "" #, c-format, boost-format msgid "" "Plate% d: %s is not suggested to be used to print filament %s(%s). If you " -"still want to do this printing, please set this filament's bed temperature " -"to non zero." +"still want to do this printing, please set this filament's bed temperature to " +"non zero." msgstr "" "Plaka% d: %s'nin %s(%s) filamentinı yazdırmak için kullanılması önerilmez. " "Eğer yine de bu baskıyı yapmak istiyorsanız, lütfen bu filamentin yatak " @@ -6132,6 +6324,27 @@ 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" @@ -6141,8 +6354,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 " @@ -6159,6 +6387,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" @@ -6177,6 +6412,34 @@ 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 Studio)." +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ğ" @@ -6240,8 +6503,8 @@ msgstr "Otomatik yedekleme" msgid "" "Backup your project periodically for restoring from the occasional crash." msgstr "" -"Ara sıra meydana gelen çökmelerden sonra geri yüklemek için projenizi " -"düzenli aralıklarla yedekleyin." +"Ara sıra meydana gelen çökmelerden sonra geri yüklemek için projenizi düzenli " +"aralıklarla yedekleyin." msgid "every" msgstr "her" @@ -6399,6 +6662,18 @@ 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ı" @@ -6408,14 +6683,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ı" @@ -6427,7 +6708,7 @@ msgid "By Object" msgstr "Nesneye göre" msgid "Accept" -msgstr "Kabul etmek" +msgstr "Kabul et" msgid "Log Out" msgstr "Çıkış" @@ -6591,9 +6872,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" @@ -6613,8 +6891,7 @@ 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" +msgstr "Oturum açma hesabı yok, yalnızca LAN modundaki yazıcılar görüntüleniyor" msgid "Connecting to server" msgstr "Sunucuya baglanıyor" @@ -6682,8 +6959,7 @@ msgstr "" "desteklemek için lütfen yazıcının ürün yazılımını güncelleyin." msgid "" -"The printer firmware only supports sequential mapping of filament => AMS " -"slot." +"The printer firmware only supports sequential mapping of filament => AMS slot." msgstr "" "Yazıcı ürün yazılımı yalnızca filament => AMS yuvasının sıralı eşlemesini " "destekler." @@ -6691,8 +6967,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." @@ -6739,8 +7020,8 @@ msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " -"they are the required filaments. If they are okay, press \"Confirm\" to " -"start printing." +"they are the required filaments. If they are okay, press \"Confirm\" to start " +"printing." msgstr "" "AMS eşlemelerinde bazı bilinmeyen filamentler var. Lütfen bunların gerekli " "filamentler olup olmadığını kontrol edin. Sorun yoksa, yazdırmayı başlatmak " @@ -6755,15 +7036,24 @@ 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?" +"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." @@ -6771,12 +7061,6 @@ 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." @@ -6803,12 +7087,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." @@ -6851,6 +7141,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ç" @@ -6901,11 +7213,11 @@ msgid "" "successes and failures of the vast number of prints by our users. We are " "training %s to be smarter by feeding them the real-world data. If you are " "willing, this service will access information from your error logs and usage " -"logs, which may include information described in Privacy Policy. We will " -"not collect any Personal Data by which an individual can be identified " -"directly or indirectly, including without limitation names, addresses, " -"payment information, or phone numbers. By enabling this service, you agree " -"to these terms and the statement about Privacy Policy." +"logs, which may include information described in Privacy Policy. We will not " +"collect any Personal Data by which an individual can be identified directly " +"or indirectly, including without limitation names, addresses, payment " +"information, or phone numbers. By enabling this service, you agree to these " +"terms and the statement about Privacy Policy." msgstr "" "3D Baskı topluluğunda, kendi dilimleme parametrelerimizi ve ayarlarımızı " "düzenlerken birbirimizin başarılarından ve başarısızlıklarından öğreniyoruz. " @@ -6956,16 +7268,16 @@ msgid "Click to reset all settings to the last saved preset." msgstr "Tüm ayarları en son kaydedilen ön ayara sıfırlamak için tıklayın." msgid "" -"Prime tower is required for smooth timeplase. There may be flaws on the " -"model without prime tower. Are you sure you want to disable prime tower?" +"Prime tower is required for smooth timeplase. There may be flaws on the model " +"without prime tower. Are you sure you want to disable prime tower?" msgstr "" "Sorunsuz timeplace için Prime Tower gereklidir. Prime tower olmayan modelde " "kusurlar olabilir. Prime tower'ı devre dışı bırakmak istediğinizden emin " "misiniz?" msgid "" -"Prime tower is required for smooth timelapse. There may be flaws on the " -"model without prime tower. Do you want to enable prime tower?" +"Prime tower is required for smooth timelapse. There may be flaws on the model " +"without prime tower. Do you want to enable prime tower?" msgstr "" "Sorunsuz hızlandırılmış çekim için Prime Tower gereklidir. Prime tower " "olmayan modelde kusurlar olabilir. Prime tower'ı etkinleştirmek istiyor " @@ -6994,11 +7306,11 @@ msgstr "" msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " -"settings: at least 2 interface layers, at least 0.1mm top z distance or " -"using support materials on interface." +"settings: at least 2 interface layers, at least 0.1mm top z distance or using " +"support materials on interface." msgstr "" -"\"Güçlü Ağaç\" ve \"Ağaç Hibrit\" stilleri için şu ayarları öneriyoruz: en " -"az 2 arayüz katmanı, en az 0,1 mm üst z mesafesi veya arayüzde destek " +"\"Güçlü Ağaç\" ve \"Ağaç Hibrit\" stilleri için şu ayarları öneriyoruz: en az " +"2 arayüz katmanı, en az 0,1 mm üst z mesafesi veya arayüzde destek " "malzemeleri kullanılması." msgid "" @@ -7037,8 +7349,8 @@ msgid "" "height limits ,this may cause printing quality issues." msgstr "" "Katman yüksekliği, Yazıcı Ayarları -> Ekstruder -> Katman yüksekliği " -"sınırları bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına " -"neden olabilir." +"sınırları bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına neden " +"olabilir." msgid "Adjust to the set range automatically? \n" msgstr "Ayarlanan aralığa otomatik olarak ayarlansın mı? \n" @@ -7049,11 +7361,34 @@ 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" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive\"-" +">\"Timelapse Wipe Tower\"." msgstr "" "Araç başlığı olmadan timelapse kaydederken, bir \"Timelapse Wipe Tower\" " "eklenmesi önerilir.\n" @@ -7102,8 +7437,8 @@ msgid "" "the overhang degree range and wall speed is used" msgstr "" "Bu, çeşitli sarkma dereceleri için hızdır. Çıkıntı dereceleri çizgi " -"genişliğinin yüzdesi olarak ifade edilir. 0 hız, sarkma derecesi aralığı " -"için yavaşlamanın olmadığı anlamına gelir ve duvar hızı kullanılır" +"genişliğinin yüzdesi olarak ifade edilir. 0 hız, sarkma derecesi aralığı için " +"yavaşlamanın olmadığı anlamına gelir ve duvar hızı kullanılır" msgid "Bridge" msgstr "Köprü" @@ -7200,11 +7535,11 @@ msgid "Cool plate" msgstr "Soğuk plaka" msgid "" -"Bed temperature when cool plate is installed. Value 0 means the filament " -"does not support to print on the Cool Plate" +"Bed temperature when cool plate is installed. Value 0 means the filament does " +"not support to print on the Cool Plate" msgstr "" -"Soğutma plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin Cool " -"Plate üzerine yazdırmayı desteklemediği anlamına gelir" +"Soğutma plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin Cool Plate " +"üzerine yazdırmayı desteklemediği anlamına gelir" msgid "Engineering plate" msgstr "Mühendislik plakası" @@ -7525,38 +7860,51 @@ msgstr "\"%1%\" ön ayarı aşağıdaki kaydedilmemiş değişiklikleri içeriyo #, boost-format msgid "" -"Preset \"%1%\" is not compatible with the new printer profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" is not compatible with the new printer profile and it contains " +"the following unsaved changes:" msgstr "" "Ön ayar \"%1%\", yeni yazıcı profiliyle uyumlu değil ve aşağıdaki " "kaydedilmemiş değişiklikleri içeriyor:" #, boost-format msgid "" -"Preset \"%1%\" is not compatible with the new process profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" is not compatible with the new process profile and it contains " +"the following unsaved changes:" msgstr "" "Ön ayar \"%1%\", yeni işlem profiliyle uyumlu değil ve aşağıdaki " "kaydedilmemiş değişiklikleri içeriyor:" #, boost-format +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 settings of preset \"%1%\". \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 "" -"\"%1%\" ön ayarının bazı ayarlarını değiştirdiniz.\n" -"Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) korumak " -"ister misiniz?" +"\n" +"Değiştirdiğiniz ön ayar değerlerini kaydedebilir veya silebilirsiniz." 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, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -"Bazı ön ayar ayarlarını değiştirdiniz.\n" -"Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) korumak " -"ister misiniz?" +"\n" +"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ı" @@ -7580,19 +7928,19 @@ msgstr "" msgid "" "Transfer the selected options from left preset to the right.\n" -"Note: New modified presets will be selected in settings tabs after close " -"this dialog." +"Note: New modified presets will be selected in settings tabs after close this " +"dialog." msgstr "" "Seçilen seçenekleri sol ön ayardan sağa aktarın.\n" -"Not: Bu iletişim kutusunu kapattıktan sonra ayarlar sekmelerinde " -"değiştirilen yeni ön ayarlar seçilecektir." +"Not: Bu iletişim kutusunu kapattıktan sonra ayarlar sekmelerinde değiştirilen " +"yeni ön ayarlar seçilecektir." msgid "Transfer values from left to right" msgstr "Değerleri soldan sağa aktarın" msgid "" -"If enabled, this dialog can be used for transver selected values from left " -"to right preset." +"If enabled, this dialog can be used for transfer selected values from left to " +"right preset." msgstr "" "Etkinleştirilirse, bu iletişim kutusu seçilen değerleri soldan sağa ön ayara " "aktarmak için kullanılabilir." @@ -7679,11 +8027,11 @@ msgstr "Sıkıştırma özelleştirme" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" -"extruder MM printer. Its purpose is to properly shape the end of the " -"unloaded filament so it does not prevent insertion of the new filament and " -"can itself be reinserted later. This phase is important and different " -"materials can require different extrusion speeds to get the good shape. For " -"this reason, the extrusion rates during ramming are adjustable.\n" +"extruder MM printer. Its purpose is to properly shape the end of the unloaded " +"filament so it does not prevent insertion of the new filament and can itself " +"be reinserted later. This phase is important and different materials can " +"require different extrusion speeds to get the good shape. For this reason, " +"the extrusion rates during ramming are adjustable.\n" "\n" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." @@ -8043,8 +8391,8 @@ msgstr "Ağ eklentisi güncellemesi" msgid "" "Click OK to update the Network plug-in when Orca Slicer launches next time." msgstr "" -"Orca Slicer bir sonraki sefer başlatıldığında Ağ eklentisini güncellemek " -"için Tamam'a tıklayın." +"Orca Slicer bir sonraki sefer başlatıldığında Ağ eklentisini güncellemek için " +"Tamam'a tıklayın." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" @@ -8059,14 +8407,49 @@ 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" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN Bağlantısı Başarısız (Yazdırma dosyası gönderiliyor)" -msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +msgid "Step 1, please confirm Orca Slicer and your printer are in the same LAN." msgstr "" "Adım 1, lütfen Orca Slicer ile yazıcınızın aynı LAN'da olduğunu doğrulayın." @@ -8141,8 +8524,8 @@ msgid "Updating successful" msgstr "Güncelleme başarılı" msgid "" -"Are you sure you want to update? This will take about 10 minutes. Do not " -"turn off the power while the printer is updating." +"Are you sure you want to update? This will take about 10 minutes. Do not turn " +"off the power while the printer is updating." msgstr "" "Güncellemek istediğinizden emin misiniz? Bu yaklaşık 10 dakika sürecektir. " "Yazıcı güncellenirken gücü kapatmayın." @@ -8161,10 +8544,9 @@ msgid "" "printing. Do you want to update now? You can also update later on printer or " "update next time starting the studio." msgstr "" -"Ürün yazılımı sürümü anormal. Yazdırmadan önce onarım ve güncelleme " -"yapılması gerekir. Şimdi güncellemek istiyor musunuz? Ayrıca daha sonra " -"yazıcıda güncelleyebilir veya stüdyoyu bir sonraki başlatışınızda " -"güncelleyebilirsiniz." +"Ürün yazılımı sürümü anormal. Yazdırmadan önce onarım ve güncelleme yapılması " +"gerekir. Şimdi güncellemek istiyor musunuz? Ayrıca daha sonra yazıcıda " +"güncelleyebilir veya stüdyoyu bir sonraki başlatışınızda güncelleyebilirsiniz." msgid "Extension Board" msgstr "Uzatma Kartı" @@ -8319,8 +8701,8 @@ msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " msgstr "%1% çizgi genişliği hesaplanamadı. \"%2%\" değeri alınamıyor " msgid "" -"Invalid spacing supplied to Flow::with_spacing(), check your layer height " -"and extrusion width" +"Invalid spacing supplied to Flow::with_spacing(), check your layer height and " +"extrusion width" msgstr "" "Flow::with_spacing()'e sağlanan geçersiz boşluk, kat yüksekliğinizi ve " "ekstrüzyon genişliğinizi kontrol edin" @@ -8453,8 +8835,8 @@ msgstr " dışlama alanına çok yakın ve çarpışmalara neden olacak.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " -"together. Otherwise, the extruder and nozzle may be blocked or damaged " -"during printing" +"together. Otherwise, the extruder and nozzle may be blocked or damaged during " +"printing" msgstr "" "Birlikte büyük sıcaklık farkına sahip birden fazla filament basılamaz. Aksi " "takdirde baskı sırasında ekstruder ve nozul tıkanabilir veya hasar görebilir" @@ -8473,8 +8855,8 @@ msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." msgstr "" -"Birden fazla nesneyi spiral vazo modunda yazdırmak için lütfen \"Nesneye göre" -"\" yazdırma sırasını seçin." +"Birden fazla nesneyi spiral vazo modunda yazdırmak için lütfen \"Nesneye " +"göre\" yazdırma sırasını seçin." msgid "" "The spiral vase mode does not work when an object contains more than one " @@ -8487,8 +8869,8 @@ msgstr "%1% nesnesi maksimum yapı hacmi yüksekliğini aşıyor." #, boost-format msgid "" -"While the object %1% itself fits the build volume, its last layer exceeds " -"the maximum build volume height." +"While the object %1% itself fits the build volume, its last layer exceeds the " +"maximum build volume height." msgstr "" "%1% nesnesinin kendisi yapı hacmine uysa da, son katmanı maksimum yapı hacmi " "yüksekliğini aşıyor." @@ -8517,8 +8899,7 @@ msgstr "" "Temizleme Kulesi şu anda yalnızca ilgili ekstruder adreslemesiyle " "desteklenmektedir (use_relative_e_distances=1)." -msgid "" -"Ooze prevention is currently not supported with the prime tower enabled." +msgid "Ooze prevention is currently not supported with the prime tower enabled." msgstr "Sızıntı önleme şu anda ana kule etkinken desteklenmemektedir." msgid "" @@ -8535,8 +8916,8 @@ msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"Uyarlanabilir katman yüksekliği açıkken ana kule desteklenmez. Tüm " -"nesnelerin aynı katman yüksekliğine sahip olmasını gerektirir." +"Uyarlanabilir katman yüksekliği açıkken ana kule desteklenmez. Tüm nesnelerin " +"aynı katman yüksekliğine sahip olmasını gerektirir." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" @@ -8544,12 +8925,11 @@ msgstr "" msgid "The prime tower requires that all objects have the same layer heights" msgstr "" -"Prime tower, tüm nesnelerin aynı katman yüksekliğine sahip olmasını " -"gerektirir" +"Prime tower, tüm nesnelerin aynı katman yüksekliğine sahip olmasını gerektirir" msgid "" -"The prime tower requires that all objects are printed over the same number " -"of raft layers" +"The prime tower requires that all objects are printed over the same number of " +"raft layers" msgstr "" "Ana kule, tüm nesnelerin aynı sayıda sal katmanı üzerine yazdırılmasını " "gerektirir" @@ -8562,8 +8942,8 @@ msgstr "" "gerektirir." msgid "" -"The prime tower is only supported if all objects have the same variable " -"layer height" +"The prime tower is only supported if all objects have the same variable layer " +"height" msgstr "" "Prime tower yalnızca tüm nesnelerin aynı değişken katman yüksekliğine sahip " "olması durumunda desteklenir" @@ -8577,8 +8957,7 @@ msgstr "Çok büyük çizgi genişliği" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"Prime kulesi için, destek, nesne ile aynı katman yüksekliğine sahip " -"olmalıdır." +"Prime kulesi için, destek, nesne ile aynı katman yüksekliğine sahip olmalıdır." msgid "" "Organic support tree tip diameter must not be smaller than support material " @@ -8591,8 +8970,8 @@ msgid "" "Organic support branch diameter must not be smaller than 2x support material " "extrusion width." msgstr "" -"Organik destek dalı çapı, destek malzemesi ekstrüzyon genişliğinin 2 " -"katından daha küçük olamaz." +"Organik destek dalı çapı, destek malzemesi ekstrüzyon genişliğinin 2 katından " +"daha küçük olamaz." msgid "" "Organic support branch diameter must not be smaller than support tree tip " @@ -8609,20 +8988,20 @@ msgid "Layer height cannot exceed nozzle diameter" msgstr "Katman yüksekliği nozul çapını aşamaz" msgid "" -"Relative extruder addressing requires resetting the extruder position at " -"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"Relative extruder addressing requires resetting the extruder position at each " +"layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" -"Göreceli ekstruder adreslemesi, kayan nokta doğruluğunun kaybını önlemek " -"için her katmandaki ekstruder konumunun sıfırlanmasını gerektirir. " -"Layer_gcode'a \"G92 E0\" ekleyin." +"Göreceli ekstruder adreslemesi, kayan nokta doğruluğunun kaybını önlemek için " +"her katmandaki ekstruder konumunun sıfırlanmasını gerektirir. Layer_gcode'a " +"\"G92 E0\" ekleyin." msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." msgstr "" -"Before_layer_gcode'da \"G92 E0\" bulundu ve bu, mutlak ekstruder " -"adreslemeyle uyumsuzdu." +"Before_layer_gcode'da \"G92 E0\" bulundu ve bu, mutlak ekstruder adreslemeyle " +"uyumsuzdu." msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " @@ -8661,8 +9040,8 @@ msgid "" "(machine_max_acceleration_extruding).\n" "Orca will automatically cap the acceleration speed to ensure it doesn't " "surpass the printer's capabilities.\n" -"You can adjust the machine_max_acceleration_extruding value in your " -"printer's configuration to get higher speeds." +"You can adjust the machine_max_acceleration_extruding value in your printer's " +"configuration to get higher speeds." msgstr "" "Hızlanma ayarı yazıcının maksimum hızlanmasını aşıyor " "(machine_max_acceleration_extruding).\n" @@ -8679,6 +9058,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" @@ -8717,8 +9102,7 @@ msgid "Elephant foot compensation" msgstr "Fil ayağı telafi oranı" msgid "" -"Shrink the initial layer on build plate to compensate for elephant foot " -"effect" +"Shrink the initial layer on build plate to compensate for elephant foot effect" msgstr "" "Fil ayağı etkisini telafi etmek için baskı plakasındaki ilk katmanı küçültün" @@ -8766,7 +9150,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" @@ -8775,15 +9161,15 @@ msgid "" "Orca Slicer can upload G-code files to a printer host. This field should " "contain the hostname, IP address or URL of the printer host instance. Print " "host behind HAProxy with basic auth enabled can be accessed by putting the " -"user name and password into the URL in the following format: https://" -"username:password@your-octopi-address/" +"user name and password into the URL in the following format: https://username:" +"password@your-octopi-address/" msgstr "" -"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " -"Bu alan, yazıcı ana bilgisayar örneğinin ana bilgisayar adını, IP adresini " -"veya URL'sini içermelidir. Temel kimlik doğrulamanın etkin olduğu " -"HAProxy'nin arkasındaki yazdırma ana bilgisayarına, kullanıcı adı ve " -"parolanın aşağıdaki biçimdeki URL'ye girilmesiyle erişilebilir: https://" -"username:password@your-octopi-address/" +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " +"alan, yazıcı ana bilgisayar örneğinin ana bilgisayar adını, IP adresini veya " +"URL'sini içermelidir. Temel kimlik doğrulamanın etkin olduğu HAProxy'nin " +"arkasındaki yazdırma ana bilgisayarına, kullanıcı adı ve parolanın aşağıdaki " +"biçimdeki URL'ye girilmesiyle erişilebilir: https://username:password@your-" +"octopi-address/" msgid "Device UI" msgstr "Cihaz kullanıcı arayüzü" @@ -8791,8 +9177,7 @@ msgstr "Cihaz kullanıcı arayüzü" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" -"Print_Host ile aynı değilse cihazınızın kullanıcı arayüzünün URL'sini " -"belirtin" +"Print_Host ile aynı değilse cihazınızın kullanıcı arayüzünün URL'sini belirtin" msgid "API Key / Password" msgstr "API Anahtarı / Şifre" @@ -8801,9 +9186,8 @@ msgid "" "Orca Slicer can upload G-code files to a printer host. This field should " "contain the API Key or the password required for authentication." msgstr "" -"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " -"Bu alan, kimlik doğrulama için gereken API Anahtarını veya şifreyi " -"içermelidir." +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " +"alan, kimlik doğrulama için gereken API Anahtarını veya şifreyi içermelidir." msgid "Name of the printer" msgstr "Yazıcı adı" @@ -8813,8 +9197,8 @@ msgstr "HTTPS CA Dosyası" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " -"in crt/pem format. If left blank, the default OS CA certificate repository " -"is used." +"in crt/pem format. If left blank, the default OS CA certificate repository is " +"used." msgstr "" "HTTPS OctoPrint bağlantıları için crt/pem formatında özel CA sertifika " "dosyası belirtilebilir. Boş bırakılırsa varsayılan OS CA sertifika deposu " @@ -8865,10 +9249,10 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Duvarı geçmekten kaçınmak için maksimum sapma mesafesi. Yoldan sapma " -"mesafesi bu değerden büyükse yoldan sapmayın. Yol uzunluğu, mutlak bir değer " -"olarak veya doğrudan seyahat yolunun yüzdesi (örneğin %50) olarak " -"belirtilebilir. Devre dışı bırakmak için sıfır" +"Duvarı geçmekten kaçınmak için maksimum sapma mesafesi. Yoldan sapma mesafesi " +"bu değerden büyükse yoldan sapmayın. Yol uzunluğu, mutlak bir değer olarak " +"veya doğrudan seyahat yolunun yüzdesi (örneğin %50) olarak belirtilebilir. " +"Devre dışı bırakmak için sıfır" msgid "mm or %" msgstr "mm veya %" @@ -8877,8 +9261,8 @@ msgid "Other layers" msgstr "Diğer katmanlar" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Cool Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Cool Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 değeri, filamentin " "Cool Plate üzerine yazdırmayı desteklemediği anlamına gelir" @@ -8887,22 +9271,22 @@ 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" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Engineering Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. Değer 0, filamentin " "Mühendislik Plakasına yazdırmayı desteklemediği anlamına gelir" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the High Temp Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the High Temp Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 değeri, filamentin " "Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına gelir" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Textured PEI Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Textured PEI Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 Değeri, filamentin " "Dokulu PEI Plaka üzerine yazdırmayı desteklemediği anlamına gelir" @@ -8953,6 +9337,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" @@ -8975,11 +9368,11 @@ 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" +"is disabled and thickness of bottom shell is absolutely determained by bottom " +"shell layers" msgstr "" -"Alt kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince " -"ise dilimleme sırasında alt katı katmanların sayısı arttırılır. Bu, katman " +"Alt kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise " +"dilimleme sırasında alt katı katmanların sayısı arttırılır. Bu, katman " "yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu " "ayarın devre dışı olduğu ve alt kabuğun kalınlığının mutlaka alt kabuk " "katmanları tarafından belirlendiği anlamına gelir" @@ -8993,8 +9386,7 @@ msgid "" "\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" +"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces only\n" "3. Nowhere: Disables gap fill\n" msgstr "" "Seçilen yüzeyler için boşluk doldurmayı etkinleştirir. Doldurulacak minimum " @@ -9020,19 +9412,19 @@ msgid "Force cooling for overhang and bridge" msgstr "Çıkıntı ve köprüler için soğutmayı zorla" msgid "" -"Enable this option to optimize part cooling fan speed for overhang and " -"bridge to get better cooling" +"Enable this option to optimize part cooling fan speed for overhang and bridge " +"to get better cooling" msgstr "" -"Daha iyi soğutma elde etmek amacıyla çıkıntı ve köprü için parça soğutma " -"fanı hızını optimize etmek amacıyla bu seçeneği etkinleştirin" +"Daha iyi soğutma elde etmek amacıyla çıkıntı ve köprü için parça soğutma fanı " +"hızını optimize etmek amacıyla bu seçeneği etkinleştirin" msgid "Fan speed for overhang" msgstr "Çıkıntılar için fan hızı" msgid "" -"Force part cooling fan to be this speed when printing bridge or overhang " -"wall which has large overhang degree. Forcing cooling for overhang and " -"bridge can get better quality for these part" +"Force part cooling fan to be this speed when printing bridge or overhang wall " +"which has large overhang degree. Forcing cooling for overhang and bridge can " +"get better quality for these part" msgstr "" "Çıkıntı derecesi büyük olan köprü veya çıkıntılı duvara baskı yaparken parça " "soğutma fanını bu hızda olmaya zorlayın. Çıkıntı ve köprü için soğutmayı " @@ -9044,9 +9436,9 @@ msgstr "Çıkıntı soğutması" #, c-format msgid "" "Force cooling fan to be specific speed when overhang degree of printed part " -"exceeds this value. Expressed as percentage which 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" +"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 "" "Yazdırılan parçanın çıkıntı derecesi bu değeri aştığında soğutma fanını " "belirli bir hıza zorlar. Alt katmandan destek almadan çizginin ne kadar " @@ -9080,8 +9472,8 @@ msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" msgstr "" -"Köprü için malzeme miktarını azaltmak ve sarkmayı iyileştirmek için bu " -"değeri biraz azaltın (örneğin 0,9)" +"Köprü için malzeme miktarını azaltmak ve sarkmayı iyileştirmek için bu değeri " +"biraz azaltın (örneğin 0,9)" msgid "Internal bridge flow ratio" msgstr "İç köprü akış oranı" @@ -9149,11 +9541,11 @@ msgid "" "on the next layer, like letters. Set this setting to 0 to remove these " "artifacts." msgstr "" -"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından " -"kaplıysa layer genişliği bu değerin altında olan bir üst katman olarak " +"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından kaplıysa " +"layer genişliği bu değerin altında olan bir üst katman olarak " "değerlendirilmeyecek. Yalnızca çevrelerle kaplanması gereken yüzeyde 'bir " -"çevre üstte' tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya " -"a % çevre ekstrüzyon genişliğinin bir yüzdesi olabilir.\n" +"çevre üstte' tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya a " +"% çevre ekstrüzyon genişliğinin bir yüzdesi olabilir.\n" "Uyarı: Etkinleştirilirse bir sonraki katmanda harfler gibi bazı ince " "özelliklerin olması durumunda yapay yapılar oluşturulabilir. Bu yapıları " "kaldırmak için bu ayarı 0 olarak ayarlayın." @@ -9185,9 +9577,9 @@ msgid "Overhang reversal" msgstr "Çıkıntıyı tersine çevir" msgid "" -"Extrude perimeters that have a part over an overhang in the reverse " -"direction on odd layers. This alternating pattern can drastically improve " -"steep overhangs.\n" +"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." @@ -9209,8 +9601,7 @@ msgid "" "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" +"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 " @@ -9242,8 +9633,7 @@ msgstr "" "Bu seçenek, havşa delikleri için köprüler oluşturarak bunların desteksiz " "yazdırılmasına olanak tanır. Mevcut modlar şunları içerir:\n" "1. Yok: Köprü oluşturulmaz.\n" -"2. Kısmen Köprülendi: Desteklenmeyen alanın yalnızca bir kısmı " -"köprülenecek.\n" +"2. Kısmen Köprülendi: Desteklenmeyen alanın yalnızca bir kısmı köprülenecek.\n" "3. Feda Katman: Tam bir feda köprü katmanı oluşturulur." msgid "Partially bridged" @@ -9363,8 +9753,8 @@ msgid "Brim ear detection radius" msgstr "Kenar kulak algılama yarıçapı" msgid "" -"The geometry will be decimated before dectecting sharp angles. This " -"parameter indicates the minimum length of the deviation for the decimation.\n" +"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 "" "Keskin açılar tespit edilmeden önce geometrinin büyük bir kısmı yok " @@ -9413,10 +9803,10 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"Son katman süresinin \"Maksimum fan hızı eşiği\"ndeki katman süresi " -"eşiğinden kısa olmamasını sağlamak amacıyla yazdırma hızını yavaşlatmak için " -"bu seçeneği etkinleştirin, böylece katman daha uzun süre soğutulabilir. Bu, " -"iğne ve küçük detaylar için soğutma kalitesini artırabilir" +"Son katman süresinin \"Maksimum fan hızı eşiği\"ndeki katman süresi eşiğinden " +"kısa olmamasını sağlamak amacıyla yazdırma hızını yavaşlatmak için bu " +"seçeneği etkinleştirin, böylece katman daha uzun süre soğutulabilir. Bu, iğne " +"ve küçük detaylar için soğutma kalitesini artırabilir" msgid "Normal printing" msgstr "Normal baskı" @@ -9425,8 +9815,7 @@ msgid "" "The default acceleration of both normal printing and travel except initial " "layer" msgstr "" -"İlk katman dışında hem normal yazdırmanın hem de ilerlemenin varsayılan " -"ivmesi" +"İlk katman dışında hem normal yazdırmanın hem de ilerlemenin varsayılan ivmesi" msgid "mm/s²" msgstr "mm/s²" @@ -9470,8 +9859,8 @@ msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " "layer used to be closed to get better build plate adhesion" msgstr "" -"İlk belirli katmanlar için tüm soğutma fanını kapatın. Daha iyi baskı " -"plakası yapışması sağlamak için ilk katmanın soğutma fanı kapatılırdı" +"İlk belirli katmanlar için tüm soğutma fanını kapatın. Daha iyi baskı plakası " +"yapışması sağlamak için ilk katmanın soğutma fanı kapatılırdı" msgid "Don't support bridges" msgstr "Köprülerde destek olmasın" @@ -9512,8 +9901,8 @@ msgid "Don't filter out small internal bridges (beta)" msgstr "Küçük iç köprüleri filtrelemeyin (deneysel)" msgid "" -"This option can help reducing pillowing on top surfaces in heavily slanted " -"or curved models.\n" +"This option can help reducing pillowing on top surfaces in heavily slanted or " +"curved models.\n" "\n" "By default, small internal bridges are filtered out and the internal solid " "infill is printed directly over the sparse infill. This works well in most " @@ -9528,16 +9917,16 @@ msgid "" "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" +"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" +"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." +"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 "" "Bu seçenek, aşırı eğimli veya kavisli modellerde üst yüzeylerdeki " "yastıklamanın azaltılmasına yardımcı olabilir.\n" @@ -9689,8 +10078,8 @@ msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " "than inner wall speed to get better quality." msgstr "" -"En dışta görünen ve görünen dış duvarın hızı. Daha iyi kalite elde etmek " -"için iç duvar hızından daha yavaş olması kullanılır." +"En dışta görünen ve görünen dış duvarın hızı. Daha iyi kalite elde etmek için " +"iç duvar hızından daha yavaş olması kullanılır." msgid "Small perimeters" msgstr "Küçük çevre (perimeter)" @@ -9719,8 +10108,8 @@ msgstr "Duvar baskı sırası" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" "\n" -"Use Inner/Outer for best overhangs. This is because the overhanging walls " -"can adhere to a neighouring perimeter while printing. However, this option " +"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" @@ -9751,14 +10140,14 @@ msgstr "" "kalitesi ve boyutsal doğruluk için İç/Dış/İç seçeneğini kullanın. Ancak, dış " "duvarın üzerine baskı yapılacak bir iç çevre olmadığından sarkma performansı " "düşecektir. Bu seçenek, önce 3. çevreden itibaren iç duvarları, ardından dış " -"çevreyi ve son olarak da birinci iç çevreyi yazdırdığından etkili olması " -"için en az 3 duvar gerektirir. Bu seçenek çoğu durumda Dış/İç seçeneğine " -"karşı önerilir. \n" +"çevreyi ve son olarak da birinci iç çevreyi yazdırdığından etkili olması için " +"en az 3 duvar gerektirir. Bu seçenek çoğu durumda Dış/İç seçeneğine karşı " +"önerilir. \n" "\n" "İç/Dış/İç seçeneğinin aynı dış duvar kalitesi ve boyutsal doğruluk " "avantajları için Dış/İç seçeneğini kullanın. Bununla birlikte, yeni bir " -"katmanın ilk ekstrüzyonu görünür bir yüzey üzerinde başladığından z " -"dikişleri daha az tutarlı görünecektir.\n" +"katmanın ilk ekstrüzyonu görünür bir yüzey üzerinde başladığından z dikişleri " +"daha az tutarlı görünecektir.\n" "\n" " " @@ -9780,9 +10169,9 @@ msgid "" "\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." +"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" @@ -9800,8 +10189,8 @@ 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 " +"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." @@ -9809,8 +10198,8 @@ msgstr "" "Yukarıdan aşağıya bakıldığında duvar döngülerinin ekstrüzyona uğradığı yön.\n" "\n" "Tek sayıyı ters çevir seçeneği etkinleştirilmedikçe, varsayılan olarak tüm " -"duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik dışında " -"herhangi bir seçeneğe ayarlayın, Ters açıklığa bakılmaksızın duvar yönünü " +"duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik dışında herhangi " +"bir seçeneğe ayarlayın, Ters açıklığa bakılmaksızın duvar yönünü " "zorlayacaktır.\n" "\n" "Spiral vazo modu etkinse bu seçenek devre dışı bırakılacaktır." @@ -9838,8 +10227,8 @@ msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Nozul ucunun kapağa olan mesafesi. Nesneye göre yazdırmada çarpışmayı " -"önlemek için kullanılır." +"Nozul ucunun kapağa olan mesafesi. Nesneye göre yazdırmada çarpışmayı önlemek " +"için kullanılır." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " @@ -9848,6 +10237,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ğı" @@ -9856,20 +10251,19 @@ msgid "" "probe's XY offset, most printers are unable to probe the entire bed. To " "ensure the probe point does not go outside the bed area, the minimum and " "maximum points of the bed mesh should be set appropriately. OrcaSlicer " -"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " -"exceed these min/max points. This information can usually be obtained from " -"your printer manufacturer. The default setting is (-99999, -99999), which " -"means there are no limits, thus allowing probing across the entire bed." -msgstr "" -"Bu seçenek, izin verilen yatak ağ alanı için minimum noktayı ayarlar. Prob " -"XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " -"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve " -"maksimum noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, " -"adaptive_bed_mesh_min/adaptive_bed_mesh_max değerlerinin bu min/maks " -"noktalarını aşmamasını sağlar. Bu bilgi genellikle yazıcınızın üreticisinden " -"edinilebilir. Varsayılan ayar (-99999, -99999) şeklindedir; bu, herhangi bir " -"sınırın olmadığı anlamına gelir, dolayısıyla yatağın tamamında problamaya " -"izin verilir." +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed " +"these min/max points. This information can usually be obtained from your " +"printer manufacturer. The default setting is (-99999, -99999), which means " +"there are no limits, thus allowing probing across the entire bed." +msgstr "" +"Bu seçenek, izin verilen yatak ağ alanı için minimum noktayı ayarlar. Prob XY " +"ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " +"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve maksimum " +"noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max değerlerinin bu min/maks noktalarını aşmamasını sağlar. " +"Bu bilgi genellikle yazıcınızın üreticisinden edinilebilir. Varsayılan ayar " +"(-99999, -99999) şeklindedir; bu, herhangi bir sınırın olmadığı anlamına " +"gelir, dolayısıyla yatağın tamamında problamaya izin verilir." msgid "Bed mesh max" msgstr "Maksimum yatak ağı" @@ -9879,20 +10273,19 @@ msgid "" "probe's XY offset, most printers are unable to probe the entire bed. To " "ensure the probe point does not go outside the bed area, the minimum and " "maximum points of the bed mesh should be set appropriately. OrcaSlicer " -"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " -"exceed these min/max points. This information can usually be obtained from " -"your printer manufacturer. The default setting is (99999, 99999), which " -"means there are no limits, thus allowing probing across the entire bed." -msgstr "" -"Bu seçenek, izin verilen yatak ağ alanı için maksimum noktayı ayarlar. " -"Probun XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob " -"noktasının yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum " -"ve maksimum noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, " -"adaptive_bed_mesh_min/adaptive_bed_mesh_max değerlerinin bu min/maks " -"noktalarını aşmamasını sağlar. Bu bilgi genellikle yazıcınızın üreticisinden " -"edinilebilir. Varsayılan ayar (99999, 99999) şeklindedir; bu, herhangi bir " -"sınırın olmadığı anlamına gelir, dolayısıyla yatağın tamamında problamaya " -"izin verilir." +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed " +"these min/max points. This information can usually be obtained from your " +"printer manufacturer. The default setting is (99999, 99999), which means " +"there are no limits, thus allowing probing across the entire bed." +msgstr "" +"Bu seçenek, izin verilen yatak ağ alanı için maksimum noktayı ayarlar. Probun " +"XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " +"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve maksimum " +"noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max değerlerinin bu min/maks noktalarını aşmamasını sağlar. " +"Bu bilgi genellikle yazıcınızın üreticisinden edinilebilir. Varsayılan ayar " +"(99999, 99999) şeklindedir; bu, herhangi bir sınırın olmadığı anlamına gelir, " +"dolayısıyla yatağın tamamında problamaya izin verilir." msgid "Probe point distance" msgstr "Prob noktası mesafesi" @@ -9909,8 +10302,8 @@ msgid "Mesh margin" msgstr "Yatak ağı boşluğu" msgid "" -"This option determines the additional distance by which the adaptive bed " -"mesh area should be expanded in the XY directions." +"This option determines the additional distance by which the adaptive bed mesh " +"area should be expanded in the XY directions." msgstr "" "Bu seçenek, uyarlanabilir yatak ağ alanının XY yönlerinde genişletilmesi " "gereken ek mesafeyi belirler." @@ -9930,9 +10323,9 @@ msgstr "Akış oranı" msgid "" "The material may have volumetric change after switching between molten state " "and crystalline state. This setting changes all extrusion flow of this " -"filament in gcode proportionally. Recommended value range is between 0.95 " -"and 1.05. Maybe you can tune this value to get nice flat surface when there " -"has slight overflow or underflow" +"filament in gcode proportionally. Recommended value range is between 0.95 and " +"1.05. Maybe you can tune this value to get nice flat surface when there has " +"slight overflow or underflow" msgstr "" "Malzeme, erimiş hal ile kristal hal arasında geçiş yaptıktan sonra hacimsel " "değişime sahip olabilir. Bu ayar, bu filamentin gcode'daki tüm ekstrüzyon " @@ -9954,8 +10347,8 @@ msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" msgstr "Basınç avansı (Klipper) Doğrusal ilerleme faktörü (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." +"Default line width if other line widths are set to 0. If expressed as a %, it " +"will be computed over the nozzle diameter." msgstr "" "Diğer çizgi genişlikleri 0'a ayarlanmışsa varsayılan çizgi genişliği. % " "olarak ifade edilirse nozul çapı üzerinden hesaplanacaktır." @@ -9964,8 +10357,8 @@ msgid "Keep fan always on" msgstr "Fanı her zaman açık tut" 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" +"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 "" "Bu ayarı etkinleştirirseniz, parça soğutma fanı hiçbir zaman durdurulmayacak " "ve başlatma ve durdurma sıklığını azaltmak için en azından minimum hızda " @@ -10051,11 +10444,11 @@ msgid "" "Be sure to allow enough space between objects, as this compensation is done " "after the checks." msgstr "" -"Filamentin soğuduktan sonra alacağı büzülme yüzdesini girin (100 mm yerine " -"94 mm ölçerseniz 94%). Parça, telafi etmek için xy'de ölçeklendirilecektir. " +"Filamentin soğuduktan sonra alacağı büzülme yüzdesini girin (100 mm yerine 94 " +"mm ölçerseniz 94%). Parça, telafi etmek için xy'de ölçeklendirilecektir. " "Yalnızca çevre için kullanılan filament dikkate alınır.\n" -"Bu telafi kontrollerden sonra yapıldığından, nesneler arasında yeterli " -"boşluk bıraktığınızdan emin olun." +"Bu telafi kontrollerden sonra yapıldığından, nesneler arasında yeterli boşluk " +"bıraktığınızdan emin olun." msgid "Loading speed" msgstr "Yükleme hızı" @@ -10106,8 +10499,8 @@ msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" -"Filament, soğutma tüpleri içinde ileri geri hareket ettirilerek soğutulur. " -"Bu sayısını belirtin." +"Filament, soğutma tüpleri içinde ileri geri hareket ettirilerek soğutulur. Bu " +"sayısını belirtin." msgid "Speed of the first cooling move" msgstr "İlk soğutma hareketi hızı" @@ -10121,9 +10514,9 @@ msgstr "Silme kulesi üzerinde minimum boşaltım" msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Orca Slicer will always prime this amount of material into the wipe " -"tower to produce successive infill or sacrificial object extrusions reliably." +"stable. Before purging the print head into an infill or a sacrificial object, " +"Orca Slicer will always prime this amount of material into the wipe tower to " +"produce successive infill or sacrificial object extrusions reliably." msgstr "" "Bir takım değişiminden sonra, yeni yüklenen filamentin nozul içindeki kesin " "konumu bilinmeyebilir ve filament basıncı muhtemelen henüz stabil değildir. " @@ -10140,13 +10533,12 @@ msgstr "Soğutma hareketleri bu hıza doğru giderek hızlanır." 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." +"filament during a tool change (when executing the T code). This time is added " +"to the total print time by the G-code time estimator." msgstr "" "Yazıcı donanım yazılımının (veya Çoklu Malzeme Ünitesi 2.0'ın) takım " -"değişikliği sırasında (T kodu yürütülürken) yeni bir filament yükleme " -"süresi. Bu süre, G kodu zaman tahmincisi tarafından toplam baskı süresine " -"eklenir." +"değişikliği sırasında (T kodu yürütülürken) yeni bir filament yükleme süresi. " +"Bu süre, G kodu zaman tahmincisi tarafından toplam baskı süresine eklenir." msgid "Ramming parameters" msgstr "Sıkıştırma parametreleri" @@ -10160,8 +10552,8 @@ 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." +"filament during a tool change (when executing the T code). This time is added " +"to the total print time by the G-code time estimator." msgstr "" "Yazıcı ürün yazılımının (veya Çoklu Malzeme Ünitesi 2.0'ın) takım değişimi " "sırasında (T kodu yürütülürken) filamenti boşaltma süresi. Bu süre, G kodu " @@ -10209,8 +10601,7 @@ msgstr "Filament malzeme türü" msgid "Soluble material" msgstr "Çözünür malzeme" -msgid "" -"Soluble material is commonly used to print support and support interface" +msgid "Soluble material is commonly used to print support and support interface" msgstr "" "Çözünür malzeme genellikle destek ve destek arayüzünü yazdırmak için " "kullanılır" @@ -10218,8 +10609,7 @@ msgstr "" msgid "Support material" msgstr "Destek malzemesi" -msgid "" -"Support material is commonly used to print support and support interface" +msgid "Support material is commonly used to print support and support interface" msgstr "" "Destek malzemesi yaygın olarak destek ve destek arayüzünü yazdırmak için " "kullanılır" @@ -10271,8 +10661,8 @@ msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" -"İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya " -"dönüştürür ve iç katı dolgu modeli kullanılacaktır" +"İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya dönüştürür " +"ve iç katı dolgu modeli kullanılacaktır" msgid "Sparse infill pattern" msgstr "Dolgu deseni" @@ -10310,6 +10700,9 @@ msgstr "Destek kübik" msgid "Lightning" msgstr "Yıldırım" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Dolgu uzunluğu" @@ -10317,23 +10710,22 @@ 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" +"close infill lines to a short perimeter segment. If no such perimeter segment " +"shorter than infill_anchor_max is found, the infill line is connected to a " +"perimeter segment at just one side and the length of the perimeter segment " +"taken is limited to this parameter, but no longer than anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" "Bir dolgu hattını, ek bir çevrenin kısa bir bölümü ile bir iç çevreye " -"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon " -"genişliği üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir " -"çevre segmentine bağlamaya çalışıyor. infill_anchor_max'tan daha kısa böyle " -"bir çevre segmenti bulunamazsa, dolgu hattı yalnızca bir taraftaki bir çevre " +"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon genişliği " +"üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir çevre " +"segmentine bağlamaya çalışıyor. infill_anchor_max'tan daha kısa böyle bir " +"çevre segmenti bulunamazsa, dolgu hattı yalnızca bir taraftaki bir çevre " "segmentine bağlanır ve alınan çevre segmentinin uzunluğu bu parametreyle " "sınırlıdır, ancak çapa_uzunluk_max'tan uzun olamaz.\n" -"Tek bir dolgu hattına bağlı sabitleme çevrelerini devre dışı bırakmak için " -"bu parametreyi sıfıra ayarlayın." +"Tek bir dolgu hattına bağlı sabitleme çevrelerini devre dışı bırakmak için bu " +"parametreyi sıfıra ayarlayın." msgid "0 (no open anchors)" msgstr "0 (açık bağlantı yok)" @@ -10348,23 +10740,22 @@ 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" +"close infill lines to a short perimeter segment. If no such perimeter segment " +"shorter than this parameter is found, the infill line is connected to a " +"perimeter segment at just one side and the length of the perimeter segment " +"taken is limited to infill_anchor, but no longer than this parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" "Bir dolgu hattını, ek bir çevrenin kısa bir bölümü ile bir iç çevreye " -"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon " -"genişliği üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir " -"çevre segmentine bağlamaya çalışıyor. Bu parametreden daha kısa bir çevre " -"segmenti bulunamazsa, dolgu hattı sadece bir kenardaki bir çevre segmentine " -"bağlanır ve alınan çevre segmentinin uzunluğu infill_anchor ile sınırlıdır " -"ancak bu parametreden daha uzun olamaz.\n" -"0'a ayarlanırsa dolgu bağlantısı için eski algoritma kullanılacaktır; 1000 " -"ve 0 ile aynı sonucu oluşturmalıdır." +"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon genişliği " +"üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir çevre " +"segmentine bağlamaya çalışıyor. Bu parametreden daha kısa bir çevre segmenti " +"bulunamazsa, dolgu hattı sadece bir kenardaki bir çevre segmentine bağlanır " +"ve alınan çevre segmentinin uzunluğu infill_anchor ile sınırlıdır ancak bu " +"parametreden daha uzun olamaz.\n" +"0'a ayarlanırsa dolgu bağlantısı için eski algoritma kullanılacaktır; 1000 ve " +"0 ile aynı sonucu oluşturmalıdır." msgid "0 (Simple connect)" msgstr "0 (Basit bağlantı)" @@ -10382,8 +10773,8 @@ msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"Üst yüzey dolgusunun hızlandırılması. Daha düşük bir değerin kullanılması " -"üst yüzey kalitesini iyileştirebilir" +"Üst yüzey dolgusunun hızlandırılması. Daha düşük bir değerin kullanılması üst " +"yüzey kalitesini iyileştirebilir" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" @@ -10393,8 +10784,8 @@ msgid "" "Acceleration of bridges. If the value is expressed as a percentage (e.g. " "50%), it will be calculated based on the outer wall acceleration." msgstr "" -"Köprülerin hızlandırılması. Değer yüzde olarak ifade edilirse (örn. %50), " -"dış duvar ivmesine göre hesaplanacaktır." +"Köprülerin hızlandırılması. Değer yüzde olarak ifade edilirse (örn. %50), dış " +"duvar ivmesine göre hesaplanacaktır." msgid "mm/s² or %" msgstr "mm/s² veya %" @@ -10431,8 +10822,7 @@ 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" +msgid "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" msgstr "" "Klipper'ın max_accel_to_decel değeri ivmenin bu %%'sine göre ayarlanacak" @@ -10465,8 +10855,8 @@ msgid "Initial layer height" msgstr "Başlangıç katman yüksekliği" msgid "" -"Height of initial layer. Making initial layer height to be thick slightly " -"can improve build plate adhension" +"Height of initial layer. Making initial layer height to be thick slightly can " +"improve build plate adhension" msgstr "" "İlk katmanın yüksekliği. İlk katman yüksekliğini biraz kalın yapmak, baskı " "plakasının yapışmasını iyileştirebilir" @@ -10507,16 +10897,16 @@ msgstr "Maksimum fan hızı" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer " +"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " +"than \"close_fan_the_first_x_layers\", in which case the fan will be running " +"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "Fan hızı, \"close_fan_the_first_x_layers\" katmanında sıfırdan " "\"ful_fan_speed_layer\" katmanında maksimuma doğrusal olarak artırılacaktır. " -"\"full_fan_speed_layer\", \"close_fan_the_first_x_layers\" değerinden " -"düşükse göz ardı edilecektir; bu durumda fan, \"close_fan_the_first_x_layers" -"\" + 1 katmanında izin verilen maksimum hızda çalışacaktır." +"\"full_fan_speed_layer\", \"close_fan_the_first_x_layers\" değerinden düşükse " +"göz ardı edilecektir; bu durumda fan, \"close_fan_the_first_x_layers\" + 1 " +"katmanında izin verilen maksimum hızda çalışacaktır." msgid "Support interface fan speed" msgstr "Destekler için fan hızı" @@ -10589,6 +10979,19 @@ 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" @@ -10624,8 +11027,8 @@ msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" msgstr "" -"Nozulnin metalik malzemesi. Bu, nozulun aşınma direncini ve ne tür " -"filamentin basılabileceğini belirler" +"Nozulnin metalik malzemesi. Bu, nozulun aşınma direncini ve ne tür filamentin " +"basılabileceğini belirler" msgid "Undefine" msgstr "Tanımsız" @@ -10677,8 +11080,8 @@ msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "Yatak şekline göre [0,1] aralığında en iyi otomatik düzenleme konumu." msgid "" -"Enable this option if machine has auxiliary part cooling fan. G-code " -"command: M106 P2 S(0-255)." +"Enable this option if machine has auxiliary part cooling fan. G-code command: " +"M106 P2 S(0-255)." msgstr "" "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin. G-code " "komut: M106 P2 S(0-255)." @@ -10721,8 +11124,8 @@ msgid "" msgstr "" "Soğutma fanını başlatmak için hedef hıza düşmeden önce bu süre boyunca " "maksimum fan hızı komutunu verin.\n" -"Bu, düşük PWM/gücün fanın durma noktasından dönmeye başlaması veya fanın " -"daha hızlı hızlanması için yetersiz olabileceği fanlar için kullanışlıdır.\n" +"Bu, düşük PWM/gücün fanın durma noktasından dönmeye başlaması veya fanın daha " +"hızlı hızlanması için yetersiz olabileceği fanlar için kullanışlıdır.\n" "Devre dışı bırakmak için 0'a ayarlayın." msgid "Time cost" @@ -10776,21 +11179,20 @@ msgstr "Nesneleri etiketle" msgid "" "Enable this to add comments into the G-Code labeling print moves with what " -"object they belong to, which is useful for the Octoprint CancelObject " -"plugin. This settings is NOT compatible with Single Extruder Multi Material " -"setup and Wipe into Object / Wipe into Infill." +"object they belong to, which is useful for the Octoprint CancelObject plugin. " +"This settings is NOT compatible with Single Extruder Multi Material setup and " +"Wipe into Object / Wipe into Infill." msgstr "" "G-Code etiketleme yazdırma hareketlerine ait oldukları nesneyle ilgili " "yorumlar eklemek için bunu etkinleştirin; bu, Octoprint CancelObject " -"eklentisi için kullanışlıdır. Bu ayarlar Tek Ekstruder Çoklu Malzeme " -"kurulumu ve Nesneye Temizleme / Dolguya Temizleme ile uyumlu DEĞİLDİR." +"eklentisi için kullanışlıdır. Bu ayarlar Tek Ekstruder Çoklu Malzeme kurulumu " +"ve Nesneye Temizleme / Dolguya Temizleme ile uyumlu DEĞİLDİR." msgid "Exclude objects" msgstr "Nesneleri hariç tut" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" -"G koduna EXCLUDE OBJECT komutunu eklemek için bu seçeneği etkinleştirin" +msgstr "G koduna EXCLUDE OBJECT komutunu eklemek için bu seçeneği etkinleştirin" msgid "Verbose G-code" msgstr "Ayrıntılı G kodu" @@ -10829,8 +11231,8 @@ msgid "Infill/Wall overlap" msgstr "Dolgu/Duvar örtüşmesi" msgid "" -"Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"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" @@ -10843,12 +11245,12 @@ msgstr "Arayüz kabukları" msgid "" "Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" +"Useful for multi-extruder prints with translucent materials or manual soluble " +"support material" msgstr "" "Bitişik malzemeler/hacimler arasında katı kabuk oluşumunu zorlayın. Yarı " -"saydam malzemelerle veya elle çözülebilen destek malzemesiyle çoklu " -"ekstruder baskıları için kullanışlıdır" +"saydam malzemelerle veya elle çözülebilen destek malzemesiyle çoklu ekstruder " +"baskıları için kullanışlıdır" msgid "Maximum width of a segmented region" msgstr "Bölümlere ayrılmış bir bölgenin maksimum genişliği" @@ -10863,8 +11265,8 @@ msgstr "Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" -"Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği. 0 bu " -"özelliği devre dışı bırakır." +"Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği. 0 bu özelliği " +"devre dışı bırakır." msgid "Ironing Type" msgstr "Ütüleme tipi" @@ -10955,8 +11357,8 @@ msgstr "" "G kodu tadı Klipper olarak ayarlandığında bu seçenek göz ardı edilecektir." msgid "" -"This G-code will be used as a code for the pause print. User can insert " -"pause G-code in gcode viewer" +"This G-code will be used as a code for the pause print. User can insert pause " +"G-code in gcode viewer" msgstr "" "Bu G kodu duraklatma yazdırması için bir kod olarak kullanılacaktır. " "Kullanıcı gcode görüntüleyiciye duraklatma G kodunu ekleyebilir" @@ -11087,8 +11489,8 @@ msgid "Maximum acceleration for travel (M204 T), it only applies to Marlin 2" msgstr "Seyahat için maksimum ivme (M204 T), yalnızca Marlin 2 için geçerlidir" msgid "" -"Part cooling fan speed may be increased when auto cooling is enabled. This " -"is the maximum speed limitation of part cooling fan" +"Part cooling fan speed may be increased when auto cooling is enabled. This is " +"the maximum speed limitation of part cooling fan" msgstr "" "Otomatik soğutma etkinleştirildiğinde parça soğutma fanı hızı artırılabilir. " "Bu, parça soğutma fanının maksimum hız sınırlamasıdır" @@ -11108,8 +11510,8 @@ msgid "Extrusion rate smoothing" msgstr "Ekstrüzyon hızını yumuşatma" msgid "" -"This parameter smooths out sudden extrusion rate changes that happen when " -"the printer transitions from printing a high flow (high speed/larger width) " +"This parameter smooths out sudden extrusion rate changes that happen when the " +"printer transitions from printing a high flow (high speed/larger width) " "extrusion to a lower flow (lower speed/smaller width) extrusion and vice " "versa.\n" "\n" @@ -11120,12 +11522,11 @@ msgid "" "A value of 0 disables the feature. \n" "\n" "For a high speed, high flow direct drive printer (like the Bambu lab or " -"Voron) this value is usually not needed. However it can provide some " -"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" +"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 " @@ -11147,13 +11548,13 @@ msgstr "" "\n" "0 değeri özelliği devre dışı bırakır. \n" "\n" -"Yüksek hızlı, yüksek akışlı doğrudan tahrikli bir yazıcı için (Bambu lab " -"veya Voron gibi) bu değer genellikle gerekli değildir. Ancak özellik " -"hızlarının büyük ölçüde değiştiği bazı durumlarda marjinal bir fayda " -"sağlayabilir. Örneğin, çıkıntılar nedeniyle agresif yavaşlamalar olduğunda. " -"Bu durumlarda 300-350mm3/s2 civarında yüksek bir değer önerilir çünkü bu, " -"basınç ilerlemesinin daha yumuşak bir akış geçişi elde etmesine yardımcı " -"olmak için yeterli yumuşatmaya izin verir.\n" +"Yüksek hızlı, yüksek akışlı doğrudan tahrikli bir yazıcı için (Bambu lab veya " +"Voron gibi) bu değer genellikle gerekli değildir. Ancak özellik hızlarının " +"büyük ölçüde değiştiği bazı durumlarda marjinal bir fayda sağlayabilir. " +"Örneğin, çıkıntılar nedeniyle agresif yavaşlamalar olduğunda. Bu durumlarda " +"300-350mm3/s2 civarında yüksek bir değer önerilir çünkü bu, basınç " +"ilerlemesinin daha yumuşak bir akış geçişi elde etmesine yardımcı olmak için " +"yeterli yumuşatmaya izin verir.\n" "\n" "Basınç avansı olmayan daha yavaş yazıcılar için değer çok daha düşük " "ayarlanmalıdır. Doğrudan tahrikli ekstruderler için 10-15mm3/s2 ve Bowden " @@ -11205,7 +11606,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 " @@ -11250,8 +11651,8 @@ msgid "" "Orca Slicer can upload G-code files to a printer host. This field must " "contain the kind of the host." msgstr "" -"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " -"Bu alan ana bilgisayarın türünü içermelidir." +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " +"alan ana bilgisayarın türünü içermelidir." msgid "Nozzle volume" msgstr "Nozul hacmi" @@ -11292,8 +11693,8 @@ msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" -"Ekstruder ucunun, boşaltıldığında filamentin park edildiği konumdan " -"uzaklığı. Bu ayar yazıcı ürün yazılımındaki değerle eşleşmelidir." +"Ekstruder ucunun, boşaltıldığında filamentin park edildiği konumdan uzaklığı. " +"Bu ayar yazıcı ürün yazılımındaki değerle eşleşmelidir." msgid "Extra loading distance" msgstr "Ekstra yükleme mesafesi" @@ -11320,8 +11721,8 @@ msgstr "Dolguda geri çekmeyi azalt" msgid "" "Don't retract when the travel is in infill area absolutely. That means the " -"oozing can't been seen. This can reduce times of retraction for complex " -"model and save printing time, but make slicing and G-code generating slower" +"oozing can't been seen. This can reduce times of retraction for complex model " +"and save printing time, but make slicing and G-code generating slower" msgstr "" "Hareket kesinlikle dolgu alanına girdiğinde geri çekilmeyin. Bu, sızıntının " "görülemeyeceği anlamına gelir. Bu, karmaşık model için geri çekme sürelerini " @@ -11358,11 +11759,11 @@ msgid "Make overhangs printable - Hole area" msgstr "Yazdırılabilir çıkıntı delik alanı oluşturun" msgid "" -"Maximum area of a hole in the base of the model before it's filled by " -"conical material.A value of 0 will fill all the holes in the model base." +"Maximum area of a hole in the base of the model before it's filled by conical " +"material.A value of 0 will fill all the holes in the model base." msgstr "" -"Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce " -"maksimum alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." +"Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce maksimum " +"alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." msgid "mm²" msgstr "mm²" @@ -11372,11 +11773,11 @@ msgstr "Çıkıntılı duvarı algıla" #, c-format, boost-format msgid "" -"Detect the overhang percentage relative to line width and use different " -"speed to print. For 100%% overhang, bridge speed is used." +"Detect the overhang percentage relative to line width and use different speed " +"to print. For 100%% overhang, bridge speed is used." msgstr "" -"Çizgi genişliğine göre çıkıntı yüzdesini tespit edin ve yazdırmak için " -"farklı hızlar kullanın. %%100 çıkıntı için köprü hızı kullanılır." +"Çizgi genişliğine göre çıkıntı yüzdesini tespit edin ve yazdırmak için farklı " +"hızlar kullanın. %%100 çıkıntı için köprü hızı kullanılır." msgid "" "Line width of inner wall. If expressed as a %, it will be computed over the " @@ -11398,8 +11799,8 @@ 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" +"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." @@ -11420,11 +11821,10 @@ msgid "" "argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" -"Çıktı G-kodunu özel komut dosyaları aracılığıyla işlemek istiyorsanız, " -"mutlak yollarını burada listeleyin. Birden fazla betiği noktalı virgülle " -"ayırın. Betiklere ilk argüman olarak G-code dosyasının mutlak yolu aktarılır " -"ve ortam değişkenlerini okuyarak Orca Slicer yapılandırma ayarlarına " -"erişebilirler." +"Çıktı G-kodunu özel komut dosyaları aracılığıyla işlemek istiyorsanız, mutlak " +"yollarını burada listeleyin. Birden fazla betiği noktalı virgülle ayırın. " +"Betiklere ilk argüman olarak G-code dosyasının mutlak yolu aktarılır ve ortam " +"değişkenlerini okuyarak Orca Slicer yapılandırma ayarlarına erişebilirler." msgid "Printer notes" msgstr "Yazıcı notları" @@ -11436,8 +11836,7 @@ msgid "Raft contact Z distance" msgstr "Raft kontak Z mesafesi" msgid "Z gap between object and raft. Ignored for soluble interface" -msgstr "" -"Nesne ve raft arasındaki Z boşluğu. Çözünür arayüz için göz ardı edildi" +msgstr "Nesne ve raft arasındaki Z boşluğu. Çözünür arayüz için göz ardı edildi" msgid "Raft expansion" msgstr "Raft genişletme" @@ -11466,8 +11865,8 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"Nesne bu sayıdaki destek katmanı tarafından yükseltilecektir. ABS " -"yazdırırken sarmayı önlemek için bu işlevi kullanın" +"Nesne bu sayıdaki destek katmanı tarafından yükseltilecektir. ABS yazdırırken " +"sarmayı önlemek için bu işlevi kullanın" msgid "" "G-code path is genereated after simplifing the contour of model to avoid too " @@ -11482,8 +11881,7 @@ msgid "Travel distance threshold" msgstr "Seyahat mesafesi" msgid "" -"Only trigger retraction when the travel distance is longer than this " -"threshold" +"Only trigger retraction when the travel distance is longer than this threshold" msgstr "" "Geri çekmeyi yalnızca hareket mesafesi bu eşikten daha uzun olduğunda " "tetikleyin" @@ -11491,8 +11889,7 @@ msgstr "" msgid "Retract amount before wipe" msgstr "Temizleme işlemi öncesi geri çekme miktarı" -msgid "" -"The length of fast retraction before wipe, relative to retraction length" +msgid "The length of fast retraction before wipe, relative to retraction length" msgstr "" "Geri çekme uzunluğuna göre, temizlemeden önce hızlı geri çekilmenin uzunluğu" @@ -11512,6 +11909,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ı" @@ -11650,7 +12071,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" @@ -11684,13 +12106,13 @@ msgid "Seam gap" msgstr "Dikiş boşluğu" msgid "" -"In order to reduce the visibility of the seam in a closed loop extrusion, " -"the loop is interrupted and shortened by a specified amount.\n" -"This amount can be specified in millimeters or as a percentage of the " -"current extruder diameter. The default value for this parameter is 10%." +"In order to reduce the visibility of the seam in a closed loop extrusion, the " +"loop is interrupted and shortened by a specified amount.\n" +"This amount can be specified in millimeters or as a percentage of the current " +"extruder diameter. The default value for this parameter is 10%." msgstr "" -"Kapalı döngü ekstrüzyonda dikişin görünürlüğünü azaltmak için döngü " -"kesintiye uğrar ve belirli bir miktarda kısaltılır.\n" +"Kapalı döngü ekstrüzyonda dikişin görünürlüğünü azaltmak için döngü kesintiye " +"uğrar ve belirli bir miktarda kısaltılır.\n" "Bu miktar milimetre cinsinden veya mevcut ekstruder çapının yüzdesi olarak " "belirtilebilir. Bu parametrenin varsayılan değeri %10'dur." @@ -11699,8 +12121,8 @@ msgstr "Atkı birleşim dikişi (beta)" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" -"Dikiş görünürlüğünü en aza indirmek ve dikiş mukavemetini arttırmak için " -"atkı birleşimini kullanın." +"Dikiş görünürlüğünü en aza indirmek ve dikiş mukavemetini arttırmak için atkı " +"birleşimini kullanın." msgid "Conditional scarf joint" msgstr "Koşullu atkı birleşimi" @@ -11718,9 +12140,9 @@ msgstr "Koşullu açı eşiği" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " "seam.\n" -"If the maximum angle within the perimeter loop exceeds this value " -"(indicating the absence of sharp corners), a scarf joint seam will be used. " -"The default value is 155°." +"If the maximum angle within the perimeter loop exceeds this value (indicating " +"the absence of sharp corners), a scarf joint seam will be used. The default " +"value is 155°." msgstr "" "Bu seçenek, koşullu bir atkı eklem dikişi uygulamak için eşik açısını " "ayarlar.\n" @@ -11735,37 +12157,37 @@ msgstr "Koşullu çıkıntı eşiği" msgid "" "This option determines the overhang threshold for the application of scarf " "joint seams. If the unsupported portion of the perimeter is less than this " -"threshold, scarf joint seams will be applied. The default threshold is set " -"at 40% of the external wall's width. Due to performance considerations, the " +"threshold, scarf joint seams will be applied. The default threshold is set at " +"40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" -"Bu seçenek, atkı bağlantı dikişlerinin uygulanması için sarkma " -"eşiğini 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ı" msgid "" "This option sets the printing speed for scarf joints. It is recommended to " -"print scarf joints at a slow speed (less than 100 mm/s). It's also " -"advisable to enable 'Extrusion rate smoothing' if the set speed varies " -"significantly from the speed of the outer or inner walls. If the speed " -"specified here is higher than the speed of the outer or inner walls, the " -"printer will default to the slower of the two speeds. When specified as a " -"percentage (e.g., 80%), the speed is calculated based on the respective " -"outer or inner wall speed. The default value is set to 100%." +"print scarf joints at a slow speed (less than 100 mm/s). It's also advisable " +"to enable 'Extrusion rate smoothing' if the set speed varies significantly " +"from the speed of the outer or inner walls. If the speed specified here is " +"higher than the speed of the outer or inner walls, the printer will default " +"to the slower of the two speeds. When specified as a percentage (e.g., 80%), " +"the speed is calculated based on the respective outer or inner wall speed. " +"The default value is set to 100%." msgstr "" "Bu seçenek, atkı bağlantılarının yazdırma hızını ayarlar. Atkı " "bağlantılarının yavaş bir hızda (100 mm/s'den az) yazdırılması tavsiye " "edilir. Ayarlanan hızın dış veya iç duvarların hızından önemli ölçüde farklı " -"olması durumunda 'Ekstrüzyon hızı yumuşatma' seçeneğinin etkinleştirilmesi " -"de tavsiye edilir. Burada belirtilen hız, dış veya iç duvarların hızından " -"daha yüksekse, yazıcı varsayılan olarak iki hızdan daha yavaş olanı " -"seçecektir. Yüzde olarak belirtildiğinde (örn. %80), hız, ilgili dış veya iç " -"duvar hızına göre hesaplanır. Varsayılan değer %100 olarak ayarlanmıştır." +"olması durumunda 'Ekstrüzyon hızı yumuşatma' seçeneğinin etkinleştirilmesi de " +"tavsiye edilir. Burada belirtilen hız, dış veya iç duvarların hızından daha " +"yüksekse, yazıcı varsayılan olarak iki hızdan daha yavaş olanı seçecektir. " +"Yüzde olarak belirtildiğinde (örn. %80), hız, ilgili dış veya iç duvar hızına " +"göre hesaplanır. Varsayılan değer %100 olarak ayarlanmıştır." msgid "Scarf joint flow ratio" msgstr "Atkı birleşimi akış oranı" @@ -11779,8 +12201,8 @@ msgstr "Atkı başlangıç ​​yüksekliği" msgid "" "Start height of the scarf.\n" -"This amount can be specified in millimeters or as a percentage of the " -"current layer height. The default value for this parameter is 0." +"This amount can be specified in millimeters or as a percentage of the current " +"layer height. The default value for this parameter is 0." msgstr "" "Atkı başlangıç yüksekliği.\n" "Bu miktar milimetre cinsinden veya geçerli katman yüksekliğinin yüzdesi " @@ -11799,8 +12221,8 @@ msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" -"Atkının uzunluğu. Bu parametrenin 0 a ayarlanması atkıyı dolaylı yoldan " -"devre dışı bırakır." +"Atkının uzunluğu. Bu parametrenin 0 a ayarlanması atkıyı dolaylı yoldan devre " +"dışı bırakır." msgid "Scarf steps" msgstr "Atkı kademesi" @@ -11841,15 +12263,15 @@ msgid "Wipe before external loop" msgstr "Harici döngüden önce silin" msgid "" -"To minimise visibility of potential overextrusion at the start of an " -"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " -"print order, the deretraction is performed slightly on the inside from the " -"start of the external perimeter. That way any potential over extrusion is " -"hidden from the outside surface. \n" +"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." +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall print " +"order as in these modes it is more likely an external perimeter is printed " +"immediately after a deretraction move." msgstr "" "Dış/İç veya İç/Dış/İç duvar baskı sırası ile yazdırırken, dış çevrenin " "başlangıcında olası aşırı çıkıntının görünürlüğünü en aza indirmek için, " @@ -11858,8 +12280,8 @@ msgstr "" "yüzeyden gizlenir. \n" "\n" "Bu, Dış/İç veya İç/Dış/İç duvar yazdırma sırası ile yazdırırken " -"kullanışlıdır, çünkü bu modlarda, bir geri çekilme hareketinin hemen " -"ardından bir dış çevrenin yazdırılması daha olasıdır." +"kullanışlıdır, çünkü bu modlarda, bir geri çekilme hareketinin hemen ardından " +"bir dış çevrenin yazdırılması daha olasıdır." msgid "Wipe speed" msgstr "Temizleme hızı" @@ -11890,8 +12312,7 @@ msgid "Skirt loops" msgstr "Etek sayısı" msgid "Number of loops for the skirt. Zero means disabling skirt" -msgstr "" -"Etek için ilmek sayısı. Sıfır, eteği devre dışı bırakmak anlamına gelir" +msgstr "Etek için ilmek sayısı. Sıfır, eteği devre dışı bırakmak anlamına gelir" msgid "Skirt speed" msgstr "Etek hızı" @@ -11920,8 +12341,8 @@ msgstr "" "bırakmıştır" msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +"Line width of internal solid infill. If expressed as a %, it will be computed " +"over the nozzle diameter." msgstr "" "İç katı dolgunun çizgi genişliği. % olarak ifade edilirse Nozul çapı " "üzerinden hesaplanacaktır." @@ -11929,17 +12350,14 @@ 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 " "generated model has no seam" msgstr "" "Spiralleştirme, dış konturun z hareketlerini yumuşatır. Ve katı bir modeli, " -"katı alt katmanlara sahip tek duvarlı bir baskıya dönüştürür. Oluşturulan " -"son modelde dikiş yok." +"katı alt katmanlara sahip tek duvarlı bir baskıya dönüştürür. Oluşturulan son " +"modelde dikiş yok." msgid "Smooth Spiral" msgstr "Pürüzsüz spiral" @@ -11964,12 +12382,11 @@ msgstr "" 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." +"with the chamber camera. All of these snapshots are composed into a timelapse " +"video when printing completes. If smooth mode is selected, the toolhead will " +"move to the excess chute after each layer is printed and then take a " +"snapshot. Since the melt filament may leak from the nozzle during the process " +"of taking a snapshot, prime tower is required for smooth mode to wipe nozzle." msgstr "" "Düzgün veya geleneksel mod seçilirse her baskı için bir hızlandırılmış video " "oluşturulacaktır. Her katman basıldıktan sonra oda kamerasıyla anlık görüntü " @@ -12030,10 +12447,9 @@ msgid "No sparse layers (beta)" msgstr "Seyrek katman yok (beta)" msgid "" -"If enabled, the wipe tower will not be printed on layers with no " -"toolchanges. On layers with a toolchange, extruder will travel downward to " -"print the wipe tower. User is responsible for ensuring there is no collision " -"with the print." +"If enabled, the wipe tower will not be printed on layers with no toolchanges. " +"On layers with a toolchange, extruder will travel downward to print the wipe " +"tower. User is responsible for ensuring there is no collision with the print." msgstr "" "Etkinleştirilirse, silme kulesi araç değişimi olmayan katmanlarda " "yazdırılmayacaktır. Araç değişimi olan katmanlarda, ekstruder silme kulesini " @@ -12058,16 +12474,16 @@ 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 "" -"Üçgen mesh dilimleme sırasında 2x boşluk kapatma yarıçapından küçük " -"çatlaklar doldurulmaktadır. Boşluk kapatma işlemi son yazdırma çözünürlüğünü " +"Üçgen mesh dilimleme sırasında 2x boşluk kapatma yarıçapından küçük çatlaklar " +"doldurulmaktadır. Boşluk kapatma işlemi son yazdırma çözünürlüğünü " "düşürebilir, bu nedenle değerin oldukça düşük tutulması tavsiye edilir." msgid "Slicing Mode" msgstr "Dilimleme modu" msgid "" -"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " -"close all holes in the model." +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close " +"all holes in the model." msgstr "" "3DLabPrint uçak modelleri için \"Çift-tek\" seçeneğini kullanın. Modeldeki " "tüm delikleri kapatmak için \"Delikleri kapat\"ı kullanın." @@ -12091,10 +12507,9 @@ msgid "" "print bed, set this to -0.3 (or fix your endstop)." msgstr "" "Bu değer, çıkış G-kodu içindeki tüm Z koordinatlarına eklenir (veya " -"çıkarılır).Bu, kötü Z endstop konumunu telafi etmek için kullanılır: " -"örneğin, endstop sıfır noktanız aslında nozulu baskı tablasından 0.3mm " -"uzakta bırakıyorsa, bu değeri -0.3 olarak ayarlayın (veya endstop'unuzu " -"düzeltin)." +"çıkarılır).Bu, kötü Z endstop konumunu telafi etmek için kullanılır: örneğin, " +"endstop sıfır noktanız aslında nozulu baskı tablasından 0.3mm uzakta " +"bırakıyorsa, bu değeri -0.3 olarak ayarlayın (veya endstop'unuzu düzeltin)." msgid "Enable support" msgstr "Desteği etkinleştir" @@ -12148,8 +12563,7 @@ msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Yalnızca keskin kuyruk, konsol vb. gibi kritik bölgeler için destek " -"oluşturun." +"Yalnızca keskin kuyruk, konsol vb. gibi kritik bölgeler için destek oluşturun." msgid "Remove small overhangs" msgstr "Küçük çıkıntıları kaldır" @@ -12186,8 +12600,7 @@ msgstr "Taban için arayüz filamentini azaltın" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" -"Destek tabanını yazdırmak için destek arayüzü filamentini kullanmaktan " -"kaçının" +"Destek tabanını yazdırmak için destek arayüzü filamentini kullanmaktan kaçının" msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -12262,8 +12675,8 @@ msgstr "Arayüz deseni" msgid "" "Line pattern of support interface. Default pattern for non-soluble support " -"interface is Rectilinear, while default pattern for soluble support " -"interface is Concentric" +"interface is Rectilinear, while default pattern for soluble support interface " +"is Concentric" msgstr "" "Destek arayüzünün çizgi deseni. Çözünmeyen destek arayüzü için varsayılan " "model Doğrusaldır, çözünebilir destek arayüzü için varsayılan model ise " @@ -12292,12 +12705,11 @@ msgid "" "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." +"aggressively and save a lot of material (default organic), while hybrid style " +"will create similar structure to normal support under large flat overhangs." msgstr "" -"Destek stil ve şekli. Normal destek için, destekleri düzenli bir ızgara " -"içine projelendirmek daha stabil destekler oluşturacaktır (varsayılan), aynı " +"Destek stil ve şekli. Normal destek için, destekleri düzenli bir ızgara içine " +"projelendirmek daha stabil destekler oluşturacaktır (varsayılan), aynı " "zamanda sıkı destek kuleleri malzeme tasarrufu sağlar ve nesne üzerindeki " "izleri azaltır.\n" "Ağaç destek için, ince ve organik tarz, dalları daha etkili bir şekilde " @@ -12346,8 +12758,8 @@ msgid "Tree support branch angle" msgstr "Ağaç desteği dal açısı" msgid "" -"This setting determines the maximum overhang angle that t he branches of " -"tree support allowed to make.If the angle is increased, the branches can be " +"This setting determines the maximum overhang angle that t he branches of tree " +"support allowed to make.If the angle is increased, the branches can be " "printed more horizontally, allowing them to reach farther." msgstr "" "Bu ayar, ağaç desteğinin dallarının oluşmasına izin verilen maksimum çıkıntı " @@ -12379,11 +12791,10 @@ msgstr "Dal Yoğunluğu" #. TRN PrintSettings: "Organic supports" > "Branch Density" msgid "" -"Adjusts the density of the support structure used to generate the tips of " -"the branches. A higher value results in better overhangs but the supports " -"are harder to remove, thus it is recommended to enable top support " -"interfaces instead of a high branch density value if dense interfaces are " -"needed." +"Adjusts the density of the support structure used to generate the tips of the " +"branches. A higher value results in better overhangs but the supports are " +"harder to remove, thus it is recommended to enable top support interfaces " +"instead of a high branch density value if dense interfaces are needed." msgstr "" "Dalların uçlarını oluşturmak için kullanılan destek yapısının yoğunluğunu " "ayarlar. Daha yüksek bir değer daha iyi çıkıntılarla sonuçlanır, ancak " @@ -12395,8 +12806,8 @@ msgid "Adaptive layer height" msgstr "Uyarlanabilir katman yüksekliği" msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " +"Enabling this option means the height of tree support layer except the first " +"will be automatically calculated " msgstr "" "Bu seçeneğin etkinleştirilmesi, ilki hariç ağaç destek katmanının " "yüksekliğinin otomatik olarak hesaplanacağı anlamına gelir " @@ -12451,8 +12862,8 @@ msgstr "Çift duvarlı dal çapı" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" "Branches with area larger than the area of a circle of this diameter will be " -"printed with double walls for stability. Set this value to zero for no " -"double walls." +"printed with double walls for stability. Set this value to zero for no double " +"walls." msgstr "" "Bu çaptaki bir dairenin alanından daha büyük alana sahip dallar, stabilite " "için çift duvarlı olarak basılacaktır. Çift duvar olmaması için bu değeri " @@ -12482,8 +12893,8 @@ msgid "" "added before \"machine_start_gcode\"\n" "G-code commands: M141/M191 S(0-255)" msgstr "" -"Hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Önce bir M191 " -"komutu eklenecek \"machine_start_gcode\"\n" +"Hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Önce bir M191 komutu " +"eklenecek \"machine_start_gcode\"\n" "G-code komut: M141/M191 S(0-255)" msgid "Chamber temperature" @@ -12561,11 +12972,11 @@ 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" +"is disabled and thickness of top shell is absolutely determained by top shell " +"layers" msgstr "" -"Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince " -"ise dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman " +"Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise " +"dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman " "yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu " "ayarın devre dışı olduğu ve üst kabuğun kalınlığının kesinlikle üst kabuk " "katmanları tarafından belirlendiği anlamına gelir" @@ -12588,12 +12999,11 @@ msgid "Wipe Distance" msgstr "Temizleme mesafesi" msgid "" -"Discribe how long the nozzle will move along the last path when " -"retracting. \n" +"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" +"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." @@ -12601,9 +13011,9 @@ msgstr "" "Geri çekilirken nozulun son yol boyunca ne kadar süre hareket edeceğini " "açıklayın. \n" "\n" -"Silme işleminin ne kadar sürdüğüne, ekstruder/filament geri çekme " -"ayarlarının ne kadar hızlı ve uzun olduğuna bağlı olarak, kalan filamanı " -"geri çekmek için bir geri çekme hareketine ihtiyaç duyulabilir. \n" +"Silme işleminin ne kadar sürdüğüne, ekstruder/filament geri çekme ayarlarının " +"ne kadar hızlı ve uzun olduğuna bağlı olarak, kalan filamanı geri çekmek için " +"bir geri çekme hareketine ihtiyaç duyulabilir. \n" "\n" "Aşağıdaki silme ayarından önce geri çekme miktarına bir değer ayarlamak, " "silme işleminden önce aşırı geri çekme işlemini gerçekleştirecektir, aksi " @@ -12653,8 +13063,8 @@ msgid "" "Angle at the apex of the cone that is used to stabilize the wipe tower. " "Larger angle means wider base." msgstr "" -"Silme kulesini stabilize etmek için kullanılan koninin tepe noktasındaki " -"açı. Daha büyük açı daha geniş taban anlamına gelir." +"Silme kulesini stabilize etmek için kullanılan koninin tepe noktasındaki açı. " +"Daha büyük açı daha geniş taban anlamına gelir." msgid "Wipe tower purge lines spacing" msgstr "Silme kulesi temizleme hatları aralığı" @@ -12681,8 +13091,8 @@ msgid "" "volumes below." msgstr "" "Bu vektör, silme kulesinde kullanılan her bir araçtan/araca geçiş için " -"gerekli hacimleri kaydeder. Bu değerler, aşağıdaki tam temizleme " -"hacimlerinin oluşturulmasını basitleştirmek için kullanılır." +"gerekli hacimleri kaydeder. Bu değerler, aşağıdaki tam temizleme hacimlerinin " +"oluşturulmasını basitleştirmek için kullanılır." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -12706,13 +13116,13 @@ msgstr "" msgid "" "This object will be used to purge the nozzle after a filament change to save " -"filament and decrease the print time. Colours of the objects will be mixed " -"as a result. It will not take effect, unless the prime tower is enabled." +"filament and decrease the print time. Colours of the objects will be mixed as " +"a result. It will not take effect, unless the prime tower is enabled." msgstr "" -"Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için " -"filament değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç " -"olarak nesnelerin renkleri karıştırılacaktır. Prime tower " -"etkinleştirilmediği sürece etkili olmayacaktır." +"Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için filament " +"değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç olarak " +"nesnelerin renkleri karıştırılacaktır. Prime tower etkinleştirilmediği sürece " +"etkili olmayacaktır." msgid "Maximal bridging distance" msgstr "Maksimum köprüleme mesafesi" @@ -12721,8 +13131,8 @@ msgid "Maximal distance between supports on sparse infill sections." msgstr "" "Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için bir " "filament değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç " -"olarak nesnelerin renkleri karıştırılacaktır. Prime tower " -"etkinleştirilmediği sürece etkili olmayacaktır." +"olarak nesnelerin renkleri karıştırılacaktır. Prime tower etkinleştirilmediği " +"sürece etkili olmayacaktır." msgid "X-Y hole compensation" msgstr "X-Y delik dengeleme" @@ -12747,8 +13157,8 @@ msgid "" "assembling issue" msgstr "" "Nesnenin konturu XY düzleminde yapılandırılan değer kadar büyütülür veya " -"küçültülür. Pozitif değer konturu büyütür. Negatif değer konturu küçültür. " -"Bu fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe ayarlamak için " +"küçültülür. Pozitif değer konturu büyütür. Negatif değer konturu küçültür. Bu " +"fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe ayarlamak için " "kullanılır" msgid "Convert holes to polyholes" @@ -12772,14 +13182,14 @@ msgstr "Çokgen delik tespiti marjı" msgid "" "Maximum defection of a point to the estimated radius of the circle.\n" "As cylinders are often exported as triangles of varying size, points may not " -"be on the circle circumference. This setting allows you some leway to " -"broaden the detection.\n" +"be on the circle circumference. This setting allows you some leway to broaden " +"the detection.\n" "In mm or in % of the radius." msgstr "" "Bir noktanın dairenin tahmini yarıçapına göre maksimum sapması.\n" "Silindirler genellikle farklı boyutlarda üçgenler olarak ihraç edildiğinden, " -"noktalar daire çevresinde olmayabilir. Bu ayar, algılamayı genişletmeniz " -"için size biraz alan sağlar.\n" +"noktalar daire çevresinde olmayabilir. Bu ayar, algılamayı genişletmeniz için " +"size biraz alan sağlar.\n" "inc mm cinsinden veya yarıçapın %'si cinsinden." msgid "Polyhole twist" @@ -12802,8 +13212,8 @@ msgid "Format of G-code thumbnails" msgstr "G kodu küçük resimlerinin formatı" msgid "" -"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " -"QOI for low memory firmware" +"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI " +"for low memory firmware" msgstr "" "G kodu küçük resimlerinin formatı: En iyi kalite için PNG, en küçük boyut " "için JPG, düşük bellekli donanım yazılımı için QOI" @@ -12824,11 +13234,11 @@ msgstr "" msgid "" "Classic wall generator produces walls with constant extrusion width and for " -"very thin areas is used gap-fill. Arachne engine produces walls with " -"variable extrusion width" +"very thin areas is used gap-fill. Arachne engine produces walls with variable " +"extrusion width" msgstr "" -"Klasik duvar oluşturucu sabit ekstrüzyon genişliğine sahip duvarlar üretir " -"ve çok ince alanlar için boşluk doldurma kullanılır. Arachne motoru değişken " +"Klasik duvar oluşturucu sabit ekstrüzyon genişliğine sahip duvarlar üretir ve " +"çok ince alanlar için boşluk doldurma kullanılır. Arachne motoru değişken " "ekstrüzyon genişliğine sahip duvarlar üretir" msgid "Classic" @@ -12855,20 +13265,19 @@ msgstr "Duvar geçiş filtresi oranı" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " "This margin extends the range of extrusion widths which follow to [Minimum " -"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " -"margin reduces the number of transitions, which reduces the number of " -"extrusion starts/stops and travel time. However, large extrusion width " -"variation can lead to under- or overextrusion problems. It's expressed as a " -"percentage over nozzle diameter" -msgstr "" -"Fazladan bir duvar ile bir eksik arasında ileri geri geçişi önleyin. Bu " -"kenar boşluğu, [Minimum duvar genişliği - kenar boşluğu, 2 * Minimum duvar " +"wall width - margin, 2 * Minimum wall width + margin]. Increasing this margin " +"reduces the number of transitions, which reduces the number of extrusion " +"starts/stops and travel time. However, large extrusion width variation can " +"lead to under- or overextrusion problems. It's expressed as a percentage over " +"nozzle diameter" +msgstr "" +"Fazladan bir duvar ile bir eksik arasında ileri geri geçişi önleyin. Bu kenar " +"boşluğu, [Minimum duvar genişliği - kenar boşluğu, 2 * Minimum duvar " "genişliği + kenar boşluğu] şeklinde takip eden ekstrüzyon genişlikleri " "aralığını genişletir. Bu marjın arttırılması geçiş sayısını azaltır, bu da " "ekstrüzyonun başlama/durma sayısını ve seyahat süresini azaltır. Bununla " -"birlikte, büyük ekstrüzyon genişliği değişimi, yetersiz veya aşırı " -"ekstrüzyon sorunlarına yol açabilir. Nozul çapına göre yüzde olarak ifade " -"edilir" +"birlikte, büyük ekstrüzyon genişliği değişimi, yetersiz veya aşırı ekstrüzyon " +"sorunlarına yol açabilir. Nozul çapına göre yüzde olarak ifade edilir" msgid "Wall transitioning threshold angle" msgstr "Duvar geçiş açısı" @@ -12880,11 +13289,11 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"Çift ve tek sayıdaki duvarlar arasında geçişler ne zaman oluşturulmalıdır? " -"Bu ayardan daha büyük bir açıya sahip bir kama şeklinin geçişleri olmayacak " -"ve kalan alanı dolduracak şekilde ortada hiçbir duvar basılmayacaktır. Bu " -"ayarın düşürülmesi, bu merkez duvarların sayısını ve uzunluğunu azaltır " -"ancak boşluklara veya aşırı çıkıntıya neden olabilir" +"Çift ve tek sayıdaki duvarlar arasında geçişler ne zaman oluşturulmalıdır? Bu " +"ayardan daha büyük bir açıya sahip bir kama şeklinin geçişleri olmayacak ve " +"kalan alanı dolduracak şekilde ortada hiçbir duvar basılmayacaktır. Bu ayarın " +"düşürülmesi, bu merkez duvarların sayısını ve uzunluğunu azaltır ancak " +"boşluklara veya aşırı çıkıntıya neden olabilir" msgid "Wall distribution count" msgstr "Duvar dağılım sayısı" @@ -12900,9 +13309,9 @@ msgid "Minimum feature size" msgstr "Minimum özellik boyutu" msgid "" -"Minimum thickness of thin features. Model features that are thinner than " -"this value will not be printed, while features thicker than the Minimum " -"feature size will be widened to the Minimum wall width. It's expressed as a " +"Minimum thickness of thin features. Model features that are thinner than this " +"value will not be printed, while features thicker than the Minimum feature " +"size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" "İnce özellikler için minimum kalınlık. Bu değerden daha ince olan model " @@ -12919,28 +13328,27 @@ msgid "" "\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." +"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 "" "Yazdırma süresini artırabilecek kısa, kapatılmamış duvarların yazdırılmasını " "önlemek için bu değeri ayarlayın. Daha yüksek değerler daha fazla ve daha " "uzun duvarları kaldırır.\n" "\n" -"NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst yüzeyler " -"bu değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen şeyin " -"hassasiyetini ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek duvar " -"eşiği'ni ayarlayın. 'Tek duvar eşiği' yalnızca bu ayar varsayılan değer olan " -"0,5'in üzerine ayarlandığında veya tek duvarlı üst yüzeyler " -"etkinleştirildiğinde görünür." +"NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst yüzeyler bu " +"değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen şeyin hassasiyetini " +"ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek duvar eşiği'ni ayarlayın. " +"'Tek duvar eşiği' yalnızca bu ayar varsayılan değer olan 0,5'in üzerine " +"ayarlandığında veya tek duvarlı üst yüzeyler etkinleştirildiğinde görünür." msgid "First layer minimum wall width" msgstr "İlk katman minimum duvar genişliği" msgid "" -"The minimum wall width that should be used for the first layer is " -"recommended to be set to the same size as the nozzle. This adjustment is " -"expected to enhance adhesion." +"The minimum wall width that should be used for the first layer is recommended " +"to be set to the same size as the nozzle. This adjustment is expected to " +"enhance adhesion." msgstr "" "İlk katman için kullanılması gereken minimum duvar genişliğinin nozul ile " "aynı boyuta ayarlanması tavsiye edilir. Bu ayarlamanın yapışmayı artırması " @@ -12965,8 +13373,8 @@ msgstr "Dar iç katı dolguyu tespit et" msgid "" "This option will auto detect narrow internal solid infill area. If enabled, " -"concentric pattern will be used for the area to speed printing up. " -"Otherwise, rectilinear pattern is used defaultly." +"concentric pattern will be used for the area to speed printing up. Otherwise, " +"rectilinear pattern is used defaultly." msgstr "" "Bu seçenek dar dahili katı dolgu alanını otomatik olarak algılayacaktır. " "Etkinleştirilirse, yazdırmayı hızlandırmak amacıyla alanda eşmerkezli desen " @@ -13012,8 +13420,7 @@ msgstr "Yönlendirme Seçenekleri" msgid "Orient options: 0-disable, 1-enable, others-auto" msgstr "" -"Yönlendirme seçenekleri: 0-devre dışı bırak, 1-etkinleştir, diğerleri-" -"otomatik" +"Yönlendirme seçenekleri: 0-devre dışı bırak, 1-etkinleştir, diğerleri-otomatik" msgid "Rotation angle around the Z axis in degrees." msgstr "Z ekseni etrafında derece cinsinden dönüş açısı." @@ -13058,13 +13465,13 @@ msgstr "" "ettiğini bilmesi için bu değişkene yazması gerekir." msgid "" -"Retraction state at the beginning of the custom G-code block. If the custom " -"G-code moves the extruder axis, it should write to this variable so " -"PrusaSlicer deretracts correctly when it gets control back." +"Retraction state at the beginning of the custom G-code block. If the custom G-" +"code moves the extruder axis, it should write to this variable so PrusaSlicer " +"deretracts correctly when it gets control back." msgstr "" "Özel G kodu bloğunun başlangıcındaki geri çekilme durumu. Özel G kodu " -"ekstruder eksenini hareket ettirirse, Slicer'ın kontrolü geri aldığında " -"doğru şekilde geri çekme yapması için bu değişkene yazması gerekir." +"ekstruder eksenini hareket ettirirse, Slicer'ın kontrolü geri aldığında doğru " +"şekilde geri çekme yapması için bu değişkene yazması gerekir." msgid "Extra deretraction" msgstr "Ekstra deretraksiyon" @@ -13089,7 +13496,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ğı." @@ -13134,7 +13541,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" @@ -13149,18 +13556,18 @@ msgid "" "Weight per extruder extruded during the entire print. Calculated from " "filament_density value in Filament Settings." msgstr "" -"Baskının tamamı boyunca ekstrüzyon yapılan ekstruder başına ağırlık. " -"Filament Ayarlarındaki filaman yoğunluğu değerinden hesaplanır." +"Baskının tamamı boyunca ekstrüzyon yapılan ekstruder başına ağırlık. Filament " +"Ayarlarındaki filaman yoğunluğu değerinden hesaplanır." msgid "Total weight" msgstr "Toplam ağırlık" msgid "" -"Total weight of the print. Calculated from filament_density value in " -"Filament Settings." +"Total weight of the print. Calculated from filament_density value in Filament " +"Settings." msgstr "" -"Baskının toplam ağırlığı. Filament Ayarlarındaki filaman yoğunluğu " -"değerinden hesaplanır." +"Baskının toplam ağırlığı. Filament Ayarlarındaki filaman yoğunluğu değerinden " +"hesaplanır." msgid "Total layer count" msgstr "Toplam katman sayısı" @@ -13209,8 +13616,8 @@ msgstr "" "cinsindendir." msgid "" -"The vector has two elements: x and y dimension of the bounding box. Values " -"in mm." +"The vector has two elements: x and y dimension of the bounding box. Values in " +"mm." msgstr "" "Vektörün iki öğesi vardır: sınırlayıcı kutunun x ve y boyutu. Değerler mm " "cinsindendir." @@ -13222,8 +13629,8 @@ msgid "" "Vector of points of the first layer convex hull. Each element has the " "following format:'[x, y]' (x and y are floating-point numbers in mm)." msgstr "" -"Birinci katmanın dışbükey gövdesinin noktalarının vektörü. Her öğe şu " -"formata sahiptir:'[x, y]' (x ve y, mm cinsinden kayan noktalı sayılardır)." +"Birinci katmanın dışbükey gövdesinin noktalarının vektörü. Her öğe şu formata " +"sahiptir:'[x, y]' (x ve y, mm cinsinden kayan noktalı sayılardır)." msgid "Bottom-left corner of first layer bounding box" msgstr "İlk katman sınırlayıcı kutusunun sol alt köşesi" @@ -13419,8 +13826,7 @@ msgstr "Sağlanan dosya boş olduğundan okunamadı" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Bilinmeyen dosya formatı. Giriş dosyası .3mf veya .zip.amf uzantılı " -"olmalıdır." +"Bilinmeyen dosya formatı. Giriş dosyası .3mf veya .zip.amf uzantılı olmalıdır." msgid "Canceled" msgstr "İptal edildi" @@ -13428,6 +13834,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." @@ -13506,12 +13915,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" @@ -13545,8 +13948,7 @@ msgstr "yeni ön ayar oluşturma başarısız oldu." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" -"Mevcut kalibrasyonu iptal edip ana sayfaya dönmek istediğinizden emin " -"misiniz?" +"Mevcut kalibrasyonu iptal edip ana sayfaya dönmek istediğinizden emin misiniz?" msgid "No Printer Connected!" msgstr "Yazıcı Bağlı Değil!" @@ -13560,6 +13962,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..." @@ -13569,6 +13984,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" @@ -13586,10 +14019,10 @@ msgstr "Akış Dinamiği Kalibrasyonuna ne zaman ihtiyacınız olur" msgid "" "We now have added the auto-calibration for different filaments, which is " -"fully automated and the result will be saved into the printer for future " -"use. You only need to do the calibration in the following limited cases:\n" -"1. If you introduce a new filament of different brands/models or the " -"filament is damp;\n" +"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." @@ -13611,10 +14044,10 @@ msgid "" "\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" +"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 " @@ -13640,9 +14073,9 @@ msgstr "" "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 " +"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 "When to use Flow Rate Calibration" @@ -13683,10 +14116,10 @@ msgstr "" msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " "volumes. The default setting works well in Bambu Lab printers and official " -"filaments as they were pre-calibrated and fine-tuned. For a regular " -"filament, you usually won't need to perform a Flow Rate Calibration unless " -"you still see the listed defects after you have done other calibrations. For " -"more details, please check out the wiki article." +"filaments as they were pre-calibrated and fine-tuned. For a regular filament, " +"you usually won't need to perform a Flow Rate Calibration unless you still " +"see the listed defects after you have done other calibrations. For more " +"details, please check out the wiki article." msgstr "" "Akış Hızı Kalibrasyonu, beklenen ekstrüzyon hacimlerinin gerçek ekstrüzyon " "hacimlerine oranını ölçer. Varsayılan ayar, önceden kalibre edilmiş ve ince " @@ -13701,13 +14134,12 @@ msgid "" "directly measuring the calibration patterns. However, please be advised that " "the efficacy and accuracy of this method may be compromised with specific " "types of materials. Particularly, filaments that are transparent or semi-" -"transparent, sparkling-particled, or have a high-reflective finish may not " -"be suitable for this calibration and can produce less-than-desirable " -"results.\n" +"transparent, sparkling-particled, or have a high-reflective finish may not be " +"suitable for this calibration and can produce less-than-desirable results.\n" "\n" -"The calibration results may vary between each calibration or filament. We " -"are still improving the accuracy and compatibility of this calibration " -"through firmware updates over time.\n" +"The calibration results may vary between each calibration or filament. We are " +"still improving the accuracy and compatibility of this calibration through " +"firmware updates over time.\n" "\n" "Caution: Flow Rate Calibration is an advanced process, to be attempted only " "by those who fully understand its purpose and implications. Incorrect usage " @@ -13718,8 +14150,8 @@ msgstr "" "kullanarak kalibrasyon modellerini doğrudan ölçer. Ancak, bu yöntemin " "etkinliğinin ve doğruluğunun belirli malzeme türleriyle tehlikeye " "girebileceğini lütfen unutmayın. Özellikle şeffaf veya yarı şeffaf, parlak " -"parçacıklı veya yüksek yansıtıcı yüzeye sahip filamentler bu kalibrasyon " -"için uygun olmayabilir ve arzu edilenden daha az sonuçlar üretebilir.\n" +"parçacıklı veya yüksek yansıtıcı yüzeye sahip filamentler bu kalibrasyon için " +"uygun olmayabilir ve arzu edilenden daha az sonuçlar üretebilir.\n" "\n" "Kalibrasyon sonuçları her kalibrasyon veya filament arasında farklılık " "gösterebilir. Zaman içinde ürün yazılımı güncellemeleriyle bu kalibrasyonun " @@ -13728,8 +14160,8 @@ msgstr "" "Dikkat: Akış Hızı Kalibrasyonu, yalnızca amacını ve sonuçlarını tam olarak " "anlayan kişiler tarafından denenmesi gereken gelişmiş bir işlemdir. Yanlış " "kullanım, ortalamanın altında baskılara veya yazıcının zarar görmesine neden " -"olabilir. Lütfen işlemi yapmadan önce işlemi dikkatlice okuyup " -"anladığınızdan emin olun." +"olabilir. Lütfen işlemi yapmadan önce işlemi dikkatlice okuyup anladığınızdan " +"emin olun." msgid "When you need Max Volumetric Speed Calibration" msgstr "Maksimum Hacimsel Hız Kalibrasyonuna ihtiyaç duyduğunuzda" @@ -13751,20 +14183,26 @@ msgid "We found the best Flow Dynamics Calibration Factor" msgstr "En iyi Akış Dinamiği Kalibrasyon Faktörünü bulduk" msgid "" -"Part of the calibration failed! You may clean the plate and retry. The " -"failed test result would be dropped." +"Part of the calibration failed! You may clean the plate and retry. The failed " +"test result would be dropped." msgstr "" "Kalibrasyonun bir kısmı başarısız oldu! Plakayı temizleyip tekrar " "deneyebilirsiniz. Başarısız olan test sonucu görmezden gelinir." msgid "" -"*We recommend you to add brand, materia, type, and even humidity level in " -"the Name" +"*We recommend you to add brand, materia, type, and even humidity level in the " +"Name" msgstr "*İsme marka, malzeme, tür ve hatta nem seviyesini eklemenizi öneririz" msgid "Failed" 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?" @@ -13774,9 +14212,9 @@ 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?" +"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 " @@ -13862,12 +14300,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Yazdırma Parametreleri" -msgid "- ℃" -msgstr "- °C" - -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Plaka Tipi" @@ -13914,12 +14346,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" @@ -13932,6 +14358,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" @@ -13944,9 +14373,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ı" @@ -14334,6 +14777,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" @@ -14345,8 +14798,8 @@ msgstr "" "Yeniden yazmak ister misin?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you selected" -"\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you " +"selected\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Ön ayarları şu şekilde yeniden adlandırırdık: \"Satıcı Türü Seçtiğiniz Seri " @@ -14454,15 +14907,15 @@ msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" -"Hangi yazıcı ön ayarının temel alınacağını henüz seçmediniz. Lütfen " -"yazıcının satıcısını ve modelini seçin" +"Hangi yazıcı ön ayarının temel alınacağını henüz seçmediniz. Lütfen yazıcının " +"satıcısını ve modelini seçin" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" -"İlk sayfadaki yazdırılabilir alan kısmına geçersiz bir giriş yaptınız. " -"Lütfen oluşturmadan önce kontrol edin." +"İlk sayfadaki yazdırılabilir alan kısmına geçersiz bir giriş yaptınız. Lütfen " +"oluşturmadan önce kontrol edin." msgid "The custom printer or model is not inputed, place input." msgstr "Özel yazıcı veya model girilmedi lütfen giriş yapın." @@ -14479,8 +14932,7 @@ msgstr "" "Oluşturduğunuz yazıcı ön ayarının zaten aynı ada sahip bir ön ayarı var. " "Üzerine yazmak istiyor musunuz?\n" "\tEvet: Aynı adı taşıyan yazıcı ön ayarının üzerine yazın; aynı ön ayar adı " -"taşıyan filaman ve proses ön ayarları yeniden oluşturulacak ve aynı ön " -"ayar \n" +"taşıyan filaman ve proses ön ayarları yeniden oluşturulacak ve aynı ön ayar \n" "adı olmayan filament ve işlem ön ayarları rezerve edilecektir.\n" "\tİptal: Ön ayar oluşturmayın, oluşturma arayüzüne dönün." @@ -14526,8 +14978,7 @@ msgstr "" msgid "" "You have not yet selected the printer to replace the nozzle, please choose." -msgstr "" -"Hala nozulu değiştirmek için yazıcı seçmediniz, lütfen bir seçim yapın." +msgstr "Hala nozulu değiştirmek için yazıcı seçmediniz, lütfen bir seçim yapın." msgid "Create Printer Successful" msgstr "Yazıcı Oluşturma Başarılı" @@ -14547,15 +14998,31 @@ 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" +"Studio 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ı" @@ -14597,8 +15064,8 @@ msgstr "Dışa aktarma başarılı" #, c-format, boost-format msgid "" -"The '%s' folder already exists in the current directory. Do you want to " -"clear it and rebuild it.\n" +"The '%s' folder already exists in the current directory. Do you want to clear " +"it and rebuild it.\n" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" @@ -14637,8 +15104,8 @@ msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" -"Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek " -"ve seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." +"Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek ve " +"seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." msgid "" "Only the filament names with user filament presets will be displayed, \n" @@ -14646,13 +15113,13 @@ msgid "" "exported as a zip." msgstr "" "Yalnızca kullanıcı filamenti ön ayarlarına sahip filament adları \n" -"görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti " -"ön ayarları zip olarak dışa aktarılacaktır." +"görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti ön " +"ayarları zip olarak dışa aktarılacaktır." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be " -"exported as a zip." +"and all user process presets in each printer name you select will be exported " +"as a zip." msgstr "" "Yalnızca işlem ön ayarları değiştirilen yazıcı adları görüntülenecek \n" "ve seçtiğiniz her yazıcı adındaki tüm kullanıcı işlem ön ayarları zip olarak " @@ -14664,6 +15131,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" @@ -14671,8 +15143,8 @@ msgid "Filament presets under this filament" msgstr "Bu filamentin altındaki filament ön ayarları" msgid "" -"Note: If the only preset under this filament is deleted, the filament will " -"be deleted after exiting the dialog." +"Note: If the only preset under this filament is deleted, the filament will be " +"deleted after exiting the dialog." msgstr "" "Not: Bu filamentin altındaki tek ön ayar silinirse, diyalogdan çıkıldıktan " "sonra filament silinecektir." @@ -14739,6 +15211,17 @@ msgstr "Daralt" msgid "Daily Tips" msgstr "Günlük İpuçları" +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" @@ -14788,8 +15271,8 @@ msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" -"Bu sistemde %s, sistem Sertifika Deposu veya Anahtar Zincirinden alınan " -"HTTPS sertifikalarını kullanıyor." +"Bu sistemde %s, sistem Sertifika Deposu veya Anahtar Zincirinden alınan HTTPS " +"sertifikalarını kullanıyor." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " @@ -14938,6 +15421,273 @@ 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ı!" @@ -14951,14 +15701,15 @@ 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." +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." +"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." +"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" @@ -14976,7 +15727,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." @@ -15000,8 +15752,7 @@ msgid "" msgstr "" "Sandviç modu\n" "Modelinizde çok dik çıkıntılar yoksa hassasiyeti ve katman tutarlılığını " -"artırmak için sandviç modunu (iç-dış-iç) kullanabileceğinizi biliyor " -"muydunuz?" +"artırmak için sandviç modunu (iç-dış-iç) kullanabileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -15063,14 +15814,14 @@ msgid "" "3D scene operations." msgstr "" "Klavye kısayolları nasıl kullanılır?\n" -"Orca Slicer'ın çok çeşitli klavye kısayolları ve 3B sahne işlemleri " -"sunduğunu biliyor muydunuz?" +"Orca Slicer'ın çok çeşitli klavye kısayolları ve 3B sahne işlemleri sunduğunu " +"biliyor muydunuz?" #: resources/data/hints.ini: [hint:Reverse on odd] msgid "" "Reverse on odd\n" -"Did you know that Reverse on odd feature can significantly improve " -"the surface quality of your overhangs?" +"Did you know that Reverse on odd feature can significantly improve the " +"surface quality of your overhangs?" msgstr "" "Tek sayıyı tersine çevir\n" "Tek sayıyı ters çevir özelliğinin çıkıntılarınızın yüzey kalitesini " @@ -15093,8 +15844,8 @@ msgid "" "problems on the Windows system?" msgstr "" "Modeli Düzelt\n" -"Windows sisteminde birçok dilimleme sorununu önlemek için bozuk bir 3D " -"modeli düzeltebileceğinizi biliyor muydunuz?" +"Windows sisteminde birçok dilimleme sorununu önlemek için bozuk bir 3D modeli " +"düzeltebileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -15227,9 +15978,9 @@ msgstr "" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" "Fine-tuning for flow rate\n" -"Did you know that flow rate can be fine-tuned for even better-looking " -"prints? Depending on the material, you can improve the overall finish of the " -"printed model by doing some fine-tuning." +"Did you know that flow rate can be fine-tuned for even better-looking prints? " +"Depending on the material, you can improve the overall finish of the printed " +"model by doing some fine-tuning." msgstr "" "Akış hızı için ince ayar\n" "Baskıların daha da iyi görünmesi için akış hızına ince ayar yapılabileceğini " @@ -15263,8 +16014,8 @@ msgstr "" msgid "" "Support painting\n" "Did you know that you can paint the location of your supports? This feature " -"makes it easy to place the support material only on the sections of the " -"model that actually need it." +"makes it easy to place the support material only on the sections of the model " +"that actually need it." msgstr "" "Destek boyama\n" "Desteklerinizin yerini boyayabileceğinizi biliyor muydunuz? Bu özellik, " @@ -15369,6 +16120,271 @@ msgstr "" "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "azaltabileceğini biliyor muydunuz?" +#~ 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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Orca Slicer'ya aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel " +#~ "olarak İçe aktarın." + +#~ 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ü:" @@ -15412,8 +16428,8 @@ msgstr "" #~ msgstr "Depolama Yüklemesini Test Etme" #~ msgid "" -#~ "The speed setting exceeds the printer's maximum speed " -#~ "(machine_max_speed_x/machine_max_speed_y).\n" +#~ "The speed setting exceeds the printer's maximum speed (machine_max_speed_x/" +#~ "machine_max_speed_y).\n" #~ "Orca will automatically cap the print speed to ensure it doesn't surpass " #~ "the printer's capabilities.\n" #~ "You can adjust the maximum speed setting in your printer's configuration " @@ -15421,8 +16437,8 @@ msgstr "" #~ msgstr "" #~ "Hız ayarı yazıcının maksimum hızını aşıyor (machine_max_speed_x/" #~ "machine_max_speed_y).\n" -#~ "Orca, yazıcının yeteneklerini aşmadığından emin olmak için yazdırma " -#~ "hızını otomatik olarak sınırlayacaktır.\n" +#~ "Orca, yazıcının yeteneklerini aşmadığından emin olmak için yazdırma hızını " +#~ "otomatik olarak sınırlayacaktır.\n" #~ "Daha yüksek hızlar elde etmek için yazıcınızın yapılandırmasındaki " #~ "maksimum hız ayarını yapabilirsiniz." @@ -15448,8 +16464,8 @@ msgstr "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " #~ "thickness (top+bottom solid layers)" #~ msgstr "" -#~ "Dikey kabuk kalınlığını garanti etmek için eğimli yüzeylerin yakınına " -#~ "katı dolgu ekleyin (üst + alt katı katmanlar)" +#~ "Dikey kabuk kalınlığını garanti etmek için eğimli yüzeylerin yakınına katı " +#~ "dolgu ekleyin (üst + alt katı katmanlar)" #~ msgid "Further reduce solid infill on walls (beta)" #~ msgstr "Duvarlardaki katı dolguyu daha da azaltın (deneysel)" @@ -15503,19 +16519,19 @@ msgstr "" #~ "are not specified explicitly." #~ msgstr "" #~ "Daha iyi katman soğutması için yavaşlama etkinleştirildiğinde, yazdırma " -#~ "çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde " -#~ "filament için minimum yazdırma hızı." +#~ "çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde filament " +#~ "için minimum yazdırma hızı." #~ msgid "No sparse layers (EXPERIMENTAL)" #~ msgstr "Seyrek katman yok (DENEYSEL)" #~ 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 "" -#~ "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" #~ msgid "The Config can not be loaded." @@ -15530,8 +16546,8 @@ msgstr "" #~ msgstr "wiki" #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "Relative extrusion is recommended when using \"label_objects\" option.Some " +#~ "extruders work better with this option unckecked (absolute extrusion " #~ "mode). Wipe tower is only compatible with relative mode. It is always " #~ "enabled on BambuLab printers. Default is checked" #~ msgstr "" @@ -15661,8 +16677,8 @@ msgstr "" #~ "Bir Parçayı Çıkar\n" #~ "Negatif parça değiştiriciyi kullanarak bir ağı diğerinden " #~ "çıkarabileceğinizi biliyor muydunuz? Bu şekilde örneğin doğrudan Orca " -#~ "Slicer'da kolayca yeniden boyutlandırılabilen delikler " -#~ "oluşturabilirsiniz. Daha fazlasını belgelerde okuyun." +#~ "Slicer'da kolayca yeniden boyutlandırılabilen delikler oluşturabilirsiniz. " +#~ "Daha fazlasını belgelerde okuyun." #~ msgid "Filling bed " #~ msgstr "Yatak doldurma " @@ -15678,8 +16694,7 @@ msgstr "" #~ msgstr "" #~ "Doğrusal desene geçilsin mi?\n" #~ "Evet - otomatik olarak doğrusal desene geçin\n" -#~ "Hayır - yoğunluğu otomatik olarak %100 olmayan varsayılan değere " -#~ "sıfırlayın" +#~ "Hayır - yoğunluğu otomatik olarak %100 olmayan varsayılan değere sıfırlayın" #~ msgid "Please heat the nozzle to above 170 degree before loading filament." #~ msgstr "" @@ -15920,8 +16935,8 @@ msgstr "" #~ "load uptodate process/machine settings from the specified file when using " #~ "uptodate" #~ msgstr "" -#~ "güncellemeyi kullanırken belirtilen dosyadan güncel işlem/" -#~ "yazıcıayarlarını yükle" +#~ "güncellemeyi kullanırken belirtilen dosyadan güncel işlem/yazıcıayarlarını " +#~ "yükle" #~ msgid "Output directory" #~ msgstr "Çıkış dizini" @@ -15968,8 +16983,8 @@ msgstr "" #~ "OrcaSlicer configuration file may be corrupted and is not abled to be " #~ "parsed.Please delete the file and try again." #~ msgstr "" -#~ "OrcaSlicer yapılandırma dosyası bozulmuş olabilir ve ayrıştırılması " -#~ "mümkün olmayabilir. Lütfen dosyayı silin ve tekrar deneyin." +#~ "OrcaSlicer yapılandırma dosyası bozulmuş olabilir ve ayrıştırılması mümkün " +#~ "olmayabilir. Lütfen dosyayı silin ve tekrar deneyin." #~ msgid "Online Models" #~ msgstr "Çevrimiçi Modeller" @@ -15983,8 +16998,8 @@ msgstr "" #~ msgid "" #~ "There are currently no identical spare consumables available, and " #~ "automatic replenishment is currently not possible. \n" -#~ "(Currently supporting automatic supply of consumables with the same " -#~ "brand, material type, and color)" +#~ "(Currently supporting automatic supply of consumables with the same brand, " +#~ "material type, and color)" #~ msgstr "" #~ "Şu anda aynı yedek sarf malzemesi mevcut değildir ve otomatik yenileme şu " #~ "anda mümkün değildir.\n" @@ -16016,8 +17031,7 @@ msgstr "" #~ "daha sıcak olamaz" #~ msgid "Enable this option if machine has auxiliary part cooling fan" -#~ msgstr "" -#~ "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin" +#~ msgstr "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin" #~ msgid "" #~ "This option is enabled if machine support controlling chamber temperature" @@ -16045,8 +17059,7 @@ msgstr "" #~ "katmanları etkilemez" #~ msgid "Empty layers around bottom are replaced by nearest normal layers." -#~ msgstr "" -#~ "Alt kısımdaki boş katmanların yerini en yakın normal katmanlar alır." +#~ msgstr "Alt kısımdaki boş katmanların yerini en yakın normal katmanlar alır." #~ msgid "The model has too many empty layers." #~ msgstr "Modelde çok fazla boş katman var." @@ -16064,9 +17077,8 @@ msgstr "" #~ "Bed temperature when high temperature plate is installed. Value 0 means " #~ "the filament does not support to print on the High Temp Plate" #~ msgstr "" -#~ "Yüksek sıcaklık plakası takıldığında yatak sıcaklığı. 0 değeri, " -#~ "filamentin Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına " -#~ "gelir" +#~ "Yüksek sıcaklık plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin " +#~ "Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına gelir" #~ msgid "" #~ "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" @@ -16086,8 +17098,7 @@ msgstr "" #~ msgstr "" #~ "Desteğin stili ve şekli. Normal destek için, desteklerin düzenli bir " #~ "ızgaraya yansıtılması daha sağlam destekler oluşturur (varsayılan), rahat " -#~ "destek kuleleri ise malzemeden tasarruf sağlar ve nesne izlerini " -#~ "azaltır.\n" +#~ "destek kuleleri ise malzemeden tasarruf sağlar ve nesne izlerini azaltır.\n" #~ "Ağaç desteği için, ince stil, dalları daha agresif bir şekilde " #~ "birleştirecek ve çok fazla malzeme tasarrufu sağlayacak (varsayılan), " #~ "hibrit stil ise büyük düz çıkıntılar altında normal desteğe benzer yapı " diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 948a1d8e24d..4e60a4526ca 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2023-08-10 20:25-0400\n" "Last-Translator: \n" "Language-Team: \n" @@ -261,6 +261,9 @@ msgstr "Скинути орієнтацію" msgid "World coordinates" msgstr "Світові координати" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -1757,8 +1760,8 @@ msgstr "За замовчуванням" msgid "Filament %d" msgstr "Філамент %d" -msgid "active" -msgstr "активно" +msgid "current" +msgstr "поточний" msgid "Scale to build volume" msgstr "Масштабування для збільшення обсягу" @@ -1901,6 +1904,12 @@ msgstr "Організувати" msgid "arrange current plate" msgstr "упорядкувати поточну табличку" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Авто-поворот" @@ -1934,9 +1943,6 @@ msgstr "Змінити філамент" msgid "Set Filament for selected items" msgstr "Встановити філамент для вибраних елементів" -msgid "current" -msgstr "поточний" - msgid "Unlock" msgstr "Розблокувати" @@ -2278,9 +2284,6 @@ msgstr "Введіть G-код користувача, що використо msgid "Jump to Layer" msgstr "Перейти до шару" -msgid "Jump to layer" -msgstr "Перейти до шару" - msgid "Please enter the layer number" msgstr "Будь ласка, введіть номер шару" @@ -2374,11 +2377,11 @@ 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 +2398,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 "" "Під час калібрування виникла проблема. Натисніть, щоб переглянути рішення." @@ -2437,11 +2440,8 @@ 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" -"завантажити або вивантажити філамент." msgid "Edit" msgstr "Редагувати" @@ -2918,40 +2918,15 @@ 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 нормальна, помаранчевий означає, " -"щоВологість висока,\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.)" +"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 "" -"Стан влагопоглинача нижче двох поділів свідчить про те, що вологопоглинач " -"може бути\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" @@ -3003,6 +2978,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Налаштування AMS" @@ -3017,11 +2998,9 @@ 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 не буде " -"автоматично читати будь-яку інформацію до завершення друку." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3071,6 +3050,14 @@ 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 "Файл" @@ -3148,6 +3135,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 "" + +#, 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 "Невідома помилка під час експорту G-коду." @@ -3161,13 +3193,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-код" @@ -3245,6 +3270,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" @@ -3329,26 +3367,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 "" - -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. " @@ -3408,6 +3426,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 "" +"Спіральний режим працює тільки тоді, коли периметри дорівнюють 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 "Auto bed leveling" msgstr "Автоматичне вирівнювання столу" @@ -3513,18 +3551,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 "Невідомий" @@ -3684,6 +3710,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 "Значення поза допустимим діапазоном." @@ -3764,12 +3794,12 @@ msgstr "Відображати" msgid "Flushed" msgstr "Очищення" -msgid "Total" -msgstr "Загальний" - msgid "Tower" msgstr "Вежа" +msgid "Total" +msgstr "Загальний" + msgid "Total Estimation" msgstr "Загальна оцінка" @@ -3872,6 +3902,12 @@ msgstr "Оцінка часу" msgid "Normal mode" msgstr "Нормальний режим" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Час підготовки" @@ -3965,6 +4001,9 @@ msgstr "Упорядкувати варіанти" msgid "Spacing" msgstr "Відстань" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Автоповорот для розташування" @@ -4111,6 +4150,9 @@ msgstr "Автозапис Моніторингу" msgid "Go Live" msgstr "У прямому ефірі" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Дозвіл нарізки" @@ -4172,6 +4214,9 @@ msgstr "Попередній перегляд" msgid "Device" msgstr "Пристрій" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Проєкт" @@ -4211,6 +4256,9 @@ msgstr "Роздрукувати все" msgid "Send all" msgstr "Надіслати все" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Гарячі клавіші" @@ -4632,41 +4680,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)!" +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)!" +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 "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 "Initialize failed (Missing LAN ip of printer)!" +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 "Зупинено." @@ -4697,16 +4753,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 "Завантаження..." @@ -4758,6 +4813,12 @@ msgstr "Вибір" msgid "Batch manage files." msgstr "Пакетне керування файлами." +msgid "Refresh" +msgstr "Оновити" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Ніяких принтерів." @@ -4768,14 +4829,33 @@ msgstr "Помилка підключення [%d]!" msgid "Loading file list..." msgstr "Завантаження списку файлів..." -#, c-format, boost-format -msgid "No files [%d]" +msgid "No files" msgstr "" -#, c-format, boost-format -msgid "Load failed [%d]" +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 "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 "" @@ -4797,10 +4877,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 "" @@ -4812,6 +4892,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 "Чекання завантаження..." @@ -4828,13 +4914,17 @@ 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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -4938,6 +5028,9 @@ msgstr "" msgid "Control" msgstr "Контроль" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Параметри друку" @@ -4956,9 +5049,6 @@ msgstr "Камера" msgid "Bed" msgstr "Стіл" -msgid "Unload" -msgstr "Вивантаження" - msgid "Debug Info" msgstr "Налагоджувальна інформація" @@ -5128,9 +5218,6 @@ msgstr "Статус" msgid "Update" msgstr "Оновлення" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Більше не показувати" @@ -5161,6 +5248,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-миша відключена." @@ -5349,6 +5465,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 "Глобальний" @@ -5549,9 +5684,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 " @@ -5783,15 +5915,21 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5874,7 +6012,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 "" + +#, 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 "" @@ -6045,6 +6199,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 "" @@ -6054,6 +6223,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 "Наблизити до положення миші" @@ -6069,6 +6250,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 "" @@ -6087,6 +6274,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 Studio)." +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 "" @@ -6310,6 +6520,18 @@ 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 "" + msgid "Plate name" msgstr "Назва пластини" @@ -6319,9 +6541,15 @@ msgstr "Те ж, що й глобальна послідовність друк msgid "Print sequence" msgstr "Послідовність друку" -msgid "Customize" +msgid "Same as Global" +msgstr "" + +msgid "Disable" msgstr "" +msgid "Spiral vase" +msgstr "Спіральна ваза" + msgid "First layer filament sequence" msgstr "" @@ -6503,9 +6731,6 @@ msgstr "" msgid "Send print job to" msgstr "Надіслати завдання на друк на" -msgid "Refresh" -msgstr "Оновити" - msgid "Bed Leveling" msgstr "Вирівнювання столу" @@ -6603,8 +6828,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 "" msgid "An SD card needs to be inserted to record timelapse." msgstr "SD-карта повинна бути вставлена для запису таймлапсу." @@ -6664,24 +6892,24 @@ 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?" +"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 "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" @@ -6706,12 +6934,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." @@ -6754,6 +6988,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 "Вхід до принтера" @@ -6926,6 +7180,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" @@ -7416,24 +7684,29 @@ msgstr "" "Попередня установка \"%1%\" не сумісна з новим профілем процесу, і " "вонамістить такі незбережені зміни:" -#, boost-format +#, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + msgid "" -"You have changed some settings of preset \"%1%\". \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, or choose to " +"transfer the values you have modified to the new preset." +msgstr "" + +msgid "You have previously modified your settings." msgstr "" -"Ви змінили деякі налаштування попередньої установки \"%1%\". \n" -"Зберегти ці змінені налаштування (нове значення) після перемикання Набір " -"параметрів?" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\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 "Кількість екструдерів" @@ -7464,7 +7737,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 "" @@ -7915,6 +8188,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 "" @@ -8761,6 +9070,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 "Типи ліжок, які підтримує принтер" @@ -9518,6 +9836,12 @@ msgstr "" "Радіус вільного простору навколо екструдера. Використовується для уникнення " "зіткнення під час друку за об’єктами." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9923,6 +10247,9 @@ msgstr "Підтримуючий кубічний" msgid "Lightning" msgstr "Блискавка" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Довжина прив'язки заповнення" @@ -10208,6 +10535,15 @@ 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 "Дуговий фітинг" @@ -11031,6 +11367,24 @@ 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-стрибок при відкаті" @@ -11401,9 +11755,6 @@ 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 " @@ -12735,6 +13086,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 "" @@ -12810,12 +13164,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 "" - #, c-format, boost-format msgid "" "Please input valid values:\n" @@ -12857,6 +13205,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 "" @@ -12866,6 +13222,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 "" @@ -12995,6 +13364,12 @@ msgstr "" msgid "Failed" msgstr "" +msgid "Please enter the name you want to save to printer." +msgstr "" + +msgid "The name cannot exceed 40 characters." +msgstr "" + msgid "" "Only one of the results with the same name will be saved. Are you sure you " "want to overrides the other results?" @@ -13085,12 +13460,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "" @@ -13134,12 +13503,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 "" @@ -13152,6 +13515,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13164,9 +13530,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 "" @@ -13535,6 +13914,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 "" @@ -13726,10 +14112,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -13818,6 +14213,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 "" @@ -13889,6 +14287,15 @@ msgstr "" msgid "Daily Tips" 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 "" @@ -14074,6 +14481,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 "" @@ -14446,6 +15022,130 @@ msgid "" "probability of warping." 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 " #~ "thickness (top+bottom solid layers)" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 56ca0ac1475..64e4251179a 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-05-01 00:42+0800\n" "PO-Revision-Date: 2023-04-01 13:21+0800\n" "Last-Translator: SoftFever \n" "Language-Team: \n" @@ -257,6 +257,9 @@ msgstr "重置旋转" msgid "World coordinates" msgstr "世界坐标" +msgid "Object coordinates" +msgstr "物体坐标" + msgid "°" msgstr "°" @@ -1740,8 +1743,8 @@ msgstr "缺省" msgid "Filament %d" msgstr "耗材丝%d" -msgid "active" -msgstr "活动的" +msgid "current" +msgstr "当前" msgid "Scale to build volume" msgstr "缩放到构建空间大小" @@ -1884,6 +1887,12 @@ msgstr "自动摆放" msgid "arrange current plate" msgstr "在当前盘执行自动摆放" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自动朝向" @@ -1917,9 +1926,6 @@ msgstr "更换耗材丝" msgid "Set Filament for selected items" msgstr "设置所选项的耗材丝" -msgid "current" -msgstr "当前" - msgid "Unlock" msgstr "解锁" @@ -2234,9 +2240,6 @@ msgstr "输入当前层上使用的自定义G-code:" msgid "Jump to Layer" msgstr "跳转到层" -msgid "Jump to layer" -msgstr "跳转到层" - msgid "Please enter the layer number" msgstr "请输入层数" @@ -2330,10 +2333,10 @@ msgstr "自动补给" msgid "AMS not connected" msgstr "AMS 未连接" -msgid "Load Filament" -msgstr "进料" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "退料" msgid "Ext Spool" @@ -2351,7 +2354,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,8 +2395,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 "编辑" @@ -2837,31 +2840,15 @@ 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 +2899,12 @@ msgstr "" "如果AMS中有两卷相同的耗材,则自动补给启用。\n" "(目前支持品牌、材料种类、颜色相同的耗材的自动补给)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 设置" @@ -2926,11 +2919,9 @@ 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会在打印结束后自动读取此耗材丝信" -"息。" msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -2975,6 +2966,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 +3039,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 "" + +#, 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 "导出G-code文件发生未知错误。" @@ -3053,13 +3097,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 代码失败" @@ -3132,6 +3169,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" @@ -3208,25 +3258,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 +3319,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 +3443,6 @@ msgstr "首层扫描异常暂停" msgid "Nozzle clog pause" msgstr "堵头暂停" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "主板" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "未定义" @@ -3569,6 +3607,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 "值越界。" @@ -3649,12 +3691,12 @@ msgstr "显示" msgid "Flushed" msgstr "冲刷" -msgid "Total" -msgstr "总计" - msgid "Tower" msgstr "擦料塔" +msgid "Total" +msgstr "总计" + msgid "Total Estimation" msgstr "总预估" @@ -3757,6 +3799,12 @@ msgstr "时间预估" msgid "Normal mode" msgstr "普通模式" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "准备时间" @@ -3851,6 +3899,9 @@ msgstr "自动摆放选项" msgid "Spacing" msgstr "间距" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "自动旋转以优化自动摆放效果" @@ -3995,6 +4046,9 @@ msgstr "监控录像" msgid "Go Live" msgstr "开启直播" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "分辨率" @@ -4056,6 +4110,9 @@ msgstr "预览" msgid "Device" msgstr "设备" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "项目" @@ -4095,6 +4152,9 @@ msgstr "打印所有盘" msgid "Send all" msgstr "发送所有盘" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "快捷键" @@ -4501,40 +4561,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 "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "初始化失败(没有摄像头)" +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 is busy downloading, Please wait for the downloading to finish." -msgstr "打印机正忙于下载,请等待下载完成。" +msgid "Printer camera is malfunctioning." +msgstr "" -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "初始化失败(当前打印机的版本不支持)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "初始化失败(在局域网模式中不可访问)!" +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -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 "已经停止。" @@ -4563,16 +4632,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 "正在加载视频……" @@ -4624,6 +4692,12 @@ msgstr "选择" msgid "Batch manage files." msgstr "批量管理文件" +msgid "Refresh" +msgstr "刷新" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "未选择打印机" @@ -4634,13 +4708,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?" @@ -4661,11 +4754,11 @@ msgstr "删除文件" msgid "Fetching model infomations ..." 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 " @@ -4678,6 +4771,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 +4793,18 @@ 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 "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." +msgstr "" -msgid "File not exists." -msgstr "文件不存在" +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "文件校验和错误。请重试。" @@ -4804,6 +4907,9 @@ msgstr "" msgid "Control" msgstr "控制" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "打印选项" @@ -4822,9 +4928,6 @@ msgstr "机箱" msgid "Bed" msgstr "热床" -msgid "Unload" -msgstr "退料" - msgid "Debug Info" msgstr "调试信息" @@ -5000,9 +5103,6 @@ msgstr "设备状态" msgid "Update" msgstr "固件更新" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "不再显示" @@ -5033,6 +5133,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鼠标断连。" @@ -5210,6 +5339,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 "全局" @@ -5401,9 +5549,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 " @@ -5623,15 +5768,21 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5712,8 +5863,24 @@ 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 "" + +#, 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 " @@ -5878,6 +6045,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 "" @@ -5887,6 +6069,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 "放大到鼠标位置" @@ -5901,6 +6095,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 +6119,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 Studio)." +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 "网络" @@ -6133,6 +6356,18 @@ 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 "" + msgid "Plate name" msgstr "盘名称" @@ -6142,8 +6377,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 "首层耗材打印顺序" @@ -6325,9 +6566,6 @@ msgstr "" msgid "Send print job to" msgstr "发送打印任务至" -msgid "Refresh" -msgstr "刷新" - msgid "Bed Leveling" msgstr "热床调平" @@ -6415,8 +6653,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 "" msgid "An SD card needs to be inserted to record timelapse." msgstr "开启延迟摄影功能需要插入SD卡" @@ -6472,24 +6713,24 @@ 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 "预设中的喷嘴直径与记忆的喷嘴直径不一致。您最近更换了喷嘴吗?" +"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 "" + +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 "正在连接打印机。连接过程中无法取消。" @@ -6514,12 +6755,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卡" @@ -6562,6 +6809,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 "登录打印机" @@ -6735,6 +7002,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" @@ -7197,17 +7478,28 @@ msgid "" msgstr "预设“%1%”和新的工艺预设不兼容,并且它包含以下未保存的修改:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + 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" +"You can save or discard the preset values you have modified." +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, 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 "挤出机数量" @@ -7238,7 +7530,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 "" @@ -7696,6 +7988,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 "确认并更新喷嘴" @@ -8492,6 +8820,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" @@ -9285,6 +9622,12 @@ msgid "" "printing." msgstr "挤出机四周的避让半径。用于在逐件打印中避免碰撞。" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "网床最小点" @@ -9693,6 +10036,9 @@ msgstr "支撑立方体" msgid "Lightning" msgstr "闪电" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "稀疏填充锚线长度" @@ -9937,6 +10283,15 @@ 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 "圆弧拟合" @@ -10751,6 +11106,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" @@ -11109,9 +11482,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 " @@ -12426,6 +12796,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 +12876,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 +12922,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 "正在连接打印机..." @@ -12564,6 +12939,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 "内部错误" @@ -12733,6 +13121,12 @@ 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?" @@ -12825,12 +13219,6 @@ msgstr "将打印一份测试模型。在校准之前,请清理打印平台并 msgid "Printing Parameters" msgstr "打印参数" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "热床类型" @@ -12877,12 +13265,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 +13277,9 @@ msgstr "至体积速度" msgid "Flow Dynamics Calibration Result" msgstr "动态流量校准结果" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "无历史结果" @@ -12907,9 +13292,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 "搜索网络" @@ -13290,6 +13688,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 "以下一些现有预设未能成功创建:\n" @@ -13487,11 +13892,18 @@ 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" +"Studio 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 "打印机设置" @@ -13593,6 +14005,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 "编辑材料" @@ -13665,6 +14080,15 @@ msgstr "收起" msgid "Daily Tips" 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 "*使用 %s 材料和 %s 打印可能会导致喷嘴损坏" + msgid "Need select printer" msgstr "需要选择打印机" @@ -13848,6 +14272,175 @@ 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 "" + +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 "" @@ -14242,6 +14835,137 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ 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 7c28c155598..2ddad8f7fa3 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-05-01 00:42+0800\n" "PO-Revision-Date: 2023-11-06 14:37+0800\n" "Last-Translator: ablegods \n" "Language-Team: \n" @@ -275,6 +275,9 @@ msgstr "重設旋轉" msgid "World coordinates" msgstr "世界坐標" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "" @@ -1792,8 +1795,9 @@ msgstr "預設" msgid "Filament %d" msgstr "線材 %d" -msgid "active" -msgstr "活動的" +#, fuzzy +msgid "current" +msgstr "目前" msgid "Scale to build volume" msgstr "縮放到列印空間範圍大小" @@ -1943,6 +1947,12 @@ msgstr "自動擺放" msgid "arrange current plate" msgstr "在列印板執行自動擺放" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自動旋轉方向" @@ -1979,10 +1989,6 @@ msgstr "更換線材" msgid "Set Filament for selected items" msgstr "為所選項目設定使用的線材" -#, fuzzy -msgid "current" -msgstr "目前" - msgid "Unlock" msgstr "解鎖" @@ -2316,9 +2322,6 @@ msgstr "輸入目前層上使用的自訂 G-code:" msgid "Jump to Layer" msgstr "轉換到層" -msgid "Jump to layer" -msgstr "轉換到層" - msgid "Please enter the layer number" msgstr "請輸入層數" @@ -2417,10 +2420,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 +2441,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 +2482,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 "編輯" @@ -2946,36 +2949,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.)" +"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 "" -"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 蓋子打開或更換乾燥劑包裝時,可能需要數小時或一晚才能吸收水分,低" -"溫也會減慢這一過程。在此期間,濕度指示的數值可能並不準確。" #, fuzzy msgid "" @@ -3033,6 +3015,12 @@ msgstr "" "如果 AMS 中有兩個相同的線材,則會啟用 AMS 備用線材自動補給功能。\n" "(目前支援同品牌、同材質、同顏色的耗材自動供應)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 設定" @@ -3047,11 +3035,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 +3085,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 +3161,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 "" + +#, 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 "匯出 G-code 檔案發生未知錯誤。" @@ -3180,13 +3219,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 失敗" @@ -3262,6 +3294,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 +3392,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 +3449,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 +3580,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "主板" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "未定義" @@ -3717,6 +3750,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 "值超出範圍。" @@ -3808,12 +3845,12 @@ msgstr "顯示" msgid "Flushed" msgstr "廢料" -msgid "Total" -msgstr "總計" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "總計" + msgid "Total Estimation" msgstr "總預估" @@ -3921,6 +3958,12 @@ msgstr "時間預估" msgid "Normal mode" msgstr "普通模式" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "準備時間" @@ -4015,6 +4058,9 @@ msgstr "自動擺放選項" msgid "Spacing" msgstr "間距" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "自動旋轉以最佳化自動擺放效果" @@ -4164,6 +4210,9 @@ msgstr "監控錄影" msgid "Go Live" msgstr "開啟直播" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "解析度" @@ -4228,6 +4277,9 @@ msgstr "預覽" msgid "Device" msgstr "設備" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "專案項目" @@ -4274,6 +4326,9 @@ msgstr "列印所有列印板" msgid "Send all" msgstr "傳送所有列印板" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "快捷鍵" @@ -4694,43 +4749,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,16 +4821,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 "正在載入影片……" @@ -4823,6 +4883,12 @@ msgstr "選擇" msgid "Batch manage files." msgstr "批次管理檔案" +msgid "Refresh" +msgstr "刷新" + +msgid "Reload file list from printer." +msgstr "" + #, fuzzy msgid "No printers." msgstr "未選擇列印設備" @@ -4834,13 +4900,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 +4946,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 +4963,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 +4985,17 @@ 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." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." msgstr "" -msgid "File not exists." +msgid "File does not exist." msgstr "" msgid "File checksum error. Please retry." @@ -5009,6 +5103,9 @@ msgstr "" msgid "Control" msgstr "控制" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "列印選項" @@ -5027,9 +5124,6 @@ msgstr "機箱" msgid "Bed" msgstr "熱床" -msgid "Unload" -msgstr "退料" - msgid "Debug Info" msgstr "除錯資訊" @@ -5213,9 +5307,6 @@ msgstr "設備狀態" msgid "Update" msgstr "韌體更新" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "不再顯示" @@ -5246,6 +5337,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 滑鼠已中斷連線。" @@ -5429,6 +5549,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 "全局" @@ -5639,9 +5778,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 " @@ -5867,17 +6003,23 @@ 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%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." -msgstr "匯入 Orca Slicer 失敗。 請下載該檔案並手動匯入。" +msgstr "" msgid "Import SLA archive" msgstr "" @@ -5957,11 +6099,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 " @@ -6134,6 +6291,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 "首頁" @@ -6143,6 +6315,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 +6341,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,6 +6366,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 Studio)." +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 "" @@ -6408,6 +6621,18 @@ 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 "" + #, fuzzy msgid "Plate name" msgstr "列印板名稱" @@ -6418,8 +6643,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 "首層線材列印順序" @@ -6609,9 +6840,6 @@ msgstr "" msgid "Send print job to" msgstr "傳送列印作業至" -msgid "Refresh" -msgstr "刷新" - msgid "Bed Leveling" msgstr "熱床調平" @@ -6710,9 +6938,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." @@ -6775,24 +7005,24 @@ 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?" +"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." @@ -6820,6 +7050,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 +7060,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 +7110,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 "登入列印設備" @@ -7060,6 +7317,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 "" + #, fuzzy msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -7553,17 +7824,28 @@ msgid "" msgstr "預設 \"%1%\" 和新的列印品質預設不相容,並且它包含以下未儲存的修改:" #, boost-format +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" + +msgid "" +"\n" +"You can save or discard the preset values you have modified." +msgstr "" + 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" +"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 "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "您已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" +"\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 +7878,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 "" @@ -8071,23 +8353,59 @@ msgstr "版本 %s 更新資訊" msgid "Network plug-in update" msgstr "網路套件升級" -#, fuzzy -msgid "" -"Click OK to update the Network plug-in when Orca Slicer launches next time." -msgstr "按一下「確定」以在下次啟動 Orca Slicer 時更新網路套件" +#, fuzzy +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "按一下「確定」以在下次啟動 Orca Slicer 時更新網路套件" + +#, fuzzy, c-format, boost-format +msgid "A new Network plug-in(%s) available, Do you want to install it?" +msgstr "新的網路套件( %s) 可用,您是否需要安裝它?" + +msgid "New version of Orca Slicer" +msgstr "新版本的 Orca Slicer" + +msgid "Skip this Version" +msgstr "" + +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 "" -#, fuzzy, c-format, boost-format -msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "新的網路套件( %s) 可用,您是否需要安裝它?" +msgid "Not Extruded Yet, Retry" +msgstr "" -msgid "New version of Orca Slicer" -msgstr "新版本的 Orca Slicer" +msgid "Finished, Continue" +msgstr "" -msgid "Skip this Version" +msgid "Load Filament" +msgstr "進料" + +msgid "Filament Loaded, Resume" msgstr "" -msgid "Done" -msgstr "完成" +msgid "View Liveview" +msgstr "" msgid "Confirm and Update Nozzle" msgstr "" @@ -8917,6 +9235,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" @@ -9689,6 +10016,12 @@ msgid "" "printing." msgstr "擠出機四周的避讓半徑。用於在逐件列印中避免碰撞。" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -10101,6 +10434,9 @@ msgstr "支撐立方體" msgid "Lightning" msgstr "閃電" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "稀疏填充錨線長度" @@ -10358,6 +10694,15 @@ 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 "圓弧擬合" @@ -11199,6 +11544,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" @@ -11540,9 +11903,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 " @@ -12890,6 +13250,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 +13335,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 +13388,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 +13407,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 "內部錯誤" @@ -13219,6 +13596,13 @@ 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?" @@ -13317,12 +13701,6 @@ msgstr "將列印一份測試模型。在校準之前,請清理列印板並將 msgid "Printing Parameters" msgstr "列印參數" -msgid "- ℃" -msgstr "" - -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "熱床類型" @@ -13370,12 +13748,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 +13761,9 @@ msgstr "至體積速度" msgid "Flow Dynamics Calibration Result" msgstr "動態流量校準結果" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "無歷史結果" @@ -13401,9 +13776,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 "搜尋網路" @@ -13791,6 +14179,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 "" @@ -13982,10 +14377,19 @@ 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 "" +"\n" +"\n" +"Studio 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 "" @@ -14074,6 +14478,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 "" @@ -14143,6 +14550,15 @@ msgstr "" msgid "Daily Tips" 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 "需要選擇列印設備" @@ -14328,6 +14744,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 "" @@ -14699,6 +15284,134 @@ msgid "" "probability of warping." 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 "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "匯入 Orca Slicer 失敗。 請下載該檔案並手動匯入。" + +#~ 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/images/OrcaSlicer.svg b/resources/images/OrcaSlicer.svg index 66324266e96..f8d677c5557 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 b8d04439ad5..9570a16be65 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 37050d7481b..351f830b6c5 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 7eb75471ef6..a491ba51e55 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 01e567c89a0..47fd58c02b3 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 d79499eff88..efb21d9257f 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 2cf44569252..a59209746b6 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 c4972e6cbe2..d36ff970cd9 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 591e82ff2da..561a15b3039 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 a91ab70ac68..3f67d2682f0 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 fc72e75cf05..aeee375a42a 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 2e83ee635a0..e5584659434 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 9f65196ed70..7f3d90e6865 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 348c08a981b..0b173d5eb86 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 0bcb4b9e0b7..c6812edd93b 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 6c317fbdc73..f5c39a63885 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 a75941f4ab9..ef79670fd6e 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 ca0d37646e9..ef79670fd6e 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 407aa531973..eb6452e894c 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 d438d503a95..8e6ebdcb922 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 caabcbdbe18..e94d718e52b 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 817c9ba5a34..d3f6e01349f 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 4b11064e0c0..fa193ebd337 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 c317b1658c3..ae76dc32e8e 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 cbafcbab226..336c4475c62 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 36625b7e4d1..956316a9de5 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 41836434ca4..cc1b89e2195 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 123325ec39c..b7ec40359e0 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 ae6dda44df6..314757070e9 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 7cc2ef0afcb..eec2034555f 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 66522b2ffd1..b37fff78429 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 73af09389a6..32465002189 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 51e5cb2d24b..91cb386dd2a 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 00000000000..5c1ff4742d9 --- /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 047741ea9ae..a67e4fc0dbc 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 a55fe49f7ce..c3c11a829ad 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 afb1dc2a7d7..c3c11a829ad 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 902027fae7a..172b9e4ceed 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 c4297c41da8..4d0d582572e 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 685999cd145..4d89b3657d8 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 70babeb017e..d05b27b1c82 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 70babeb017e..d05b27b1c82 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 54f08c2f2c5..42efab7ce67 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 31a8351a7c0..7e5d9ac581a 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 3b276aa2275..0549b1b47ab 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 9ab6dcfacc9..e7c06f8d2d0 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 be8cf27a09e..271e38f8edb 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 5c40b35d145..fbc1159ab5c 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 bc99d2d0d15..78560b10726 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 1e6fb24d7b3..a0b23696bbc 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 517bb7acbc4..1faea574618 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 cf58fbc94c5..b56c4abc248 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 8653c1f7bbc..d4c14ca6d0a 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 474375d84ec..39fdb07e634 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 029abf85103..43ef314cd35 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 dfd917fb302..5ed3987438f 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 3c1c56c7c45..1b93469bf48 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 88747cb95d0..6fed74863a1 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 9472a10cb8a..a5a49689fb1 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 d96f4ed4bed..923ba593bdc 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 e7866313b5d..aa70d6c0439 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 eb4c8e47cf1..d27721b74bd 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 6dbef6ecbfb..17f1c9ff41c 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 902100da24e..9b2a0f862c2 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 1351d3b6f55..0f38b061bb7 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 1351d3b6f55..0f38b061bb7 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 23e0bfeb2aa..231d471e9de 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 eaee113a1b6..f2c3965b402 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 d49d396125e..9b2a0f862c2 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 4d832a58873..2e36702da21 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 2efebf2110b..efd434b13f1 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 49316ef6ea2..efd434b13f1 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 00000000000..561a15b3039 --- /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 00000000000..98ef8fedb29 --- /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 00000000000..d55852897f6 --- /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 00000000000..9facb665a57 --- /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 38bcd21729d..af90e3cd201 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 3c13dd7cc70..0436e83b3e9 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 00000000000..260f65ab26e --- /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 00000000000..bc6cf03f0eb --- /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 00000000000..fd8ef091179 --- /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 2c24bdc8a20..2605321f453 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 00000000000..f2510eacda4 --- /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 00000000000..e4ff3f1da96 --- /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 00000000000..ce66aa93d36 --- /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 d177860bc92..26a5123d824 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 4b4bef6ecf7..8e0548235f6 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 7f4e685a1ba..d1189a99b20 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 00000000000..8f2a00f8964 --- /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 96dfe8decfb..538bdf19c99 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 00000000000..0f1e7996d11 --- /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 00000000000..f53dd207fb7 --- /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 d14cd1a31cb..19fa2fa52b1 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 00000000000..be3d4153433 --- /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 68aef590bb8..105ebfd2e3d 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 396f0e7b826..e1a23694caf 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 23de6f381b2..7486f83d361 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_circle.svg b/resources/images/cut_circle.svg new file mode 100644 index 00000000000..a222aaa8345 --- /dev/null +++ b/resources/images/cut_circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_circle_dark.svg b/resources/images/cut_circle_dark.svg new file mode 100644 index 00000000000..0acbcf4c3cf --- /dev/null +++ b/resources/images/cut_circle_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_connectors.svg b/resources/images/cut_connectors.svg index 053b163bf78..324aa987c53 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/cut_hexagon.svg b/resources/images/cut_hexagon.svg new file mode 100644 index 00000000000..282ce14ea31 --- /dev/null +++ b/resources/images/cut_hexagon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_hexagon_dark.svg b/resources/images/cut_hexagon_dark.svg new file mode 100644 index 00000000000..1ee6d0bc6e1 --- /dev/null +++ b/resources/images/cut_hexagon_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_square.svg b/resources/images/cut_square.svg new file mode 100644 index 00000000000..7eb72c74ac3 --- /dev/null +++ b/resources/images/cut_square.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_square_dark.svg b/resources/images/cut_square_dark.svg new file mode 100644 index 00000000000..fbf7cc9aa4a --- /dev/null +++ b/resources/images/cut_square_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_triangle.svg b/resources/images/cut_triangle.svg new file mode 100644 index 00000000000..ac03ed05ceb --- /dev/null +++ b/resources/images/cut_triangle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_triangle_dark.svg b/resources/images/cut_triangle_dark.svg new file mode 100644 index 00000000000..a29569c6a27 --- /dev/null +++ b/resources/images/cut_triangle_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/debugtool.svg b/resources/images/debugtool.svg index b234f598799..e9fd011d73b 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 188d57a53e1..269d737c3ff 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 91d56e91d13..2e36702da21 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 07c60793d76..9cfbe4813e6 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 7b6cc0eb7eb..bdb34d71d9f 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 9766302c70d..6c2de1d9802 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 2d298f5661c..6c2de1d9802 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 d28b7004bda..6a238c6e312 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 bce4a24f7c9..de2000d61b3 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 5a5b631a468..4721d1f39da 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 19d9e41cceb..5d33dd8e836 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 7a68c36d114..d5935c53a37 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 67a6071952f..f149580bed7 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 00000000000..a5d5b90bc1c 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 8a2fb06bd2f..a5fe1d01555 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 584cdc4ec9f..4c3c2cc8743 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 6e8e76f6c46..df9333b62c5 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 4db16f937b0..8b5ef4ba0b7 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 ed78455cab3..87436c9e2b2 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 09e898ce8be..d17c639d416 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 0f5d5539d3a..01e7659a897 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 5b352af3778..397def9eba3 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 00000000000..ee44d86a237 --- /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 00000000000..698f6f2bd8e --- /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 3c030c381fe..f4e086b38b3 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 bc02fb1a8a3..fa356713bdf 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 dced1688be5..7001b8aef35 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 00000000000..16511f4f539 --- /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 00000000000..37870888f9d --- /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 00000000000..66951ad474d --- /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 00000000000..4d62440ae44 --- /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 00000000000..be9f85965d2 --- /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 00000000000..2c0334ee355 --- /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 00000000000..4dc749ccb9c --- /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 00000000000..299c1506c87 --- /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 00000000000..d7ef458e097 --- /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 00000000000..4121832f983 --- /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 00000000000..cf48700ee1c --- /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 00000000000..d482fb1b329 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 26d7f97c215..711b59ee020 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 c52a4cb0791..82546967549 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 7eb9100a835..f4f3286dd47 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 a844eb2542c..e5e975fa3ee 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 dd87f0c11c2..51d3c06135f 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 2b4e2430b75..ecc41f6b98f 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 64abb3d2227..4d0d582572e 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 86133d1566f..e0936e64ee7 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 fd459606652..45bcec6fbbd 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 276b260610f..cc052410d2c 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/link_wiki_img.svg b/resources/images/link_wiki_img.svg index ef913c5db9d..a8f049f67ed 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 549cdba2397..ba2bf7b4a2a 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 2920ea0aae3..ba2bf7b4a2a 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 4b3cb164a06..b25ba1cfdca 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 6fc10382217..e585aba3f60 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 3f0da9ae098..12f4202746c 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 3d12d78746a..12f4202746c 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 4cb57152e1a..6eb6cd81865 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 e803f131a15..976ca31874d 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 32aa1d569cb..3ba1ff2dde4 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 1c39a3d23f7..a0d961cdca9 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 5c128e63020..61b1a0881f7 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 7a99cc227fb..57b60f20faa 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 f3c4d906858..ba77e681726 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/measure_edit.svg b/resources/images/measure_edit.svg new file mode 100644 index 00000000000..7f622b2cc43 --- /dev/null +++ b/resources/images/measure_edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/media_empty.svg b/resources/images/media_empty.svg index aa040502a36..be2e2ab5a41 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 83dd7a79235..f9dc13a7df3 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 20c2ae551ee..17bc0ae6991 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 eef22c1d4ab..0f130d09189 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 f95bbb3ee7d..7b7aa198a3f 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 8e2ef36eec7..c12e0b36503 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 edff8942f35..37726f79fae 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 1f09490f1af..39c95f933af 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 1f09490f1af..31e96ba9db1 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 1f09490f1af..f4d2651a112 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 1f09490f1af..1f6f7d95d9c 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 1f09490f1af..eba35dc3919 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 1f09490f1af..f4d2651a112 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 1f09490f1af..f4d2651a112 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 1f09490f1af..f4d2651a112 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 1f09490f1af..f4d2651a112 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 1f09490f1af..f4d2651a112 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 1f09490f1af..41eb1cfafc9 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 00000000000..219caf1f89a --- /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 00000000000..4a94013895a --- /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 00000000000..55d357df6fc --- /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 00000000000..f4ff82ae28a --- /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 00000000000..c7cb1d40f53 --- /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 00000000000..f5ca71f76cb --- /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 00000000000..3f6e90713fe --- /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 00000000000..57ecc7faca0 --- /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 00000000000..6c517af9ad4 --- /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 00000000000..039ac65d94e --- /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 00000000000..48661b30ff7 --- /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 00000000000..ddf636711a2 --- /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 1f09490f1af..7168576ca87 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 1f09490f1af..8546fb08a6a 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 1f09490f1af..eaa46dc7b7e 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 1f09490f1af..f4d2651a112 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 1f09490f1af..3aea4e1e9dc 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 00000000000..8c5cdbc207f --- /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 00000000000..cdc11e865af --- /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 fd7c16ea275..1f20929a572 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 4ef28d62a38..df0baee7992 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 1f09490f1af..27226a299ec 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/mesh_boolean_a.svg b/resources/images/mesh_boolean_a.svg new file mode 100644 index 00000000000..d4f1977d275 --- /dev/null +++ b/resources/images/mesh_boolean_a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_b.svg b/resources/images/mesh_boolean_b.svg new file mode 100644 index 00000000000..d59ea608f6a --- /dev/null +++ b/resources/images/mesh_boolean_b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_difference.svg b/resources/images/mesh_boolean_difference.svg new file mode 100644 index 00000000000..986af31cef9 --- /dev/null +++ b/resources/images/mesh_boolean_difference.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_difference_dark.svg b/resources/images/mesh_boolean_difference_dark.svg new file mode 100644 index 00000000000..cee940c3b58 --- /dev/null +++ b/resources/images/mesh_boolean_difference_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_intersection.svg b/resources/images/mesh_boolean_intersection.svg new file mode 100644 index 00000000000..52ac3014ef1 --- /dev/null +++ b/resources/images/mesh_boolean_intersection.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_intersection_dark.svg b/resources/images/mesh_boolean_intersection_dark.svg new file mode 100644 index 00000000000..9d232122fa7 --- /dev/null +++ b/resources/images/mesh_boolean_intersection_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_keep.svg b/resources/images/mesh_boolean_keep.svg new file mode 100644 index 00000000000..1315f878955 --- /dev/null +++ b/resources/images/mesh_boolean_keep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_subtract.svg b/resources/images/mesh_boolean_subtract.svg new file mode 100644 index 00000000000..6d068c807b1 --- /dev/null +++ b/resources/images/mesh_boolean_subtract.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_union.svg b/resources/images/mesh_boolean_union.svg new file mode 100644 index 00000000000..c300d0cf922 --- /dev/null +++ b/resources/images/mesh_boolean_union.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_union_dark.svg b/resources/images/mesh_boolean_union_dark.svg new file mode 100644 index 00000000000..b05e71adb43 --- /dev/null +++ b/resources/images/mesh_boolean_union_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mmu_segmentation.svg b/resources/images/mmu_segmentation.svg index 68796acd21a..f9aed323609 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 58798d62ec0..9d36df8e680 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 0808f4545d3..18b52e8532c 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 31417e65698..54f93efbd75 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 fcc1854fdcb..bcfb80d8125 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 a8baa9f09e8..bcfb80d8125 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 25869ee644e..73a04a74a51 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 2551512d0a4..01d1d1345ff 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 919b543d23f..67017deedcd 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 caee244e9eb..6970ad84c3d 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 2ef6e06bf0f..dec6384a60b 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 4e69a78c3ca..b20668b4c2d 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 97136e8f373..158565e32ef 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 e7bf0df7a65..a43c65a3ae3 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 80beaf8126f..e1f38bf2bfc 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 a36d1db1609..79b45d4ed6a 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 ba1be74c07d..dd898555dc4 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 0fc12daf181..f149580bed7 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 4c492f0abef..56da537f6eb 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 a44f5ff4208..dfc955f5d7d 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 87740af1728..dd9ece54064 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 920345fc83b..5c3031b6cec 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 00000000000..eb8d6a14745 --- /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 ed69e068a75..0d5ba62d98a 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 34056c482a5..2d3693b3148 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 efad4aaf6d8..11ef669010e 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 2a8e4af6277..9611b8d0784 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 cc6f32dcf5a..99c3964d672 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 bd3e1ebec11..c2aa3f14e20 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 370d0073644..8f3bade771d 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 3cae57af744..7acdd954db5 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 4fee482f970..47bcb6541ae 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 78679c2a84b..99acbc231e5 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 c94e39d67e5..144efc21b37 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 d896d09d24a..750693bd7a7 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 c45f93e9a6d..ee2ccdccce3 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 520dd1bdb13..ee2ccdccce3 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 4bccded8bda..e07c4f31a48 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 cc0b3ec16f9..e07c4f31a48 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 31ee0a15a27..8b864c53e0e 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 f4ed8167483..9daf9350b53 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 52f5532b2f7..74214e6c0e9 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 a41171b01d0..1923f2381bc 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 48164768eeb..95ec1195d1b 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 f8e7e686394..bb332f16b67 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 04ff497ba4e..7d3e222c819 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 f2b6b4cd3e4..235fccf8306 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 437532d18fb..be3d4153433 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 7ffd2a051bb..1eb07b7f5f6 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 103a97f3fcb..88cde143fc6 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 19785321b12..9a971114bd1 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 ca46179f763..2f67ca720c3 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 63ab2297c22..2f67ca720c3 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 70c185dcf1a..b3395c22801 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 d40878488f6..c1dd2a9f8eb 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 a37e784ee37..3a903a5ebb4 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 edbcc923700..17227bf7b3a 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 8ed58c9da9b..c8f073676ac 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 b26c3f10cf9..0c4b97c1098 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 1c829d6554a..0c4b97c1098 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 474142a57f1..3443df3d365 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 bc881443530..4cc2cfd0996 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 b02fc4b9bfd..0ee879f8427 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 f4b4616c18d..e1291d12495 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 7ae92e27ba2..4f8798980ef 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 c6784277e39..332a16a93b0 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 1430bc492ec..2156625def8 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 a7ac9d15f51..2a19e06f7ab 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 ef94f19b967..12142fa9f9d 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 ab0dd789e5b..81926cb405b 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 ea5b7d8b584..77176056785 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 68c49e8a3ae..b4fa2f66bc0 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 9f569d093f3..02b182476d4 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 abfcf0c8384..b0c56581247 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 7528a061f2b..691f09f326f 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 146747db0a7..7a2c3447eb3 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 6913787cb73..03fb6d745d0 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 692c50d03b8..a7635e63c28 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 d41e03f0976..07d60f7dd39 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 91ac2a55bdc..303cecab382 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 955006e4977..0b1d7dd2847 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 1eb4bc2ea31..3345ac845f9 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 2f11e46f868..4eefb7f721a 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 85899b8ffc3..c81e9674a43 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_preferences.svg b/resources/images/notification_preferences.svg index 454150dd29b..fdc9e4a0269 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 fcc65bad35e..946f564f847 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 fbfa5299f1b..38aadaa1b48 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 4a98b5bc074..a080eec4d43 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 bc8ae575296..c18967b0132 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 eedaf36a64e..2f62855ed9e 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 4bfe4bd6072..0a238990e23 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 da98eebc7c2..da60e06158a 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 da677939a5e..4f98e485f88 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 b1ba3828f68..239e6b72566 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 00000000000..fc454ed0636 --- /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 00000000000..1e360cddaca --- /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 fbdd2822aac..d8f0e782847 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 00000000000..e952fc3f527 --- /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 0f6feb84f1a..9667fc203d6 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 c0be9191fe2..ad6ac73fbc6 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 bd8fed71216..ff850856670 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 1f50980c16d..ca124cbe53a 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 2c0677d2db8..16a9c502d2e 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 dd2dfb216b5..023525640bc 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 bbbeeaebda4..86402d70c24 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 c5c9776371a..d2c310bc969 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 5c7fa81be3d..466eace4d37 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 9d2b94182b7..779ab3c0470 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 ef9858a206a..8e42c6be409 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 00000000000..4ff05ce15ec --- /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 00000000000..6b9884e76be --- /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 7490ca81bd2..2f0b51b05fa 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 d9578b441f1..c8baa303d5e 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 238c2424c3c..86d13f71a74 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 3e29d271a4d..f988bb75a5f 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 80d6539166e..44a8ec39442 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 00000000000..74af1d256fa --- /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 00000000000..54b4d47077e --- /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 919b543d23f..729b469138c 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 47062df6363..c449e08a816 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 59032999399..6e8afe772bb 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 00000000000..a566224cc4c --- /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 00000000000..e0794e1a56e --- /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 93f12898fd7..10dfc1cc3e9 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 00000000000..693f26ed41a --- /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 00000000000..945ba0d9a1a --- /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 00000000000..03a1f04a71a --- /dev/null +++ b/resources/images/param_crosshatch.svg @@ -0,0 +1,570 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/param_cubic.svg b/resources/images/param_cubic.svg index 344aeb1c89a..1a237a73e04 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_default-pattern.svg b/resources/images/param_default-pattern.svg new file mode 100644 index 00000000000..0bbbc3e7e18 --- /dev/null +++ b/resources/images/param_default-pattern.svg @@ -0,0 +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 00000000000..d4986325976 --- /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 00000000000..91cc5309007 --- /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 00000000000..3c76a7a16b1 --- /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 00000000000..841ae1569d9 --- /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 da24dceaad4..09aeb37c5cc 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 98d51dd606c..8c0de86e681 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 5ef84757345..36633474027 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 fa42716efc7..8c21b812be9 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 f76ff649ea2..df8aafe115c 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 01ddd94f28c..f6300e34718 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 9d2b94182b7..7040cef46d8 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 37e050a41b0..a257a8e218d 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 414402349a5..20915172048 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 f486c79fd6c..96925df0ccc 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 00000000000..da572c06a5a --- /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 5d1c630c951..73eb073e3cf 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 0385be41265..8471db84dbe 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 aed3393a87f..d57f3b139dd 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 b747e8222cd..c5d8c2409f9 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 b959242708a..9eb2cc96a0b 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 0c9245e28a4..2692e73c307 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 00000000000..0505f6449dc --- /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 d4848698baa..6f3767cf033 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 00000000000..9476b370d65 --- /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 00000000000..9c4cf47ad77 --- /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 00000000000..db243fe0b78 --- /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 47f6ee8df6a..ff4cdd3ccf7 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 00000000000..3d3f7a2a9d3 --- /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 d58506d2ca9..832fac58d7c 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 c47cb2c822e..0947c22248d 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 3e29d271a4d..0c062058bca 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 729cc3b84be..a5b95bdf285 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 e476286b02d..4a56b355144 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 00000000000..d557243282d --- /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 6866f5b8622..ec011d8df4a 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_search.svg b/resources/images/param_search.svg new file mode 100644 index 00000000000..7bdca770f64 --- /dev/null +++ b/resources/images/param_search.svg @@ -0,0 +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 00000000000..fbdc62080ec --- /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 964c3363850..96a1ed12236 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_special.svg b/resources/images/param_special.svg index 03c542f8c55..9e00002b98b 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 ff44a7e78bc..79008e6d40e 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 90a1bad39fb..6c50440c7e5 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 68ec97e5351..d487ac417c0 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 6abc4ff22e7..eca486c104d 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 00000000000..f85275def88 --- /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 344aeb1c89a..d5c95d6b428 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 5276f463457..99a91411bfe 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 00000000000..73a9590da1f --- /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 69753a3474f..1147401869c 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 2ac2f79fbfc..43947fbac2e 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 636925673d0..e0a133c4cac 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 8b7fd23a027..9d11ea8010c 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 a190d737ec8..d148e6f1c12 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 762b67eae16..404935b39ca 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 00000000000..8ac7fb61b7b --- /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 00000000000..78ba42df152 --- /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 58ddf0ea96c..0c062058bca 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 15b84b4b905..16eeb396502 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 158444c4300..a07e336d7e7 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 dcad481d9d8..113a746d33f 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 c9c3b2501b3..16d2189b4cc 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 04b66eaee41..5ac7c488ba9 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 6dce382802f..f3378fce551 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 9b060b705e7..65f956b28eb 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 235e135d725..de0c4f66a6b 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 8fb4bdd6a9d..a045ccd4b26 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 2208d450263..495322afe4e 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 47525ae39e6..13199c94b86 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 30f54f083ce..8738cd5222b 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 50d879d7f23..94698a340f8 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 0b35c40930e..f56beb6c073 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 e5db250044a..8955de70dd2 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 061c9dda775..fad12d446e1 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 061c9dda775..6ed07bbdf45 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 1b5630c47b3..d6968c9bb8d 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 9d2c2b1555b..5655a554ea9 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 9fee1617c98..63dd5f2f0bf 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 a2e1cf75620..b0b16c87a9f 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 e97bc42a4e2..e88fb5d8309 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 2f141d33236..e8adebcf490 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 c87756cf1a4..e6ee8b0b6a7 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 e772a9671ba..8da6e0b4dd0 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 fe2f4797d75..8a4ca4d60f8 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 46c17a80585..ce5672a9d71 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 41f8d3df1ec..1bb9023a283 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 adebb4e21f0..2fabb11b784 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 94b11e77a53..69b3474669f 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 c56fe477069..a555b28f9b3 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 276b609a79e..f36f6e8f034 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 8b780a4f5b1..c04f826e241 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 13c562d5527..191094d9d62 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 de3b0794bee..f0f0d1ff03d 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 140fa1d7d63..8d9f568ed60 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 6734937f936..8f56842e377 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 93bdcd8123e..981689a52f6 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 6f2759b0894..0cb5abaf1bc 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 2e1d5117656..57b454fdebe 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 0753b08c7f3..12e35f3216d 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 5151f06a1ae..09694a7b5cc 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 fb1ad8adb2a..478dc3e2e4d 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 b408fb94027..bffdd4fe2d0 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 1201928163a..b8c8d369101 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 3d2a99afaff..0f05d885d06 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 267d913ebc0..4136c759bf2 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 63af49a7fc4..d0eb028a456 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 e4deb77c397..58048495dc4 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 2a0598823c9..e67f8706926 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 47eccd52e7a..2c087e8a856 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 517c46a3306..c8dc384f686 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 d7392ab6e88..449280bf5ae 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 590c6bdbae2..a166f0b693b 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 ff81158dc5f..cc6326daf45 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 af840d2f7c4..66e0a805ac2 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 eeb09a4d117..2539c23e073 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 5d449680f3e..560e3fa2a5f 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 6fb955b628c..5b4ecc50e1b 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 ee5fa30cf9f..96c0e76749f 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 d9d1f88307d..eb98320785f 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 fa391e6cdff..4a94013895a 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 0de6a5971ff..55d357df6fc 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 af9b3368587..b25d533125c 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 fbc580d884b..763a86ff769 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 63029daf58d..65db979dfa6 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 a88e8df1751..45705a07032 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 b2ac57f52a0..45705a07032 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 ae45a0c3b5d..5e0449ee17b 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 6b177014086..5e0449ee17b 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 fc70fe4a651..5caac95676c 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 1abfa2c38b2..5caac95676c 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 304562750bd..71fb9641828 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 c053a0aa4ae..c69e4289cae 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 d2a2a2e8af4..47241ab53fc 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 2ea84d7d17a..961970f6741 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 49884710247..fe453e216f4 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 0a04338761a..79d5c598e97 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/split_objects.svg b/resources/images/split_objects.svg index 091c4ad3d99..492a1389851 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 5965f459a04..149d7242626 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 b1246a6a5e0..eee3a868c3f 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 82e77af1311..e9a09945480 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 d0d7cb3773a..1e639c7dcc2 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 bb72d6e2acd..a34f812a6a2 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 730ef67ce15..81c76f5fa48 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 8e53610c3a5..b9f768b64c6 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 04ee5c02ae1..3dea459a5f1 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 f25ab8f3c46..f883607cdd5 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 8b1ff317b40..74548e96466 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 c47a8fe58da..7845267e2a9 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 40f907bd9ff..b75b85bd876 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 1b4cc48a71a..36ffc87ee52 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 00000000000..ae2a6783f7b --- /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 95fb702f7ef..00000000000 --- a/resources/images/tab_auxiliary_avtice.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/resources/images/tab_calibration.svg b/resources/images/tab_calibration.svg new file mode 100644 index 00000000000..54ea4fe5b59 --- /dev/null +++ b/resources/images/tab_calibration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/tab_calibration_active.svg b/resources/images/tab_calibration_active.svg new file mode 100644 index 00000000000..71bfdfc451b --- /dev/null +++ b/resources/images/tab_calibration_active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/tab_home_active.svg b/resources/images/tab_home_active.svg index 00be6f6f04b..7d8d586e91a 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 80971866e2a..6270ca49e7b 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 00000000000..dc776469e57 --- /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 617b9eb6a71..4eb67fc6df1 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 6438cd9ac2b..cd064caa1e2 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 5bb703d3389..a65cab4820a 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 d1b059b053e..5f04f4e05cc 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 cba8d02d98e..eb7da067664 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 c479d1cf6da..f83e594cc6d 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 3a4c3f0878f..f83cafd3bd2 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 4a13b0a0293..ea2577d9613 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 0a5dcc67b9a..a361368a181 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 184030090e4..6b15ec846de 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 69f37e8eff0..7e32711f61c 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 8513db24f6a..02c3bce781e 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 a6299e48d07..48debebc4c2 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 9f507dc9ea4..a062d0c40c7 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 3e78be7887f..ab3c592c9eb 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 00000000000..4cc9b2ecb3b --- /dev/null +++ b/resources/images/toolbar_double_directional_arrow.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/toolbar_measure.svg b/resources/images/toolbar_measure.svg index 1606b5ee6f5..ece2f09b92b 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 a273e753473..56a98b749e4 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 6a6a68b991e..0253340b53b 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 6ebe5cbf853..88371110568 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 dc08d011db4..a794a7f99ed 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 10f64738aef..27b56e20a9b 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 1f94c1cba31..1c9764a52b8 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 1e560788aaf..000e9b0c2c2 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 78730b42821..282b67bb67c 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 e5b5fc1f9be..01700b1f302 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_reset.svg b/resources/images/toolbar_reset.svg index 134b230b3f3..ad78b43e155 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 279b20bce2d..ad78b43e155 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 9642a6ae44f..d14b35c6769 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 b8b21a1578a..e611be4c5bc 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 0f8c6286231..a806a009260 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 b044591ee2f..78e86cee753 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 8a12cf00b1c..660f1fed3e0 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 7d686f1415e..65573c87b17 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 9208594a0ac..9ace7d67c7d 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 2481a95b479..fac4afb675b 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 08f593c119e..fbd932c6d51 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 b25888f2fa2..a680b7f5300 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 6c48a72bb09..96c5684cb0c 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 f1b4fc79d6a..c8d606829e5 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/topbar_blank.svg b/resources/images/topbar_blank.svg new file mode 100644 index 00000000000..b920a2ccdca --- /dev/null +++ b/resources/images/topbar_blank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/topbar_close.svg b/resources/images/topbar_close.svg index 43958476a5b..c911eaa53d6 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 0a349f0eda9..fce7742c291 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 1a19896bb89..eb28e21045a 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 6bf4ef6839f..5766784b502 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 b12dd684c2a..53c2b088882 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 2a45094a881..b5c5589dee5 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 4fdc1bad0ec..5899ce2fef5 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 8fb28c645d9..532ad4f0fad 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 267ff689992..0ad07b26243 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 94d15c147b1..2a07fbc01b5 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 e7dc4a61ed2..84124aa271b 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 c28991f2a0d..c3b3c935c75 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 0efbc898b63..cfaedd1acd9 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 5af4b8603f9..f60e09c08fb 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 d6d8142c4c8..1754224189d 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 29b7382df23..3228394b0bc 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 00000000000..7c3eedfbcac --- /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 fb8e0803a02..763a86ff769 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 8d1509867c7..7bed3b8cecc 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 9201d5593d3..301d972fdb9 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 673e1a89a7a..8472e66462e 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 85da862315c..8bcd035a5ef 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 e287cd1fab9..2857bb17ebe 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/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json index 67939352a5a..0f09f22753c 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/BBL.json b/resources/profiles/BBL.json index 4c70999b148..034f24f992b 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.07", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -649,6 +649,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 +765,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 +813,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 +829,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 +853,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 +901,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 +925,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 +1625,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 +1865,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 +1945,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 +2085,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 +2233,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 +2293,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/filament/Bambu ABS @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu ABS @BBL A1 0.2 nozzle.json index 352292b1eac..413d8ce7958 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 3358a7fc749..f85009c07bb 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 3949e185111..f21efe7f800 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 10bfd2565a6..6145a910b61 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 80f4f7c9200..88ad1a408f9 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 00000000000..ff5f41cae78 --- /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 00000000000..37acd12522d --- /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 00000000000..89916b17b3a --- /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 00000000000..777cf850801 --- /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 a934418ec12..916abbfbe39 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 abaa62c35e8..90b80ac8dc4 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 e98e02789dc..5e6a6788c3f 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 5693a2c1d0f..4c9c47f1a3c 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 4eb57181d1b..7ae30500d90 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 00000000000..ceca584ce18 --- /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 00000000000..03be549c975 --- /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 00000000000..2a0eaaa7927 --- /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 00000000000..f469aeebc67 --- /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 00000000000..76b7da4332b --- /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 00000000000..d0ff9e318aa --- /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 00000000000..cf166026aa8 --- /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 00000000000..24a6fa15b06 --- /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 3a65f1d44c5..790ddb7c4a9 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 5d291b7b7c1..fa10655ee86 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 31d13f48e8f..fd33b777869 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 3b5399efa26..ec8d95d22f8 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 b1cc742c2cf..6cd58cc0617 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 7ee21314655..cccf6aad59b 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 c7dd9923cd5..24857fa2e0a 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 0a24cb5a1a3..73d7aab0226 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 d68745bb17e..18b87c58799 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 f3160585a68..fd83a7dfdf9 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 3a70c808a4c..6f016020a4e 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 ddaeb7a6161..0ef0264d430 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 d8d8307fc02..671e0103282 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 2cb005d6f5d..8619d452d71 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 68496df6978..fb09d370f5e 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 3a18c1f6f00..029cc864be4 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 608465d6d6d..ff52a275ee2 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 9251208bdf7..7bb8e8f94b8 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 b3e250b6eb4..43457c192d2 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 cf3e399b378..d95ffa6a6d9 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 115adb144a1..5d0c2705a77 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 51137bdeecf..30c339132c9 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 7cdc6f3e42f..029a5f66a31 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 4199fd943df..29592f9b4fd 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 7721eacbc8b..c0b3df55551 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 824e96a5e30..04b51f81041 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 7e2d1f4fc95..fc0962cd0e2 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 a7e1e76634a..0987393ec65 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 7ed6ab8f3ea..8a1934d52a7 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 91995ef0691..81e5b51d601 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 85c560fcdb6..31478a99880 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 5d759343108..33d9312ab2f 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 fdc02d06c5e..40ef9317643 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 eb6f63a2f31..ea19cfcc5ef 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 418cc8f9ca3..d2b9a460303 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 3b5c25a41fc..204237570ba 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 c917e0745aa..2e4aa2e93ca 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 00000000000..52f12d83edf --- /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 00000000000..cc081f215f7 --- /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 00000000000..e896919e4ea --- /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 00000000000..ad2bc888ac9 --- /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 00000000000..0352dc891a5 --- /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 00000000000..1f47df1ec9c --- /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 00000000000..fa58a048a76 --- /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 00000000000..8672833ea78 --- /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 00000000000..4e628358628 --- /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 00000000000..c719bc4f8d0 --- /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 00000000000..c7c2bb1fbc8 --- /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 00000000000..12205f9c9a3 --- /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 00000000000..34b3d72d1a5 --- /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 00000000000..1090e575943 --- /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 00000000000..9d903da18d3 --- /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 00000000000..c10fe78b5ea --- /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 00000000000..6a24cfdba57 --- /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 00000000000..0d7ddda1cb1 --- /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 00000000000..3f02a3a3e88 --- /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 00000000000..e7802ed3d7d --- /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 00000000000..ca51974e25a --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PCTG @base.json @@ -0,0 +1,74 @@ +{ + "type": "filament", + "name": "Generic PCTG @base", + "inherits": "fdm_filament_pet", + "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 00000000000..39e2445109b --- /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 00000000000..c1127d4123d --- /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 00000000000..da34e44a631 --- /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 00000000000..c93659062f6 --- /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 00000000000..50584fff905 --- /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 00000000000..2e3b4b4bf4b --- /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 00000000000..bf95029646c --- /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 00000000000..929d738ffc5 --- /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 00000000000..32f3fd84a9e --- /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 00000000000..a3c61580008 --- /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 00000000000..0305af0ee6b --- /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 00000000000..f91285ad491 --- /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 f2e682804f1..7263d42f850 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 c1011d708ba..40fa7b252c7 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 00000000000..4c4b6c1710b --- /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 00000000000..3c4907f8c93 --- /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 00000000000..664b7be27fc --- /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 00000000000..faf0a211fa6 --- /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 00000000000..3c3ad6cfd1f --- /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 00000000000..2653f7acc8e --- /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 00000000000..c131f958789 --- /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 00000000000..b8d3231f45f --- /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 00000000000..7a94c1ad985 --- /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 00000000000..b58eace53c4 --- /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 cedb6ba843a..ba16728a538 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 7d5a7ecd576..bdfcdeef902 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 c36384a9e7a..28b917ca5fb 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 15c06a2ca6b..62a0d4d9e83 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 e703e3d6a60..f99a91cfb05 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 b1206b169d6..63d6bb3f21a 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 b4bcf755070..bbf4b7ee51c 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 a34eef36afd..2a5769421e9 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 815cca5839d..bca893a5dcf 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 d64ab7e7d13..a54e7bea5d8 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 7504020d8f6..5728ac0c5a9 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 4ed5821921a..77a037efd8b 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 c9c27d91431..a24021705ea 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 d3fd2251c3d..46e2144b4ee 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 c3444436a25..72378493dfa 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 461dd5e610c..74eb8715180 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 ac7a9294c18..a0da767a75c 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 00000000000..2b481e35d88 --- /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 6f1291c6ece..6ec95db4a80 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 00000000000..1b2efe2999b --- /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 57291142973..03bc9e5663f 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_initial_layer": [ - "110" - ], - "hot_plate_temp_initial_layer": [ + "eng_plate_temp": [ "110" ], - "textured_plate_temp_initial_layer": [ + "eng_plate_temp_initial_layer": [ "110" ], "fan_cooling_layer_time": [ "30" ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], "filament_max_volumetric_speed": [ - "23.2" + "18" ], "filament_type": [ "PC" ], - "filament_density": [ - "1.04" + "hot_plate_temp": [ + "110" ], - "filament_cost": [ - "20" + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "280" ], "nozzle_temperature_initial_layer": [ "270" ], - "reduce_fan_stop_start_freq": [ - "1" + "nozzle_temperature_range_high": [ + "290" ], - "fan_max_speed": [ - "60" + "nozzle_temperature_range_low": [ + "260" ], - "fan_min_speed": [ - "10" + "overhang_fan_speed": [ + "60" ], "overhang_fan_threshold": [ "25%" ], - "overhang_fan_speed": [ - "60" + "reduce_fan_stop_start_freq": [ + "1" ], - "nozzle_temperature": [ - "280" + "slow_down_layer_time": [ + "2" + ], + "slow_down_min_speed": [ + "20" ], "temperature_vitrification": [ "120" ], - "nozzle_temperature_range_low": [ - "260" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "slow_down_min_speed": [ - "20" + "textured_plate_temp": [ + "110" ], - "slow_down_layer_time": [ - "2" + "textured_plate_temp_initial_layer": [ + "110" ] } \ 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 00000000000..8ce20df68a2 --- /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 00000000000..82519f1b2e4 --- /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 00000000000..83a42782507 --- /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 700b24df852..3e0225bb70a 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 7feaa0a6a35..27e716bc73b 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: 20240104 =====================\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 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 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.500 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 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;===== nozzle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n\n M900 C\n G90\n M83\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G0 X128 E10 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\n\n M900 R\n G90\n G1 X108.000 Y4.500 F30000\n G91\n G1 Z-0.700 F1200\n G90\n M83\n G0 X128 E10 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\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: 20231215 =====================\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_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 X261 Y250 F20000\n M400 P200\n G39 S1\n G0 Z2 F4000\n {endif}\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 =========================\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 56737732675..8c69b328369 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" + "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\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 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 62526620ef9..b1219b59dfe 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: 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;===== 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" } \ 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 d7e4726a40c..c9046ad060a 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 {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;===== 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 528dcad10ff..e3952a891ec 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: 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;===== 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" } \ 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 1ae5c22b3ab..3364e0744f3 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: 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;===== 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" } \ 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 8e021245c25..45ce15c9909 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 {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;===== 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 8da15f1add2..3dc5e2b6d95 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 {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;===== 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 058eae33f2a..195857d3eef 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 {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;===== 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 ae628412cdd..0db7e015bbd 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 {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;===== 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 af54617e2d8..a5196e5c752 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: 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;===== 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" } \ 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 22c7cf476d7..4b96419d2f5 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: 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;===== 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: 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\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}\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 34b6e1894cc..74f5b0e3b99 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: 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;===== 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" } \ 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 06b1cdc2a1d..9741939bdaf 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: 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;===== 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" } \ 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 61bdacbbdf4..795cbb741fb 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: 20230824 =====================\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 {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\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 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;===== 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" } \ 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 5b13c5adbae..b56c45b13e7 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: 20230824 =====================\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 {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\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 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;===== 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", + "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\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}\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 eb4bd945b04..b93fbd1013b 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: 20230824 =====================\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 {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\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 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;===== 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" } \ 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 84fb5a17fd7..468a7fcbb25 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: 20230824 =====================\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 {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\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 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;===== 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" } \ 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 8407b6e2702..3b36361af07 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 aca4485aee6..d8e4794eab2 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 a81d5391148..fcb0cb21cf7 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] >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\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;===== 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" } \ 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 bcbcca7a0fd..83fd375a6ef 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] >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\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;===== 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: 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 4ccc2d081b0..920dad2ed42 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] >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\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;===== 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" } \ 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 3d3a04e2a1f..a3e4c8089de 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] >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\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;===== 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" } \ 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 067e53b5d2b..59c372c15fc 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 0b5df089733..a46163008e9 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 152b44e9ab5..829e9176753 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 deb52983a44..d05620a789c 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 000a6d08d61..19c218e4e38 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,6 +5,7 @@ "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", 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 0ce29963472..15f97d190e6 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,6 +5,7 @@ "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", 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 66e56802f27..da1f6a89c34 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,6 +5,7 @@ "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", 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 502c4cdaefd..70e54ac6c27 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,6 +5,7 @@ "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", 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 06a7a9eecbd..5ffde15e918 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 8e7e8cab90c..a77c85e6310 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 0a87af8bb3f..b54ff1ac714 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 bc9f93e2827..080e4005ece 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 f591722386c..ddb385860ca 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 2cbd3c2c9d5..77459773872 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,6 +5,7 @@ "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", 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 15c848b8b01..7d7f7be4570 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", 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 6865d2fed06..2d181eae1b3 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,6 +5,7 @@ "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", 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 069a975b0dd..71e2f43b7d6 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", 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 c7d6188f2ee..6424eae3c07 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,6 +5,7 @@ "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", 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 454b86baf45..f135573cf2b 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", 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 aeb1c1765e4..5b04803ced7 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,6 +5,7 @@ "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", 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 777e9f4e44c..1c7a15e91b9 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,6 +5,7 @@ "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", 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 ad2143b2c2e..072bfd59b0e 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 15a9dc636c8..19f85778222 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 b0ccea00294..99950575865 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 7c8e7bbbefb..4d1c9fa00e0 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 c848de06cdd..23393e37b97 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,6 +5,7 @@ "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", 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 5eb21ef675e..cb96b785afe 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,6 +5,7 @@ "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", 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 8167ee4df02..f463a9e0601 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,6 +5,7 @@ "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", 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 af661fd789a..60f8e2686be 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,6 +5,7 @@ "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", 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 4b2576ef0b7..56a9bfacedd 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 972961766e4..9841209d7e2 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 0b50342c13a..37a2a127773 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,6 +5,7 @@ "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" 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 9b04506d033..241c0a358f1 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 3a711c372e2..549a6d7fe59 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 917812c4626..66a9004da7d 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 faef462ee45..675c21747d5 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 4bf79151e28..6cb7369ad2d 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 3fb96a90781..74d30722a0c 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 03afc8bee0f..172d506ecaf 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 16c75d85ce2..d42c4dcd663 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 131b39e8b22..0a1a283141d 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", 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 83058499493..dbe1743fbcc 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", 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 da83aa8137d..1acd431c126 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,6 +5,7 @@ "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", 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 df9625b60b2..f2e438994e1 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,6 +5,7 @@ "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", 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 5d3d9b8d63c..e9090173196 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 342f481afe0..c1ff7b34a38 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 1c5b9def3f2..c8b97600b7c 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 568f51d502e..d19c428cd4a 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 227940298d8..b6d8ecc230b 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 1f246929f86..5632bdbe262 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", 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 58ac77c4c5f..fe51c4740f3 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", 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 d36e464f865..a3cd2eb87cf 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,6 +5,7 @@ "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", 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 32295f8e824..e5f73eab5b8 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,6 +5,7 @@ "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", 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 1ec6906d6d8..eedbf6577d5 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 88ef46e4824..509404f9cd7 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 1e0462da79c..6df7fae3f2e 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 2465e38c1d5..0d12d4ddb84 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 447c7994aab..f19e70c25f0 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 7bc6534c79e..7b1612a79d2 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 a1635bd9d6d..53d29a785fb 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 ae327ef1298..15ebedb2ac1 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 e1c6f5ebd70..91feaa67740 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 33edabab4d5..78b09fc6774 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 1b60746efc7..cea5a44b6d9 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 1d05bdfa6f3..2f38b67fa79 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 17c882470bf..30e9ca38ee8 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 2c2595cc9a2..3a261d636de 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 c38f5f71182..9edb0342ad9 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 27b9c03128a..a6213763003 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 abdd58e9b94..20e452f19b0 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 3915f80f486..4c791c46004 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 87866d4f720..ed3bd535f96 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 4ef6dae40e5..01505bf228f 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 af778978f42..629884dc7c9 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 8a542171d2c..ca2631fb714 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 5b02a41a121..7f7934ad5af 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 f616ccd800a..f8388f6262e 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 e5eaf7207b1..28082afef5a 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 54941c53272..a143d7b6357 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 47ee33688aa..992bb0f1c5d 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 a45123964c3..9be5eed9887 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 432bb9292b1..490c0026cd6 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 f2ea4704d82..f1923e0d69e 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 ca64d1e316d..4f9bb7b53ed 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 211a43a31e3..8c2e794dab3 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 b05e7cea1e4..26ad6e58061 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 ef0567d6d12..910c119ebd5 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 37b7593e8d7..164c03866f3 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 f53720838f5..e501731193c 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 c09f04e219d..3f0a4dacbe5 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 f4978b869f9..775523f0d6d 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 5eac111e7ef..044c7c24cbd 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 c5bcdf6cd6d..284206f4fac 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 08493a2232f..affc545389c 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 fbeab32f629..b1e8658fce1 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 f793ab2063c..e3778f37093 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 54463e5b3a2..7586ed84bfc 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 0a61d6aaa09..a75637780fe 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 3448a0f1bba..e5ebbcfe315 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 4a40cfb3d57..0268a0ea0fa 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 b7a618da197..51251017b3e 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 24acdebf3b0..f259218f18d 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 e642efe3f40..de5ffe19c33 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 39300abc52b..e4a2b2aaa15 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 547915d19e1..a647b300b65 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 649f3e803f5..f5115f43b79 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 ed00b1679fa..2c7cb9ba80c 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 b0eda75687d..d6b15c6eba8 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 b29e070b82a..571ab55f0dc 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 9305139f2d8..69578536be0 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 38b90393da2..dbf82551058 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 a03f301b783..d3e5e0c26ab 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 29d78d74d5e..dc3159fb7f1 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 0299ac8fece..7a5062a369e 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 40756960883..77c25859433 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 8b1312dfb9c..7669c35cdca 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 43895dd832a..8090a646179 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 ca90e061ead..fcc8b66b82f 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 48cb2aac2e3..64d3187b44e 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 c01ea549873..0857a48e0e3 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 836980d3fdb..61897f7a738 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 43a8b60f071..80670ce3b6b 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 cc7d7739531..9d54d14c185 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 e76673b4346..e22593fb300 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 040df9f8a95..9d35f2501e5 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 be12c21e1c6..573669d4a5b 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 ecc31c5421a..3d60b01d8bb 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 3baf1fd45d5..0220f43a0d1 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/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json index c8d9a9df8ac..eece4b84301 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 df463d15235..a61993fdd96 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 d43eb96b32e..19f49c5a0ef 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/Creality.json b/resources/profiles/Creality.json index 56887ec657d..277f57e6417 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,1290 +1,1354 @@ { - "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 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 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 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 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 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 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 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.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-3 V3", + "sub_path": "machine/Creality Ender-3 V3.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 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 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 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 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 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 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 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.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-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_cover.png b/resources/profiles/Creality/Creality Ender-3 V3_cover.png new file mode 100644 index 00000000000..510f02d2140 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 00000000000..4f5a07ef367 Binary files /dev/null and b/resources/profiles/Creality/Creality Sermoon V1_cover.png 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 00000000000..ef159f264b7 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 00000000000..2e8d441e67b Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3_buildplate_texture.png differ diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json index eaad0a146fe..4e2ec8c491f 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,8 @@ "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" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json index 9a8f1a77317..dfc94c35731 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,8 @@ "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" ] } \ 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 00000000000..c857a1f8c3e --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json @@ -0,0 +1,12 @@ +{ + "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" + ] +} \ 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 1a5bc133de5..45c1b47c057 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,8 @@ "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" ] } \ 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 5b4f750c9a7..9528472e4c6 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 PLA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json index 8230c3b9317..fb286b690ef 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,8 @@ "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" ] } \ 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 2d6ae3d2622..50ed25372e8 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 1c09f3d7759..e5ca2eb13cd 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,8 @@ "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" ] } \ 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 3b5d9fabb8e..5111e5091d0 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,8 @@ "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" ] } \ 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 b735ccfad60..85890efec7e 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,8 @@ "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" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json index 75c2d8d8341..7573352da87 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,8 @@ "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" ] } \ 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 b3d572cc848..a19eec76efd 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/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 00000000000..4006df1fbc2 --- /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 Ender3V3", + "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 00000000000..bb5f46780ee --- /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 Ender3V3", + "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.json b/resources/profiles/Creality/machine/Creality Ender-3 V3.json new file mode 100644 index 00000000000..fc5eb11265e --- /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 5683fdb6243..707fb250409 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 c3080ab4dd4..f5b4464a867 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 61649c930ba..2c980a66aa8 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 524131fb0b3..bb772a0bd3e 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 21abf7ec8f8..d19a20ace3a 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 8a65bf91546..e31c188086e 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 b74f86b5f41..10df2e7b5c4 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 dedfc160313..73e10d77a66 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 ff0a887772b..d4deca8aab7 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 1cb4effc69b..46b2ae94642 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 3b41fbd72cf..6788e0c5ecd 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 673856d383e..610866a1ce4 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 00000000000..bff01e50879 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json @@ -0,0 +1,70 @@ +{ + "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": [ + "32x32", + "400x400" + ], + "printable_height": "165", + "change_filament_gcode": "; S1 Pause For Filament change\nM125", + "nozzle_type": "undefine", + "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 00000000000..93bcb4bd854 --- /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" +} 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 00000000000..faf79595baa --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "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", + "enable_arc_fitting": "1", + "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": "grid", + "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 K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json index a37823ac305..f292c68bb2a 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": [ @@ -54,9 +54,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 +65,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 f6c49617399..f36ef1fb772 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": [ @@ -54,9 +54,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 +65,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 1d6328ddac8..976197fc3c6 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": "", @@ -51,9 +51,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 +62,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 Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 00000000000..6e943bce523 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "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", + "enable_arc_fitting": "1", + "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": "grid", + "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 K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json index 63ea8d7a56a..95bcfd2eee8 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": [ @@ -54,9 +54,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 +65,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 +116,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 e9c190d94c3..404f7721222 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": [ @@ -54,9 +54,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 +65,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 d3a62ef7982..43be3e0f16c 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": "", @@ -51,9 +51,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 +62,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 +88,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 +113,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 00000000000..2300af43a23 --- /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": "235", + "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": "gyroid", + "sparse_infill_speed": "215", + "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": "235", + "support_style": "tree_slim", + "support_threshold_angle": "40", + "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": "235", + "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 Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 00000000000..8601eea9639 --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "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", + "enable_arc_fitting": "1", + "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": "grid", + "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 K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json index eeb0412b1e2..89e199b06b1 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": [ @@ -65,6 +65,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 +91,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 +116,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 1f6accc5cf5..9497a842ede 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": [ @@ -65,6 +65,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 1a78a16472e..6b4ebe4779d 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": "", @@ -62,6 +62,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 +88,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 +113,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 00000000000..256696e056f --- /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": "gyroid", + "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": "40", + "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 Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 00000000000..d39a5b25736 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "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", + "enable_arc_fitting": "1", + "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": "grid", + "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 K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json index b72764cbabb..b8483578604 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": [ @@ -65,6 +65,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 +91,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 +116,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 cd29aeac4c6..4c862e2725c 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": [ @@ -65,6 +65,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 c285e9abdd5..7375e35ee66 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": "", @@ -62,6 +62,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 +88,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 +113,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 00000000000..9387a34a154 --- /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": "grid", + "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 K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json index 021ffef875a..38ec7ecd844 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 b9a5cfbb6a5..b0d52c4fa04 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 @@ -61,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.24mm Optimal @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json index 659e4b97832..71523cc4d7b 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 00000000000..1371d26cca6 --- /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": "235", + "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": "235", + "internal_bridge_support_thickness": "0.8", + "internal_solid_infill_line_width": "0.32", + "internal_solid_infill_speed": "235", + "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": "gyroid", + "sparse_infill_speed": "235", + "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": "235", + "support_style": "tree_slim", + "support_threshold_angle": "40", + "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": "235", + "travel_acceleration": "6000", + "travel_speed": "235", + "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.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 00000000000..7735633a3cc --- /dev/null +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "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", + "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": "grid", + "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 K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json index 904ff17ebd0..c9a69fb9967 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 4bd1b24007c..d56645b25c5 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 @@ -61,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.30mm Standard @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json index 8cd8ff9a2e8..3280057fdef 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 c9bc775be18..9ee4f69e996 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 b5ecf953ceb..b5645bf4e76 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 @@ -61,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.32mm Optimal @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json index 548aac9fab2..0e7533f7d13 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 00000000000..b286de423b6 --- /dev/null +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "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", + "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": "grid", + "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 K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json index 826e8349c47..fadb5b0f595 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 c312c12ca7b..3111169c9e4 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 @@ -61,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.36mm Draft @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json index 261b31086e4..0d9a8d151a4 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 f246ca94b72..96e481e7be2 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 e956dadee16..d84aea05e1d 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 @@ -61,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.40mm Standard @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json index 3d526219a3a..6eaf18e02a7 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 cf3145d3a50..28f226f4c34 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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 4e275a2129d..95839ac90e0 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 @@ -61,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.48mm Draft @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json index ba460aef682..58fc8ffcce4 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", @@ -61,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", @@ -84,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", @@ -109,7 +112,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/Flashforge.json b/resources/profiles/Flashforge.json index 852015703ae..b58dbefe0dc 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -56,6 +56,22 @@ "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" }, @@ -101,14 +117,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 +145,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 +254,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 +270,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", @@ -230,6 +286,10 @@ { "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", 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 00000000000..44387098ed5 --- /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 00000000000..1faf1a055a3 --- /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 1055037bb85..acb764bee00 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 f038a214867..d0560d5e8c5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json @@ -50,6 +50,7 @@ ], "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" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json index 21c8408a8ee..457a13c2fb1 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 2b5abb54a0d..5fe7a2172be 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json @@ -17,7 +17,9 @@ "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" ], "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 8dd83f0a4e8..aa5c61337de 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 07658bcd9a3..e9c3659a6b0 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 808fe59833c..38bacfca77e 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 74f50d8bd97..29774632d59 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 257c6edadda..0ae33101bed 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 3c68f52cbce..643b4c10c1b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json @@ -84,7 +84,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 @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json index 40ab738acd8..a2051528644 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 074f4671e03..bb851c86f0b 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 d48b9bbe9e6..9889e78ce3c 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 340a685a198..2536d54daf6 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 1f91f129478..1eb9c62f5f0 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 bc2961109d9..6e74e7bc9f5 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 268e9c66bf9..0639e20d0a6 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 00000000000..553b5f4beaa --- /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 00000000000..0ebd69f100d --- /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 00000000000..e3e8d5e3abe --- /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 00000000000..41122b34af9 --- /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/FusRock Generic NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json index 88259d7a3d0..44df1f319cf 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.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/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock Generic PAHT-CF.json index a58a757e6c4..ceeb2e7db18 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic PAHT-CF.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/FusRock Generic PET-CF.json b/resources/profiles/Flashforge/filament/FusRock Generic PET-CF.json index f7d520689fd..7239d7d22d2 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic PET-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic PET-CF.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/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json index afedac09909..d63badb6f18 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.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/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json index b897d2ed449..74b7f88dd9e 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.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/Polymaker Generic CoPA.json b/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json index 4c9993997c4..fff9c3e72d0 100644 --- a/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json +++ b/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.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/Polymaker Generic S1.json b/resources/profiles/Flashforge/filament/Polymaker Generic S1.json index d41b46f7819..e6ae0afcf88 100644 --- a/resources/profiles/Flashforge/filament/Polymaker Generic S1.json +++ b/resources/profiles/Flashforge/filament/Polymaker Generic S1.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/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 00000000000..02d4534ca73 --- /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 d8504dde9ef..5d8d6652d6e 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 ebd4b9d7f43..34694b32b67 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,63 +4,14 @@ "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": "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 00000000000..2eef780d8b1 --- /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 00000000000..021520222cc --- /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 4d8d58dcdf0..eaad7c2df19 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 c0a024542f7..7ee9c093abd 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": "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 00000000000..b638a18246b --- /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 6e4d1e81e29..a9e9fc036aa 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json @@ -2,7 +2,7 @@ "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": "flashforge_adventurer5m_series_buildplate_model.STL", diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json index bd95c9a1f0c..2211a634bb0 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json @@ -2,7 +2,7 @@ "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": "flashforge_adventurer5m_series_buildplate_model.STL", 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 faf7e62223f..6f30c8ede5e 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/fdm_adventurer5m_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json new file mode 100644 index 00000000000..bf5b7ebd200 --- /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-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" ], + "version": "1.8.0.0" +} 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 00000000000..efc3b98d346 --- /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 00000000000..2ea5c5c4e41 --- /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.20mm Standard @Flashforge AD5M 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M 0.4 Nozzle.json index 662b2654253..12a4806553e 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 305ccce399b..65baa249cf2 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.30mm Standard @Flashforge AD5M 0.6 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M 0.6 Nozzle.json index 76f0ab91e14..23deef5f132 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 74d314d740a..8e1b3f5ecc0 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 00000000000..4c507510661 --- /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 00000000000..28323aba75f --- /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/Prusa.json b/resources/profiles/Prusa.json index 983e35e558e..00a3485df1c 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -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" @@ -26,6 +30,18 @@ "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" @@ -144,6 +160,76 @@ "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 Speed @MINIIS", + "sub_path": "process/0.15mm Speed @MINIIS.json" + }, + { + + "name": "0.20mm Standard @MINIIS", + "sub_path": "process/0.20mm Standard @MINIIS.json" + }, + { + + "name": "0.20mm Speed @MINIIS", + "sub_path": "process/0.20mm Speed @MINIIS.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", @@ -215,6 +301,10 @@ "name": "Prusa Generic PLA @MK4", "sub_path": "filament/Prusa Generic PLA @MK4.json" }, + { + "name": "Prusa Generic PLA @MINIIS", + "sub_path": "filament/Prusa Generic PLA @MINIIS.json" + }, { "name": "Prusa Generic PLA-CF", "sub_path": "filament/Prusa Generic PLA-CF.json" @@ -227,6 +317,10 @@ "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 ABS", "sub_path": "filament/Prusa Generic ABS.json" @@ -235,6 +329,10 @@ "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 TPU", "sub_path": "filament/Prusa Generic TPU.json" @@ -243,6 +341,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,6 +353,10 @@ "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 PC", "sub_path": "filament/Prusa Generic PC.json" @@ -297,6 +403,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" diff --git a/resources/profiles/Prusa/MINIIS_cover.png b/resources/profiles/Prusa/MINIIS_cover.png new file mode 100644 index 00000000000..c321e4c5456 Binary files /dev/null and b/resources/profiles/Prusa/MINIIS_cover.png differ 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 00000000000..1eae4096954 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json @@ -0,0 +1,24 @@ +{ + "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": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.1{elsif nozzle_diameter[0]==0.8}0.07{elsif nozzle_diameter[0]==0.4}0.19{elsif nozzle_diameter[0]==0.25}0.55{else}0{endif}" + ], + "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/Prusa Generic ABS @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json index 1e40459111e..0de674b7fea 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 ASA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json new file mode 100644 index 00000000000..a7085464803 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json @@ -0,0 +1,24 @@ +{ + "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": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.1{elsif nozzle_diameter[0]==0.8}0.07{elsif nozzle_diameter[0]==0.4}0.19{elsif nozzle_diameter[0]==0.25}0.55{else}0{endif}" + ], + "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/Prusa Generic ASA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json index e92dc0795d9..de823b2306f 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-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json index 47926d81df7..8b389957c71 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 f1507270b5f..c92b0a981e0 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.json b/resources/profiles/Prusa/filament/Prusa Generic PC.json index e33173caed1..0c232ec2723 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC.json @@ -24,6 +24,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 PETG @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json new file mode 100644 index 00000000000..4f56ee10a41 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "filament_id": "GFG99_1", + "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": [ + "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" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.22{elsif nozzle_diameter[0]==0.8}0.15{elsif nozzle_diameter[0]==0.4}0.36{elsif nozzle_diameter[0]==0.25}1.02{else}0{endif}" + ], + "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/Prusa Generic PETG @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json index 383c86b63f4..9caa793e9f6 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 PLA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json new file mode 100644 index 00000000000..45ab0c18123 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json @@ -0,0 +1,27 @@ +{ + "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": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.17{elsif nozzle_diameter[0]==0.8}0.12{elsif nozzle_diameter[0]==0.4}0.27{elsif nozzle_diameter[0]==0.25}0.85{else}0{endif}" + ], + "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/Prusa Generic PLA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json index a167d5683f0..4461005ad3f 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.json b/resources/profiles/Prusa/filament/Prusa Generic PVA.json index 2c0e2017e37..ee80f6c637a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA.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" ] } 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 00000000000..b79f4ae8702 --- /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" + ], + "filament_start_gcode": [ + "M900 K0 ; Filament gcode" + ], + "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" + ], + "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/machine/Prusa MINI 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json index d047f158bc4..28e2a63c7a0 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json @@ -15,6 +15,12 @@ "nozzle_diameter": [ "0.25" ], + "max_layer_height": [ + "0.15" + ], + "min_layer_height": [ + "0.05" + ], "bed_exclude_area": [ "0x0" ], 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 00000000000..97e63d54c0a --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json @@ -0,0 +1,30 @@ +{ + "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" + ], + "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" + ] +} 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 00000000000..2457711175d --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json @@ -0,0 +1,117 @@ +{ + "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 U5.1.2+13478\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", + "313x173", + "440x240" + ] +} 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 00000000000..b3df3dff2bf --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "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" + ], + "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" + ] +} 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 00000000000..c6c0fad3b96 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json @@ -0,0 +1,33 @@ +{ + "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" + ], + "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" +] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS.json b/resources/profiles/Prusa/machine/Prusa MINIIS.json new file mode 100644 index 00000000000..0786441dcd7 --- /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;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF;Prusa Generic ABS @MINIIS;Prusa Generic PLA @MINIIS;Prusa Generic PETG @MINIIS;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 dfeb0d299c3..2e672aee1f1 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json @@ -63,7 +63,7 @@ "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]", + "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", 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 879f9d98b40..ecc26b3b323 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json @@ -56,7 +56,7 @@ "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]", + "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", 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 8846cb56651..18bdc378d04 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json @@ -63,7 +63,7 @@ "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]", + "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", 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 06008c154a9..dc2643c67e4 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json @@ -63,7 +63,7 @@ "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]", + "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", diff --git a/resources/profiles/Prusa/miniis.svg b/resources/profiles/Prusa/miniis.svg new file mode 100644 index 00000000000..96c8fdec080 --- /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 00000000000..2f4c45b7b15 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 00000000000..ce05b686628 --- /dev/null +++ b/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.05mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.05", + "initial_layer_print_height": "0.2", + "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.07mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json new file mode 100644 index 00000000000..c22b0d24c2a --- /dev/null +++ b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.07mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.07", + "initial_layer_print_height": "0.2", + "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.10mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json new file mode 100644 index 00000000000..40076038c97 --- /dev/null +++ b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "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.12mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json new file mode 100644 index 00000000000..2e77168ac08 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json @@ -0,0 +1,29 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "initial_layer_print_height": "0.2", + "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 Standard @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json new file mode 100644 index 00000000000..1a2cc016869 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json @@ -0,0 +1,34 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "initial_layer_print_height": "0.2", + "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.15mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json new file mode 100644 index 00000000000..fba5d501b45 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "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.4 nozzle", + "Prusa MINIIS 0.25 nozzle" + ] +} 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 00000000000..d4485f483ca --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json @@ -0,0 +1,29 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "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.4 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file 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 00000000000..cf5c7333bb3 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS.json @@ -0,0 +1,11 @@ +{ + "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" + ] +} \ 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 00000000000..8984d059d1f --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS.json @@ -0,0 +1,12 @@ +{ + "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", + "Prusa MINIIS 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 00000000000..1b8cb9efd06 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "layer_height": "0.25", + "initial_layer_print_height": "0.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", + "compatible_printers": [ + "Prusa MINIIS 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 00000000000..66964b9cf76 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "layer_height": "0.25", + "initial_layer_print_height": "0.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", + "compatible_printers": [ + "Prusa MINIIS 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 00000000000..54fb85f6cd9 --- /dev/null +++ b/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.3", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "3", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "2", + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file 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 00000000000..ebc6ffcb3e1 --- /dev/null +++ b/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.35mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "initial_layer_print_height": "0.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", + "compatible_printers": [ + "Prusa MINIIS 0.6 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 00000000000..26edf2b36da --- /dev/null +++ b/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.4", + "initial_layer_print_height": "0.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", + "compatible_printers": [ + "Prusa MINIIS 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 8aa6ebf5635..8995061a1dd 100644 --- a/resources/profiles/Prusa/process/fdm_process_common.json +++ b/resources/profiles/Prusa/process/fdm_process_common.json @@ -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", @@ -102,6 +103,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 00000000000..5416f7915af --- /dev/null +++ b/resources/profiles/Prusa/process/process_common_miniis.json @@ -0,0 +1,54 @@ +{ + "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": "cubic", + "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", + "precise_outer_wall": "1", + "overhang_reverse": "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 00000000000..a505444987d --- /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 00000000000..9822e2ac1f1 --- /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 0242cba66fb..9a6e3fa2d18 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -549,137 +549,145 @@ "sub_path": "filament/Qidi Generic ABS.json" }, { - "name": "Qidi Generic ASA", - "sub_path": "filament/Qidi Generic ASA.json" + "name": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PA", - "sub_path": "filament/Qidi Generic PA.json" + "name": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" }, - { - "name": "Qidi Generic PA-CF", - "sub_path": "filament/Qidi Generic PA-CF.json" + { + "name": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PC", - "sub_path": "filament/Qidi Generic PC.json" + "name": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PETG", - "sub_path": "filament/Qidi Generic PETG.json" + "name": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json" }, - { - "name": "Qidi Generic PETG-CF", - "sub_path": "filament/Qidi Generic PETG-CF.json" + { + "name": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA Silk", - "sub_path": "filament/Qidi Generic PLA Silk.json" + "name": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA", - "sub_path": "filament/Qidi Generic PLA.json" + "name": "Qidi Generic PETG", + "sub_path": "filament/Qidi Generic PETG.json" }, - { - "name": "Qidi Generic PLA-CF", - "sub_path": "filament/Qidi Generic PLA-CF.json" + { + "name": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PVA", - "sub_path": "filament/Qidi Generic PVA.json" + "name": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi TPU 95A-HF", - "sub_path": "filament/Qidi TPU 95A-HF.json" + "name": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "QIDI ABS Rapido", - "sub_path": "filament/QIDI ABS Rapido.json" + "name": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "QIDI ABS Rapido 0.2 nozzle", - "sub_path": "filament/QIDI ABS Rapido 0.2 nozzle.json" + "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "QIDI ABS Rapido 0.8 nozzle", - "sub_path": "filament/QIDI ABS Rapido 0.8 nozzle.json" + "name": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "QIDI PLA Rapido", - "sub_path": "filament/QIDI PLA Rapido.json" + "name": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json" }, { - "name": "QIDI PLA Rapido 0.2 nozzle", - "sub_path": "filament/QIDI PLA Rapido 0.2 nozzle.json" + "name": "Qidi Generic PLA", + "sub_path": "filament/Qidi Generic PLA.json" }, { - "name": "QIDI PLA Rapido 0.8 nozzle", - "sub_path": "filament/QIDI PLA Rapido 0.8 nozzle.json" + "name": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "QIDI PETG Tough", - "sub_path": "filament/QIDI PETG Tough.json" + "name": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "QIDI PETG Tough 0.2 nozzle", - "sub_path": "filament/QIDI PETG Tough 0.2 nozzle.json" + "name": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "QIDI PETG Tough 0.6 nozzle", - "sub_path": "filament/QIDI PETG Tough 0.6 nozzle.json" + "name": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "QIDI PETG Tough 0.8 nozzle", - "sub_path": "filament/QIDI PETG Tough 0.8 nozzle.json" + "name": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "QIDI PET-CF", - "sub_path": "filament/QIDI PET-CF.json" + "name": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "QIDI PA12-CF", - "sub_path": "filament/QIDI PA12-CF.json" + "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json" }, { - "name": "QIDI PAHT-CF", - "sub_path": "filament/QIDI PAHT-CF.json" + "name": "Qidi Generic TPU 95A", + "sub_path": "filament/Qidi Generic TPU 95A.json" }, { - "name": "QIDI ABS-GF25", - "sub_path": "filament/QIDI ABS-GF25.json" + "name": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "QIDI PA-Ultra", - "sub_path": "filament/QIDI PA-Ultra.json" + "name": "QIDI ABS Odorless", + "sub_path": "filament/QIDI ABS Odorless.json" }, { - "name": "Tinmorry PETG-ECO", - "sub_path": "filament/Tinmorry PETG-ECO.json" + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic TPU", - "sub_path": "filament/Qidi Generic TPU.json" + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "QIDI ABS-GF10", - "sub_path": "filament/QIDI ABS-GF10.json" + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi PC-ABS-FR", - "sub_path": "filament/Qidi PC-ABS-FR.json" + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi ASA-Aero", - "sub_path": "filament/Qidi ASA-Aero.json" - }, + "name": "QIDI ABS Odorless @0.2 nozzle", + "sub_path": "filament/QIDI ABS Odorless @0.2 nozzle.json" + }, { - "name": "QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI ABS Odorless @0.8 nozzle", + "sub_path": "filament/QIDI ABS Odorless @0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido", + "sub_path": "filament/QIDI ABS Rapido.json" }, { "name": "QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle", "sub_path": "filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json" }, + { + "name": "QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json" + }, { "name": "QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle", "sub_path": "filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json" @@ -689,16 +697,16 @@ "sub_path": "filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI ABS Rapido 0.2 nozzle", + "sub_path": "filament/QIDI ABS Rapido 0.2 nozzle.json" }, { - "name": "QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json" + "name": "QIDI ABS Rapido 0.8 nozzle", + "sub_path": "filament/QIDI ABS Rapido 0.8 nozzle.json" }, { - "name": "QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json" + "name": "QIDI ABS-GF25", + "sub_path": "filament/QIDI ABS-GF25.json" }, { "name": "QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle", @@ -712,209 +720,353 @@ "name": "QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle", "sub_path": "filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json" }, + { + "name": "QIDI ASA", + "sub_path": "filament/QIDI ASA.json" + }, + { + "name": "QIDI ASA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json" + }, + { + "name": "Qidi ASA-Aero", + "sub_path": "filament/Qidi ASA-Aero.json" + }, { "name": "Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json" + "name": "QIDI PA12-CF", + "sub_path": "filament/QIDI PA12-CF.json" }, { - "name": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json" + "name": "QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json" + "name": "QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" + "name": "QIDI PAHT-CF", + "sub_path": "filament/QIDI PAHT-CF.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json" + "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" + "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json" + "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json" + "name": "Qidi PC-ABS-FR", + "sub_path": "filament/Qidi PC-ABS-FR.json" }, { - "name": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json" + "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json" + "name": "QIDI PET-CF", + "sub_path": "filament/QIDI PET-CF.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" + "name": "QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json" + "name": "QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json" + "name": "QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json" + "name": "QIDI PETG Tough", + "sub_path": "filament/QIDI PETG Tough.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" + "name": "QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" + "name": "QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json" + "name": "QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json" + "name": "QIDI PETG Tough 0.2 nozzle", + "sub_path": "filament/QIDI PETG Tough 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json" + "name": "QIDI PETG Tough 0.6 nozzle", + "sub_path": "filament/QIDI PETG Tough 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json" + "name": "QIDI PETG Tough 0.8 nozzle", + "sub_path": "filament/QIDI PETG Tough 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI PLA Rapido", + "sub_path": "filament/QIDI PLA Rapido.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" + "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" + "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json" + "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido 0.2 nozzle", + "sub_path": "filament/QIDI PLA Rapido 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @0.6 nozzle", + "sub_path": "filament/QIDI PLA Rapido @0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido 0.8 nozzle", + "sub_path": "filament/QIDI PLA Rapido 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte", + "sub_path": "filament/QIDI PLA Rapido Matte.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @0.2 nozzle", + "sub_path": "filament/QIDI PLA Rapido Matte @0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @0.6 nozzle", + "sub_path": "filament/QIDI PLA Rapido Matte @0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @0.8 nozzle", + "sub_path": "filament/QIDI PLA Rapido Matte @0.8 nozzle.json" + }, + { + "name": "Qidi PLA-CF", + "sub_path": "filament/Qidi PLA-CF.json" + }, + { + "name": "QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "QIDI PLA-CF @0.6 nozzle", + "sub_path": "filament/QIDI PLA-CF @0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @0.8 nozzle", + "sub_path": "filament/QIDI PLA-CF @0.8 nozzle.json" + }, + { + "name": "QIDI PA-Ultra", + "sub_path": "filament/QIDI PA-Ultra.json" }, { "name": "QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json" }, + { + "name": "QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json" + }, { "name": "QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle", "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI ABS-GF10", + "sub_path": "filament/QIDI ABS-GF10.json" }, { - "name": "QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json" + "name": "QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json" + "name": "QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json" + "name": "QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Tinmorry PETG-ECO", + "sub_path": "filament/Tinmorry PETG-ECO.json" }, { - "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Qidi Generic TPU", + "sub_path": "filament/Qidi Generic TPU.json" }, { - "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Qidi Generic ASA", + "sub_path": "filament/Qidi Generic ASA.json" }, { - "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json" }, { - "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Qidi Generic PA", + "sub_path": "filament/Qidi Generic PA.json" + }, + { + "name": "Qidi Generic PA-CF", + "sub_path": "filament/Qidi Generic PA-CF.json" }, { - "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Qidi Generic PC", + "sub_path": "filament/Qidi Generic PC.json" + }, + { + "name": "Qidi Generic PETG-CF", + "sub_path": "filament/Qidi Generic PETG-CF.json" }, { - "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Qidi Generic PLA Silk", + "sub_path": "filament/Qidi Generic PLA Silk.json" }, { - "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Qidi Generic PVA", + "sub_path": "filament/Qidi Generic PVA.json" + }, + { + "name": "QIDI ABS-GF", + "sub_path": "filament/QIDI ABS-GF.json" + }, + { + "name": "QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "Qidi Generic PLA-CF", + "sub_path": "filament/Qidi Generic PLA-CF.json" + }, + { + "name": "Qidi TPU 95A-HF", + "sub_path": "filament/Qidi TPU 95A-HF.json" }, { "name": "Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle", @@ -924,7 +1076,6 @@ "name": "Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle", "sub_path": "filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json" } - ], "machine_list": [ { diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json new file mode 100644 index 00000000000..8f0cd8942db --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ABS Odorless @0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Odorless", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "max_fan_speed":[ + "80" + ], + "min_fan_speed":[ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json new file mode 100644 index 00000000000..0474f721715 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ABS Odorless @0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Odorless", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "nozzle_temperature": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "max_fan_speed":[ + "80" + ], + "min_fan_speed":[ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 00000000000..8e56cc5a03f --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "from": "system", + "hot_plate_temp_initial_layer": [ + "90" + ], + "inherits": "QIDI ABS Odorless", + "is_custom_defined": "0", + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle", + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.021" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ +"Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 00000000000..c0a349fa31e --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "from": "system", + "hot_plate_temp_initial_layer": [ + "90" + ], + "inherits": "QIDI ABS Odorless", + "is_custom_defined": "0", + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle", + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ +"Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 00000000000..020153b310a --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "from": "system", + "hot_plate_temp_initial_layer": [ + "90" + ], + "inherits": "QIDI ABS Odorless", + "is_custom_defined": "0", + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle", + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.014" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ +"Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 00000000000..ccaacdfe140 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "from": "system", + "hot_plate_temp_initial_layer": [ + "90" + ], + "inherits": "QIDI ABS Odorless", + "is_custom_defined": "0", + "name": "QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle", + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ +"Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json new file mode 100644 index 00000000000..ccc24c26c70 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ABS Odorless", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "max_fan_speed":[ + "80" + ], + "min_fan_speed":[ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_density":[ + "1.02" + ], + "chamber_temperature": [ + "55" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json index 52d285cfa1a..87970900da1 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "QIDI ABS Rapido 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "QIDI ABS Rapido", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Plus 0.2 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json index 3460538218b..8a348e7acb1 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json @@ -5,9 +5,9 @@ "name": "QIDI ABS Rapido 0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "QIDI ABS Rapido", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -19,13 +19,10 @@ "22" ], "nozzle_temperature": [ - "260" + "270" ], "slow_down_min_speed": [ "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Plus 0.8 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json index 7656eb8f6c2..683be9035f5 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "setting_id": "GFSA04", "instantiation": "true", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -21,7 +21,7 @@ "filament_max_volumetric_speed": [ "2" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "90" ], @@ -41,6 +41,6 @@ "20" ], "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" +"Qidi Q1 Pro 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json index 7a02f947c33..94d9f981ccb 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "setting_id": "GFSA04", "instantiation": "true", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -21,7 +21,7 @@ "filament_max_volumetric_speed": [ "24.5" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "90" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json index 1b3cd4ac62d..ac603a17763 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "setting_id": "GFSA04", "instantiation": "true", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -21,7 +21,7 @@ "filament_max_volumetric_speed": [ "24.5" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "90" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json index 29e4c1db5c7..b661799a9ff 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "setting_id": "GFSA04", "instantiation": "true", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -21,7 +21,7 @@ "filament_max_volumetric_speed": [ "24.5" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "90" ], @@ -38,7 +38,7 @@ "0.011" ], "slow_down_min_speed": [ - "20" + "10" ], "compatible_printers": [ "Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json index 347f1dba843..e9b5f75734d 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json @@ -7,10 +7,10 @@ "instantiation": "true", "inherits": "fdm_filament_abs", "filament_flow_ratio": [ - "0.926" + "0.95" ], "filament_max_volumetric_speed": [ - "20" + "22" ], "enable_pressure_advance": [ "1" @@ -18,8 +18,20 @@ "pressure_advance": [ "0.021" ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + "max_fan_speed":[ + "80" + ], + "min_fan_speed":[ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_density":[ + "1.05" + ], + "chamber_temperature": [ + "55" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", @@ -34,5 +46,6 @@ "Qidi X-Smart 3 0.6 nozzle", "Qidi X-Plus 3 0.6 nozzle", "Qidi X-Max 3 0.6 nozzle" + ] } diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 00000000000..fe72ee456c3 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,51 @@ +{ "type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle" + ], + "from": "system", + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "inherits": "QIDI ABS-GF", + "is_custom_defined": "0", + "name": "QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle", + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 00000000000..80621e46a71 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,51 @@ +{ "type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle" + ], + "from": "system", + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "inherits": "QIDI ABS-GF", + "is_custom_defined": "0", + "name": "QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle", + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.01" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 00000000000..b81523c6198 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,51 @@ +{ "type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle" + ], + "from": "system", + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "inherits": "QIDI ABS-GF", + "is_custom_defined": "0", + "name": "QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle", + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.01" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF.json b/resources/profiles/Qidi/filament/QIDI ABS-GF.json new file mode 100644 index 00000000000..1e946ef06aa --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF.json @@ -0,0 +1,68 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ABS-GF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "270" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "chamber_temperature": [ + "55" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_density":[ + "1.15" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json index a0ab3b3427a..e77c21a52ab 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json @@ -20,7 +20,7 @@ "filament_settings_id": [ "QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json index cc825857d1d..86b94180936 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json @@ -20,7 +20,7 @@ "filament_settings_id": [ "QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json index 532b8229eba..4070af9946e 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json @@ -20,7 +20,7 @@ "filament_settings_id": [ "QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json index baf5860ade3..a102a1213bd 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json @@ -5,21 +5,42 @@ "name": "QIDI ABS-GF10", "from": "system", "instantiation": "true", - "inherits": "QIDI ABS-GF25", + "inherits": "fdm_filament_abs", "filament_flow_ratio": [ - "0.94" + "0.95" ], "filament_max_volumetric_speed": [ - "14" + "17" ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_range_high": [ - "280" + "enable_pressure_advance": [ + "1" ], "pressure_advance": [ - "0.02" + "0.01" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "270" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "chamber_temperature": [ + "55" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "overhang_fan_speed": [ + "100" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json index 24690111678..fd278ed2d71 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json @@ -3,10 +3,10 @@ "setting_id": "GFSA04", "instantiation": "true", "activate_chamber_temp_control": [ - "0" + "1" ], "chamber_temperature": [ - "55" + "0" ], "fan_max_speed": [ "20" @@ -20,7 +20,7 @@ "filament_settings_id": [ "QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json index 0d56960e816..a3782cc2a15 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json @@ -3,10 +3,10 @@ "setting_id": "GFSA04", "instantiation": "true", "activate_chamber_temp_control": [ - "0" + "1" ], "chamber_temperature": [ - "55" + "0" ], "fan_max_speed": [ "20" @@ -20,7 +20,7 @@ "filament_settings_id": [ "QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json index aa7dd8a7930..da2469deb54 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json @@ -3,10 +3,10 @@ "setting_id": "GFSA04", "instantiation": "true", "activate_chamber_temp_control": [ - "0" + "1" ], "chamber_temperature": [ - "55" + "0" ], "fan_max_speed": [ "20" @@ -20,7 +20,7 @@ "filament_settings_id": [ "QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json index 3c5b8af5889..ff520549c19 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json @@ -7,10 +7,10 @@ "instantiation": "true", "inherits": "fdm_filament_abs", "filament_flow_ratio": [ - "0.9" + "0.95" ], "filament_max_volumetric_speed": [ - "15" + "17" ], "enable_pressure_advance": [ "1" @@ -24,14 +24,23 @@ "nozzle_temperature": [ "270" ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" - ], "fan_max_speed": [ - "30" + "20" ], "fan_min_speed": [ - "10" + "20" + ], + "chamber_temperature": [ + "55" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "overhang_fan_speed": [ + "100" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 00000000000..1cf845ad223 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ASA @Qidi Q1 Pro 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 00000000000..01fb0eaca23 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,42 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_settings_id": [ + "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle" + ], + "from": "system", + "inherits": "QIDI ASA", + "is_custom_defined": "0", + "name": "QIDI ASA @Qidi Q1 Pro 0.4 nozzle", + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 00000000000..fc21c6e1e37 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,42 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_settings_id": [ + "QIDI ASA @Qidi Q1 Pro 0.6 nozzle" + ], + "from": "system", + "inherits": "QIDI ASA", + "is_custom_defined": "0", + "name": "QIDI ASA @Qidi Q1 Pro 0.6 nozzle", + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.014" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 00000000000..9d11a1834e8 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,42 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_settings_id": [ + "QIDI ASA @Qidi Q1 Pro 0.8 nozzle" + ], + "from": "system", + "inherits": "QIDI ASA", + "is_custom_defined": "0", + "name": "QIDI ASA @Qidi Q1 Pro 0.8 nozzle", + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json new file mode 100644 index 00000000000..543a8f2bb53 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ASA @Qidi X-Max 3 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "enable_volume_fan":[ + "40" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json new file mode 100644 index 00000000000..88404df2bf4 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ASA @Qidi X-Plus 3 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "enable_volume_fan":[ + "40" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json new file mode 100644 index 00000000000..596ee112eac --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ASA @Qidi X-Smart 3 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "enable_volume_fan":[ + "40" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI ASA.json b/resources/profiles/Qidi/filament/QIDI ASA.json new file mode 100644 index 00000000000..860d743bba4 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI ASA.json @@ -0,0 +1,93 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "QIDI ASA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.92" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "270" + ], + "cool_plate_temp" : [ + "90" + ], + "eng_plate_temp" : [ + "90" + ], + "hot_plate_temp" : [ + "90" + ], + "textured_plate_temp" : [ + "90" + ], + "cool_plate_temp_initial_layer" : [ + "90" + ], + "eng_plate_temp_initial_layer" : [ + "90" + ], + "hot_plate_temp_initial_layer" : [ + "90" + ], + "textured_plate_temp_initial_layer" : [ + "90" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "max_fan_speed":[ + "50" + ], + "min_fan_speed":[ + "10" + ], + "filament_retraction_length": [ + "0.01" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_density":[ + "1.07" + ], + "chamber_temperature": [ + "55" + ], + "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json index adb8718390a..7c7a3dc95e4 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json @@ -14,12 +14,12 @@ "filament_settings_id": [ "QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ - "100" + "80" ], "hot_plate_temp_initial_layer": [ - "100" + "80" ], "inherits": "QIDI PA-Ultra", "is_custom_defined": "0", diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 00000000000..9c7d962ddb3 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,36 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_settings_id": [ + "QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle" + ], + "from": "system", + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "inherits": "QIDI PA-Ultra", + "is_custom_defined": "0", + "name": "QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle", + "overhang_fan_speed": [ + "50" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json index 94fd3a3c4ec..fe2af9df158 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json @@ -14,12 +14,12 @@ "filament_settings_id": [ "QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ - "100" + "80" ], "hot_plate_temp_initial_layer": [ - "100" + "80" ], "inherits": "QIDI PA-Ultra", "is_custom_defined": "0", diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json index e4d1b7679fc..91b0873137a 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json @@ -24,6 +24,27 @@ "pressure_advance": [ "0.03" ], + "max_fan_speed":[ + "40" +], +"min_fan_speed":[ + "20" +], +"hot_plate_temp_initial_layer" : [ + "80" +], +"hot_plate_temp" : [ +"80" +], +"slow_down_layer_time": [ +"15" +], +"filament_density":[ +"1.21" +], +"filament_flow_ratio": [ +"0.96" +], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", @@ -41,7 +62,6 @@ "Qidi X-CF Pro 0.8 nozzle", "Qidi X-Smart 3 0.8 nozzle", "Qidi X-Plus 3 0.8 nozzle", -"Qidi X-Max 3 0.8 nozzle", -"Qidi Q1 Pro 0.6 nozzle" +"Qidi X-Max 3 0.8 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json index 13cbe61f4c0..9a28add435b 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -11,7 +11,7 @@ "filament_settings_id": [ "QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PA12-CF", "is_custom_defined": "0", "name": "QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle", @@ -22,7 +22,7 @@ "280" ], "overhang_fan_speed": [ - "50" + "100" ], "pressure_advance": [ "0.035" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json index be1bbc67d31..0674bacba63 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -11,7 +11,7 @@ "filament_settings_id": [ "QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PA12-CF", "is_custom_defined": "0", "name": "QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json index 37469c94fe8..71723f666bc 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -11,7 +11,7 @@ "filament_settings_id": [ "QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PA12-CF", "is_custom_defined": "0", "name": "QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle", @@ -22,7 +22,7 @@ "280" ], "overhang_fan_speed": [ - "50" + "100" ], "pressure_advance": [ "0.035" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF.json b/resources/profiles/Qidi/filament/QIDI PA12-CF.json index 08f55efc1f4..c53243db4b8 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF.json @@ -16,25 +16,25 @@ "290" ], "filament_max_volumetric_speed": [ - "8" + "10" ], "fan_max_speed": [ - "30" + "40" ], "fan_min_speed": [ - "10" + "20" ], "overhang_fan_threshold": [ "0%" ], "overhang_fan_speed": [ - "40" + "100" ], "fan_cooling_layer_time": [ "5" ], "full_fan_speed_layer": [ - "3" + "0" ], "enable_pressure_advance": [ "1" @@ -42,6 +42,21 @@ "pressure_advance": [ "0.01" ], + "hot_plate_temp_initial_layer" : [ + "80" +], +"hot_plate_temp" : [ + "80" +], +"slow_down_layer_time": [ + "5" +], +"filament_density":[ + "1.09" +], +"filament_flow_ratio": [ + "0.96" +], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", @@ -60,5 +75,6 @@ "Qidi X-Smart 3 0.8 nozzle", "Qidi X-Plus 3 0.8 nozzle", "Qidi X-Max 3 0.8 nozzle" + ] } diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json index 5f76aa62ba9..b1e941182d2 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -12,12 +12,12 @@ "20" ], "filament_max_volumetric_speed": [ - "8" + "14" ], "filament_settings_id": [ "QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PAHT-CF", "is_custom_defined": "0", "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json index 5b5f87a1453..857aa455261 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -17,7 +17,7 @@ "filament_settings_id": [ "QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PAHT-CF", "is_custom_defined": "0", "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json index 85819678e5b..91d06fc3111 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -17,7 +17,7 @@ "filament_settings_id": [ "QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PAHT-CF", "is_custom_defined": "0", "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json index a004038980c..0ec72701354 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json @@ -16,13 +16,13 @@ "310" ], "filament_max_volumetric_speed": [ - "8" + "14" ], "fan_max_speed": [ - "30" + "40" ], "fan_min_speed": [ - "10" + "20" ], "overhang_fan_threshold": [ "0%" @@ -34,7 +34,7 @@ "5" ], "full_fan_speed_layer": [ - "2" + "0" ], "enable_pressure_advance": [ "1" @@ -42,6 +42,21 @@ "pressure_advance": [ "0.01" ], + "hot_plate_temp_initial_layer" : [ + "80" +], +"hot_plate_temp" : [ + "80" +], +"slow_down_layer_time": [ + "5" +], +"filament_density":[ + "1.20" +], +"filament_flow_ratio": [ + "0.96" +], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json index ee1fd39763d..f991ef96037 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -14,7 +14,7 @@ "filament_settings_id": [ "QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PET-CF", "is_custom_defined": "0", "name": "QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle", @@ -25,10 +25,10 @@ "280" ], "overhang_fan_speed": [ - "50" + "100" ], "pressure_advance": [ - "0.032" + "0.01" ], "slow_down_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json index 1f22f9ff228..efaefef830d 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -14,7 +14,7 @@ "filament_settings_id": [ "QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PET-CF", "is_custom_defined": "0", "name": "QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json index 7a11be473b2..9eff17f5868 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -14,7 +14,7 @@ "filament_settings_id": [ "QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "inherits": "QIDI PET-CF", "is_custom_defined": "0", "name": "QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle", @@ -25,7 +25,7 @@ "280" ], "overhang_fan_speed": [ - "50" + "100" ], "pressure_advance": [ "0.025" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF.json b/resources/profiles/Qidi/filament/QIDI PET-CF.json index c27f725f1d6..b1173f811ae 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF.json @@ -16,25 +16,25 @@ "320" ], "filament_max_volumetric_speed": [ - "8" + "12" ], "fan_max_speed": [ - "30" + "40" ], "fan_min_speed": [ - "10" + "20" ], "overhang_fan_threshold": [ "0%" ], "overhang_fan_speed": [ - "40" + "100" ], "fan_cooling_layer_time": [ "5" ], "full_fan_speed_layer": [ - "3" + "0" ], "enable_pressure_advance": [ "1" @@ -42,6 +42,21 @@ "pressure_advance": [ "0.01" ], + "hot_plate_temp_initial_layer" : [ + "80" +], +"hot_plate_temp" : [ + "80" +], +"slow_down_layer_time": [ + "5" +], +"filament_density":[ + "1.30" +], +"filament_flow_ratio": [ + "1" +], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json index de315e82433..78aa5e90482 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json @@ -5,7 +5,7 @@ "name": "QIDI PETG Tough 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "QIDI PETG Tough", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,7 +16,7 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" @@ -28,7 +28,7 @@ "10" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ "8" @@ -40,10 +40,10 @@ "1" ], "pressure_advance": [ - "0.05" + "0.04" ], "filament_max_volumetric_speed": [ - "1" + "16" ], "compatible_printers": [ "Qidi X-Plus 0.2 nozzle", @@ -51,6 +51,7 @@ "Qidi X-CF Pro 0.2 nozzle", "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle", + "Qidi Q1 Pro 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json index 3b938eb9d71..7f4da85e592 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json @@ -5,7 +5,7 @@ "name": "QIDI PETG Tough 0.6 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "QIDI PETG Tough", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,13 +16,13 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ "8" @@ -34,7 +34,7 @@ "1" ], "pressure_advance": [ - "0.05" + "0.04" ], "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json index 8b2f70e6fe1..a99c52e8bee 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json @@ -5,7 +5,7 @@ "name": "QIDI PETG Tough 0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "QIDI PETG Tough", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,7 +16,7 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" @@ -34,7 +34,7 @@ "1" ], "pressure_advance": [ - "0.05" + "0.04" ], "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json index 0fe156f437f..eb65ae3ef34 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json @@ -14,7 +14,7 @@ "filament_settings_id": [ "QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "80" ], diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json index 6b4c5a396de..26def59c544 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json @@ -14,7 +14,7 @@ "filament_settings_id": [ "QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "80" ], diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 00000000000..6183243f5c4 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,30 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_settings_id": [ + "QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle" + ], + "from": "system", + "hot_plate_temp_initial_layer": [ + "80" + ], + "inherits": "QIDI PETG Tough", + "is_custom_defined": "0", + "name": "QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle", + "overhang_fan_speed": [ + "100" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json index 662fa68527e..5ca1cbdec1a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json @@ -14,7 +14,7 @@ "filament_settings_id": [ "QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "80" ], diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough.json b/resources/profiles/Qidi/filament/QIDI PETG Tough.json index 972e94bd936..c0f3a7ad465 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough.json @@ -16,16 +16,16 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" ], "fan_max_speed": [ - "90" + "40" ], "fan_min_speed": [ - "40" + "10" ], "slow_down_min_speed": [ "20" @@ -37,13 +37,22 @@ "0.95" ], "filament_max_volumetric_speed": [ - "12" + "16" ], "enable_pressure_advance": [ "1" ], "pressure_advance": [ - "0.05" + "0.04" + ], + "hot_plate_temp_initial_layer" : [ + "80" + ], + "hot_plate_temp" : [ + "80" + ], + "filament_density":[ + "1.24" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", @@ -51,7 +60,6 @@ "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle" + "Qidi X-Max 3 0.4 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json index 216b98c41e7..83805585f48 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json @@ -5,19 +5,16 @@ "name": "QIDI PLA Rapido 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "QIDI PLA Rapido", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" ], - "pressure_advance": [ - "0.031" - ], "filament_max_volumetric_speed": [ "2" ], diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json index 55615fd03dc..81059b30b7f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json @@ -5,21 +5,21 @@ "name": "QIDI PLA Rapido 0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "QIDI PLA Rapido", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" ], "pressure_advance": [ - "0.031" + "0.008" ], "filament_max_volumetric_speed": [ - "22" + "20" ], "compatible_printers": [ "Qidi X-Plus 0.8 nozzle", diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json new file mode 100644 index 00000000000..f5889b11454 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "QIDI PLA Rapido @0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi X-Plus 0.6 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json index 0f80b8075ee..f2b961f8213 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -23,7 +23,7 @@ "filament_settings_id": [ "QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle" ], - "from": "User", + "from": "system", "full_fan_speed_layer": [ "3" ], @@ -37,7 +37,7 @@ "is_custom_defined": "0", "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle", "nozzle_temperature": [ - "220" + "210" ], "pressure_advance": [ "0.042" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json index 6830a7053d9..9fde9545400 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -23,7 +23,7 @@ "filament_settings_id": [ "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "full_fan_speed_layer": [ "3" ], @@ -37,7 +37,7 @@ "is_custom_defined": "0", "name": "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle", "nozzle_temperature": [ - "220" + "210" ], "pressure_advance": [ "0.042" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json index 22eb83879d4..f5fc9e32648 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -23,7 +23,7 @@ "filament_settings_id": [ "QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "full_fan_speed_layer": [ "3" ], diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json index 1f5a17c1b7b..42df71e5e79 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -23,7 +23,7 @@ "filament_settings_id": [ "QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "full_fan_speed_layer": [ "3" ], diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json new file mode 100644 index 00000000000..b4da1cbf179 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "QIDI PLA Rapido Matte @0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Matte", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json new file mode 100644 index 00000000000..b770f889a04 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "QIDI PLA Rapido Matte @0.6 nozzle", + "from": "User", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Matte", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "compatible_printers": [ + "Qidi X-Plus 0.6 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json new file mode 100644 index 00000000000..c206d0e350d --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "QIDI PLA Rapido Matte @0.8 nozzle", + "from": "User", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Matte", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "compatible_printers": [ + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 00000000000..56d802676f4 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,51 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_settings_id": [ + "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle" + ], + "from": "system", + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "inherits": "QIDI PLA Rapido Matte", + "is_custom_defined": "0", + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle", + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.042" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 00000000000..80dc5879bf6 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,51 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "filament_settings_id": [ + "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle" + ], + "from": "system", + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "inherits": "QIDI PLA Rapido Matte", + "is_custom_defined": "0", + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle", + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.042" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 00000000000..472cde3a8c6 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,51 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "filament_settings_id": [ + "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle" + ], + "from": "system", + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "inherits": "QIDI PLA Rapido Matte", + "is_custom_defined": "0", + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle", + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.016" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 00000000000..b73e847cc87 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,51 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "filament_settings_id": [ + "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle" + ], + "from": "system", + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "inherits": "QIDI PLA Rapido Matte", + "is_custom_defined": "0", + "name": "QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle", + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.008" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json new file mode 100644 index 00000000000..578b18b1d80 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "QIDI PLA Rapido Matte", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_density":[ + "1.42" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json index 5b07e3e1f74..302d1c5bd41 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json @@ -27,12 +27,6 @@ "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Plus 0.6 nozzle", - "Qidi X-Max 0.6 nozzle", - "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle" + "Qidi X-Max 3 0.4 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json new file mode 100644 index 00000000000..dc30ce7db02 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSL98", + "name": "QIDI PLA-CF @0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Qidi PLA-CF", + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Qidi X-Plus 0.6 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json new file mode 100644 index 00000000000..6d1364ce440 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSL98", + "name": "QIDI PLA-CF @0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Qidi PLA-CF", + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 00000000000..7b47a552f70 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,30 @@ +{"type": "filament", +"filament_id": "GFL98", +"setting_id": "GFSL98", +"instantiation": "true", + "extrusion_multiplier": [ + "0.93" + ], + "first_layer_temperature": [ + "220" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_settings_id": [ + "QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle" + ], + "from": "system", + "inherits": "Qidi PLA-CF", + "is_custom_defined": "0", + "name": "QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle", + "nozzle_temperature": [ + "220" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 00000000000..0fec335289d --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,30 @@ +{"type": "filament", +"filament_id": "GFL98", +"setting_id": "GFSL98", +"instantiation": "true", + "extrusion_multiplier": [ + "0.93" + ], + "first_layer_temperature": [ + "220" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_settings_id": [ + "QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle" + ], + "from": "system", + "inherits": "Qidi PLA-CF", + "is_custom_defined": "0", + "name": "QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle", + "nozzle_temperature": [ + "220" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 00000000000..d0387282d73 --- /dev/null +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,30 @@ +{"type": "filament", +"filament_id": "GFL98", +"setting_id": "GFSL98", +"instantiation": "true", + "extrusion_multiplier": [ + "0.93" + ], + "first_layer_temperature": [ + "220" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_settings_id": [ + "QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle" + ], + "from": "system", + "inherits": "Qidi PLA-CF", + "is_custom_defined": "0", + "name": "QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle", + "nozzle_temperature": [ + "220" + ], + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json index df0aecfa32f..2dae49d2a71 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "setting_id": "GFSA04", "instantiation": "true", "activate_chamber_temp_control": [ - "1" + "0" ], "chamber_temperature": [ "60" @@ -14,7 +14,7 @@ "filament_settings_id": [ "Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "inherits": "Qidi ASA-Aero", "is_custom_defined": "0", "name": "Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json index b5464463c52..ca2c07fcf3c 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json @@ -49,10 +49,22 @@ "0.021" ], "filament_retraction_length": [ - "0" + "0.01" ], - "filament_start_gcode": [ - "; filament start gcode\nM141 S60\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + "max_fan_speed":[ + "50" + ], + "min_fan_speed":[ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_density":[ + "1.03" + ], + "chamber_temperature": [ + "60" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", @@ -60,19 +72,7 @@ "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Max 0.6 nozzle", - "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle" + "Qidi X-Max 3 0.4 nozzle" + ] } diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json index 0f180e4026c..4c43d6167e8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ABS", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi Q1 Pro 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json index 678d0130fb5..329a417ba5a 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -11,7 +11,7 @@ "filament_settings_id": [ "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "90" ], diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json index 8ad2038b938..98639f2926d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ABS", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "24.5" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json index afad4a341a0..4b532fe90b8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ABS", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "24.5" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json index 32292c6fe7e..21a9b03ba02 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ABS", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Max 3 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json index cdd8044ae43..805cfb1ae10 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ABS", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Plus 3 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json index 39fa925715b..0eeacbf73e1 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ABS", "filament_flow_ratio": [ - "0.926" + "0.95" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS.json b/resources/profiles/Qidi/filament/Qidi Generic ABS.json index e3c944e8250..cd4513a2bfb 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS.json @@ -7,34 +7,50 @@ "instantiation": "true", "inherits": "fdm_filament_abs", "filament_flow_ratio": [ - "0.926" + "0.95" ], "filament_max_volumetric_speed": [ - "15" + "17" ], "enable_pressure_advance": [ "1" ], "pressure_advance": [ "0.021" + ], + "max_fan_speed":[ + "80" + ], + "min_fan_speed":[ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_density":[ + "1.04" ], "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", "Qidi X-Plus 0.8 nozzle", "Qidi X-Max 0.8 nozzle", "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json index 072826e6003..c07dae16b70 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -1,42 +1,24 @@ -{"type": "filament", -"filament_id": "GFB99", -"setting_id": "GFSA04", -"instantiation": "true", - "activate_chamber_temp_control": [ - "0" - ], - "chamber_temperature": [ - "55" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle" - ], - "from": "User", - "inherits": "Qidi Generic ASA", - "is_custom_defined": "0", +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", "name": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_initial_layer": [ - "250" + "from": "system", + "instantiation": "true", + "inherits": "Qidi Generic ASA", + "filament_flow_ratio": [ + "0.92" ], - "overhang_fan_speed": [ - "100" + "enable_pressure_advance": [ + "1" ], "pressure_advance": [ "0.021" ], - "slow_down_layer_time": [ - "4" + "filament_max_volumetric_speed": [ + "2" ], - "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" - ] + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] } diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json index 3462157577c..a068ae06032 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -17,12 +17,12 @@ "filament_settings_id": [ "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "inherits": "Qidi Generic ASA", "is_custom_defined": "0", "name": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", "nozzle_temperature": [ - "255" + "270" ], "nozzle_temperature_initial_layer": [ "250" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json index d586d8187e1..49485cc7869 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -17,7 +17,7 @@ "filament_settings_id": [ "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "inherits": "Qidi Generic ASA", "is_custom_defined": "0", "name": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json index ed38ebb6f80..53c36fd95b2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -17,7 +17,7 @@ "filament_settings_id": [ "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "inherits": "Qidi Generic ASA", "is_custom_defined": "0", "name": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json index 0f60692f69b..f6cd88e9e24 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ASA", "filament_flow_ratio": [ - "0.926" + "0.92" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Max 3 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json index d32e2c80c82..91ea783e3f8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ASA", "filament_flow_ratio": [ - "0.926" + "0.92" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Plus 3 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json index 2e754bdb4be..1d2f9a7a440 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -5,9 +5,9 @@ "name": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Qidi Generic ASA", "filament_flow_ratio": [ - "0.926" + "0.92" ], "enable_pressure_advance": [ "1" @@ -17,9 +17,6 @@ ], "filament_max_volumetric_speed": [ "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA.json b/resources/profiles/Qidi/filament/Qidi Generic ASA.json index eab6cf1e009..3181967e2a3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA.json @@ -7,13 +7,13 @@ "instantiation": "true", "inherits": "fdm_filament_asa", "filament_max_volumetric_speed": [ - "15" + "16" ], "filament_flow_ratio": [ - "0.926" + "0.92" ], "nozzle_temperature_initial_layer": [ - "270" + "250" ], "nozzle_temperature": [ "270" @@ -21,29 +21,36 @@ "enable_pressure_advance": [ "1" ], + "max_fan_speed":[ + "50" + ], + "min_fan_speed":[ + "10" + ], "pressure_advance": [ "0.021" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" ], "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", "Qidi X-Plus 0.8 nozzle", "Qidi X-Max 0.8 nozzle", "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json index b939dc7680a..3d64c5d7928 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json @@ -16,19 +16,19 @@ "290" ], "filament_max_volumetric_speed": [ - "8" + "10" ], "fan_max_speed": [ - "30" + "40" ], "fan_min_speed": [ - "10" + "20" ], "overhang_fan_threshold": [ "0%" ], "overhang_fan_speed": [ - "40" + "100" ], "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA.json b/resources/profiles/Qidi/filament/Qidi Generic PA.json index 19e29799dd4..d747a1b299d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PA.json @@ -10,22 +10,19 @@ "3" ], "nozzle_temperature_initial_layer": [ - "280" + "310" ], "nozzle_temperature": [ - "280" + "310" ], "filament_max_volumetric_speed": [ - "16" + "14" ], "enable_pressure_advance": [ "1" ], "pressure_advance": [ - "0.03" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + "0.01" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC.json b/resources/profiles/Qidi/filament/Qidi Generic PC.json index 8bab081a8c8..5c5650e5545 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC.json @@ -7,13 +7,10 @@ "instantiation": "true", "inherits": "fdm_filament_pc", "filament_max_volumetric_speed": [ - "5" + "8" ], "filament_flow_ratio": [ - "0.94" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + "0.92" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json index b9c65494db3..16bf02d8eca 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -5,7 +5,7 @@ "name": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "Qidi Generic PETG", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,7 +16,7 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" @@ -28,10 +28,10 @@ "10" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json index 907a637ca3e..b699fb1a4cb 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -1,8 +1,19 @@ -{ - "type": "filament", - "filament_id": "GFB99", - "setting_id": "GFSA04", - "instantiation": "true", +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", +"reduce_fan_stop_start_freq": [ + "1" +], +"slow_down_for_layer_cooling": [ + "1" +], +"fan_cooling_layer_time": [ + "30" +], +"overhang_fan_threshold": [ + "25%" +], "fan_max_speed": [ "40" ], @@ -12,7 +23,7 @@ "filament_settings_id": [ "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp_initial_layer": [ "80" ], @@ -22,13 +33,25 @@ "overhang_fan_speed": [ "100" ], - "pressure_advance": [ - "0.04" - ], "slow_down_min_speed": [ "20" + ], + "slow_down_layer_time": [ + "12" +], + "pressure_advance":[ + "0.086" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "enable_pressure_advance": [ + "1" ], "compatible_printers": [ "Qidi Q1 Pro 0.4 nozzle" - ] -} \ No newline at end of file + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json index 26f3809524e..bdf952339b9 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -5,7 +5,7 @@ "name": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "Qidi Generic PETG", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,7 +16,7 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" @@ -28,10 +28,10 @@ "10" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_flow_ratio": [ "0.95" @@ -43,7 +43,7 @@ "0.04" ], "filament_max_volumetric_speed": [ - "9" + "12" ], "compatible_printers": [ "Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json index 628ba1a92f2..bb48060f5ef 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -5,7 +5,7 @@ "name": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "Qidi Generic PETG", "reduce_fan_stop_start_freq": [ "1" ], @@ -28,10 +28,10 @@ "10" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_flow_ratio": [ "0.95" @@ -43,7 +43,7 @@ "0.04" ], "filament_max_volumetric_speed": [ - "9" + "12" ], "compatible_printers": [ "Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json index 55acc65308b..242c0f01f7b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json @@ -5,7 +5,7 @@ "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "Qidi Generic PETG", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,7 +16,7 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" @@ -31,7 +31,7 @@ "10" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_flow_ratio": [ "0.95" @@ -40,7 +40,7 @@ "1" ], "pressure_advance": [ - "0.05" + "0.04" ], "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json index bd7a5d17bd7..d96fb215570 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json @@ -5,7 +5,7 @@ "name": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "Qidi Generic PETG", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,7 +16,7 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" @@ -31,7 +31,7 @@ "10" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_flow_ratio": [ "0.95" @@ -40,7 +40,7 @@ "1" ], "pressure_advance": [ - "0.05" + "0.04" ], "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json index 88e7d4a18f0..98e60a99d17 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json @@ -5,7 +5,7 @@ "name": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "Qidi Generic PETG", "reduce_fan_stop_start_freq": [ "1" ], @@ -16,7 +16,7 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" @@ -31,7 +31,7 @@ "10" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_flow_ratio": [ "0.95" @@ -40,7 +40,7 @@ "1" ], "pressure_advance": [ - "0.05" + "0.04" ], "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json index 45f26856246..f112205505b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json @@ -91,25 +91,33 @@ "0.05" ], "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", "Qidi X-Plus 0.8 nozzle", "Qidi X-Max 0.8 nozzle", "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.2 nozzle", "Qidi Q1 Pro 0.4 nozzle", "Qidi Q1 Pro 0.6 nozzle", - "sQidi Q1 Pro 0.8 nozzle" + "Qidi Q1 Pro 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG.json b/resources/profiles/Qidi/filament/Qidi Generic PETG.json index 31f0e2acc59..f23903b8719 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG.json @@ -16,52 +16,59 @@ "30" ], "overhang_fan_speed": [ - "90" + "100" ], "overhang_fan_threshold": [ "25%" ], "fan_max_speed": [ - "90" + "40" ], "fan_min_speed": [ - "40" + "10" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_flow_ratio": [ "0.95" ], "filament_max_volumetric_speed": [ - "9" + "12" ], "enable_pressure_advance": [ "1" ], "pressure_advance": [ - "0.042" + "0.04" + ], + "filament_density":[ + "1.27" ], "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Qidi 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 a45234ae214..8a7d1c3ae96 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 @@ -5,12 +5,12 @@ "name": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Qidi Generic PLA", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" @@ -19,7 +19,7 @@ "0.042" ], "filament_max_volumetric_speed": [ - "2" + "14" ], "compatible_printers": [ "Qidi Q1 Pro 0.2 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json index 87d3bece307..4a87b977dce 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -8,9 +8,9 @@ "filament_settings_id": [ "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "full_fan_speed_layer": [ - "3" + "0" ], "hot_plate_temp": [ "60" @@ -22,7 +22,7 @@ "is_custom_defined": "0", "name": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", "nozzle_temperature": [ - "220" + "210" ], "slow_down_min_speed": [ "20" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json index 59b31e5f019..6668f944487 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -5,12 +5,12 @@ "name": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Qidi Generic PLA", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json index 979091ebad8..b25ce10154c 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -5,12 +5,12 @@ "name": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Qidi Generic PLA", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json index eac3229bdec..78a3483c14d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json @@ -5,12 +5,12 @@ "name": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Qidi Generic PLA", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json index 0c73db382a5..75e046ea478 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json @@ -5,12 +5,12 @@ "name": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Qidi Generic PLA", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json index 21c563ab660..b593ed0f3b3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json @@ -5,12 +5,12 @@ "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Qidi Generic PLA", "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ - "5" + "8" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json index d9287994eff..e99189fd803 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json @@ -6,42 +6,60 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", + "enable_pressure_advance":"1", + "pressure_advance": [ + "0.032" + ], + "nozzle_temperature_initial_layer":[ + "220" + ], "filament_max_volumetric_speed": [ - "12" + "7.5" ], "filament_retraction_length": [ "0.5" ], + "filament_flow_ratio": [ "0.98" ], "slow_down_layer_time": [ "8" ], + "hot_plate_temp_initial_layer" : [ + "55" + ], + "hot_plate_temp" : [ + "55" + ], "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle" + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.2 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json index 4989e95f0c1..c1cf194a388 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json @@ -10,16 +10,16 @@ "40" ], "filament_flow_ratio": [ - "0.95" + "0.96" ], "filament_type": [ "PLA-CF" ], "filament_max_volumetric_speed": [ - "12" + "9" ], "slow_down_layer_time": [ - "7" + "8" ], "additional_cooling_fan_speed": [ "0" @@ -33,35 +33,34 @@ "nozzle_temperature_range_high": [ "240" ], - "nozzle_temperature": [ - "230" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle" + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.2 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA.json b/resources/profiles/Qidi/filament/Qidi Generic PLA.json index 4068d39487d..ebcf828405b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA.json @@ -1,16 +1,16 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "GFL99", "setting_id": "GFSL99", "name": "Qidi Generic PLA", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ + "filament_flow_ratio": [ "0.98" ], "filament_max_volumetric_speed": [ - "12" + "14" ], "slow_down_layer_time": [ "8" @@ -19,25 +19,29 @@ "1" ], "pressure_advance": [ - "0.032" + "0.031" ], - "compatible_printers": [ + "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", "Qidi X-Plus 0.8 nozzle", "Qidi X-Max 0.8 nozzle", "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" - ] -} \ No newline at end of file + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PVA.json b/resources/profiles/Qidi/filament/Qidi Generic PVA.json index ca1b3c2bccb..93bb0e381a4 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PVA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PVA.json @@ -19,29 +19,33 @@ "10" ], "compatible_printers": [ + "Qidi X-Plus 0.2 nozzle", + "Qidi X-Max 0.2 nozzle", + "Qidi X-CF Pro 0.2 nozzle", + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle", "Qidi X-Plus 0.4 nozzle", "Qidi X-Max 0.4 nozzle", "Qidi X-CF Pro 0.4 nozzle", "Qidi X-Smart 3 0.4 nozzle", "Qidi X-Plus 3 0.4 nozzle", "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Plus 0.6 nozzle", "Qidi X-Max 0.6 nozzle", "Qidi X-CF Pro 0.6 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Plus 0.8 nozzle", - "Qidi X-Max 0.8 nozzle", - "Qidi X-CF Pro 0.8 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle" + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.2 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 00000000000..3f5a9bc852d --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,39 @@ +{"type": "filament", +"filament_id": "GFB99", +"setting_id": "GFSA04", +"instantiation": "true", + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_settings_id": [ + "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle" + ], + "from": "system", + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "inherits": "Qidi Generic TPU 95A", + "is_custom_defined": "0", + "name": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json new file mode 100644 index 00000000000..b27676fa35c --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSR99", + "name": "Qidi Generic TPU 95A", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "4" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "filament_density": [ + "1.21" + ], + "filament_flow_ratio": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Max 0.6 nozzle", + "Qidi X-CF Pro 0.6 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Plus 0.8 nozzle", + "Qidi X-Max 0.8 nozzle", + "Qidi X-CF Pro 0.8 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json index 6d0e15e2a0b..a64de438a1e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json @@ -11,7 +11,7 @@ "filament_settings_id": [ "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "inherits": "Qidi Generic TPU", "is_custom_defined": "0", "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", @@ -19,7 +19,7 @@ "230" ], "nozzle_temperature_initial_layer": [ - "220" + "230" ], "compatible_printers": [ diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json index 84a25b23ce1..1bc87b6bc30 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json @@ -17,7 +17,7 @@ "filament_settings_id": [ "Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], @@ -31,7 +31,7 @@ "250" ], "pressure_advance": [ - "0.082" + "0.04" ], "slow_down_layer_time": [ "4" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json index 6416f28ace2..2db0187cc35 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json @@ -17,7 +17,7 @@ "filament_settings_id": [ "Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], 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 8d7927f9850..db1e75811b3 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 @@ -17,7 +17,7 @@ "filament_settings_id": [ "Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "100" ], @@ -31,7 +31,7 @@ "250" ], "pressure_advance": [ - "0.082" + "0.04" ], "slow_down_layer_time": [ "4" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json index 4098bb90e26..b5f8921369f 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json @@ -21,8 +21,26 @@ "overhang_fan_speed": [ "60" ], - "filament_start_gcode": [ - "; filament start gcode\nM141 S55\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" + "max_fan_speed":[ + "40" + ], + "min_fan_speed":[ + "10" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_density":[ + "1.19" + ], + "chamber_temperature": [ + "55" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/Qidi PLA-CF.json b/resources/profiles/Qidi/filament/Qidi PLA-CF.json new file mode 100644 index 00000000000..dda26e182fc --- /dev/null +++ b/resources/profiles/Qidi/filament/Qidi PLA-CF.json @@ -0,0 +1,42 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSL98", + "name": "Qidi PLA-CF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.96" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "temperature": [ + "230" + ], + "first_layer_temperature": [ + "230" + ], + "filament_density": [ + "1.25" + ], + "extrusion_multiplier": [ + "0.96" + ], + "advance_pressure": [ + "0.02" + ], + + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json index f7468558ec8..91a4c272c52 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json @@ -11,7 +11,7 @@ "filament_settings_id": [ "Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "60" ], @@ -22,10 +22,10 @@ "is_custom_defined": "0", "name": "Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle", "nozzle_temperature": [ - "250" + "230" ], "nozzle_temperature_initial_layer": [ - "220" + "230" ], "compatible_printers": [ "Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json index a9d22a8ccb6..b92f99f0acf 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json @@ -11,7 +11,7 @@ "filament_settings_id": [ "Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle" ], - "from": "User", + "from": "system", "hot_plate_temp": [ "60" ], @@ -22,10 +22,10 @@ "is_custom_defined": "0", "name": "Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle", "nozzle_temperature": [ - "250" + "230" ], "nozzle_temperature_initial_layer": [ - "220" + "230" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json index 99c6387226a..c17dcfb87ab 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json @@ -7,7 +7,7 @@ "instantiation": "true", "inherits": "fdm_filament_tpu", "filament_max_volumetric_speed": [ - "6" + "4" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/fdm_filament_abs.json b/resources/profiles/Qidi/filament/fdm_filament_abs.json index ed997e0881d..0a2551e03b7 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_abs.json +++ b/resources/profiles/Qidi/filament/fdm_filament_abs.json @@ -5,28 +5,28 @@ "instantiation": "false", "inherits": "fdm_filament_common", "cool_plate_temp" : [ - "95" + "90" ], "eng_plate_temp" : [ - "95" + "90" ], "hot_plate_temp" : [ - "95" + "90" ], "textured_plate_temp" : [ - "95" + "90" ], "cool_plate_temp_initial_layer" : [ - "95" + "90" ], "eng_plate_temp_initial_layer" : [ - "95" + "90" ], "hot_plate_temp_initial_layer" : [ - "95" + "90" ], "textured_plate_temp_initial_layer" : [ - "95" + "90" ], "slow_down_for_layer_cooling": [ "1" @@ -38,13 +38,13 @@ "30" ], "filament_max_volumetric_speed": [ - "15" + "20" ], "filament_type": [ "ABS" ], "filament_density": [ - "1.04" + "1.24" ], "filament_cost": [ "20" @@ -83,6 +83,6 @@ "10" ], "slow_down_layer_time": [ - "5" + "4" ] } diff --git a/resources/profiles/Qidi/filament/fdm_filament_common.json b/resources/profiles/Qidi/filament/fdm_filament_common.json index ec1a0103f5c..d04f771b95c 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_common.json +++ b/resources/profiles/Qidi/filament/fdm_filament_common.json @@ -129,16 +129,20 @@ "slow_down_layer_time": [ "8" ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \nM106 P3 S0" - ], "nozzle_temperature": [ "200" ], "temperature_vitrification": [ "100" - ] + ], + "during_print_exhaust_fan_speed":[ + "100" + ], + "activate_air_filtration":[ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "compatible_printers": [] } diff --git a/resources/profiles/Qidi/filament/fdm_filament_pla.json b/resources/profiles/Qidi/filament/fdm_filament_pla.json index 6e162b00f9f..24bbf363bf1 100644 --- a/resources/profiles/Qidi/filament/fdm_filament_pla.json +++ b/resources/profiles/Qidi/filament/fdm_filament_pla.json @@ -20,28 +20,28 @@ "20" ], "cool_plate_temp" : [ - "55" + "60" ], "eng_plate_temp" : [ - "55" + "60" ], "hot_plate_temp" : [ - "55" + "60" ], "textured_plate_temp" : [ - "55" + "60" ], "cool_plate_temp_initial_layer" : [ - "55" + "60" ], "eng_plate_temp_initial_layer" : [ - "55" + "60" ], "hot_plate_temp_initial_layer" : [ - "55" + "60" ], "textured_plate_temp_initial_layer" : [ - "55" + "60" ], "nozzle_temperature_initial_layer": [ "210" @@ -68,7 +68,7 @@ "2" ], "full_fan_speed_layer": [ - "4" + "0" ], "nozzle_temperature": [ "220" @@ -83,10 +83,10 @@ "230" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "4" + "8" ], "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json index 41e53258ef7..3d315713fb0 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.2", "default_filament_profile": [ - "QIDI PLA Rapido;QIDI PETG;QIDI ABS Rapido" + "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi Q1 Pro 0.2 nozzle", "max_layer_height": [ 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 52709182dee..8d849c8dcf9 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 @@ -27,13 +27,13 @@ "245x245", "208x245" ], - "printable_height": "245", + "printable_height": "240", "nozzle_type": "hardened_steel", "max_layer_height": [ - "0.3" + "0.28" ], "min_layer_height": [ - "0.07" + "0.08" ], "printer_settings_id": "Qidi", "retraction_minimum_travel": [ @@ -43,7 +43,7 @@ "0.8" ], "retract_length_toolchange": [ - "10" + "2" ], "deretraction_speed": [ "0" @@ -62,9 +62,9 @@ ], "layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nLOG_Z\nG92 E0\n", "machine_end_gcode": "M141 S0\nM104 S0\nM140 S0\nG1 E-3 F1800\nG91\nG0 Z5 F600\nG90\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}", - "machine_start_gcode": "PRINT_START BED=[first_layer_bed_temperature] HOTEND=[first_layer_temperature] CHAMBER=[chamber_temperature]\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[first_layer_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * first_layer_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 * first_layer_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 * first_layer_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 * first_layer_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 * first_layer_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 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 3} Z0\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 6}\nG1 Z1 F600", + "machine_start_gcode": "PRINT_START BED=[first_layer_bed_temperature] HOTEND=[first_layer_temperature] CHAMBER=[chamber_temperature]\nM83\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature]\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[first_layer_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * first_layer_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 * first_layer_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 * first_layer_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 * first_layer_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 * first_layer_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 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 3} Z0\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 6}\nG1 Z1 F600", "thumbnails_format": "PNG", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json index 1bfefcd7822..d54f5ec5134 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.6", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle" ], "default_print_profile": "0.30mm Standard @Qidi Q1 Pro 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json index 397df434625..d6c7a27798b 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.8", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle" ], "default_print_profile": "0.40mm Standard @Qidi Q1 Pro 0.8 nozzle", "max_layer_height": [ @@ -21,7 +21,7 @@ "0.16" ], "retract_length_toolchange": [ - "3" + "10" ], "retraction_length": [ "3" diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json index 62a6acc62c0..d869a61f6b1 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json @@ -89,7 +89,7 @@ "2" ], "retract_length_toolchange": [ - "10" + "2" ], "deretraction_speed": [ "0" @@ -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\nM140 S[hot_plate_temp_initial_layer]\nM190 S[hot_plate_temp_initial_layer]\nM109 S[nozzle_temperature_initial_layer]\nG92 E-19\nG0 Y5 Z0.3 F3600\nG1 X5 E0 F2400\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json index 2505730d9e1..92284f4157e 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 @@ -89,7 +89,7 @@ "2" ], "retract_length_toolchange": [ - "10" + "2" ], "deretraction_speed": [ "0" @@ -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-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json index 8921e1cc41c..4915207a686 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.2", "default_filament_profile": [ - "QIDI PLA Rapido 0.2 nozzle;QIDI PETG Tough 0.2 nozzle;QIDI ABS Rapido 0.2 nozzle" + "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XMax3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json index e22bca8b0eb..6d15b376e0a 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json @@ -21,20 +21,20 @@ "nozzle_type": "hardened_steel", "auxiliary_fan": "1", "max_layer_height": [ - "0.32" + "0.28" ], "min_layer_height": [ - "0.07" + "0.08" ], "printer_settings_id": "Qidi", "retraction_minimum_travel": [ "1" ], "retraction_length": [ - "0.8" + "1" ], "retract_length_toolchange": [ - "10" + "2" ], "deretraction_speed": [ "0" @@ -43,6 +43,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json index 5f167207b6c..566afbb4f75 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.6", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ], "default_print_profile": "0.30mm Standard @Qidi XMax3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json index f2b9122af14..335d5c91682 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.8", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ], "default_print_profile": "0.40mm Standard @Qidi XMax3 0.8 nozzle", "max_layer_height": [ @@ -21,7 +21,7 @@ "0.16" ], "retract_length_toolchange": [ - "3" + "10" ], "retraction_length": [ "3" 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 c722d7ca34e..5ef98e78537 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 @@ -89,7 +89,7 @@ "2" ], "retract_length_toolchange": [ - "10" + "2" ], "deretraction_speed": [ "0" @@ -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/Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json index c29bdd6655e..9f56f59c1ed 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.2", "default_filament_profile": [ - "QIDI PLA Rapido 0.2 nozzle;QIDI PETG Tough 0.2 nozzle;QIDI ABS Rapido 0.2 nozzle" + "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XPlus3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json index c63f6028a59..199f9a9430e 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json @@ -20,20 +20,20 @@ "printable_height": "270", "nozzle_type": "hardened_steel", "max_layer_height": [ - "0.3" + "0.28" ], "min_layer_height": [ - "0.07" + "0.08" ], "printer_settings_id": "Qidi", "retraction_minimum_travel": [ "1" ], "retraction_length": [ - "0.8" + "1" ], "retract_length_toolchange": [ - "10" + "2" ], "deretraction_speed": [ "0" @@ -42,6 +42,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json index d635074a5bc..90dd0d1cded 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.6", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ], "default_print_profile": "0.30mm Standard @Qidi XPlus3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json index 5b51b03bf9e..6e97b82248a 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.8", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ], "default_print_profile": "0.40mm Standard @Qidi XPlus3 0.8 nozzle", "max_layer_height": [ @@ -21,7 +21,7 @@ "0.16" ], "retract_length_toolchange": [ - "3" + "10" ], "retraction_length": [ "3" diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json index 059c5aeacd6..2c29bd399fc 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.2", "default_filament_profile": [ - "QIDI PLA Rapido 0.2 nozzle;QIDI PETG Tough 0.2 nozzle;QIDI ABS Rapido 0.2 nozzle" + "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XSmart3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json index c923615783b..a11de84792e 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json @@ -34,7 +34,7 @@ "0.8" ], "retract_length_toolchange": [ - "10" + "2" ], "deretraction_speed": [ "0" @@ -43,6 +43,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json index 1902dc18981..f2b95c97406 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.6", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ], "default_print_profile": "0.30mm Standard @Qidi XSmart3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json index 7e7cfa7a119..6c56efc5df4 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.8", "default_filament_profile": [ - "QIDI PLA Rapido" + "Qidi Generic PLA" ], "default_print_profile": "0.40mm Standard @Qidi XSmart3 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/fdm_machine_common.json b/resources/profiles/Qidi/machine/fdm_machine_common.json index b81b6b2a414..995c22940d6 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_common.json @@ -8,7 +8,7 @@ "40" ], "extruder_colour": [ - "#FCE94F" + "" ], "extruder_offset": [ "0x0" @@ -64,7 +64,7 @@ "0" ], "max_layer_height": [ - "0.32" + "0.28" ], "min_layer_height": [ "0.08" @@ -79,19 +79,19 @@ "printer_settings_id": "", "printer_variant": "0.4", "retraction_minimum_travel": [ - "2" + "1" ], "retract_before_wipe": [ - "70%" + "0%" ], "retract_when_changing_layer": [ "1" ], "retraction_length": [ - "5" + "1" ], "retract_length_toolchange": [ - "1" + "2" ], "z_hop": [ "0" @@ -103,7 +103,7 @@ "0" ], "retraction_speed": [ - "60" + "30" ], "single_extruder_multi_material": "0", "change_filament_gcode": "", @@ -111,9 +111,10 @@ "1" ], "z_lift_type": "NormalLift", - "default_print_profile": "0.20mm Standard @Qidi XMax3", + "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "G28\nG0 Z50 F600\nM190 S[first_layer_bed_temperature]\nG28 Z\nG29 ; mesh bed leveling ,comment this code to close it\nG0 X0 Y0 Z50 F6000\nM109 S[first_layer_temperature]\nM83\nG0 Z5 F1200\nG0 X{first_layer_print_min[0]} Y{max(0, first_layer_print_min[1] - 2)} F12000\nG0 Z0.2 F600\nG1 E3 F1800\nG0 Z0.3 F600\nG1 X{min(first_layer_print_min[0] + 30,print_bed_max[0])} E6 F600", - "machine_end_gcode": "M104 S0\nM140 S0\nG92 E0\nG1 E-3 F1800\nG90\n{if max_layer_z < max_print_height / 2}\nG1 Z{max_print_height / 2 + 10} F600\n{else}\nG1 Z{min(max_print_height, max_layer_z + 10)}\n{endif}\nG0 X5 Y{print_bed_max[1]-11} F12000\nM141 S0" + "machine_end_gcode": "M104 S0\nM140 S0\nG92 E0\nG1 E-3 F1800\nG90\n{if max_layer_z < max_print_height / 2}\nG1 Z{max_print_height / 2 + 10} F600\n{else}\nG1 Z{min(max_print_height, max_layer_z + 10)}\n{endif}\nG0 X5 Y{print_bed_max[1]-11} F12000\nM141 S0", + "time_lapse_gcode":";TIMELAPSE_TAKE_FRAME\n" } diff --git a/resources/profiles/Qidi/process/fdm_process_common.json b/resources/profiles/Qidi/process/fdm_process_common.json index 779c5b1ddf3..8da0fd26b7b 100644 --- a/resources/profiles/Qidi/process/fdm_process_common.json +++ b/resources/profiles/Qidi/process/fdm_process_common.json @@ -13,7 +13,7 @@ "default_acceleration": "10000", "bridge_no_support": "0", "elefant_foot_compensation": "0.1", - "outer_wall_line_width": "0.4", + "outer_wall_line_width": "0.42", "outer_wall_speed": "120", "line_width": "0.45", "infill_direction": "45", 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 686376d56ab..c5eb0d7061d 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json @@ -85,7 +85,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", @@ -94,16 +94,16 @@ "support_object_xy_distance": "0.35", "tree_support_branch_diameter": "2", "tree_support_branch_angle": "45", - "tree_support_wall_count": "1", - "detect_thin_wall": "1", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.42", "top_surface_acceleration": "2000", "top_surface_speed": "200", - "top_shell_layers": "4", + "top_shell_layers": "3", "top_shell_thickness": "0.8", "travel_speed": "500", - "enable_prime_tower": "0", + "enable_prime_tower": "1", "independent_support_layer_height": "0", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "35", @@ -115,6 +115,6 @@ "internal_solid_infill_pattern": "monotonic", "initial_layer_travel_speed": "50%", "filter_out_gap_fill": "2", - "notes": "", + "notes": "If you want to use Orca's chamber temperature control feature, check that printer.cfg has added the following M191 macro.\nTo add it: go to Fluidd web interface--configuration, copy the following code to the top of the printer.cfg document, SAVE&RESATART \n\n[gcode_macro M191]\ngcode:\n {% set s = params.S|float %}\n {% if s == 0 %}\n # If target temperature is 0, do nothing\n M117 Chamber heating cancelled\n {% else %}\n SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={s}\n # Orca: uncomment the following line if you want to use heat bed to assist chamber heating\n M140 S90\n TEMPERATURE_WAIT SENSOR=\"heater_generic chamber_heater\" MINIMUM={s-1} MAXIMUM={s+1}\n M117 Chamber at target temperature\n {% endif %}", "exclude_object": "1" } diff --git a/resources/profiles/Qidi/qidi_xmax3_buildplate_model.stl b/resources/profiles/Qidi/qidi_xmax3_buildplate_model.stl index f6ea715fd75..ee8fc101a4a 100644 Binary files a/resources/profiles/Qidi/qidi_xmax3_buildplate_model.stl and b/resources/profiles/Qidi/qidi_xmax3_buildplate_model.stl differ diff --git a/resources/profiles/Qidi/qidi_xplus3_buildplate_model.stl b/resources/profiles/Qidi/qidi_xplus3_buildplate_model.stl index 4e726f6d485..6371cee8d53 100644 Binary files a/resources/profiles/Qidi/qidi_xplus3_buildplate_model.stl and b/resources/profiles/Qidi/qidi_xplus3_buildplate_model.stl differ diff --git a/resources/profiles/Qidi/qidi_xsmart3_buildplate_model.stl b/resources/profiles/Qidi/qidi_xsmart3_buildplate_model.stl index b7028a5e944..62151749134 100644 Binary files a/resources/profiles/Qidi/qidi_xsmart3_buildplate_model.stl and b/resources/profiles/Qidi/qidi_xsmart3_buildplate_model.stl differ diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 1b69d6d97ac..d05ab478de9 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -1030,7 +1030,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 +1040,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.", @@ -1060,8 +1060,8 @@ var LangText = { 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", + orca1: "Proje Bilgilerini Düzenle", + orca2: "model bilgisi yok", }, pl_PL: { t1: "Witamy w Orca Slicer", @@ -1172,6 +1172,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/homepage/js/home.js b/resources/web/homepage/js/home.js index 17de9d6b3eb..2fbaa43304e 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 00000000000..cfed7f41ce7 --- /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 00000000000..1e3729e2107 --- /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 30bbdce678e..b401bea75b6 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/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 1a3b6ca8590..e9a5d6e6418 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."}, @@ -789,7 +791,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; @@ -1028,7 +1031,7 @@ int CLI::run(int argc, char **argv) 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; @@ -1073,6 +1076,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 +1135,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 +1234,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; @@ -1438,6 +1455,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()) { @@ -2605,8 +2628,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 +2638,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 +2668,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) { @@ -3503,7 +3530,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 +3554,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 +3570,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 +3597,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); @@ -4000,11 +4045,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 +4069,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 +4077,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; } @@ -4116,7 +4183,8 @@ int CLI::run(int argc, char **argv) bool no_check = false; std::string export_3mf_file, load_slice_data_dir, export_slice_data_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()); @@ -4210,6 +4278,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; @@ -4368,6 +4437,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 @@ -4675,6 +4745,28 @@ int CLI::run(int argc, char **argv) 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; } @@ -4693,7 +4785,7 @@ int CLI::run(int argc, char **argv) // 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 +4802,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()) { @@ -4881,6 +4973,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"); @@ -4998,39 +5091,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); + //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; - } - 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); } } diff --git a/src/admesh/stl.h b/src/admesh/stl.h index 2593777969c..0f1a0cec88a 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 26f5dc3212c..221572bca63 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 ec044f87e54..8196bf10cbc 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/imgui/imconfig.h b/src/imgui/imconfig.h index aa8a061bf86..e51e1f9e149 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -201,14 +201,14 @@ 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); } diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index bec3f3c9ae7..49a7228f1fb 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -186,6 +186,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); @@ -279,6 +281,10 @@ void AppConfig::set_defaults() 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); } @@ -355,6 +361,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"); @@ -562,6 +576,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++) { @@ -684,6 +700,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; @@ -1036,6 +1053,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; } @@ -1238,6 +1256,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 49f33bcddd4..2d2134f10b5 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -233,7 +233,9 @@ class AppConfig 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 b7e0ea61e9e..5d085f333b3 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -10,36 +10,16 @@ #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" - -#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(); - } -}; +#include "Geometry/VoronoiUtils.hpp" -} // namespace boost::polygon +#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 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 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) 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 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) void SkeletalTrapezoidation::separatePointyQuadEndNodes() { - ankerl::unordered_dense::set visited_nodes; + NodeSet visited_nodes; for (edge_t& edge : graph.edges) { if (edge.prev) @@ -2221,16 +1965,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 225bf538611..75ff9401559 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; @@ -79,7 +79,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 +167,9 @@ class SkeletalTrapezoidation * 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 +180,7 @@ class SkeletalTrapezoidation * 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 +207,7 @@ class SkeletalTrapezoidation * \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 +233,7 @@ class SkeletalTrapezoidation * /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/utils/PolygonsSegmentIndex.hpp b/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp index 6eff3d62ee3..3258b41c7d8 100644 --- a/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp +++ b/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp @@ -27,5 +27,24 @@ class PolygonsSegmentIndex : public PolygonsPointIndex } // 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 82bd79523fc..00000000000 --- 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 aa469364374..00000000000 --- 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/Arrange.cpp b/src/libslic3r/Arrange.cpp index 2631b936edd..6875ed216bb 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -101,8 +101,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) { @@ -981,7 +987,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 bf9815be6bc..fd534204143 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/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index ebabfab426f..926619dbf33 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -100,6 +100,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 @@ -194,9 +196,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 @@ -229,6 +234,7 @@ set(lisbslic3r_sources Arrange.cpp NormalUtils.cpp NormalUtils.hpp + ObjColorUtils.hpp Orient.hpp Orient.cpp MultiPoint.cpp @@ -238,6 +244,8 @@ set(lisbslic3r_sources NSVGUtils.hpp ObjectID.cpp ObjectID.hpp + ParameterUtils.cpp + ParameterUtils.hpp PerimeterGenerator.cpp PerimeterGenerator.hpp PlaceholderParser.cpp @@ -431,8 +439,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 +476,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 +577,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 d14ed765959..177d3432965 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 446326dc880..5963b29109e 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 e989033782c..a9a48b48c02 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/Color.cpp b/src/libslic3r/Color.cpp index c282e307ed5..2f593538ac5 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 c13f0bd2c47..4c96458b40e 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,7 +85,9 @@ class ColorRGBA 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; diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index e37faf88541..7b95f4cf08d 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()); } diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index dee7477939d..942a5d07b0e 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 0f6a37779ac..4394d002649 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 @@ class ExtrusionPath : public ExtrusionEntity 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 @@ class ExtrusionPath : public ExtrusionEntity }; 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 @@ class ExtrusionLoopSloped : public ExtrusionLoop 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 d68c14ce51a..d87588c6d9c 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -65,7 +65,10 @@ 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; @@ -89,6 +92,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; } @@ -105,7 +112,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; } }; @@ -490,7 +500,15 @@ std::vector group_fills(const Layer &layer) //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(); diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp index 6c8c099c4ca..7b7a3b88789 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 772395f9bc4..3d368e01c7d 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -32,6 +32,7 @@ #include "FillLightning.hpp" // BBS: new infill pattern header #include "FillConcentricInternal.hpp" +#include "FillCrossHatch.hpp" // #define INFILL_DEBUG_OUTPUT @@ -51,6 +52,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/FillCrossHatch.cpp b/src/libslic3r/Fill/FillCrossHatch.cpp new file mode 100644 index 00000000000..ebac74bf414 --- /dev/null +++ b/src/libslic3r/Fill/FillCrossHatch.cpp @@ -0,0 +1,227 @@ +#include "../ClipperUtils.hpp" +#include "../ShortestPath.hpp" +#include "../Surface.hpp" + +#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; // offset to improve first few layer strength + 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 + Polylines polylines = generate_infill_layers(scale_(this->z), 1, 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 00000000000..859d5bd8b5f --- /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/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp index 4e621e5f782..0433e917c6b 100644 --- a/src/libslic3r/Format/OBJ.cpp +++ b/src/libslic3r/Format/OBJ.cpp @@ -21,19 +21,39 @@ 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) { + boost::filesystem::path full_path(path); + std::string dir = full_path.parent_path().string(); + auto mtl_file = dir + "/" + mtl_name; + boost::filesystem::path mtl_path(mtl_file); + auto _mtl_path = mtl_path.string().c_str(); + if (boost::filesystem::exists(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; + } + } + exist_mtl = true; + } // Count the faces and verify, that all faces are triangular. size_t num_faces = 0; size_t num_quads = 0; @@ -59,17 +79,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); + 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); + } + bool has_color = data.has_vertex_color; for (size_t i = 0; i < num_vertices; ++ i) { - size_t j = i << 2; + 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[4]; + 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 +109,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 +196,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 +209,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 e9a3817e43f..9b618bd27f5 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/STL.cpp b/src/libslic3r/Format/STL.cpp index 133a7a5056e..1888f5cd184 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 5f2f838bfe2..e545e1c6d01 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/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index a451c084922..e723c9e8af9 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -213,6 +213,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,6 +292,8 @@ 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"; @@ -584,21 +587,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); } @@ -1491,6 +1487,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()) { @@ -4096,6 +4094,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; @@ -4185,6 +4196,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 +4225,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; @@ -7415,6 +7437,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"; @@ -7614,6 +7654,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 +7821,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/objparser.cpp b/src/libslic3r/Format/objparser.cpp index 16a3f84ddb0..c56d6930ce1 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; } } @@ -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) { @@ -369,10 +610,52 @@ bool objparse(const char *path, ObjData &data) 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); + + // printf("vertices: %d\r\n", data.vertices.size() / 4); + // printf("coords: %d\r\n", data.coordinates.size()); + 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 5f3f010e4af..48493de3de7 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 66642949627..fc368eeca55 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; @@ -1425,14 +1398,12 @@ namespace DoExport { total_cost += weight * extruder->filament_cost() * 0.001; } - 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 +1584,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); @@ -2275,6 +2255,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 +2281,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 +2309,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; @@ -4705,6 +4717,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 +4998,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 +5129,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 +5142,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) { @@ -5405,6 +5441,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) { @@ -5444,6 +5482,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; @@ -5464,6 +5504,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) { @@ -5545,6 +5587,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) { @@ -5971,6 +6015,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. @@ -6162,6 +6208,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 03ba079fae1..18ea653546a 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -577,6 +577,7 @@ class GCode { 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/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index e10e32ef921..ebe3947008b 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -753,7 +753,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 +761,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 +782,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 +800,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 +829,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 +890,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 +935,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(); @@ -2932,7 +2983,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 { @@ -3406,7 +3460,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); } @@ -3696,6 +3753,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 +4568,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 +4601,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 +4616,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 2b3a46206a7..0a56ce2b0ea 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; @@ -231,6 +238,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; @@ -495,25 +503,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/SpiralVase.cpp b/src/libslic3r/GCode/SpiralVase.cpp index e1440bc7db5..8462e73111a 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/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index a5aaf4e00be..dc272e9464e 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,74 @@ namespace Slic3r { const static bool g_wipe_into_objects = false; + +// Shortest hamilton path problem +static std::vector solve_extruder_order(const std::vector>& wipe_volumes, std::vector all_extruders, unsigned int start_extruder_id) +{ + auto start_iter = std::find(all_extruders.begin(), all_extruders.end(), start_extruder_id); + bool add_start_extruder_flag = false; + 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); + + 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, unsigned int start_extruder_id) { - if (all_extruders.size() > 1) { +#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,6 +119,8 @@ std::vector get_extruders_order(const std::vector(number_of_extruders, print_config->prime_volume)); } + auto extruders_to_hash_key = [](const std::vector& extruders, unsigned int initial_extruder_id)->uint32_t { + uint32_t hash_key = 0; + // high 16 bit define initial extruder ,low 16 bit define extruder set + 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; + }; + unsigned int current_extruder_id = -1; for (int i = 0; i < m_layer_tools.size(); ++i) { LayerTools& lt = m_layer_tools[i]; if (lt.extruders.empty()) continue; - // todo: The algorithm complexity is too high(o(n2)), currently only 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 1cc6f74c8a1..d9a93131a73 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -156,7 +156,9 @@ class ToolOrdering // (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 @@ class ToolOrdering 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 642b07c9ddd..39c603a4703 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -76,6 +76,9 @@ class WipeTowerWriter 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 3c717a063de..5dd5fa0f636 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -50,6 +50,9 @@ class WipeTowerWriter2 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 @@ -803,9 +806,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 +830,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); diff --git a/src/libslic3r/GCodeReader.hpp b/src/libslic3r/GCodeReader.hpp index ea0df3dd706..52a37dde55c 100644 --- a/src/libslic3r/GCodeReader.hpp +++ b/src/libslic3r/GCodeReader.hpp @@ -26,6 +26,7 @@ class GCodeReader { 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/Geometry/MedialAxis.cpp b/src/libslic3r/Geometry/MedialAxis.cpp index 39677c9285b..44eccd98515 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); diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp new file mode 100644 index 00000000000..0842ddc37bc --- /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 5529750f3b2..ef1c622769f 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 { + +class VoronoiDiagram +{ +public: + 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(); } -namespace Geometry { + 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; -class VoronoiDiagram : public boost::polygon::voronoi_diagram { 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 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 ed8d9c2b18a..46105220a4b 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 00000000000..1e9436325fe --- /dev/null +++ b/src/libslic3r/Geometry/VoronoiUtils.cpp @@ -0,0 +1,283 @@ +#include + +#include +#include + +#include "VoronoiUtils.hpp" + +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.cast().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 * int64_t(d); // projected marking_start + int64_t mex = marking_bound * int64_t(d); // projected marking_end + + const coord_t marking_start_end_h = msx * msx / (2 * d) + d / 2; + Point marking_start = Point(coord_t(msx), marking_start_end_h).rotated(rot_cos_theta, rot_sin_theta) + pxx; + 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(0, d / 2).rotated(rot_cos_theta, rot_sin_theta) + pxx; + bool add_apex = int64_t(sx - px) * int64_t(dir) < 0 && int64_t(ex - px) * int64_t(dir) > 0; + + assert(!add_marking_start || !add_marking_end || add_apex); + 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 00000000000..bf63914677b --- /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 e76decf5f1a..a0e2191af59 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 897891bd933..33ae847802c 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 @@ class VoronoiUtilsCgal 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/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index f9e66e9ebb4..f6dd46e9ee9 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -201,12 +201,12 @@ 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; @@ -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/Model.cpp b/src/libslic3r/Model.cpp index 8d475cefbbb..96677495c67 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -24,9 +24,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 +57,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,6 +104,7 @@ 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; @@ -138,6 +139,7 @@ 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->backup_path = std::move(rhs.backup_path); @@ -188,7 +190,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 +224,48 @@ 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 { // test //todo delete + vertex_filament_ids.push_back(2); + vertex_filament_ids.push_back(3); + vertex_filament_ids.push_back(4); + vertex_filament_ids.push_back(1); // 4 + vertex_filament_ids.push_back(1); + vertex_filament_ids.push_back(1); + vertex_filament_ids.push_back(1); + vertex_filament_ids.push_back(1); // 8 + 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,6 +1001,7 @@ 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; @@ -1508,13 +1556,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 +2909,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(); diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index ecab5a1296f..41ddd83aa90 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -35,6 +35,7 @@ #include "Format/STEP.hpp" //BBS: add stl #include "Format/STL.hpp" +#include "Format/OBJ.hpp" #include #include @@ -482,6 +483,7 @@ class ModelObject final : public ObjectBase //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 +1512,7 @@ class Model final : public ObjectBase // 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; @@ -1562,8 +1565,16 @@ class Model final : public ObjectBase 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 92ac77b191c..477509e69e9 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 596fc56db4b..148fdc9921b 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,36 +16,19 @@ #include #include -namespace Slic3r { -struct ColoredLine { - Line line; - int color; - int poly_idx = -1; - int local_line_idx = -1; -}; -} - -#include -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; +//#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 - static inline point_type get(const Slic3r::ColoredLine& line, const direction_1d& dir) { - return dir.to_int() ? line.line.b : line.line.a; - } -}; -} +#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 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 +//#define MM_SEGMENTATION_DEBUG_TOP_BOTTOM namespace Slic3r { bool is_equal(float left, float right, float eps = 1e-3) { @@ -156,55 +139,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 +188,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 +268,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 +277,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 +285,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 +326,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 +354,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 +443,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 +483,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]); } - 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}); - } - } - } + 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; } - 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(); + return colorized_contours; } -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,534 +524,309 @@ 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 +}; -// 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; +#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)); + } } - ++poly_idx; + } + + 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 -// 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) -{ - 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 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; } -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; +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()); } +} - 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]; - }; +static inline Vec2d mk_point_vec2d(const VD::vertex_type *point) { + assert(point != nullptr); + return {point->x(), point->y()}; +} - 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]; - }; +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()); +} - 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())); +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()); +} - // 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)))); +static double edge_length(const VD::edge_type &edge) { + assert(edge.is_finite()); + return mk_vector_vec2d(&edge).norm(); +} - 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; +// 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 calc_total_edge_length(const VD::edge_type &starting_edge) +{ + 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; - 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()) + bool found_next_edge = false; + const VD::edge_type *current = prev->next(); + do { + if (current->color() == VD_ANNOTATION::DELETED) 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())) + 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)) 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; + prev = current; + found_next_edge = true; + total_edge_length += edge_length(*current); - 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())); + break; + } while (current = current->prev()->twin(), current != prev->next()); - const Line first_part(int_point, real_v0); - const Line second_part(int_point, real_v1); + if (!found_next_edge) + break; - 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); + } while (prev != &starting_edge); - if (points_inside(contour_line, contour_line_next.line, second_part.b)) - graph.append_edge(edge_it->vertex1()->color(), int_point_idx); - } - } - } - } - } + return total_edge_length; +} - 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()) +// 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; - 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; + edges_to_check.emplace_back(edge, calc_total_edge_length(*edge)); + } while (edge = edge->prev()->twin(), edge != vertex.incident_edge()); - 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); - } + std::sort(edges_to_check.begin(), edges_to_check.end(), [](const auto &l, const auto &r) -> bool { + return l.second > r.second; + }); - graph.remove_nodes_with_one_arc(); - return graph; + 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(); + } } -static inline Polygon to_polygon(const std::vector> &id_to_lines) +// 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) { - 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; -} + 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]; + }; -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; + Voronoi::VD vd; + vd.construct_voronoi(colored_lines.begin(), colored_lines.end()); - const MMU_Graph::Arc & arc = graph.arcs[arc_idx]; - if (graph.nodes[arc.to_idx].point == process_line.a || used_arcs[arc_idx]) + // 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 (original_arc.type == MMU_Graph::ARC_TYPE::BORDER && original_arc.color != color) - 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); + } - if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color != color) + // 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; - 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); + if (!Geometry::VoronoiUtils::is_in_range(vertex) || !bbox.contains(Geometry::VoronoiUtils::to_point(vertex).cast())) + delete_vertex_deep(vertex); } - 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; + // 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); - 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; + 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()); + } } - std::vector, double>> sorted_arcs; - for (auto next_arc : all_next_arcs) { - if (next_arc.empty()) + // 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; - 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); - } + 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); - std::sort(sorted_arcs.begin(), sorted_arcs.end(), - [](std::pair, double> &l, std::pair, double> &r) -> bool { - return l.second < r.second; - }); + const VD::edge_type *edge = cell_range.edge_begin; + do { + if (edge->color() == VD_ANNOTATION::DELETED) + continue; - // 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 (!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()); + } + } while (edge = edge->prev()->twin(), edge != cell_range.edge_begin); + } } - if (sorted_arcs.empty()) { - res.emplace_back(&original_arc); - return res; + // 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); } - 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; - } +#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); } - return false; -} +#endif // MM_SEGMENTATION_DEBUG_GRAPH -// 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]; + // 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; - 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]) + 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; - Linef process_line(graph.nodes[arc.from_idx].point, graph.nodes[arc.to_idx].point); - used_arcs[arc_idx] = true; + const ColoredLine source_segment = Geometry::VoronoiUtils::get_source_segment(cell, colored_lines.begin(), colored_lines.end()); - 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; + Polygon segmented_polygon; + segmented_polygon.points.emplace_back(source_segment.line.b); - Linef p_vec = process_line; - const MMU_Graph::Arc *p_arc = &arc; - bool flag = false; + // 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 { - 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; + if (edge->color() == VD_ANNOTATION::DELETED) + continue; - 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; - } + 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); - 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(); + 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; } - } - } - } - return expolygons_segments; -} -// 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) -{ - 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; + edge = edge->twin(); + } while (edge = edge->twin()->next(), edge != cell_range.edge_begin); - idx = arc->to_idx; - arc = &arc_n; + if (edge->vertex1() != cell_range.edge_end->vertex1()) + continue; - line_total_length += (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); - used_arcs[arc_idx] = true; - found = true; - break; - } + cell_range.edge_begin->vertex0()->color(VD_ANNOTATION::DELETED); + segmented_expolygons_per_extruder[source_segment.color].emplace_back(std::move(segmented_polygon)); } - 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); - } - } - std::sort(arc_to_check.begin(), arc_to_check.end(), - [](std::pair &l, std::pair &r) -> bool { return l.second > r.second; }); + // Merge all polygons together for each extruder + for (auto &segmented_expolygons : segmented_expolygons_per_extruder) + segmented_expolygons = union_ex(segmented_expolygons); - while (arc_to_check.size() > 1) { - graph.remove_edge(first_idx, arc_to_check.back().first->to_idx); - arc_to_check.pop_back(); - } - } - } - } + return segmented_expolygons_per_extruder; } static void cut_segmented_layers(const std::vector &input_expolygons, @@ -1375,12 +835,12 @@ 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"; - 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) { + 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_cut_width, &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_cut_width > 0.f) ? interlocking_cut_width : 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 +851,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 +891,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 +901,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 +961,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 +983,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); @@ -1692,7 +1166,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 +1193,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 +1210,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 - -#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 +#endif // MM_SEGMENTATION_DEBUG_REGIONS -#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 +1228,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 +1251,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 +1262,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 +1296,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 +1321,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 +1351,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 +1373,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 +1420,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 +1442,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()); @@ -2021,33 +1473,19 @@ std::vector> multi_material_segmentation_by_painting(con // If the whole layer is painted using the same color, it is not needed to construct a Voronoi diagram for the segmentation of this layer. segmented_regions[layer_idx][size_t(color_poly.front().front().color)] = input_expolygons[layer_idx]; } else { - 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) { 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 +1497,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 4efdc69514c..91d0f298bcd 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/ObjColorUtils.hpp b/src/libslic3r/ObjColorUtils.hpp new file mode 100644 index 00000000000..4fe924fab23 --- /dev/null +++ b/src/libslic3r/ObjColorUtils.hpp @@ -0,0 +1,191 @@ +#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 color_space = 2) + { + // 0~255 + cv::Mat flatten_image8UC3 = flatten_vector(ori_colors); + + 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, best_score = 100; + int max_cluster = ori_colors.size(); + num_cluster = fmin(num_cluster, max_cluster); + if (num_cluster < 1) { + cur_score = 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 < 16; cur_cluster++) { + if (cur_cluster > max_cluster) + break; + cur_score = kmeans(image32FC3, cur_cluster, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, + cv::KMEANS_PP_CENTERS); + best_cluster = cur_score < best_score ? cur_cluster : best_cluster; + best_score = cur_score < best_score ? cur_score : best_score; + } + } else + best_cluster = num_cluster; + + cv::Mat centers32FC3; + 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++) + this->m_centers8UC3.at(i) = centers32FC3.at(i); + + convert_color_space(this->m_centers8UC3, this->m_centers8UC3, color_space, true); + + cluster_results.clear(); + labels.clear(); + for (int i = 0; i < ori_colors.size(); 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}); + } + } + + 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(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/ParameterUtils.cpp b/src/libslic3r/ParameterUtils.cpp new file mode 100644 index 00000000000..4e5fed7e6b2 --- /dev/null +++ b/src/libslic3r/ParameterUtils.cpp @@ -0,0 +1,45 @@ +#include "ParameterUtils.hpp" + +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 00000000000..090fd8d8030 --- /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 c708e5620d2..86f9f5ceac1 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -20,13 +20,15 @@ #include "Geometry/ConvexHull.hpp" #include "ExPolygonCollection.hpp" #include "Geometry.hpp" - +#include "Line.hpp" #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 @@ -222,6 +224,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 +481,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 +537,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 = intersection_pl({polygon}, lower_polygons_series_clipped); - Polylines inside_polines = (it == lower_polygons_series->begin()) ? intersection_pl({polygon}, lower_polygons_series_clipped) : - intersection_pl(remain_polines, 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); + } else { + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_polygons_series->front(), bbox); - 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; + 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); + } } - } else { - auto it = lower_polygons_series->end(); - it--; - Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(it->second, 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); - - 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 +617,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 +1696,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; @@ -2702,7 +2913,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 +2922,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 e9da6323864..c50f3b7faa5 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -34,9 +34,13 @@ class PerimeterGenerator { //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 @@ class PerimeterGenerator { 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/Preset.cpp b/src/libslic3r/Preset.cpp index a9995c15d60..f7a9d28924d 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -801,7 +801,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", @@ -850,7 +850,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 +868,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 +884,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 +1138,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 +1188,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 +2145,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 +2207,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 +2467,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 +2485,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; } @@ -2803,9 +2839,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 +2861,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 b03ce605e33..659fc0bf9eb 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 @@ class Preset 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 @@ class PresetCollection 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 @@ class PresetCollection // 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 @@ class PresetCollection // 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 f46e0aebcbd..fa887acb477 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1895,7 +1895,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 +1944,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 +3464,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 +3481,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 +3605,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 +3636,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 c54ddda5765..4cc62a3ed93 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -125,6 +125,15 @@ class PresetBundle 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 a4756a6e38a..9dfe1f96596 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -125,6 +125,7 @@ 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", @@ -213,6 +214,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; @@ -244,6 +251,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 +288,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" @@ -460,8 +470,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 +586,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 +616,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. @@ -840,7 +851,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 +1099,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 +1128,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 +1231,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 @@ -2472,7 +2490,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); diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 231761f9571..f48466e575d 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 @@ class PrintObject : public PrintObjectBaseWithState // 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); diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index 50fdee7cb98..b6fd173c036 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 2edde94c42d..651c0ff8d32 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -160,7 +160,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 +371,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) }, @@ -770,16 +771,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"); @@ -1580,6 +1602,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( @@ -2020,6 +2050,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,6 +2068,7 @@ 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->enum_labels.push_back(L("Cross Hatch")); def->set_default_value(new ConfigOptionEnum(ipCubic)); auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent); @@ -2378,6 +2410,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,6 +2423,15 @@ 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"); @@ -3393,6 +3435,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)"); @@ -4929,7 +4990,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 +5004,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 +5041,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 +5072,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 +5864,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" }; @@ -6287,6 +6360,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) @@ -6848,6 +6923,12 @@ CLIMiscConfigDef::CLIMiscConfigDef() def->tooltip = "MakerLab version to generate this 3mf"; def->cli_params = "version"; def->set_default_value(new ConfigOptionString()); + + 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 28e9d009236..de094343b28 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -69,7 +69,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 +144,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 +275,7 @@ enum BedType { }; // BBS -enum FirstLayerSeq { +enum LayerSeq { flsAuto, flsCutomize }; @@ -854,6 +861,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. @@ -1051,6 +1059,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,12 +1167,15 @@ 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)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 077b2266686..232a0a80d6e 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -97,6 +97,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 +110,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)); } @@ -2332,9 +2333,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 +2723,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()); diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 78dd620eba9..53c875555bd 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -810,7 +810,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 103d82073fc..05f39f9b2c9 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/Slicing.cpp b/src/libslic3r/Slicing.cpp index 72e231c3149..97a8700d830 100644 --- a/src/libslic3r/Slicing.cpp +++ b/src/libslic3r/Slicing.cpp @@ -631,10 +631,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 +777,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 464a05ba443..74b99eb8dfb 100644 --- a/src/libslic3r/Slicing.hpp +++ b/src/libslic3r/Slicing.hpp @@ -177,7 +177,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/TriangleMesh.cpp b/src/libslic3r/TriangleMesh.cpp index 973d6c6d337..1ad9c03bd8f 100644 --- a/src/libslic3r/TriangleMesh.cpp +++ b/src/libslic3r/TriangleMesh.cpp @@ -224,21 +224,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); } diff --git a/src/libslic3r/TriangleMesh.hpp b/src/libslic3r/TriangleMesh.hpp index fb6951c1df0..54b2d45f883 100644 --- a/src/libslic3r/TriangleMesh.hpp +++ b/src/libslic3r/TriangleMesh.hpp @@ -105,7 +105,7 @@ class TriangleMesh 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(); diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index b03f27d1878..43daedb5bb1 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -50,6 +50,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 diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index 3d0146e2b8f..af5bbb81d59 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/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 94a3b53e98d..6ff0adf18bb 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -208,6 +208,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 @@ -304,6 +306,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 +325,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 @@ -399,8 +405,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 +473,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 @@ -526,6 +550,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 +583,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 ) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index ddbf120b21e..b09ec7d6cc0 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,7 +580,7 @@ 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)) { + if (obj->cali_version <= -1 && (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)"); MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); @@ -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(); @@ -774,8 +803,12 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi 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,64 @@ 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; } - - 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); + + 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[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; - } - + 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; - 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); - } + // 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); - } + } + ConfigOption *opt_max = filament_it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); } } - idx++; } + idx++; } } } + } } @@ -884,7 +902,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 +947,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 +961,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 +1037,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 +1073,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 +1103,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 +1148,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 +1211,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 +1227,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 +1465,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 c66052a077f..c058ac769f4 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 @@ class ColorPicker : public wxWindow 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 @@ class AMSMaterialsSetting : public DPIDialog 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 ac62d1ebaf8..2b273ae00a8 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 4fddf47660c..464afffe7b3 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 @@ class AMSSetting : public DPIDialog ~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 @@ class AMSSetting : public DPIDialog 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 @@ class AMSSetting : public DPIDialog 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/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 1c4c1868160..492926b9526 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)); - - if (m_coloul.Alpha() == 0) { - dc.DrawBitmap( m_transparent_mapping_item.bmp(), 0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2); + wxSize size = GetSize(); + wxColour color = m_coloul; + change_the_opacity(color); + + 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); - - - main_sizer->Add(0, 0, 0, wxTOP, 28); - - wxBoxSizer* m_sizer_body; - m_sizer_body = new wxBoxSizer(wxHORIZONTAL); - - m_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("ams_humidity_tips", this, 125), wxDefaultPosition, wxSize(FromDIP(125), FromDIP(145)), 0); + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); - m_sizer_body->Add(m_img, 0, wxEXPAND | wxALL, 2); + close_img = ScalableBitmap(this, "hum_popup_close", 24); + m_staticText = new Label(this, _L("Current Cabin humidity")); + m_staticText->SetFont(::Label::Head_24); - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(18)); + 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); - 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)); + Bind(wxEVT_LEFT_UP, [this](auto& e) { + auto rect = ClientToScreen(wxPoint(0, 0)); - m_button_confirm->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { - Dismiss(); - }); + 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(); - Bind(wxEVT_LEFT_UP, [this](auto& e) { 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 acfc8cd3e99..75f274ba0bd 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 @@ class MaterialItem: public wxPanel 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 @@ class MaterialItem: public wxPanel 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 @@ class AmsMapingPopup : public PopupWindow 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 @@ class AmsMapingTipPopup : public PopupWindow 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 @@ class AmsHumidityTipPopup : public PopupWindow 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/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 0ae0ef4ce87..0e98e85ea68 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 @@ -856,12 +906,18 @@ void BackgroundSlicingProcess::prepare_upload() 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). - 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; + // (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 b5b8ffcd7a0..78e89718699 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -287,6 +287,7 @@ class BackgroundSlicingProcess // 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/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index df52d84b142..134d91e7c54 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 636d088112e..a4ffd8fbff1 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 d5facd3f3f3..d382f657e33 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,7 +334,7 @@ replaces["\"#0x00AE42\""] = "\"#009688\""; replaces["\"#6B6B6B\""] = "\"#818182\""; replaces["\"#909090\""] = "\"#FFFFFF\""; replaces["\"#00FF00\""] = "\"#FF0000\""; -replaces["\"#009688\""] = "\"#00675b\""; + 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 e1d0d8e0732..e47c5bd2da8 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.cpp +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -14,6 +14,7 @@ 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)"; @@ -54,9 +55,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 +73,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 +139,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 +366,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,13 +465,9 @@ PACalibResult EditCalibrationHistoryDialog::get_result() { void EditCalibrationHistoryDialog::on_save(wxCommandEvent& event) { wxString name = m_name_value->GetTextCtrl()->GetValue(); - if (name.IsEmpty()) - return; - if (name.Length() > 40) { - MessageDialog msg_dlg(nullptr, _L("The name cannot exceed 40 characters."), wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); + if (!CalibUtils::validate_input_name(name)) return; - } + m_new_result.name = m_name_value->GetTextCtrl()->GetValue().ToUTF8().data(); float k = 0.0f; @@ -465,5 +492,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, _L(k_tips), 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 c44d4399e59..8f7b49a25a6 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 @@ class HistoryWindow : public DPIDialog { 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 @@ class EditCalibrationHistoryDialog : public DPIDialog 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 a96cc93f1d1..713b3833f3e 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -18,21 +18,7 @@ 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 +76,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,6 +303,7 @@ 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; } } } @@ -306,6 +315,7 @@ void CalibrationWizard::back_preset_info(MachineObject *obj, bool cali_finish, b 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 +430,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(); } @@ -458,7 +468,17 @@ void PressureAdvanceWizard::on_cali_action(wxCommandEvent& evt) void PressureAdvanceWizard::update(MachineObject* obj) { + if (!obj) + return; + CalibrationWizard::update(obj); + + 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 +659,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->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 +728,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 +1065,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 +1168,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 +1455,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 14cfd50a957..34550b4b7fa 100644 --- a/src/slic3r/GUI/CalibrationWizard.hpp +++ b/src/slic3r/GUI/CalibrationWizard.hpp @@ -121,7 +121,9 @@ class PressureAdvanceWizard : public CalibrationWizard { 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 6279cc60485..cd63eaf38ab 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 b428110c75a..482ce61a128 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 9096c7a34aa..4adcd858f3a 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 @@ class CaliPresetCaliStagePanel : public wxPanel 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 @@ class CalibrationPresetPage : public CalibrationWizardPage 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 @@ class CalibrationPresetPage : public CalibrationWizardPage 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 @@ class MaxVolumetricSpeedPresetPage : public CalibrationPresetPage }} // 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 77637bc10d9..287fa613618 100644 --- a/src/slic3r/GUI/CalibrationWizardSavePage.cpp +++ b/src/slic3r/GUI/CalibrationWizardSavePage.cpp @@ -552,16 +552,8 @@ bool CaliPASaveManualPanel::get_result(PACalibResult& out_result) { } 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); @@ -874,11 +866,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 3857d0983ea..c65ddb72ac7 100644 --- a/src/slic3r/GUI/CalibrationWizardStartPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardStartPage.cpp @@ -161,19 +161,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() diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index 49a964b69eb..328e8aa1a6d 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -150,7 +150,7 @@ struct Camera // 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 08e4801372a..6ee07111377 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 8135f41fa44..dbdb81a9cb1 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -72,6 +72,8 @@ class CameraPopup : public PopupWindow 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/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index d9405e76b8e..ddc9877cdf4 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -56,24 +56,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; - - 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) - { + int temperature_range_low, temperature_range_high; + if (!get_temperature_range(config, temperature_range_low, temperature_range_high)) return; + + 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 +108,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) { @@ -161,7 +173,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 +183,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 +287,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 +299,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)); @@ -843,5 +844,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 da856c416ed..fec8d08f4da 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -69,11 +69,12 @@ class ConfigManipulation 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 @@ class ConfigManipulation 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 91a0a621086..85bee59d5f6 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -46,17 +46,6 @@ static const std::vector filament_types = {"PLA", "PLA+", "PLA "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", @@ -520,6 +509,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 +550,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 +599,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); @@ -748,7 +751,7 @@ 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); } @@ -851,13 +854,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 +1008,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 +1119,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 +1136,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 +1278,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 +1323,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 +1368,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; @@ -2854,6 +2874,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 +2883,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 +3211,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 +3219,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\nStudio 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 +3240,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 +3257,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)); @@ -3339,6 +3370,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 +3429,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 +3710,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 +3829,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 +4131,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 +4178,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 +4186,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 +4249,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); } @@ -4639,8 +4730,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 9c79bc71f34..911caca5e1d 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -70,12 +70,13 @@ class CreateFilamentPresetDialog : public DPIDialog 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 @@ class ExportConfigsDialog : public DPIDialog 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 @@ class CreatePresetForPrinterDialog : public DPIDialog 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/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index f3ffa85bdc4..9e3cb574b1c 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(); } } @@ -807,7 +809,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 +828,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 +863,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 +953,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 +969,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 +1010,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 +1146,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() @@ -1376,6 +1392,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 +1828,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 +1891,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 +1992,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 +2034,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 +2115,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; - - 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); - } + 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; - BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: " << j.dump(); - return this->publish_json(j.dump()); + 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); + + 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 +2184,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); - - BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_sel: " << j.dump(); - return this->publish_json(j.dump()); - } - return -1; + 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()); } 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 +2254,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 +2268,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,7 +2659,7 @@ 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; @@ -2678,6 +2726,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 +2737,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 +2885,181 @@ int MachineObject::parse_json(std::string payload) } } - - //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 (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(); + } + } } - } - - if (jj.contains("support_extrusion_cali")) { - if (jj["support_extrusion_cali"].is_boolean()) { - is_support_extrusion_cali = jj["support_extrusion_cali"].get(); + } else { + //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_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_extrusion_cali")) { + if (jj["support_extrusion_cali"].is_boolean()) { + is_support_extrusion_cali = jj["support_extrusion_cali"].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_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_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_lidar_calibration")) { + if (jj["support_lidar_calibration"].is_boolean()) { + is_support_lidar_calibration = jj["support_lidar_calibration"].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_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_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_flow_calibration")) { + if (jj["support_flow_calibration"].is_boolean()) { + is_support_flow_calibration = jj["support_flow_calibration"].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_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_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_all")) { + if (jj["support_print_all"].is_boolean()) { + is_support_print_all = jj["support_print_all"].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_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_chamber_fan")) { - if (jj["support_chamber_fan"].is_boolean()) { - is_support_chamber_fan = jj["support_chamber_fan"].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_filament_backup")) { - if (jj["support_filament_backup"].is_boolean()) { - is_support_filament_backup = jj["support_filament_backup"].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_update_remain")) { - if (jj["support_update_remain"].is_boolean()) { - is_support_update_remain = jj["support_update_remain"].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_auto_leveling")) { - if (jj["support_auto_leveling"].is_boolean()) { - is_support_auto_leveling = jj["support_auto_leveling"].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_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_auto_leveling")) { + if (jj["support_auto_leveling"].is_boolean()) { + is_support_auto_leveling = jj["support_auto_leveling"].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_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_prompt_sound")) { - if (jj["support_prompt_sound"].is_boolean()) { - is_support_prompt_sound = jj["support_prompt_sound"].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_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_prompt_sound")) { + if (jj["support_prompt_sound"].is_boolean()) { + is_support_prompt_sound = jj["support_prompt_sound"].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_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_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_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_mqtt_alive")) { - if (jj["support_mqtt_alive"].is_boolean()) { - is_support_mqtt_alive = jj["support_mqtt_alive"].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_tunnel_mqtt")) { - if (jj["support_tunnel_mqtt"].is_boolean()) { - is_support_tunnel_mqtt = jj["support_tunnel_mqtt"].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_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_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("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("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(); + if (jj.contains("bed_temperature_limit")) { + if (jj["bed_temperature_limit"].is_number_integer()) { + bed_temperature_limit = jj["bed_temperature_limit"].get(); + } } } @@ -2947,7 +3071,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 +3091,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 +3107,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 +3127,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; + 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(); + }); } } - 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 +3201,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("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("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 +3285,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(); - - /* 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) ); + /* 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 { - 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_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_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()); - } + 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 +3403,119 @@ 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; + } } - 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; + /* 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 (...) { + ; } } - 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()); + 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()); + } } } - } - catch (...) { - ; - } - // media - try { - if (jj.contains("sdcard")) { - if (jj["sdcard"].get()) - sdcard_state = MachineObject::SdcardState::HAS_SDCARD_NORMAL; - else + 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; - } 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(); + } + } } } - } - catch (...) { - ; + catch (...) { + ; + } } #pragma region upgrade @@ -3464,147 +3616,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 { + if (ipcam["ipcam_record"].get() == "enable") { + camera_recording_when_printing = true; + } + else { + camera_recording_when_printing = false; + } } + } + if (ipcam.contains("timelapse")) { + if (camera_timelapse_hold_count > 0) + camera_timelapse_hold_count--; else { - camera_recording_when_printing = false; + if (ipcam["timelapse"].get() == "enable") { + camera_timelapse = true; + } + else { + camera_timelapse = false; + } } } - } - if (ipcam.contains("timelapse")) { - if (camera_timelapse_hold_count > 0) - camera_timelapse_hold_count--; - else { - if (ipcam["timelapse"].get() == "enable") { - camera_timelapse = true; + 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_timelapse = false; + camera_resolution = ipcam["resolution"].get(); } } - } - if (ipcam.contains("ipcam_dev")) { - if (ipcam["ipcam_dev"].get() == "1") { - has_ipcam = true; - } else { - has_ipcam = false; + 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("resolution")) { - if (camera_resolution_hold_count > 0) - camera_resolution_hold_count--; - else { - camera_resolution = ipcam["resolution"].get(); + 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(); } - } - 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 (...) { - ; - } + 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"; } + 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 (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_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; + 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 (...) { - ; + 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 +3776,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 +3803,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 (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 (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; + 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(); } } - 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 (!curr_ams) continue; + 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; + } - if (it->contains("humidity")) { - std::string humidity = (*it)["humidity"].get(); + json j_ams = jj["ams"]["ams"]; + std::set ams_id_set; - try { - curr_ams->humidity = atoi(humidity.c_str()); - } - catch (...) { - ; - } + for (auto it = amsList.begin(); it != amsList.end(); it++) { + ams_id_set.insert(it->first); } - - - 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 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; } - 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; + if (!curr_ams) continue; + + if (it->contains("humidity")) { + std::string humidity = (*it)["humidity"].get(); + + try { + curr_ams->humidity = atoi(humidity.c_str()); } - else { - curr_tray = tray_iter->second; + catch (...) { + ; } - if (!curr_tray) continue; + } + - if (curr_tray->hold_count > 0) { - curr_tray->hold_count--; - continue; + 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"; + 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 = ""; } - else if (curr_tray->setting_id == "GFS01") { - curr_tray->type = "PA-S"; + 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->type = type; + curr_tray->color = ""; } - } 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("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; + if (tray_it->contains("remain")) { + curr_tray->remain = (*tray_it)["remain"].get(); + } else { + curr_tray->remain = -1; } - } - 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(); + 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; + } } - if (tray_it->contains("n")) { - curr_tray->n = (*tray_it)["n"].get(); + 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(); + std::string temp = tray_it->dump(); - if (tray_it->contains("cali_idx")) { - curr_tray->cali_idx = (*tray_it)["cali_idx"].get(); + 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 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"; + 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.type = type; + vt_tray.setting_id = ""; + vt_tray.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; + 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"; - 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("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; + 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 +4280,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 +4336,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 +4396,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 +4616,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 +4647,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 (...) {} + } 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"; + 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 (...) { - ; + catch (...) { + ; + } } // event info @@ -4483,19 +4703,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 +5057,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 +5187,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 +5248,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 +5472,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 +5544,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 +5747,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 +5769,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 +5788,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 +5892,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 1c3c5881b92..6aca7ee5f61 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 @@ class HMSItem 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 @@ class MachineObject 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 @@ class MachineObject 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; @@ -567,7 +573,7 @@ class MachineObject 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 +619,7 @@ class MachineObject 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 +629,7 @@ class MachineObject 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 +702,7 @@ class MachineObject std::string tutk_state; enum LiveviewLocal { LVL_None, + LVL_Disable, LVL_Local, LVL_Rtsps, LVL_Rtsp @@ -704,6 +713,8 @@ class MachineObject 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 +759,8 @@ class MachineObject 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 +851,7 @@ class MachineObject 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 +876,8 @@ class MachineObject // 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 +942,7 @@ class MachineObject 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 +956,16 @@ class MachineObject 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 +990,14 @@ class DeviceManager 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 +1014,11 @@ class DeviceManager 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 +1054,13 @@ class DeviceManager 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/Field.cpp b/src/slic3r/GUI/Field.cpp index aa366e20eca..a66b3819fd5 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -28,6 +28,7 @@ #include "Widgets/ComboBox.hpp" #include "Widgets/TextCtrl.h" +#include "../Utils/ColorSpaceConvert.hpp" #ifdef __WXOSX__ #define wxOSX true #else @@ -82,7 +83,6 @@ wxString get_thumbnails_string(const std::vector& values) return ret_str; } - Field::~Field() { if (m_on_kill_focus) @@ -93,11 +93,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 +128,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 +158,7 @@ void Field::PostInitialize() } evt.Skip(); - }); + }, getWindow()->GetId()); } } @@ -302,6 +299,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 +316,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; @@ -490,6 +503,101 @@ 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) +{ + 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); +} + template bool is_defined_input_value(wxWindow* win, const ConfigOptionType& type) { @@ -554,10 +662,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, wxDefaultSize, wxTE_MULTILINE) + : builder2.build(m_parent, "", "", "", wxDefaultPosition, wxDefaultSize, 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 +733,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 +902,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 +1022,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, wxDefaultSize, + 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 +1052,7 @@ void SpinCtrl::BUILD() { } propagate_value(); - })); + }), temp->GetId()); temp->Bind(wxEVT_SPINCTRL, ([this](wxCommandEvent e) { propagate_value(); }), temp->GetId()); @@ -1084,14 +1204,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 +1224,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 +1282,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 +1293,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 +1705,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 +1762,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,6 +1801,44 @@ 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); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index d86a790eb4f..8cf36eb54fb 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -481,6 +481,14 @@ class ColourPicker : public Field { 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 { diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index cec2f1e4053..e90e59301de 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -4080,16 +4080,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 +4101,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 +4201,12 @@ void GCodeViewer::render_all_plates_stats(const std::vector(m_time_estimate_mode)]; total_time_all_plates += plate_time_mode.time; @@ -4227,6 +4237,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 +4253,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 +4285,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] }); - } - 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] }); + 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 | 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::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::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 +4716,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 +4862,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 +4877,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 +5047,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 +5098,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 +5109,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 +5575,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 +5590,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 +5600,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 b553c92a1ef..691e0183f82 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -657,7 +657,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 +1024,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 +1098,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 +1173,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 +1368,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 +1821,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); @@ -3170,15 +3222,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; @@ -3693,9 +3755,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 +3782,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 +4096,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 +5065,10 @@ 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)) + 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)); + 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); } @@ -5123,7 +5204,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 +5521,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 +5532,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 +5562,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; @@ -6344,7 +6429,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(); @@ -7927,6 +8012,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() } imgui.end(); + m_sel_plate_toolbar.is_render_finish = true; } //BBS: GUI refactor: GLToolbar adjust diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 26e9aff2aae..7a748ad009d 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -187,6 +187,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 +517,7 @@ class GLCanvas3D 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 +610,6 @@ class GLCanvas3D 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 +635,11 @@ class GLCanvas3D } 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 +762,7 @@ class GLCanvas3D 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); @@ -960,6 +949,7 @@ class GLCanvas3D 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 +1058,17 @@ class GLCanvas3D 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/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 8e99bb1bc27..c39d615d5e0 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -35,6 +35,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 28ad69bb532..cdb7e277793 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -35,6 +35,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 5284595e0b1..4b09dcf1206 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3,6 +3,8 @@ #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" @@ -149,6 +151,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) { @@ -474,9 +511,11 @@ 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_PROJECT */ { "Project files"sv, { ".3mf"sv} }, /* FT_GALLERY */ { "Known files"sv, { ".stl"sv, ".obj"sv } }, @@ -653,15 +692,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 @@ -923,7 +962,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 +1032,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 +1068,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 +1089,7 @@ 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_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(); @@ -1564,6 +1602,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 +1637,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); + } } }); }); @@ -1679,11 +1735,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 +1757,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 +1790,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 +2024,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 +2083,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 +2108,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 +2208,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 +2332,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); } @@ -2372,6 +2461,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 +2469,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 +2568,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); @@ -2555,7 +2649,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 +2657,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 +2709,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 +2784,22 @@ bool GUI_App::on_init_network(bool try_backup) 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 +2829,9 @@ bool GUI_App::on_init_network(bool try_backup) if (!m_device_manager) m_device_manager = new Slic3r::DeviceManager(); + + if (!m_user_manager) + m_user_manager = new Slic3r::UserManager(); } return true; @@ -2754,7 +2886,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 +2999,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 +3284,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 +3295,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 +3375,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) { @@ -3715,6 +3873,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 +4001,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 +4041,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) @@ -4304,6 +4485,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 +4513,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) { @@ -5672,7 +5891,8 @@ void GUI_App::MacOpenURL(const wxString& 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) { @@ -5884,6 +6104,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 +6173,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 +6200,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 +6257,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 } diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index f7606c8a075..62cce8a0754 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" @@ -55,8 +57,10 @@ class PresetBundle; class PresetUpdater; class ModelObject; class Model; +class UserManager; class DeviceManager; class NetworkAgent; +class TaskManager; namespace GUI{ @@ -74,6 +78,7 @@ struct GUI_InitParams; class ParamsDialog; class HMSQuery; class ModelMallDialog; +class PingCodeBindDialog; enum FileType @@ -265,14 +270,16 @@ class GUI_App : public wxApp 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; //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 +314,7 @@ class GUI_App : public wxApp 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 +326,7 @@ class GUI_App : public wxApp 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; } @@ -442,6 +451,7 @@ class GUI_App : public wxApp 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 +470,9 @@ class GUI_App : public wxApp 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); @@ -552,6 +564,7 @@ class GUI_App : public wxApp 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 +583,9 @@ class GUI_App : public wxApp 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 +603,20 @@ class GUI_App : public wxApp // 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(); } @@ -624,7 +641,7 @@ class GUI_App : public wxApp 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__ diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 6102761b102..00c44e36933 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -87,7 +87,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}, @@ -498,18 +500,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); @@ -617,7 +629,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 +672,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 +910,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 +1124,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); @@ -1258,10 +1283,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 +1317,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 +1362,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 +1440,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 +1501,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&) { @@ -1661,10 +1697,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 +1917,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 +2006,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 +2021,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_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp index 81918c58ef1..002123f8b30 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_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 0f1f753acbd..25a18d2c6a5 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -699,6 +699,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 +727,9 @@ void ObjectList::update_plate_values_for_items() Expand(item); Select(item); } +#ifdef __WXOSX__ + AssociateModel(m_objects_model); +#endif } // BBS @@ -1341,6 +1347,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 +3634,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 +3876,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 +5025,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) @@ -5853,6 +5863,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 ff9521b5845..09ca8c64a87 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 && 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; - - 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); + break; } - if (type != itObject && type != itVolume && type != itLayerRoot && type != itLayer) { - continue; - } + 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 dd2e90b84d7..56c1550c46c 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.hpp b/src/slic3r/GUI/GUI_Preview.hpp index 2ce7e67ec10..9cb20f65736 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -107,6 +107,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 +161,8 @@ class Preview : public wxPanel 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/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 81c6e8710c7..35cc3c7700a 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/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 0471d023588..3a57a895d65 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; @@ -374,7 +376,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"); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 11886c142aa..bd91482f658 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -250,7 +250,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; @@ -487,7 +487,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(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index e653829beee..9df780d720e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -298,6 +298,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 +316,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 +346,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 +356,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 diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index da05fcfab42..2644c100989 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -355,10 +355,15 @@ class GLGizmoPainterBase : public GLGizmoBase 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 Vec2i 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/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index 7034b0eb270..5290a81f8cc 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; @@ -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/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index c64d1adcaea..4734a9a9729 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -57,6 +57,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 +200,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++)); @@ -805,7 +806,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 +888,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 +947,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(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 3cbb35e6ad5..1b8fcc3050c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -85,9 +85,9 @@ class GLGizmosManager : public Slic3r::ObjectBase MeshBoolean, FdmSupports, Seam, + MmuSegmentation, Emboss, Svg, - MmuSegmentation, Measure, Simplify, //SlaSupports, @@ -142,6 +142,10 @@ class GLGizmosManager : public Slic3r::ObjectBase 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 3584edbea76..1aab82865ce 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -267,7 +267,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 +588,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 +614,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 f6b7432aa89..898ed9aa1aa 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; } @@ -166,9 +183,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 +206,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 +222,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 +246,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 +259,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 +279,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 +314,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 64edf84caa9..01df19ed383 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 9992e37af46..88afb2a4568 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 f6fe0033822..bafa043a69b 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 @@ class HMSNotifyItem : public wxPanel void msw_rescale() {} }; + class HMSPanel : public wxPanel { protected: @@ -50,6 +52,7 @@ class HMSPanel : public wxPanel 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 @@ class HMSPanel : public wxPanel 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/IMToolbar.cpp b/src/slic3r/GUI/IMToolbar.cpp index e14cdb2ffc3..1dbfc9e6134 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 681045fdb8f..add067d83aa 100644 --- a/src/slic3r/GUI/IMToolbar.hpp +++ b/src/slic3r/GUI/IMToolbar.hpp @@ -49,7 +49,7 @@ class IMToolbar { 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 @@ class IMToolbar { 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/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index 770d46ec008..15adf8c8cad 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/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 538ffc4fa5d..c7a9a016c80 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -96,6 +96,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 +190,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 +503,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 +584,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 +727,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 +775,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 +795,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 6b3364236d7..005d386fee6 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.hpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.hpp @@ -28,6 +28,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 57b22cc221e..5809b8be7e2 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/EmbossJob.cpp b/src/slic3r/GUI/Jobs/EmbossJob.cpp index 83bdd53b313..45931691e1f 100644 --- a/src/slic3r/GUI/Jobs/EmbossJob.cpp +++ b/src/slic3r/GUI/Jobs/EmbossJob.cpp @@ -979,7 +979,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)); } diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index efcb556456f..d671a70c917 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -239,7 +239,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 +299,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/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 8ff354e7c78..0e7af93f368 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; + } + + 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; } - catch (const std::exception& e) { - stl_design_id = 0; + + 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(); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index c25b14d7e14..4d455038cd1 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -92,6 +92,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 +115,12 @@ class OrcaSlicerTaskBarIcon : public wxTaskBarIcon 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; @@ -885,7 +886,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 +924,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 +1056,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,36 +1088,76 @@ 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(); - 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); - } - } + 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(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() { @@ -1479,6 +1504,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); @@ -1536,7 +1562,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 +1573,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 +1591,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) @@ -1701,6 +1731,25 @@ wxBoxSizer* MainFrame::create_side_tools() 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); + 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 +1759,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 +1902,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 +2029,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 +2092,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 +2237,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"), @@ -3286,10 +3343,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)*/) { @@ -3655,6 +3723,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 9ef81a8b086..18682a20712 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 @@ class MainFrame : public DPIFrame #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 @@ class MainFrame : public DPIFrame 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 @@ class MainFrame : public DPIFrame 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 @@ class MainFrame : public DPIFrame 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 @@ class MainFrame : public DPIFrame 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 @@ class MainFrame : public DPIFrame 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 3b23ee76321..b2032b09adc 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_lan_mode) { - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not accessible in LAN-only mode)!")); + 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_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"); + if (m_lan_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; } - 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 1ae5df7916b..0b64cdb5d60 100644 --- a/src/slic3r/GUI/MediaFilePanel.h +++ b/src/slic3r/GUI/MediaFilePanel.h @@ -69,6 +69,7 @@ class MediaFilePanel : public wxPanel ::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 @@ class MediaFilePanel : public wxPanel 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 b5ab46647e6..b69ea2b8b2e 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; @@ -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 79ce3a4b9ca..f6e8d0dbeca 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -42,6 +42,8 @@ class MediaPlayCtrl : public wxPanel void msw_rescale(); + void jump_to_play(); + protected: void onStateChanged(wxMediaEvent & event); @@ -95,11 +97,13 @@ class MediaPlayCtrl : public wxPanel 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/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 8985e0d3a43..333f4d3de00 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 cb5615b0440..8da56ddc3b8 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -104,6 +104,7 @@ class MonitorPanel : public wxPanel 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 @@ class MonitorPanel : public wxPanel //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 c8efc1b9eb9..c5e0881ec8d 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 ed323417aab..4dd700fd467 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -543,6 +543,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 58e113acbef..a7acc42de2f 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; @@ -392,6 +389,27 @@ class DeleteConfirmDialog : public DPIDialog 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 00000000000..fc7f91daa70 --- /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("PrintingPause")); + 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 00000000000..48a6ed41806 --- /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 00000000000..27898b78fae --- /dev/null +++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp @@ -0,0 +1,725 @@ +#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(); +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp new file mode 100644 index 00000000000..87d8d9866e2 --- /dev/null +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -0,0 +1,114 @@ +#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(); + +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 00000000000..4ed797c0fda --- /dev/null +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -0,0 +1,485 @@ +#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() +{ +} + +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 printetrs (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 Printetrs (%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 00000000000..0572c30d1be --- /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 00000000000..6da49ebc6df --- /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 00000000000..233b464a4db --- /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 00000000000..101a3f17817 --- /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 00000000000..60318163c6f --- /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 00000000000..778350e8251 --- /dev/null +++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp @@ -0,0 +1,1436 @@ +#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 = 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(); + } + } +} + +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 = 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();*/ +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiTaskManagerPage.hpp b/src/slic3r/GUI/MultiTaskManagerPage.hpp new file mode 100644 index 00000000000..40341560edd --- /dev/null +++ b/src/slic3r/GUI/MultiTaskManagerPage.hpp @@ -0,0 +1,208 @@ +#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); + +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(); + +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 00000000000..b23468b93e2 --- /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 00000000000..6b233e93028 --- /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/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp new file mode 100644 index 00000000000..648faffbf9c --- /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 00000000000..6019035973c --- /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 b320ea4f4a1..fdf4f765b88 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1532,7 +1532,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 +1555,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); - - search_found_list.push_back(std::make_pair(pair.first, new_str)); + for (const auto& [model_node, name, tip] : assembly_name_list) { + wxString sub_str = name; + sub_str = sub_str.MakeLower(); + + 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 47ac80d3d3b..83131dc5e08 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -341,8 +341,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 +518,9 @@ class ObjectDataViewModel :public wxDataViewModel 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/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index eb25999cc8e..110d91d9ce2 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) @@ -1048,6 +1053,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; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 61480e49af3..df761f00eef 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -282,11 +282,7 @@ 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; @@ -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) @@ -1020,16 +1028,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 +1578,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 @@ -1900,6 +1910,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 +1989,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 +2035,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 +2078,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; @@ -2267,6 +2276,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 +2558,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 +2935,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 +2968,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 +4061,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; @@ -4028,6 +4132,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,6 +4157,20 @@ 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->top_thumbnail_data.reset(); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index b6c5d430ff7..8a9f9436b75 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 @@ class PartPlate : public ObjectBase friend class PartPlateList; + Pointfs m_raw_shape; Pointfs m_shape; Pointfs m_exclude_area; BoundingBoxf3 m_bounding_box; @@ -291,6 +293,7 @@ class PartPlate : public ObjectBase // 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); Vec3d get_origin() { return m_origin; } @@ -335,6 +338,9 @@ class PartPlate : public ObjectBase //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 +368,18 @@ class PartPlate : public ObjectBase 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();} 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 = Vec3d(m_origin.x() + m_width + eps, m_origin.y() + m_depth + eps, m_origin.z() + m_height + eps); + Vec3d low_point = Vec3d(m_origin.x() - eps, m_origin.y() - eps, m_origin.z() - eps); + if (m_raw_shape.size() > 0) { + up_point.x() += m_raw_shape[0].x(); + up_point.y() += m_raw_shape[0].y(); + low_point.x() += m_raw_shape[0].x(); + low_point.y() += m_raw_shape[0].y(); + } BoundingBoxf3 plate_box(low_point, up_point); return plate_box; } @@ -460,7 +474,9 @@ class PartPlate : public ObjectBase 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 +749,7 @@ class PartPlateList : public ObjectBase 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/PlateSettingsDialog.cpp b/src/slic3r/GUI/PlateSettingsDialog.cpp index d45c93091d4..88f93917736 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); + +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(); + } +} -PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title, bool only_first_layer_seq, const wxPoint& pos, const wxSize& size, long style) +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 debad2a7f6f..00dbbe40110 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 @@ class PlateSettingsDialog : public DPIDialog 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 @@ class PlateSettingsDialog : public DPIDialog 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 @@ class PlateSettingsDialog : public DPIDialog 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 @@ class PlateSettingsDialog : public DPIDialog } 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 81dd0d65a3b..61369ef020f 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -116,6 +116,7 @@ #include "Jobs/BoostThreadWorker.hpp" #include "BackgroundSlicingProcess.hpp" #include "SelectMachine.hpp" +#include "SendMultiMachinePage.hpp" #include "SendToPrinter.hpp" #include "PublishDialog.hpp" #include "ModelMall.hpp" @@ -156,6 +157,7 @@ #include #include // Needs to be last because reasons :-/ #include "WipeTowerDialog.hpp" +#include "ObjColorDialog.hpp" #include "libslic3r/CustomGCode.hpp" #include "libslic3r/Platform.hpp" @@ -209,7 +211,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 +435,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 +495,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 +873,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(); @@ -1134,9 +1200,7 @@ void Sidebar::update_all_preset_comboboxes() 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) { @@ -1202,7 +1266,9 @@ void Sidebar::update_all_preset_comboboxes() if (p->combo_printer) p->combo_printer->update(); - p_mainframe->m_tabpanel->SetSelection(p_mainframe->m_tabpanel->GetSelection()); + // Orca:: show device tab based on vendor type + p_mainframe->show_device(use_bbl_network); + p_mainframe->select_tab(MainFrame::tp3DEditor); } void Sidebar::update_presets(Preset::Type preset_type) @@ -1231,7 +1297,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 +1337,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); } @@ -1524,6 +1587,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 +1959,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 +1997,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 +2025,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 +2143,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; @@ -2390,6 +2491,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); @@ -2506,6 +2610,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 +2651,6 @@ struct Plater::priv //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 +2696,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", "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", @@ -2663,7 +2768,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 +2960,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 +3039,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 +3163,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) { @@ -3058,8 +3174,8 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) }); 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 +3465,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 +3571,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; @@ -3878,12 +4012,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; @@ -3906,11 +4052,12 @@ std::vector Plater::priv::load_files(const std::vector& input_ 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!")); - }); + }, + 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 +4227,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 +4243,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 +4361,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 +4464,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 +4509,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 +4554,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 +4713,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() @@ -4965,6 +5142,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. @@ -5918,18 +6101,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 +6188,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 +6278,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 +6472,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 +6486,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(); @@ -6819,6 +7041,14 @@ void Plater::priv::on_action_print_plate(SimpleEvent&) record_start_print_preset("print_plate"); } +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&) { if (q != nullptr) { @@ -6851,7 +7081,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 +7108,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) { @@ -6948,7 +7179,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 +7237,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) @@ -7361,10 +7592,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 @@ -7929,6 +8161,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 +8513,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 +8623,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 +8731,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 +8805,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 @@ -8726,6 +8972,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 +9027,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; @@ -8793,7 +9065,7 @@ void Plater::import_model_id(wxString download_info) error); if (retry_count == max_retries) { - msg = _L("Importing to Orca Slicer failed. Please download the file and manually import it."); + msg = _L("Importing to Bambu Studio failed. Please download the file and manually import it."); cont = false; } }) @@ -8842,7 +9114,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 +9126,6 @@ void Plater::import_model_id(wxString download_info) return; } } - //BBS download project by project id void Plater::download_project(const wxString& project_id) { @@ -9588,14 +9859,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 +9883,7 @@ void Plater::load_gcode(const wxString& filename) } else { set_project_filename(filename); } - + } void Plater::reload_gcode_from_disk() @@ -10026,7 +10295,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)", std::regex::icase); const std::regex pattern_gcode_drop(".*[.](gcode|g)", std::regex::icase); std::vector normal_paths; @@ -10173,21 +10442,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 +10613,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(); } @@ -10863,12 +11138,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 +11171,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()) { @@ -11359,6 +11645,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 +11659,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(); @@ -12616,6 +12904,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 +13256,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 +13273,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 +13298,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 +13680,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 681db567033..a2fa773129d 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -72,6 +72,7 @@ class Ams; using ModelInstancePtrs = std::vector; + namespace UndoRedo { class Stack; enum class SnapshotType : unsigned char; @@ -116,7 +117,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 +156,9 @@ class Sidebar : public wxPanel 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); @@ -342,6 +349,7 @@ class Plater: public wxPanel //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; @@ -536,6 +544,8 @@ class Plater: public wxPanel 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); @@ -823,6 +833,7 @@ class SuppressBackgroundProcessingUpdate 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 919e79bd98c..298ed85ed77 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; @@ -866,6 +869,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 +989,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); @@ -1015,6 +1021,14 @@ wxWindow* PreferencesDialog::create_general_page() 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,7 +1044,9 @@ 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 Studio)."), 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"); @@ -1089,11 +1105,14 @@ 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)); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index d037a62394a..e634c4fe1a3 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 954c06862f1..8069e687efe 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/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp index 67d8f4fd528..168da3886e2 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)) { @@ -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 wxStaticText(parent, wxID_ANY, _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,191 @@ 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->Disable(); + nozzle_diameter_checkbox->Disable(); + return DPIDialog::Show(show); + } + + 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 21865bda3c7..63fe24af63e 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,6 +49,7 @@ class PrintOptionsDialog : public DPIDialog CheckBox* m_cb_auto_recovery; CheckBox* m_cb_sup_sound; CheckBox* m_cb_filament_tangle; + CheckBox* m_cb_nozzle_blob; wxStaticText* text_first_layer; wxStaticText* text_ai_monitoring; wxStaticText* text_ai_monitoring_caption; @@ -37,12 +59,15 @@ class PrintOptionsDialog : public DPIDialog wxStaticText* text_auto_recovery; wxStaticText* text_sup_sound; wxStaticText* text_filament_tangle; + wxStaticText* text_nozzle_blob; + wxStaticText* 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 bd00bdce9cf..f578fa0cab9 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 886421c65fc..46debf2123a 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_RES_BUSY, L("The device cannot handle more conversations. Please retry later.")}, - {PrinterFileSystem::FILE_NO_EXIST, L("File not exists.")}, + {PrinterFileSystem::ERROR_PIPE, L("Reconnecting the printer, the operation cannot be completed immediately, please try again later.")}, + {PrinterFileSystem::ERROR_RES_BUSY, L("Over 4 systems/handy are using remote access, you can close some and try again.")}, + {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.")} @@ -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 { @@ -981,7 +989,7 @@ void PrinterFileSystem::FileRemoved(std::pair type, size_ 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); @@ -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/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 539f9c08e99..617397f32f1 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 98d42b964c3..d8ad66644c8 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 @@ class SecondaryCheckDialog : public DPIFrame 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 @@ class SecondaryCheckDialog : public DPIFrame 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 @@ class ConfirmBeforeSendDialog : public DPIDialog 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/Search.cpp b/src/slic3r/GUI/Search.cpp index 6184086dc0c..5579fb7bcff 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 8d20a14e1c6..31b83b8cf3c 100644 --- a/src/slic3r/GUI/Search.hpp +++ b/src/slic3r/GUI/Search.hpp @@ -166,7 +166,7 @@ class SearchItem : public wxWindow 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 9c9bfb259a8..08a9cdd96cf 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -398,12 +398,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 +875,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)) { @@ -1800,8 +1814,11 @@ 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++; @@ -2141,9 +2158,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 +2264,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); @@ -2378,7 +2434,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 +2442,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 +2476,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 +2492,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 +2563,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 +2573,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, ""); - 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,7 +2599,14 @@ 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(); @@ -2555,34 +2618,34 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) } }); - 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"); + //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 (...) {} + // } + // }); + + 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 { @@ -2882,15 +2945,32 @@ 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++) { + 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 +2978,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 +3237,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(); } @@ -3282,12 +3362,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 +3491,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 +3849,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(), "<>[]:/\\|?*\"")); @@ -4051,10 +4142,13 @@ 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; @@ -4158,14 +4252,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(); @@ -4479,7 +4566,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) { @@ -4508,4 +4595,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 160c21592af..bab4d3d4e93 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 @@ class MachinePanel 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 @@ class SelectMachinePopup : public PopupWindow 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 @@ class SelectMachineDialog : public DPIDialog 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 }; diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 01f1c06502a..4b06c543b80 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -147,6 +147,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 +1999,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 +2023,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 +3096,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 +3112,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 c506a1a6fa4..10954488dfc 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -212,6 +212,7 @@ class Selection 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 00000000000..368bfa91614 --- /dev/null +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -0,0 +1,1618 @@ +#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) +{ + +} + +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 (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")); + 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_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); + m_task_name->SetFont(::Label::Body_13); + m_task_name->SetMaxSize(wxSize(FromDIP(390), -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(_("Bed Leveling"), main_page, "", 50, "bed_leveling"); + wxBoxSizer* item_timelapse = create_item_checkbox(_("Timelapse"), main_page, "", 50, "timelapse"); + wxBoxSizer* item_flow_dy_ca = create_item_checkbox(_("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"), _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 00000000000..418f8cfa097 --- /dev/null +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -0,0 +1,210 @@ +#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 }; + ScalableBitmap* m_print_time{ nullptr }; + wxStaticBitmap* m_time_img{ 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 b084a382f33..9f477be993d 100644 --- a/src/slic3r/GUI/SendToPrinter.hpp +++ b/src/slic3r/GUI/SendToPrinter.hpp @@ -50,7 +50,7 @@ class SendToPrinterDialog : public DPIDialog 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 53394895f6c..80fe7199a7b 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(); @@ -1093,6 +1097,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 +1121,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 +1779,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 +1825,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 +1940,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 +1954,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 +1985,12 @@ 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); + } if (obj) { m_project_task_panel->set_plate_index(obj->m_plate_index); } else { @@ -2022,7 +2053,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 +2110,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 +2167,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); + 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")); + } - 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); - } + 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); + } + }); - 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->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { + if (m_ams_control) { + m_ams_control->on_retry(); + } + }); + + m_print_error_dlg->on_show(); } - 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); + 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->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { - if (m_ams_control) { - m_ams_control->on_retry(); + 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->on_show(); + 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 +2259,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 +2568,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 +2823,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 +2877,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 +2962,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 +3015,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 +3218,18 @@ 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); + } if (this->obj) { m_project_task_panel->set_plate_index(obj->m_plate_index); } else { @@ -3071,7 +3253,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 +3277,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 +3430,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 +3446,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 +3465,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 +3557,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 +3585,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 +3891,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 +4224,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 +4240,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 +4309,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 +4332,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 +4463,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 399566373bc..eee2fafdfe4 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 @@ -212,7 +214,7 @@ class PrintingTaskPanel : public wxPanel 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); @@ -390,6 +392,7 @@ class StatusBasePanel : public wxScrolledWindow 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 +452,7 @@ class StatusBasePanel : public wxScrolledWindow 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 +467,13 @@ class StatusPanel : public StatusBasePanel 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 +510,11 @@ class StatusPanel : public StatusBasePanel std::vector