diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index a45d336f8..e5997c2e7 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/BuildLinux.sh b/BuildLinux.sh index 772617aaf..1a217c683 100755 --- a/BuildLinux.sh +++ b/BuildLinux.sh @@ -1,10 +1,6 @@ #!/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 @@ -21,238 +17,167 @@ function check_available_memory_and_disk() { exit 2 fi - if [[ ${FREE_DISK_KB} -le ${MIN_DISK_KB} ]]; then - echo -e "\nERROR: Orca Slicer Builder requires at least $(echo $MIN_DISK_KB |awk '{ printf "%.1fG\n", $1/1024/1024; }') (systen has only $(echo ${FREE_DISK_KB} | awk '{ printf "%.1fG\n", $1/1024/1024; }') disk free)" + if [[ ${FREE_DISK_KB} -le ${MIN_DISK_KB} ]]; then + echo -e "\nERROR: Orca Slicer Builder requires at least $(echo ${MIN_DISK_KB} |awk '{ printf "%.1fG\n", $1/1024/1024; }') (systen has only $(echo ${FREE_DISK_KB} | awk '{ printf "%.1fG\n", $1/1024/1024; }') disk free)" echo && df -h . && echo exit 1 fi } function usage() { - echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" - echo " -i: Generate appimage (optional)" - echo " -g: force gtk2 build" + echo "Usage: ./BuildLinux.sh [-1][-b][-c][-d][-i][-r][-s][-u]" + echo " -1: limit builds to 1 core (where possible)" echo " -b: build in debug mode" + echo " -c: force a clean build" echo " -d: build deps (optional)" + echo " -h: this help output" + echo " -i: Generate appimage (optional)" + echo " -r: skip ram and disk checks (low ram compiling)" echo " -s: build orca-slicer (optional)" - echo " -u: only update clock & dependency packets (optional and need sudo)" - echo " -r: skip free ram check (low ram compiling)" + echo " -u: update and build dependencies (optional and need sudo)" echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'" echo " and then './BuildLinux.sh -dsi'" } unset name -while getopts ":dsiuhgbr" opt; do +while getopts ":1bcdghirsu" opt; do case ${opt} in - u ) - UPDATE_LIB="1" - ;; - i ) - BUILD_IMAGE="1" - ;; - d ) - BUILD_DEPS="1" - ;; - s ) - BUILD_ORCA="1" + 1 ) + export CMAKE_BUILD_PARALLEL_LEVEL=1 ;; b ) BUILD_DEBUG="1" ;; - g ) - FOUND_GTK3="" + c ) + CLEAN_BUILD=1 + ;; + d ) + BUILD_DEPS="1" ;; - r ) - SKIP_RAM_CHECK="1" - ;; h ) usage exit 0 ;; + i ) + BUILD_IMAGE="1" + ;; + r ) + SKIP_RAM_CHECK="1" + ;; + s ) + BUILD_ORCA="1" + ;; + u ) + UPDATE_LIB="1" + ;; esac done -if [ $OPTIND -eq 1 ] +if [ ${OPTIND} -eq 1 ] then usage exit 0 fi -# Addtional Dev packages for OrcaSlicer -export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules texinfo" -# libwebkit2gtk-4.1-dev ?? -export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w) -if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then - sudo apt install -y ${REQUIRED_DEV_PACKAGES} git cmake wget file gettext -fi - -#FIXME: require root for -u option -if [[ -n "$UPDATE_LIB" ]] +DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release) +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" ] + +if ! [[ -n "${SKIP_RAM_CHECK}" ]] then - mkdir deps/build + check_available_memory_and_disk fi -if ! [[ -n "$SKIP_RAM_CHECK" ]] +if [[ -n "${BUILD_DEPS}" ]] then -check_available_memory_and_disk -fi - -if [[ -n "$BUILD_DEPS" ]] -then - echo "[3/9] Configuring dependencies..." - BUILD_ARGS="" - if [[ -n "$FOUND_GTK3_DEV" ]] + echo "Configuring dependencies..." + BUILD_ARGS="-DDEP_WX_GTK3=ON" + if [[ -n "${CLEAN_BUILD}" ]] then - BUILD_ARGS="-DDEP_WX_GTK3=ON" + rm -fr deps/build fi - if [[ -n "$BUILD_DEBUG" ]] + if [ ! -d "deps/build" ] + then + mkdir deps/build + fi + if [[ -n "${BUILD_DEBUG}" ]] then # have to build deps with debug & release or the cmake won't find everything it needs mkdir deps/build/release - pushd deps/build/release - echo -e "cmake ../.. -DDESTDIR=\"../destdir\" $BUILD_ARGS" - cmake ../.. -DDESTDIR="../destdir" $BUILD_ARGS - make -j$NCORES - popd + cmake -S deps -B deps/build/release -G Ninja -DDESTDIR="../destdir" ${BUILD_ARGS} + cmake --build deps/build/release BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" fi - - # cmake deps - pushd deps/build - echo "cmake .. $BUILD_ARGS" - cmake .. $BUILD_ARGS - echo "done" - - # make deps - echo "[4/9] Building dependencies..." - make deps -j$NCORES - echo "done" - # rename wxscintilla # TODO: DeftDawg: Does OrcaSlicer need this? - # echo "[5/9] Renaming wxscintilla library..." - # pushd destdir/usr/local/lib - # if [[ -z "$FOUND_GTK3_DEV" ]] - # then - # cp libwxscintilla-3.1.a libwx_gtk2u_scintilla-3.1.a - # else - # cp libwxscintilla-3.1.a libwx_gtk3u_scintilla-3.1.a - # fi - # popd - # echo "done" - - # FIXME: only clean deps if compiling succeeds; otherwise reruns waste tonnes of time! - # clean deps - # echo "[6/9] Cleaning dependencies..." - # rm -rf dep_* - popd - echo "done" + echo "cmake -S deps -B deps/build -G Ninja ${BUILD_ARGS}" + cmake -S deps -B deps/build -G Ninja ${BUILD_ARGS} + cmake --build deps/build fi -# Create main "build" directory -if [ ! -d "build" ] -then - mkdir build -fi -if [[ -n "$BUILD_ORCA" ]] +if [[ -n "${BUILD_ORCA}" ]] then - echo "[7/9] Configuring Slic3r..." + echo "Configuring OrcaSlicer..." + if [[ -n "${CLEAN_BUILD}" ]] + then + rm -fr build + fi BUILD_ARGS="" - if [[ -n "$FOUND_GTK3_DEV" ]] + if [[ -n "${FOUND_GTK3_DEV}" ]] then BUILD_ARGS="-DSLIC3R_GTK=3" fi - if [[ -n "$BUILD_DEBUG" ]] + if [[ -n "${BUILD_DEBUG}" ]] then BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug -DBBL_INTERNAL_TESTING=1" else BUILD_ARGS="${BUILD_ARGS} -DBBL_RELEASE_TO_PUBLIC=1 -DBBL_INTERNAL_TESTING=0" fi - - # cmake - pushd build - echo -e "cmake .. -DCMAKE_PREFIX_PATH=\"$PWD/../deps/build/destdir/usr/local\" -DSLIC3R_STATIC=1 -DORCA_TOOLS=ON ${BUILD_ARGS}" - cmake .. -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" -DSLIC3R_STATIC=1 ${BUILD_ARGS} -DORCA_TOOLS=ON - echo "done" - - # make Slic3r - echo "[8/9] Building Slic3r..." - make -j$NCORES OrcaSlicer # Slic3r - - # make OrcaSlicer_profile_validator - make -j$NCORES OrcaSlicer_profile_validator - popd + echo -e "cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH="${PWD}/deps/build/destdir/usr/local" -DSLIC3R_STATIC=1 ${BUILD_ARGS}" + cmake -S . -B build -G Ninja \ + -DCMAKE_PREFIX_PATH="${PWD}/deps/build/destdir/usr/local" \ + -DSLIC3R_STATIC=1 \ + -DORCA_TOOLS=ON \ + ${BUILD_ARGS} + echo "done" + echo "Building OrcaSlicer ..." + cmake --build build --target OrcaSlicer + echo "Building OrcaSlicer_profile_validator .." + cmake --build build --target OrcaSlicer_profile_validator ./run_gettext.sh echo "done" fi -if [[ -e $ROOT/build/src/BuildLinuxImage.sh ]]; then +if [[ -e ${ROOT}/build/src/BuildLinuxImage.sh ]]; then # Give proper permissions to script -chmod 755 $ROOT/build/src/BuildLinuxImage.sh +chmod 755 ${ROOT}/build/src/BuildLinuxImage.sh echo "[9/9] Generating Linux app..." pushd build - if [[ -n "$BUILD_IMAGE" ]] + if [[ -n "${BUILD_IMAGE}" ]] then - $ROOT/build/src/BuildLinuxImage.sh -i + ${ROOT}/build/src/BuildLinuxImage.sh -i else - $ROOT/build/src/BuildLinuxImage.sh + ${ROOT}/build/src/BuildLinuxImage.sh fi popd echo "done" diff --git a/doc/Calibration.md b/doc/Calibration.md index 9a5975ce2..bb4b8422b 100644 --- a/doc/Calibration.md +++ b/doc/Calibration.md @@ -79,7 +79,7 @@ The PA value for this test will be increased by 0.002 for every 1 mm increase in Steps: 1. Select the printer, filament, and process you would like to use for the test. 2. Examine each corner of the print and mark the height that yields the best overall result. - 3. I selected a height of 8 mm for this case, so the pressure advance value should be calculated as `0.002x8 = 0.016`. + 3. I selected a height of 8 mm for this case, so the pressure advance value should be calculated as `PressureAdvanceStart+(PressureAdvanceStep x measured)` example: `0+(0.002 x 8) = 0.016`. ![tower](https://user-images.githubusercontent.com/103989404/210140231-e886b98d-280a-4464-9781-c74ed9b7d44e.jpg) ![tower_measure](https://user-images.githubusercontent.com/103989404/210140232-885b549b-e3b8-46b9-a24c-5229c9182408.jpg) diff --git a/doc/adaptive-bed-mesh.md b/doc/adaptive-bed-mesh.md index 01e346b13..a711eaff0 100644 --- a/doc/adaptive-bed-mesh.md +++ b/doc/adaptive-bed-mesh.md @@ -34,7 +34,8 @@ G29 L{adaptive_bed_mesh_min[0]} R{adaptive_bed_mesh_max[0]} F{adaptive_bed_mesh_ ### Klipper: ``` ; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally -BED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=1 ADAPTIVE_MARGIN=0 +; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic +BED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 ``` ### RRF: ``` diff --git a/linux.d/README.md b/linux.d/README.md new file mode 100644 index 000000000..7f05a77cd --- /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 000000000..bae4c06e9 --- /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/fedora b/linux.d/fedora new file mode 100644 index 000000000..3a3407289 --- /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/linux.d/ubuntu b/linux.d/ubuntu new file mode 100644 index 000000000..fd13c706c --- /dev/null +++ b/linux.d/ubuntu @@ -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/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index d091dd350..c97163a95 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-04-15 22:59+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" @@ -1915,9 +1918,6 @@ msgstr "" msgid "Set Filament for selected items" msgstr "" -msgid "current" -msgstr "" - msgid "Unlock" msgstr "" @@ -2234,9 +2234,6 @@ msgstr "" msgid "Jump to Layer" msgstr "" -msgid "Jump to layer" -msgstr "" - msgid "Please enter the layer number" msgstr "" @@ -2824,27 +2821,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 +2878,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "" @@ -2906,7 +2896,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 "" @@ -3012,6 +3002,12 @@ msgstr "" msgid "Stack overflow" msgstr "" +msgid "Running post-processing scripts" +msgstr "" + +msgid "Successfully executed post-processing script" +msgstr "" + msgid "Unknown error when export G-code." msgstr "" @@ -3022,13 +3018,6 @@ msgid "" "Source file %2%." msgstr "" -#, possible-boost-format -msgid "Succeed to export G-code to %1%" -msgstr "" - -msgid "Running post-processing scripts" -msgstr "" - msgid "Copying of the temporary G-code to the output G-code failed" msgstr "" @@ -3101,6 +3090,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 +3160,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 +3204,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 "" @@ -3492,6 +3494,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 +3575,10 @@ msgstr "" msgid "Flushed" msgstr "" -msgid "Total" +msgid "Tower" msgstr "" -msgid "Tower" +msgid "Total" msgstr "" msgid "Total Estimation" @@ -3677,6 +3683,12 @@ msgstr "" msgid "Normal mode" msgstr "" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "" @@ -3770,6 +3782,9 @@ msgstr "" msgid "Spacing" msgstr "" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "" @@ -3908,6 +3923,9 @@ msgstr "" msgid "Go Live" msgstr "" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "" @@ -4408,39 +4426,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,16 +4494,15 @@ msgstr "" msgid "Virtual camera initialize failed (%s)!" msgstr "" +msgid "Network unreachable" +msgstr "" + msgid "Information" msgstr "" msgid "Playing..." msgstr "" -#, possible-c-format, possible-boost-format -msgid "Load failed [%d]!" -msgstr "" - msgid "Loading..." msgstr "" @@ -4528,6 +4554,12 @@ msgstr "" msgid "Batch manage files." msgstr "" +msgid "Refresh" +msgstr "" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "" @@ -4538,12 +4570,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 +4617,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 +4632,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 +4654,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 studio/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 +4768,9 @@ msgstr "" msgid "Control" msgstr "" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "" @@ -4928,6 +4992,36 @@ msgstr "" msgid "Skip" msgstr "" +msgid "Newer 3mf version" +msgstr "" + +msgid "" +"The 3mf file version is in Beta and it is newer than the current Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5202,19 @@ msgstr "" msgid "Filament Tangle Detect" 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 +5400,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 " @@ -5594,7 +5698,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 "" @@ -5764,6 +5884,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 +5910,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 +5934,21 @@ 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 "Network" msgstr "" @@ -6010,6 +6163,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 +6184,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 +6373,6 @@ msgstr "" msgid "Send print job to" msgstr "" -msgid "Refresh" -msgstr "" - msgid "Bed Leveling" msgstr "" @@ -6285,7 +6453,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,24 +6509,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 "" #, possible-c-format, possible-boost-format -msgid "*Printing %s material with %s may cause nozzle damage" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" + +msgid "Please fix the error above, otherwise printing cannot continue." msgstr "" msgid "" "Please click the confirm button if you still want to proceed with printing." msgstr "" -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" @@ -6386,6 +6557,9 @@ 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 "" @@ -6579,6 +6753,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" @@ -6959,22 +7147,25 @@ msgstr "" msgid "Unsaved Changes" msgstr "" -msgid "Transfer or discard changes" +msgid "Actions For Unsaved Changes" msgstr "" -msgid "Old Value" +msgid "Preset Value" msgstr "" -msgid "New Value" +msgid "Modified Value" msgstr "" -msgid "Transfer" +msgid "Transfer Modified Value" msgstr "" msgid "Don't save" msgstr "" -msgid "Discard" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" msgstr "" msgid "Click the right mouse button to display the full text." @@ -7024,16 +7215,33 @@ msgid "" msgstr "" #, possible-boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " msgstr "" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" msgstr "" msgid "Extruders count" @@ -7051,6 +7259,9 @@ msgstr "" msgid "Select presets to compare" msgstr "" +msgid "Transfer" +msgstr "" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7065,7 +7276,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 "" @@ -7511,6 +7722,9 @@ msgstr "" msgid "Done" msgstr "" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8269,6 +8483,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 +9177,12 @@ msgid "" "printing." msgstr "" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9551,6 +9780,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 +10534,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 +10882,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 " @@ -11919,12 +12172,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" @@ -12104,6 +12351,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?" @@ -12197,9 +12450,6 @@ msgstr "" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "" @@ -12261,6 +12511,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -12276,6 +12529,22 @@ msgstr "" msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "" @@ -12640,6 +12909,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 +13107,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 +13208,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 +13281,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 "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 08595eec2..942f3006e 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-04-15 22:59+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" @@ -1994,9 +1997,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 +2331,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" @@ -2977,38 +2974,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 "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3067,6 +3041,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 +3061,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 " @@ -3210,6 +3188,12 @@ 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 when export G-code." msgstr "Error desconegut en exportar el Codi-G." @@ -3223,13 +3207,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 +3288,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 +3389,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 +3451,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" @@ -3775,6 +3765,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 +3849,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 +3957,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 +4056,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 +4206,9 @@ msgstr "Monitorització de gravació automàtica" msgid "Go Live" msgstr "Entra en directe" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolució" @@ -4721,44 +4727,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 "" -"Inicialització fallida ( la connexió del Dispositiu no està preparada )!" -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." +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"La impressora està ocupada descarregant, espereu que finalitzi la descàrrega." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Please confirm if the printer is connected." 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 "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicialització fallida ( Manca la IP LAN de la impressora )!" +msgid "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 +4802,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 +4862,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 +4878,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 +4930,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 +4947,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 +4969,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 studio/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 +5087,9 @@ msgstr "Canviar Vista de Càmera" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Opcions d'impressió" @@ -5281,6 +5330,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5547,19 @@ msgstr "Permet senyals acústics" msgid "Filament Tangle Detect" msgstr "Detecció de filament enredat" +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 +5767,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 " @@ -6012,10 +6101,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 " @@ -6198,6 +6301,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 +6331,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 +6358,21 @@ 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 "Network" msgstr "" @@ -6461,6 +6597,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 +6618,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 +6809,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 +6910,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 +6978,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 "" @@ -6882,6 +7032,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." @@ -7124,6 +7279,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" @@ -7543,23 +7712,26 @@ msgstr "No definit" msgid "Unsaved Changes" msgstr "Canvis no desats" -msgid "Transfer or discard changes" -msgstr "Transferir o descartar canvis" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Valor antic" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Valor nou" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Transferir" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "No desar" -msgid "Discard" -msgstr "Descartar" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Feu clic amb el botó dret del ratolí per mostrar el text complet." @@ -7616,21 +7788,34 @@ msgstr "" "següents canvis no desats:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " msgstr "" -"Heu canviat alguns paràmetres del perfil \"%1%\". \n" -"Voleu mantenir aquests paràmetres modificats després de canviar el perfil?" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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" @@ -7647,6 +7832,9 @@ msgstr "Mostra tots els perfils ( inclosos els incompatibles )" msgid "Select presets to compare" msgstr "Seleccioneu els perfils a comparar" +msgid "Transfer" +msgstr "Transferir" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "Només es pot transferir al perfil actiu actual perquè s'ha modificat." @@ -7665,7 +7853,7 @@ msgid "Transfer values from left to right" msgstr "Transfereix valors d'esquerra a dreta" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Si està habilitat, aquest diàleg es pot utilitzar per transferir els valors " @@ -8144,6 +8332,9 @@ msgstr "Omet aquesta versió" msgid "Done" msgstr "Fet" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmar i Actualitzar el broquet" @@ -9054,6 +9245,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 +10183,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" @@ -10746,6 +10952,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 +11903,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 +12341,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 " @@ -13711,12 +13941,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" @@ -13978,6 +14202,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?" @@ -14080,9 +14310,6 @@ msgstr "Paràmetres d'impressió" msgid "- ℃" msgstr "- °C" -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Tipus de placa" @@ -14150,6 +14377,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" @@ -14166,6 +14396,22 @@ msgstr "Acció" msgid "Edit Flow Dynamics Calibration" msgstr "Editeu el Calibratge de Dinàmiques de Flux" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "Cerca de xarxa" @@ -14563,6 +14809,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 +15039,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 +15162,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 +15241,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" @@ -15614,6 +15885,158 @@ msgstr "" "augmentar adequadament la temperatura del llit pot reduir la probabilitat de " "deformació." +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Transferir o descartar canvis" + +#~ msgid "Old Value" +#~ msgstr "Valor antic" + +#~ msgid "New Value" +#~ msgstr "Valor nou" + +#~ msgid "Discard" +#~ msgstr "Descartar" + +#, 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 242262cf6..69ade59e5 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-04-15 22:59+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" @@ -1948,9 +1951,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 +2287,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" @@ -2922,36 +2919,15 @@ msgstr "Zakázat AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Tisk s filamentem namontovaným na zadní straně podvozku" -msgid "Cabin humidity" -msgstr "Vlhkost v kabině" +msgid "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Zelená znamená, že vlhkost AMS je normální, oranžová znamená vlhkost vysokou " -"Červená znamená, že vlhkost je příliš vysoká. (Vlhkoměr: čím nižší, tím " -"lepší.)" - -msgid "Desiccant status" -msgstr "Stav vysoušedla" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Stav vysoušedla nižší než dva pruhy znamená, že vysoušedlo může být " -"neaktivní. Vyměňte prosím vysoušedlo. (Čáry: čím vyšší, tím lepší.)" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"Poznámka: Když je víko otevřené nebo je vyměněno balení vysoušedla, může to " -"trvat hodiny nebo noc absorbovat vlhkost. Nízké teploty také zpomalují " -"proces. Během této doby indikátor nemusí představovat komoru přesně." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3010,6 +2986,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 +3006,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 " @@ -3148,6 +3128,12 @@ 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 when export G-code." msgstr "Neznámá chyba při exportu G-kódu." @@ -3161,13 +3147,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 +3227,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 +3325,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 +3384,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" @@ -3700,6 +3692,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 +3776,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 +3884,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 +3983,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 +4132,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í" @@ -4642,42 +4650,49 @@ msgstr "" msgid "Synchronization" msgstr "Synchronizace" -msgid "Initialize failed (No Device)!" -msgstr "Inicializace se nezdařila (žádné zařízení)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Inicializace se nezdařila (Připojení zařízení není připraveno)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Inicializace se nezdařila (žádné kamerové zařízení)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Tiskárna je zaneprázdněna stahováním, počkejte prosím na dokončení stahování." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Inicializace se nezdařila (Není podporováno ve stávající verzi tiskárny)!" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicializace se nezdařila (není přístupné v režimu pouze LAN)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicializace se nezdařila (chybějící LAN IP tiskárny)!" +msgid "Please confirm if the printer is connected." +msgstr "" + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" + +msgid "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "Inicializace..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Inicializace se nezdařila (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" -msgid "Network unreachable" -msgstr "Nedostupná síť" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Zastaveno [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Zastaveno." @@ -4708,16 +4723,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 +4783,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 +4799,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 +4849,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 +4866,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 +4888,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 studio/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 +5004,9 @@ msgstr "" msgid "Control" msgstr "Ovládání" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Možnosti tisku" @@ -5192,6 +5244,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5462,19 @@ msgstr "Povolit zvuky upozornění" msgid "Filament Tangle Detect" 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 +5684,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 " @@ -5913,10 +6005,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 " @@ -6093,6 +6199,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 +6227,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 +6251,21 @@ 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 "Network" msgstr "" @@ -6349,6 +6488,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 +6509,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 +6699,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 +6792,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,12 +6857,18 @@ 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 "" @@ -6714,12 +6876,6 @@ msgid "" msgstr "" "Pokud stále chcete pokračovat v tisku, klikněte prosím na tlačítko Potvrdit." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "Připojování k tiskárně. Nelze zrušit během procesu připojování." @@ -6752,6 +6908,10 @@ 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." @@ -6980,6 +7140,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" @@ -7399,23 +7573,26 @@ msgstr "Nedefinováno" msgid "Unsaved Changes" msgstr "Neuložené změny" -msgid "Transfer or discard changes" -msgstr "Zahodit nebo ponechat změny" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Stará hodnota" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Nová hodnota" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Přenést" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Neukládat" -msgid "Discard" -msgstr "Zahodit" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Kliknutím pravým tlačítkem myši zobrazíte celý text." @@ -7472,23 +7649,34 @@ msgstr "" "následující neuložené změny:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " msgstr "" -"Změnili jste některá nastavení předvolby \"%1%\" . \n" -"Přejete si po přepnutí zachovat tato změněná nastavení (nová " -"hodnota)přednastavení?" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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ů" @@ -7505,6 +7693,9 @@ msgstr "Zobrazit všechna přednastavení (včetně nekompatibilních)" msgid "Select presets to compare" msgstr "Zvolte přednastavení k porovnání" +msgid "Transfer" +msgstr "Přenést" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7519,7 +7710,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 "" @@ -7983,6 +8174,9 @@ msgstr "" msgid "Done" msgstr "Hotovo" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8843,6 +9037,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 +9822,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 "" @@ -10328,6 +10537,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 +11435,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 +11828,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 " @@ -13082,12 +13315,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" @@ -13338,6 +13565,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?" @@ -13438,9 +13671,6 @@ msgstr "Parametry tisku" msgid "- ℃" msgstr "- ℃" -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Typ Podložky" @@ -13506,6 +13736,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" @@ -13521,6 +13754,22 @@ msgstr "Akce" msgid "Edit Flow Dynamics Calibration" msgstr "Upravit kalibraci dynamiky průtoku" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "Vyhledávání v síti" @@ -13903,6 +14152,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 +14350,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 +14451,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 +14525,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" @@ -14824,6 +15101,139 @@ msgid "" "probability of warping." msgstr "" +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Zahodit nebo ponechat změny" + +#~ msgid "Old Value" +#~ msgstr "Stará hodnota" + +#~ msgid "New Value" +#~ msgstr "Nová hodnota" + +#~ msgid "Discard" +#~ msgstr "Zahodit" + +#, 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 46c5f3922..782dbb791 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-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-04-15 22:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" msgstr "Stützen aufmalen" @@ -256,6 +256,9 @@ msgstr "Rotation zurücksetzen" msgid "World coordinates" msgstr "Weltkoordinaten" +msgid "Object coordinates" +msgstr "" + 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" @@ -1993,9 +1996,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 +2344,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" @@ -2999,39 +2996,19 @@ msgstr "AMS deaktivieren" msgid "Print with the filament mounted on the back of chassis" msgstr "Druck mit dem Filament auf der Rückseite des Chassis" -msgid "Cabin humidity" -msgstr "Luftfeuchtigkeit in der Druck-Kammer" +msgid "Current Cabin humidity" +msgstr "Aktuelle Kabinenfeuchtigkeit" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Grün bedeutet, dass die AMS-Luftfeuchtigkeit normal ist, orange bedeutet, " -"dass die Luftfeuchtigkeit hoch ist, und rot bedeutet, dass die " -"Luftfeuchtigkeit zu hoch ist. (Hygrometer: je niedriger, desto besser.)" - -msgid "Desiccant status" -msgstr "Trockenmittelstatus" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Ein Trockenmittelstatus von weniger als zwei Balken bedeutet, dass das " -"Trockenmittel möglicherweise inaktiv ist. Bitte tauschen Sie das " -"Trockenmittel aus. (Je höher, desto besser.)" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"Hinweis: Wenn der Deckel geöffnet ist oder die Trockenmittelpackung " -"gewechselt wird, kann es Stunden oder gar eine Nacht dauern, bis die " -"Feuchtigkeit aufgenommen wurde. Niedrige Temperaturen verlangsamen den " -"Prozess ebenfalls. Während dieser Zeit stellt der Indikator die Werte der " -"Kammer möglicherweise nicht genau dar." +"Wechseln Sie das Trockenmittel, wenn es zu feucht ist. Der Indikator kann " +"nicht genau in folgenden Fällen angezeigt werden: wenn der Deckel geöffnet " +"ist oder das Trockenmittelbeutel gewechselt wird. Es dauert Stunden, um die " +"Feuchtigkeit aufzunehmen, niedrige Temperaturen verlangsamen den Prozess." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3091,6 +3068,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 +3088,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 "" @@ -3237,6 +3220,12 @@ 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 when export G-code." msgstr "Unbekannter Fehler beim exportieren des G-Code." @@ -3250,13 +3239,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 +3324,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 +3429,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 +3499,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" @@ -3818,6 +3817,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 +3903,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 +4011,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 +4110,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" @@ -4246,6 +4260,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" @@ -4770,45 +4787,67 @@ msgstr "" msgid "Synchronization" msgstr "Synchronisierung" -msgid "Initialize failed (No Device)!" -msgstr "Initialisierung fehlgeschlagen (Kein Gerät)!" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Die Initialisierung ist fehlgeschlagen (Geräteverbindung nicht bereit)!" +"Das Gerät kann keine weiteren Gespräche führen. Bitte versuchen Sie es " +"später erneut." -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialisierung fehlgeschlagen (keine Kamera)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Der Drucker ist mit dem Herunterladen beschäftigt; Bitte warten Sie, bis der " -"Download beendet ist." +"Die Wiedergabe funktioniert nicht richtig. Bitte installieren Sie den " +"Systemplayer neu." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"Initialisierung fehlgeschlagen (Nicht unterstützt auf der aktuellen " -"Druckerversion)!" +"Der Player ist nicht geladen. Klicken Sie auf die Schaltfläche „Wiedergabe“, " +"um es erneut zu versuchen." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisierung fehlgeschlagen (Kein Zugriff im reinen LAN-Modus)!" +msgid "Please confirm if the printer is connected." +msgstr "Bitte bestätigen Sie, ob der Drucker verbunden ist." -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialisierung fehlgeschlagen (Fehlende LAN IP des Druckers)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"Der Drucker ist derzeit mit dem Herunterladen beschäftigt. Bitte versuchen " +"Sie es erneut, nachdem es beendet ist." + +msgid "Printer camera is malfunctioning." +msgstr "Die Druckerkamera funktioniert nicht richtig." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Problem aufgetreten. Bitte aktualisieren Sie die Drucker-Firmware und " +"versuchen Sie es erneut." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"LAN-Only-Liveview ist ausgeschaltet. Bitte schalten Sie die Live-Ansicht auf " +"dem Druckerbildschirm ein." + +msgid "Please enter the IP of printer to connect." +msgstr "" +"Bitte geben Sie die IP des Druckers ein, um eine Verbindung herzustellen." msgid "Initializing..." msgstr "Initialisieren..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Initialisierung ist fehlgeschlagen (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" +"Verbindung fehlgeschlagen. Bitte überprüfen Sie das Netzwerk und versuchen " +"Sie es erneut" -msgid "Network unreachable" -msgstr "Netzwerk nicht erreichbar" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Bitte überprüfen Sie das Netzwerk und versuchen Sie es erneut. Sie können " +"den Drucker neu starten oder aktualisieren, wenn das Problem weiterhin " +"besteht." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "[%d] gestoppt!" +msgid "The printer has been logged out and cannot connect." +msgstr "Der Drucker wurde abgemeldet und kann keine Verbindung herstellen." msgid "Stopped." msgstr "Gestoppt." @@ -4839,16 +4878,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 +4938,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 +4954,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 +5008,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 +5026,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 +5050,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 "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Das Gerät kann keine weiteren Gespräche führen. Bitte versuchen Sie es " -"später erneut." +"Der Drucker wird neu verbunden, die Operation kann nicht sofort " +"abgeschlossen werden. Bitte versuchen Sie es später erneut." -msgid "File not exists." +msgid "" +"Over 4 studio/handy are using remote access, you can close some and try " +"again." +msgstr "" +"Mehr als 4 Systeme/Handy verwenden den Remote-Zugriff. Sie können einige " +"schließen und es erneut versuchen." + +msgid "File does not exist." msgstr "Datei existiert nicht." msgid "File checksum error. Please retry." @@ -5088,6 +5172,9 @@ msgstr "Schalte Kameraperspektive" msgid "Control" msgstr "Steuerung" +msgid "Printer Parts" +msgstr "Drucker-Teile" + msgid "Print Options" msgstr "Druckoptionen" @@ -5331,6 +5418,41 @@ 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 Bambu " +"Studio version." +msgstr "" +"Die 3mf-Dateiversion ist in Beta und neuer als die aktuelle Bambu Studio-" +"Version." + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" +"Wenn Sie Bambu Studio Beta ausprobieren möchten, können Sie auf hier klicken" + +msgid "Download Beta Version" +msgstr "Beta-Version herunterladen" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "Die 3mf-Dateiversion ist neuer als die aktuelle Bambu Studio-Version." + +msgid "" +"Update your Bambu Studio could enable all functionality in the 3mf file." +msgstr "" +"Ein Update von Bambu Studio 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 +5640,19 @@ msgstr "Erlaube akustische Signale" msgid "Filament Tangle Detect" msgstr "Filamentverwicklung erkannt" +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 +5865,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 " @@ -6058,7 +6190,7 @@ msgid "The provided file name is not valid." msgstr "Der angegebene Dateiname ist ungültig." msgid "The following characters are not allowed by a FAT file system:" -msgstr "die folgenden Zeichen sind nicht erlaubt beim Fat Datei System:" +msgstr "Folgende Zeichen werden vom FAT Dateisystem nicht unterstützt:" msgid "Save Sliced file as:" msgstr "Geslicte Datei speichern unter:" @@ -6073,10 +6205,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 "" -"Eine boolesche Operation kann für Modellnetze nicht ausgeführt werden. Es " -"werden nur positive Teile exportiert." + +#, 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 "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 " @@ -6261,6 +6407,21 @@ msgstr "Standardseite" msgid "Set the page opened on startup." msgstr "Legen Sie die Seite fest, die beim Start geöffnet wird." +msgid "Touchpad" +msgstr "Touchpad" + +msgid "Camera style" +msgstr "Kamerastil" + +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 "" +"Wählen Sie den Kameranavigationsstil aus.\n" +"Standard: LMB+Verschieben für Rotation, RMB/MMB+Verschieben für Schwenken.\n" +"Touchpad: Alt+Verschieben für Rotation, Shift+Verschieben für Schwenken." + msgid "Zoom to mouse position" msgstr "Zum Mausposition zoomen" @@ -6277,6 +6438,12 @@ msgstr "Freie Kamera verwenden" msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "Wenn aktiviert, wird die freie Kamera verwendet." +msgid "Reverse mouse zoom" +msgstr "Maus-Zoom umkehren" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "Wenn aktiviert, wird die Richtung des Zooms mit dem Mausrad umgekehrt." + msgid "Show splash screen" msgstr "Splash-Screen anzeigen" @@ -6295,6 +6462,23 @@ msgstr "Reinigungsvolumen: Auto-Berechnung bei jeder Farbänderung." msgid "If enabled, auto-calculate everytime the color changed." msgstr "Wenn aktiviert, wird bei jeder Farbänderung automatisch berechnet." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." +msgstr "Reinigungsvolumen: Auto-Berechnung bei jedem Filamentwechsel." + +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "Wenn aktiviert, wird bei jedem Filamentwechsel automatisch berechnet." + +msgid "Remember printer configuration" +msgstr "Druckerkonfiguration merken" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Wenn aktiviert, merkt sich Orca die Filament-/Prozesskonfiguration für jeden " +"Drucker und wechselt automatisch." + msgid "Network" msgstr "Netzwerk" @@ -6517,6 +6701,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" @@ -6526,8 +6722,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" @@ -6714,9 +6916,6 @@ msgstr "Bambu strukturierte PEI-Platte" msgid "Send print job to" msgstr "Druckauftrag senden an" -msgid "Refresh" -msgstr "Aktualisieren" - msgid "Bed Leveling" msgstr "Druckbettnivellierung" @@ -6820,8 +7019,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 "" @@ -6887,16 +7091,23 @@ 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?" #, 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." @@ -6904,12 +7115,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 "" @@ -6944,6 +7149,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-" @@ -7197,6 +7405,29 @@ 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" @@ -7626,23 +7857,26 @@ msgstr "Undefiniert" msgid "Unsaved Changes" msgstr "Nicht gespeicherte Änderungen" -msgid "Transfer or discard changes" -msgstr "Änderungen verwerfen oder beibehalten" +msgid "Actions For Unsaved Changes" +msgstr "Aktivitäten für nicht gespeicherte Änderungen" -msgid "Old Value" -msgstr "Alter Wert" +msgid "Preset Value" +msgstr "voreingestellter Wert" -msgid "New Value" -msgstr "Neuer Wert" +msgid "Modified Value" +msgstr "geänderter Wert" -msgid "Transfer" -msgstr "Übertragen" +msgid "Transfer Modified Value" +msgstr "geänderten Wert übertragen" msgid "Don't save" msgstr "Nicht speichern" -msgid "Discard" -msgstr "Verwerfen" +msgid "Use Preset Value" +msgstr "voreingestellten Wert verwenden" + +msgid "Save Modified Value" +msgstr "geänderten Wert speichern" msgid "Click the right mouse button to display the full text." msgstr "" @@ -7701,23 +7935,46 @@ msgstr "" "die folgenden nicht gespeicherten Änderungen:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "" -"Sie haben einige Einstellungen des Profils \"%1%\" geändert.\n" -"Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem Wechsel " -"der Profile beibehalten?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "Sie haben einige Einstellungen des Profils \"%1%\" geändert. " msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"\n" +"Would you like to save these changed settings(modified value)?" msgstr "" -"Sie haben einige Profileinstellungen geändert.\n" -"Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem Wechseln " -"der Profile beibehalten?" +"\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 "Extruders count" msgstr "Anzahl der Extruder" @@ -7734,6 +7991,9 @@ msgstr "Alle Profile anzeigen (auch inkompatible)" msgid "Select presets to compare" msgstr "Wähle Voreinstellungen zum Vergleich aus" +msgid "Transfer" +msgstr "Übertragen" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7753,7 +8013,7 @@ 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 " @@ -7856,7 +8116,10 @@ msgstr "" "Ramming bezeichnet die schnelle Extrusion kurz vor einem Werkzeugwechsel bei " "einem Single-Extruder-MM-Drucker. Sein Zweck ist es, das Ende des entladenen " "Filaments so zu formen, dass es das Einsetzen des neuen Filaments nicht " -"verhindert und selbst später wieder eingeführt werden kann. Diese " +"verhindert und selbst später wieder eingeführt werden kann.\n" +"\n" +"Dies ist eine Einstellung für Experten, eine falsche Einstellung führt " +"wahrscheinlich zu Verstopfungen, schleifendem Extruderrad, usw." msgid "Total ramming time" msgstr "Summe der Ramming-Zeit" @@ -7920,10 +8183,10 @@ msgid "To" msgstr "Zu" msgid "Bambu Network plug-in not detected." -msgstr "Bambu Network-Plug-in nicht erkannt." +msgstr "Bambu Network Plugin nicht erkannt." msgid "Click here to download it." -msgstr "Klicken Sie hier, um es herunterzuladen." +msgstr "Hier klicken um es herunterzuladen." msgid "Login" msgstr "Anmelden" @@ -8102,7 +8365,7 @@ msgid "Gizmo cut" msgstr "Trennen" msgid "Gizmo Place face on bed" -msgstr "Fläche auf Druckbett platzieren " +msgstr "Fläche auf Druckbett platzieren" msgid "Gizmo SLA support points" msgstr "SLA Stützpunkte" @@ -8223,6 +8486,9 @@ msgstr "Überspringe diese Version" msgid "Done" msgstr "Erledigt" +msgid "resume" +msgstr "Fortsetzen" + msgid "Confirm and Update Nozzle" msgstr "Bestätigen und Düse aktualisieren" @@ -8355,7 +8621,7 @@ msgid "Repair failed." msgstr "Reparatur fehlgeschlagen." msgid "Loading repaired objects" -msgstr "Laden reparierter Objekte" +msgstr "Reparierte Objekte laden" msgid "Exporting 3mf file failed" msgstr "Exportieren der 3mf-Datei fehlgeschlagen" @@ -9149,6 +9415,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." @@ -10070,6 +10345,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" @@ -10477,7 +10758,7 @@ msgid "Filament price. For statistics only" msgstr "Filamentpreis. Nur für statistische Zwecke." msgid "money/kg" -msgstr "€/kg" +msgstr "Kosten/kg" msgid "Vendor" msgstr "Hersteller" @@ -10837,6 +11118,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" @@ -10981,7 +11275,7 @@ msgid "The printer cost per hour" msgstr "Die Druckkosten pro Stunde" msgid "money/h" -msgstr "€/h" +msgstr "Kosten/h" msgid "Support control chamber temperature" msgstr "Druckkammer-Temperatursteuerung" @@ -11768,6 +12062,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" @@ -11969,7 +12287,7 @@ msgid "" "Apply scarf joints only to smooth perimeters where traditional seams do not " "conceal the seams at sharp corners effectively." msgstr "" -"Wenden Sie Schaltnähte nur auf glatte Umfänge an, bei denen traditionelle " +"Wenden Sie Schrägnähte nur auf glatte Umfänge an, bei denen traditionelle " "Nahtstellen die Nähte an scharfen Ecken nicht effektiv verbergen." msgid "Conditional angle threshold" @@ -11989,7 +12307,7 @@ msgstr "" "Schrägnaht verwendet. Der Standardwert beträgt 155°." msgid "Conditional overhang threshold" -msgstr "" +msgstr "Bedingte Überstandsschwelle" #, no-c-format, no-boost-format msgid "" @@ -11999,6 +12317,11 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"Diese Option bestimmt den Überhangsschwellenwert für die Anwendung von " +"Schrägnahtnähten. Wenn der nicht unterstützte Teil des Umfangs kleiner als " +"dieser Schwellenwert ist, werden Schrägnahtnähte angewendet. Der " +"Standardwert für die Schwelle beträgt 40% der Breite der äußeren Wand. Auf " +"Grund von Leistungserwägungen wird der Grad des Überhangs geschätzt." msgid "Scarf joint speed" msgstr "Schrägnaht Geschwindigkeit" @@ -12013,8 +12336,8 @@ msgid "" "percentage (e.g., 80%), the speed is calculated based on the respective " "outer or inner wall speed. The default value is set to 100%." msgstr "" -"Diese Option legt die Druckgeschwindigkeit für Schaltnähte fest. Es wird " -"empfohlen, Schaltnähte mit einer langsamen Geschwindigkeit (weniger als 100 " +"Diese Option legt die Druckgeschwindigkeit für Schrägnähte fest. Es wird " +"empfohlen, Schrägnähte mit einer langsamen Geschwindigkeit (weniger als 100 " "mm/s) zu drucken. Es ist auch ratsam, die 'Glättung der Extrusionsrate' zu " "aktivieren, wenn die eingestellte Geschwindigkeit erheblich von der " "Geschwindigkeit der äußeren oder inneren Wände abweicht. Wenn die hier " @@ -12029,10 +12352,10 @@ msgid "Scarf joint flow ratio" msgstr "Schrägnaht Flussverhältnis" msgid "This factor affects the amount of material for scarf joints." -msgstr "Dieser Faktor beeinflusst die Menge an Material für Schaltnähte." +msgstr "Dieser Faktor beeinflusst die Menge an Material für Schrägnähte." msgid "Scarf start height" -msgstr "Start Höhe des Schalnaht" +msgstr "Starthöhe der Schrägnaht" msgid "" "Start height of the scarf.\n" @@ -12192,9 +12515,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 " @@ -12699,7 +13019,7 @@ msgid "Distance from tree branch to the outermost brim line" msgstr "Abstand vom Modell zur äußersten Randlinie" msgid "Tip Diameter" -msgstr "Tippdurchmesser" +msgstr "Durchmesser der Spitze" #. TRN PrintSettings: "Organic supports" > "Tip Diameter" msgid "Branch tip diameter for organic supports." @@ -12713,7 +13033,7 @@ msgstr "Diese Einstellung bestimmt den Anfangsdurchmesser der Stützknoten." #. TRN PrintSettings: #lmFIXME msgid "Branch Diameter Angle" -msgstr "Ast-Durchmesserwinkel" +msgstr "Ast-Verjüngungs-Winkel" #. TRN PrintSettings: "Organic supports" > "Branch Diameter Angle" msgid "" @@ -12728,7 +13048,7 @@ msgstr "" "organischen Stütze erhöhen." msgid "Branch Diameter with double walls" -msgstr "Ast-Durchmesser mit doppelten Wänden" +msgstr "Doppelte Wände für Ast-Durchmesser ab" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" @@ -13420,7 +13740,7 @@ msgstr "Volumen pro Extruder" msgid "Total filament volume extruded per extruder during the entire print." msgstr "" "Gesamtes Filamentvolumen, das pro Extruder während des gesamten Drucks " -"extrudiert wurde." +"extrudiert wird." msgid "Total toolchanges" msgstr "Gesamte Anzahl der Werkzeugwechsel" @@ -13798,14 +14118,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" @@ -14067,6 +14379,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?" @@ -14170,9 +14490,6 @@ msgstr "Druckparameter" msgid "- ℃" msgstr "- ℃" -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Druckbetttyp" @@ -14234,11 +14551,14 @@ msgid "From Volumetric Speed" msgstr "Vom volumetrischen Speed" msgid "To Volumetric Speed" -msgstr "zum volumetrischen Speed" +msgstr "zur volumetrischen Geschwindigkeit" msgid "Flow Dynamics Calibration Result" msgstr "Flussdynamik-Kalibrierungsergebnis" +msgid "New" +msgstr "Neu" + msgid "No History Result" msgstr "Kein historisches Ergebnis" @@ -14254,6 +14574,25 @@ msgstr "Aktivität" msgid "Edit Flow Dynamics Calibration" msgstr "Ändern der Flussdynamik-Kalibrierung" +msgid "New Flow Dynamics Calibration" +msgstr "Neue Flussdynamik-Kalibrierung" + +msgid "Ok" +msgstr "Ok" + +msgid "The filament must be selected." +msgstr "Das Filament muss ausgewählt werden." + +#, 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?" + msgid "Network lookup" msgstr "Netzwerk durchsuchen" @@ -14654,6 +14993,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 " @@ -14879,7 +15228,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 " @@ -14888,6 +15237,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" @@ -14996,6 +15361,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" @@ -15075,6 +15445,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" @@ -15718,6 +16100,162 @@ msgstr "" "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "Wahrscheinlichkeit von Verwerfungen verringert werden kann." +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Änderungen verwerfen oder beibehalten" + +#~ msgid "Old Value" +#~ msgstr "Alter Wert" + +#~ msgid "New Value" +#~ msgstr "Neuer Wert" + +#~ msgid "Discard" +#~ msgstr "Verwerfen" + +#, 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." diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 739058202..74ea86eee 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-04-15 22:59+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" @@ -1923,9 +1926,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 +2255,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." @@ -2886,36 +2883,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 "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -2965,6 +2941,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS Settings" @@ -2979,11 +2961,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 " @@ -3108,6 +3088,12 @@ 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 when export G-code." msgstr "Unknown error with G-code export" @@ -3121,13 +3107,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 +3184,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 +3279,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 +3338,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" @@ -3641,6 +3633,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 +3717,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 +3825,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 +3924,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 +4072,9 @@ msgstr "Auto-record Monitoring" msgid "Go Live" msgstr "Go Live" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolution" @@ -4574,40 +4582,49 @@ msgstr "" msgid "Synchronization" msgstr "Synchronization" -msgid "Initialize failed (No Device)!" -msgstr "Initialization failed (No Device)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialization failed (No Camera Device)!" - -msgid "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 supported on the current printer version)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialization failed (Not accessible in LAN-only mode)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialization failed (Missing LAN IP of printer)!" +msgid "The player is not loaded, please click \"play\" button to retry." +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 camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 +4655,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 +4715,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 +4731,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 +4778,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 +4793,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 +4815,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 studio/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 +4929,9 @@ msgstr "" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Print Options" @@ -5101,6 +5155,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5371,19 @@ msgstr "" msgid "Filament Tangle Detect" 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 +5582,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 " @@ -5808,10 +5902,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 " @@ -5985,6 +6093,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 +6121,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 +6145,21 @@ 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 "Network" msgstr "" @@ -6241,6 +6382,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 +6403,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 +6593,6 @@ msgstr "" msgid "Send print job to" msgstr "Send print job to" -msgid "Refresh" -msgstr "Refresh" - msgid "Bed Leveling" msgstr "Bed leveling" @@ -6532,7 +6688,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,12 +6750,18 @@ 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 "" @@ -6604,12 +6769,6 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" @@ -6640,6 +6799,9 @@ 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." @@ -6868,6 +7030,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" @@ -7273,23 +7449,26 @@ msgstr "Undefined" msgid "Unsaved Changes" msgstr "unsaved changes" -msgid "Transfer or discard changes" -msgstr "Transfer or discard changes" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Old value" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "New Value" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Transfer" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Don't save" -msgid "Discard" -msgstr "Discard" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Click the right mouse button to display the full text." @@ -7346,23 +7525,34 @@ msgstr "" "contains the following unsaved changes:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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" @@ -7379,6 +7569,9 @@ msgstr "Show all presets (including incompatible)" msgid "Select presets to compare" msgstr "Select presets to compare" +msgid "Transfer" +msgstr "Transfer" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7393,7 +7586,7 @@ msgid "Transfer values from left to right" msgstr "" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" @@ -7848,6 +8041,9 @@ msgstr "" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8689,6 +8885,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 +9638,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 "" @@ -10073,6 +10284,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 +11088,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 +11450,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 " @@ -12627,12 +12862,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" @@ -12812,6 +13041,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?" @@ -12905,9 +13140,6 @@ msgstr "" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -12969,6 +13201,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -12984,6 +13219,22 @@ msgstr "" msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "" @@ -13348,6 +13599,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 +13797,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 +13898,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 +13971,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 "" @@ -14253,6 +14532,132 @@ msgid "" "probability of warping." msgstr "" +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Transfer or discard changes" + +#~ msgid "Old Value" +#~ msgstr "Old value" + +#~ msgid "New Value" +#~ msgstr "New Value" + +#~ msgid "Discard" +#~ msgstr "Discard" + +#, 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 4bc39e0b5..b86ff8bac 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-04-15 22:59+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" @@ -2000,9 +2003,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 +2342,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" @@ -2989,38 +2986,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 "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3080,6 +3054,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 +3074,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 " @@ -3223,6 +3201,12 @@ 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 when export G-code." msgstr "Error desconocido al exportar el G-Code." @@ -3236,13 +3220,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 +3301,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 +3402,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 +3472,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" @@ -3800,6 +3790,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 +3874,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 +3982,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 +4081,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 +4231,9 @@ msgstr "Monitorización de Auto-Grabado" msgid "Go Live" msgstr "Ir A En Vivo" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolución" @@ -4746,42 +4752,51 @@ msgstr "" msgid "Synchronization" msgstr "Sincronización" -msgid "Initialize failed (No Device)!" -msgstr "¡Inicialización fallida (No hay dispositivo)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "¡Inicialización fallida (No hay Cámara)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"La impresora está ocupada descargando. Por favor, espere a que finalice." +"El dispositivo no puede gestionar más conversaciones. Intentalo más tarde.El " +"aparato no puede manejar más conversaciones. Vuelva a intentarlo más tarde." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Fallo inicializando (No soportado en la actual versión de la impresora)!" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicialización fallida (No accesible en el modo solo Red Local)" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicialización fallida (Perdida la IP de red de la impresora)" +msgid "Please confirm if the printer is connected." +msgstr "" + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" + +msgid "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 +4827,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 +4887,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 +4903,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 +4950,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 +4967,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 +4989,18 @@ msgstr "Descarga finalizada" msgid "Downloading %d%%..." msgstr "Descargando %d%%..." -msgid "Connection lost. Please retry." -msgstr "Conexión perdida. Por favor, reinténtelo." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"El dispositivo no puede gestionar más conversaciones. Intentalo más tarde.El " -"aparato no puede manejar más conversaciones. Vuelva a intentarlo más tarde." -msgid "File not exists." -msgstr "El archivo no existe." +msgid "" +"Over 4 studio/handy are using remote access, you can close some and try " +"again." +msgstr "" + +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Checksum de archivo erróneo. Por favor, reinténtelo." @@ -5060,6 +5107,9 @@ msgstr "Cambiar vista de cámara" msgid "Control" msgstr "Control" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Opciones de Impresora" @@ -5303,6 +5353,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5569,19 @@ msgstr "Permitir Sonido de Aviso" msgid "Filament Tangle Detect" msgstr "Detección de Enredos de Filamentos" +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 +5790,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 " @@ -6039,10 +6129,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 " @@ -6228,6 +6332,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 +6362,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 +6386,21 @@ 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 "Network" msgstr "Red" @@ -6488,6 +6625,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 +6646,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 +6839,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 +6939,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 +7007,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 +7027,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." @@ -6909,6 +7061,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 " @@ -7154,11 +7310,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" @@ -7582,23 +7752,26 @@ msgstr "No definido" msgid "Unsaved Changes" msgstr "Cambios No guardados" -msgid "Transfer or discard changes" -msgstr "Descartar o mantener los cambios" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Valor Antiguo" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Nuevo Valor" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Transferir" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "No guardar" -msgid "Discard" -msgstr "Descartar" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Pulse el botón derecho del ratón para mostrar el texto completo." @@ -7656,23 +7829,34 @@ msgstr "" "los siguientes cambios no guardados:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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" @@ -7689,6 +7873,9 @@ msgstr "Mostrar todos los perfiles (incluyendo los compatibles)" msgid "Select presets to compare" msgstr "Seleccionar perfiles para comparar" +msgid "Transfer" +msgstr "Transferir" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7707,7 +7894,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 +8365,9 @@ msgstr "Saltar esta Versión" msgid "Done" msgstr "Hecho" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmar y Actualizar la Boquilla" @@ -9099,6 +9289,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 +10229,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" @@ -10710,10 +10915,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 +10999,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 +11951,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 +12174,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 +12398,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 +13413,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" @@ -13752,12 +13991,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" @@ -13882,12 +14115,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 +14256,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?" @@ -14126,9 +14365,6 @@ msgstr "Parámetros de Impresión" msgid "- ℃" msgstr "- ℃" -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Plate Type" @@ -14198,6 +14434,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" @@ -14214,6 +14453,22 @@ msgstr "Acción" msgid "Edit Flow Dynamics Calibration" msgstr "Editar Calibración de Dinámicas de Flujo" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "Búsqueda de red" @@ -14612,6 +14867,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 +14887,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 +15099,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 +15222,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 +15301,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" @@ -15670,6 +15950,160 @@ msgstr "" "aumentar adecuadamente la temperatura del lecho térmico puede reducir la " "probabilidad de deformaciones." +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Descartar o mantener los cambios" + +#~ msgid "Old Value" +#~ msgstr "Valor Antiguo" + +#~ msgid "New Value" +#~ msgstr "Nuevo Valor" + +#~ msgid "Discard" +#~ msgstr "Descartar" + +#, 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 +16220,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 +17059,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 8d9de157d..b10c55e18 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-04-15 22:59+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" @@ -1994,7 +1997,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 +2011,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 +2350,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" @@ -3000,39 +2997,20 @@ msgstr "Désactiver l'AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Impression avec du filament de la bobine externe" -msgid "Cabin humidity" -msgstr "Humidité dans l'AMS" +msgid "Current Cabin humidity" +msgstr "Humidité dans le caisson" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Le vert signifie que l'humidité de l'AMS est normale, l'orange signifie que " -"l'humidité est élevée et le rouge signifie que l'humidité est trop élevée. " -"(Hygromètre : plus c'est bas, mieux c'est.)" - -msgid "Desiccant status" -msgstr "État du déshydratant" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Un état du dessicateur inférieur à deux barres indique que le dessicateur " -"est peut-être inactif. Veuillez changer le déshydratant. (Plus c'est élevé, " -"mieux c'est.)" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"Remarque: Lorsque le couvercle est ouvert ou que le sachet de dessicateur " -"est changé, cela peut prendre plusieurs heures ou une nuit pour absorber " -"l'humidité. Les basses températures ralentissent également le processus. " -"Pendant ce temps, l'indicateur pourrait ne pas représenter l'humidité dans " -"l'AMS avec précision." +"Veuillez changer le déshydratant lorsqu’il est trop humide. L’indicateur " +"peut ne pas s’afficher correctement dans les cas suivants : lorsque le " +"couvercle est ouvert ou que le sachet de déshydratant est changé. Il faut " +"des heures pour absorber l’humidité, les basses températures ralentissent " +"également le processus." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3094,6 +3072,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 +3093,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 " @@ -3239,6 +3224,12 @@ 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 when export G-code." msgstr "Erreur inconnue lors de l'exportation du G-code." @@ -3251,13 +3242,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 +3325,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 +3415,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 +3491,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" @@ -3810,6 +3811,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 +3893,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 +4001,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 +4100,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 +4250,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" @@ -4758,45 +4776,63 @@ msgstr "" msgid "Synchronization" msgstr "Synchronisation" -msgid "Initialize failed (No Device)!" -msgstr "Échec de l'initialisation (pas de périphérique) !" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"L'initialisation a échoué (la connexion de l'appareil n'est pas prête) !" +"L'appareil ne peut pas gérer plus de conversations. Veuillez réessayer plus " +"tard." -msgid "Initialize failed (No Camera Device)!" -msgstr "L'initialisation a échoué (Pas de caméra)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"L'imprimante est occupée à télécharger, veuillez attendre la fin du " -"téléchargement." +"Le lecteur ne fonctionne pas correctement. Veuillez réinstaller le lecteur " +"système." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" -"Échec de l'initialisation (non pris en charge par l'imprimante actuelle) !" +"Le lecteur n’est pas chargé, veuillez cliquer sur le bouton « play » pour " +"réessayer." -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "L'initialisation a échoué (Non accessible en mode LAN uniquement) !" +msgid "Please confirm if the printer is connected." +msgstr "Veuillez vérifier que l’imprimante est bien connectée." -msgid "Initialize failed (Missing LAN ip of printer)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." msgstr "" -"Échec de l'initialisation (adresse IP réseau manquante de l'imprimante) !" +"L’imprimante est actuellement occupée à télécharger. Veuillez réessayer une " +"fois le téléchargement terminé." + +msgid "Printer camera is malfunctioning." +msgstr "La caméra de l’imprimante ne fonctionne pas correctement." + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" +"Un problème s’est produit. Veuillez mettre à jour le micrologiciel de " +"l’imprimante et réessayer." + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"La fonction vue en direct sur réseau local est désactivée. Veuillez activer " +"l’affichage en direct sur l’écran de l’imprimante." + +msgid "Please enter the IP of printer to connect." +msgstr "Veuillez saisir l’IP de l’imprimante à connecter." msgid "Initializing..." msgstr "Initialisation…" -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "L'initialisation a échoué (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "Échec de la connexion. Veuillez vérifier le réseau et réessayer" -msgid "Network unreachable" -msgstr "Réseau inaccessible" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Veuillez vérifier le réseau et réessayer, Vous pouvez redémarrer ou mettre à " +"jour l’imprimante si le problème persiste." -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Arrêté [%d] !" +msgid "The printer has been logged out and cannot connect." +msgstr "L’imprimante a été déconnectée et ne peut pas se connecter." msgid "Stopped." msgstr "Arrêté." @@ -4829,16 +4865,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 +4925,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 +4941,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 +5001,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 +5018,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 +5042,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 "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"L'appareil ne peut pas gérer plus de conversations. Veuillez réessayer plus " -"tard." +"Reconnexion de l’imprimante, l’opération ne peut être effectuée maintenant, " +"veuillez réessayer plus tard." -msgid "File not exists." -msgstr "Le fichier n'existe pas." +msgid "" +"Over 4 studio/handy are using remote access, you can close some and try " +"again." +msgstr "" +"Plus de 4 orca/handy utilisent l’accès à distance, vous pouvez en fermer " +"certains et réessayer." + +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 +5162,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" @@ -5321,6 +5406,42 @@ 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 Bambu " +"Studio version." +msgstr "" +"La version du fichier 3mf est en Beta et est plus récente que la version " +"actuelle d’OrcaSlicer." + +msgid "If you would like to try Bambu Studio 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 Bambu Studio version." +msgstr "" +"La version du fichier 3mf est plus récente que la version actuelle " +"d’OrcaSlicer" + +msgid "" +"Update your Bambu Studio 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 +5627,19 @@ msgstr "Autoriser le son d’invite" msgid "Filament Tangle Detect" msgstr "Détection de filament coincé" +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 +5850,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 " @@ -6062,10 +6193,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 " @@ -6254,6 +6402,23 @@ msgstr "Page par défaut" msgid "Set the page opened on startup." msgstr "Définit la page ouverte au démarrage." +msgid "Touchpad" +msgstr "Pavé tactile" + +msgid "Camera style" +msgstr "Style de caméra" + +msgid "" +"Select camera navigation style.\n" +"Default: LMB+move for rotation, RMB/MMB+move for panning.\n" +"Touchpad: Alt+move for rotation, Shift+move for panning." +msgstr "" +"Sélectionner le style de navigation de l’appareil photo.\n" +"Par défaut : LMB+mouvement pour la rotation, RMB/MMB+mouvement pour le " +"panoramique.\n" +"Pavé tactile : Alt+mouvement pour la rotation, Shift+mouvement pour le " +"panoramique." + msgid "Zoom to mouse position" msgstr "Zoom sur la position de la souris" @@ -6272,6 +6437,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 +6466,25 @@ 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 "Network" msgstr "Réseau" @@ -6518,6 +6710,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 +6731,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 +6927,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 +7031,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 +7102,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 "" @@ -6950,6 +7165,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 " @@ -7205,6 +7425,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" @@ -7640,23 +7885,26 @@ msgstr "Undef" msgid "Unsaved Changes" msgstr "Modifications non enregistrées" -msgid "Transfer or discard changes" -msgstr "Ignorer ou conserver les modifications" +msgid "Actions For Unsaved Changes" +msgstr "Actions pour les changements non enregistrés" -msgid "Old Value" -msgstr "Ancienne valeur" +msgid "Preset Value" +msgstr "Valeur prédéfinie" -msgid "New Value" -msgstr "Nouvelle Valeur" +msgid "Modified Value" +msgstr "Valeur modifiée" -msgid "Transfer" -msgstr "Transférer" +msgid "Transfer Modified Value" +msgstr "Transfert de la valeur modifiée" msgid "Don't save" msgstr "Ne pas enregistrer" -msgid "Discard" -msgstr "Ignorer" +msgid "Use Preset Value" +msgstr "Utiliser la valeur prédéfinie" + +msgid "Save Modified Value" +msgstr "Enregistrer la valeur modifiée" msgid "Click the right mouse button to display the full text." msgstr "" @@ -7715,23 +7963,46 @@ 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" +"Would you like to save these changed settings(modified value)?" 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 " +"\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 changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +"You have previously modified your settings and are about to overwrite them " +"with new ones." 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 ?" +"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 "Extruders count" msgstr "Nombre d'extrudeurs" @@ -7748,6 +8019,9 @@ msgstr "Afficher tous les préréglages (y compris incompatibles)" msgid "Select presets to compare" msgstr "Sélectionnez les préréglages à comparer" +msgid "Transfer" +msgstr "Transférer" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7768,7 +8042,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 +8524,9 @@ msgstr "Sauter cette version" msgid "Done" msgstr "Terminé" +msgid "resume" +msgstr "reprendre" + msgid "Confirm and Update Nozzle" msgstr "Confirmation et mise à jour de la buse" @@ -8940,11 +9217,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 +9229,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 +9462,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 +10172,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 +10413,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" @@ -10896,6 +11188,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 +12157,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 +12320,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 +12402,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 +12412,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 +12609,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 " @@ -13889,13 +14221,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" @@ -14175,6 +14500,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?" @@ -14278,9 +14610,6 @@ msgstr "Paramètres d’impression" msgid "- ℃" msgstr "- ℃" -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Type de plaque" @@ -14348,6 +14677,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" @@ -14363,6 +14695,25 @@ msgstr "Action" msgid "Edit Flow Dynamics Calibration" msgstr "Editer la calibration dynamique du débit" +msgid "New Flow Dynamics Calibration" +msgstr "Nouvelle calibration de la dynamique du flux" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +msgstr "Le filament doit être sélectionné." + +#, 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 ?" + msgid "Network lookup" msgstr "Recherche de réseau" @@ -14767,6 +15118,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 +15354,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 +15491,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 +15575,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" @@ -15397,45 +15790,53 @@ msgstr "" "Erreur : « %2% »" msgid "Connected to Obico successfully!" -msgstr "" +msgstr "Connexion à Obico réussie !" msgid "Could not connect to Obico" -msgstr "" +msgstr "Impossible de se connecter à Obico" msgid "Connected to SimplyPrint successfully!" -msgstr "" +msgstr "Connexion à SimplyPrint réussie !" msgid "Could not connect to SimplyPrint" -msgstr "" +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 +16234,162 @@ 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 "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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Ignorer ou conserver les modifications" + +#~ msgid "Old Value" +#~ msgstr "Ancienne valeur" + +#~ msgid "New Value" +#~ msgstr "Nouvelle Valeur" + +#~ msgid "Discard" +#~ msgstr "Ignorer" + +#, 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 8e5230740..360f03d0a 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-04-15 22:59+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" @@ -1927,9 +1930,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 +2268,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." @@ -2908,37 +2905,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 "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -2989,6 +2964,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS beállítások" @@ -3003,11 +2984,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 " @@ -3131,6 +3110,12 @@ 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 when export G-code." msgstr "Ismeretlen hiba a G-kód exportálásakor." @@ -3144,13 +3129,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 +3205,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 +3300,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 +3360,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" @@ -3665,6 +3656,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 +3740,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 +3848,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 +3947,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 +4095,9 @@ msgstr "Automatikus felügyelet" msgid "Go Live" msgstr "Streamelés indítása" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Felbontás" @@ -4598,42 +4605,49 @@ msgstr "" msgid "Synchronization" msgstr "Szinkronizálás" -msgid "Initialize failed (No Device)!" -msgstr "Sikertelen inicializálás (Nincs eszköz)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Sikertelen inicializálás (nem található kamera)!" - -msgid "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 supported on the current printer version)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Sikertelen inicializálás (nem elérhető LAN-módban)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Az inicializálás sikertelen (hiányzó nyomtató LAN IP-cím)!" +msgid "The player is not loaded, please click \"play\" button to retry." +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 camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 +4678,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 +4738,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 +4754,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 +4801,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 +4816,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 +4838,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 studio/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 +4952,9 @@ msgstr "" msgid "Control" msgstr "Vezérlés" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Nyomtatási lehetőségek" @@ -5127,6 +5178,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5395,19 @@ msgstr "" msgid "Filament Tangle Detect" 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 +5606,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 " @@ -5837,10 +5928,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 " @@ -6016,6 +6121,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 +6149,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 +6173,21 @@ 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 "Network" msgstr "" @@ -6274,6 +6412,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 +6433,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 +6622,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 +6721,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,12 +6785,18 @@ 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 "" @@ -6642,12 +6804,6 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" @@ -6680,6 +6836,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." @@ -6910,6 +7069,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" @@ -7322,23 +7495,26 @@ msgstr "Nincs meghatározva" msgid "Unsaved Changes" msgstr "mentetlen változások" -msgid "Transfer or discard changes" -msgstr "Változások elvetése vagy megtartása" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Régi érték" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Új érték" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Átvitel" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Ne mentsd" -msgid "Discard" -msgstr "Elvetés" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Kattints a jobb egérgombbal a teljes szöveg megjelenítéséhez." @@ -7396,22 +7572,34 @@ msgstr "" "következő elmentetlen változásokat tartalmazza:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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" @@ -7428,6 +7616,9 @@ msgstr "Minden beállítás megjelenítése (beleértve az inkompatibiliseket is msgid "Select presets to compare" msgstr "Select presets to compare" +msgid "Transfer" +msgstr "Átvitel" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7442,7 +7633,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 "" @@ -7900,6 +8091,9 @@ msgstr "" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8757,6 +8951,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 +9705,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 "" @@ -10144,6 +10353,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 +11165,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 +11532,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 " @@ -12720,12 +12953,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" @@ -12905,6 +13132,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?" @@ -12998,9 +13231,6 @@ msgstr "" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -13062,6 +13292,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13077,6 +13310,22 @@ msgstr "" msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "" @@ -13441,6 +13690,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 +13888,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 +13989,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 +14062,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 "" @@ -14345,6 +14622,133 @@ msgid "" "probability of warping." msgstr "" +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Változások elvetése vagy megtartása" + +#~ msgid "Old Value" +#~ msgstr "Régi érték" + +#~ msgid "New Value" +#~ msgstr "Új érték" + +#~ msgid "Discard" +#~ msgstr "Elveté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 "" +#~ "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 7227cb2d0..f5a92b331 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-04-15 22:59+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" @@ -1992,9 +1995,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 +2337,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" @@ -2987,38 +2984,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 "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3077,6 +3051,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 +3072,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 " @@ -3222,6 +3200,12 @@ 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 when export G-code." msgstr "Errore sconosciuto nell'esportazione del G-code." @@ -3235,13 +3219,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 +3299,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 +3400,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 +3467,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" @@ -3788,6 +3778,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 +3862,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 +3970,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 +4069,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 +4219,9 @@ msgstr "Monitora registrazione automatica" msgid "Go Live" msgstr "Vai in diretta" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Risoluzione" @@ -4732,44 +4738,51 @@ msgstr "" msgid "Synchronization" msgstr "Sincronizzazione" -msgid "Initialize failed (No Device)!" -msgstr "Inizializzazione fallita (nessun dispositivo)!" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Inizializzazione fallita (la connessione del dispositivo non è pronta)!" +"Il dispositivo non è in grado di gestire più conversazioni. Riprova più " +"tardi." -msgid "Initialize failed (No Camera Device)!" -msgstr "Inizializzazione fallita (Nessun dispositivo fotocamera)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Stampante in fase di caricamento; attendi il completamento del caricamento." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The player is not loaded, please click \"play\" button to retry." 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 "Please confirm if the printer is connected." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inizializzazione fallita (indirizzo IP LAN della stampante mancante)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" + +msgid "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 +4813,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 +4873,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 +4889,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 +4939,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 +4956,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 +4978,18 @@ msgstr "Download completato" msgid "Downloading %d%%..." msgstr "Scaricamento %d%%..." -msgid "Connection lost. Please retry." -msgstr "Connessione persa. Si prega di riprovare." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Il dispositivo non è in grado di gestire più conversazioni. Riprova più " -"tardi." -msgid "File not exists." -msgstr "Il file non esiste." +msgid "" +"Over 4 studio/handy are using remote access, you can close some and try " +"again." +msgstr "" + +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Errore di checksum del file. Si prega di riprovare." @@ -5051,6 +5097,9 @@ msgstr "Cambia inquadratura" msgid "Control" msgstr "Controllo" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Opzioni stampa" @@ -5291,6 +5340,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5556,19 @@ msgstr "Consenti suono di richiesta" msgid "Filament Tangle Detect" msgstr "Rilevamento del groviglio del filamento" +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 +5779,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 " @@ -6028,10 +6117,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 " @@ -6214,6 +6317,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 +6346,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 +6371,21 @@ 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 "Network" msgstr "Rete" @@ -6476,6 +6612,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 +6633,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 +6825,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 +6923,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 +6991,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 "" @@ -6894,6 +7045,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 " @@ -7139,6 +7294,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" @@ -7564,23 +7733,26 @@ msgstr "Indefinito" msgid "Unsaved Changes" msgstr "Modifiche non salvate" -msgid "Transfer or discard changes" -msgstr "Scarta o mantieni le modifiche" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Valore precedente" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Nuovo valore" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Trasferisci" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Non salvare" -msgid "Discard" -msgstr "Cancella" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "" @@ -7638,21 +7810,34 @@ msgstr "" "modifiche non salvate:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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" @@ -7669,6 +7854,9 @@ msgstr "Mostra tutti i preset (compresi non compatibili)" msgid "Select presets to compare" msgstr "Seleziona i preset da confrontare" +msgid "Transfer" +msgstr "Trasferisci" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7689,7 +7877,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 " @@ -8171,6 +8359,9 @@ msgstr "Salta questa versione" msgid "Done" msgstr "Fine" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Conferma e aggiorna l'ugello" @@ -9094,6 +9285,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 +10229,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" @@ -10798,6 +11004,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 +11962,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 +12404,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 " @@ -13781,12 +14011,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" @@ -14056,6 +14280,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?" @@ -14158,9 +14388,6 @@ msgstr "Parametri di stampa" msgid "- ℃" msgstr "- °C" -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Tipo di piatto" @@ -14230,6 +14457,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" @@ -14245,6 +14475,22 @@ msgstr "Azione" msgid "Edit Flow Dynamics Calibration" msgstr "Modifica calibrazione dinamica flusso (Edit Flow Dynamics)" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "Ricerca network" @@ -14637,6 +14883,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 +15119,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 +15244,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 +15325,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" @@ -15695,6 +15966,160 @@ msgstr "" "aumentare in modo appropriato la temperatura del piano riscaldato può " "ridurre la probabilità di deformazione." +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Scarta o mantieni le modifiche" + +#~ msgid "Old Value" +#~ msgstr "Valore precedente" + +#~ msgid "New Value" +#~ msgstr "Nuovo valore" + +#~ msgid "Discard" +#~ msgstr "Cancella" + +#, 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 175fc21b8..4887c7c3d 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-04-15 22:59+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 "ビルド容積に合わせる" @@ -1915,9 +1918,6 @@ msgstr "フィラメントを変更" msgid "Set Filament for selected items" msgstr "選択した項目のフィラメントを設定" -msgid "current" -msgstr "現在" - msgid "Unlock" msgstr "ロック解除" @@ -2240,9 +2240,6 @@ msgstr "現在の積層にカスタムG-codeを追加" msgid "Jump to Layer" msgstr "積層に移動" -msgid "Jump to layer" -msgstr "積層に移動" - msgid "Please enter the layer number" msgstr "層の番号をご入力ください" @@ -2863,33 +2860,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 +2917,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 設定" @@ -2952,9 +2937,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 " @@ -3066,6 +3051,12 @@ 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 when export G-code." msgstr "不明なエラー: G-codeエクスポート" @@ -3079,13 +3070,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 +3144,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 +3225,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 +3284,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 "自動ベッドレベリング" @@ -3582,6 +3579,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 +3662,12 @@ msgstr "表示" msgid "Flushed" msgstr "フラッシュ" -msgid "Total" -msgstr "合計" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "合計" + msgid "Total Estimation" msgstr "予測合計" @@ -3769,6 +3770,12 @@ msgstr "予測時間" msgid "Normal mode" msgstr "通常モード" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "準備時間" @@ -3862,6 +3869,9 @@ msgstr "レイアウト設定" msgid "Spacing" msgstr "間隔" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "自動回転" @@ -4004,6 +4014,9 @@ msgstr "自動録画モニタリング" msgid "Go Live" msgstr "公開" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "分解能" @@ -4507,40 +4520,49 @@ msgstr "" msgid "Synchronization" msgstr "同期" -msgid "Initialize failed (No Device)!" -msgstr "初期化失敗 (デバイス無し)" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "初期化失敗 (カメラ無し)" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "プリンターがダウンロード中、完了までお待ちください" - -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "初期化失敗 (ローカルモードではアクセスできません)" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "初期化失敗 (プリンターIP無効)" +msgid "The player is not loaded, please click \"play\" button to retry." +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 camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "初期化中..." -#, 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 +4590,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 +4650,12 @@ msgstr "選択" msgid "Batch manage files." msgstr "ファイルのバッチ処理" +msgid "Refresh" +msgstr "再読込" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "プリンタなし" @@ -4639,13 +4666,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 +4712,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 +4727,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 +4749,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 studio/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 +4863,9 @@ msgstr "" msgid "Control" msgstr "コントロール" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "造型オプション" @@ -5030,6 +5089,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5299,19 @@ msgstr "" msgid "Filament Tangle Detect" 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 +5507,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 " @@ -5722,10 +5821,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 " @@ -5902,6 +6015,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 +6043,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 +6067,21 @@ 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 "Network" msgstr "" @@ -6152,6 +6298,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 +6319,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 +6508,6 @@ msgstr "" msgid "Send print job to" msgstr "造形タスクを送信" -msgid "Refresh" -msgstr "再読込" - msgid "Bed Leveling" msgstr "ベッドレベリング" @@ -6428,7 +6589,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,12 +6650,18 @@ 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 "" @@ -6499,12 +6669,6 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" @@ -6535,6 +6699,9 @@ 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." @@ -6759,6 +6926,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" @@ -7153,23 +7334,26 @@ msgstr "未定義" msgid "Unsaved Changes" msgstr "未保存の変更" -msgid "Transfer or discard changes" -msgstr "変更を破棄または保持" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "古い値" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "新しい値" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "流用" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "保存しない" -msgid "Discard" -msgstr "破棄" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "マウスを右クリックして全文を表示します" @@ -7222,19 +7406,34 @@ 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?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" +msgstr "" msgid "Extruders count" msgstr "押出機台数" @@ -7251,6 +7450,9 @@ msgstr "全てのプリセットを表示" msgid "Select presets to compare" msgstr "Select presets to compare" +msgid "Transfer" +msgstr "流用" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7265,7 +7467,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 +7917,9 @@ msgstr "" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8520,6 +8725,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 +9457,12 @@ msgstr "" "押出機のクリアランス(半径):オブジェクト順で造形する時にこのパラメータでオ" "ブジェクトの間隔を計算します。" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -9861,6 +10081,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 +10863,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 +11218,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 " @@ -12346,12 +12590,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" @@ -12531,6 +12769,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?" @@ -12624,9 +12868,6 @@ msgstr "" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -12688,6 +12929,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -12703,6 +12947,22 @@ msgstr "" msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "" @@ -13067,6 +13327,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 +13525,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 +13626,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 +13698,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 "" @@ -13949,6 +14237,122 @@ msgid "" "probability of warping." 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 "湿度インジケータ (緑色: 正常 オレンジ\": やや高い 赤色: 高い)" + +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "変更を破棄または保持" + +#~ msgid "Old Value" +#~ msgstr "古い値" + +#~ msgid "New Value" +#~ msgstr "新しい値" + +#~ msgid "Discard" +#~ 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 "プリセットに変更がありあす。これらの変更を流用しますか?" + #~ 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 65475066f..ee865f398 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-04-15 22:59+0800\n" +"PO-Revision-Date: 2024-04-11 18:46+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 "출력 가능 영역에 맞게 확장" @@ -1963,9 +1966,6 @@ msgstr "필라멘트 변경" msgid "Set Filament for selected items" msgstr "선택한 항목의 필라멘트로 설정" -msgid "current" -msgstr "현재" - msgid "Unlock" msgstr "잠금 해제" @@ -2286,9 +2286,6 @@ msgstr "현재 레이어에 사용될 사용자 정의 G코드 입력:" msgid "Jump to Layer" msgstr "다음 레이어로 이동" -msgid "Jump to layer" -msgstr "다음 레이어로 이동" - msgid "Please enter the layer number" msgstr "레이어 번호를 입력하세요" @@ -2913,35 +2910,15 @@ msgstr "AMS 미사용" msgid "Print with the filament mounted on the back of chassis" msgstr "섀시 뒷면에 필라멘트를 장착한 상태에서 출력" -msgid "Cabin humidity" -msgstr "AMS 습도" +msgid "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"녹색은 AMS 습도가 정상임을 의미하고 주황색은 습도가 높음을 나타내고 빨간색은 " -"습도가 너무 높음을 나타냅니다.(습도계: 낮을수록 좋습니다.)" - -msgid "Desiccant status" -msgstr "건조제 상태" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"건조제 상태가 두 개의 막대보다 낮을 경우 건조제가 비활성 상태일 수 있음을 나" -"타냅니다. 건조제를 교체해 주세요.(막대: 높을수록 좋습니다.)" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"참고: 뚜껑이 열려 있거나 건조제 팩을 교체한 경우 수분을 흡수하는 데 몇 시간 " -"또는 하룻밤이 걸릴 수 있습니다. 온도가 낮으면 흡수 속도도 느려집니다. 이 시" -"간 동안 표시기가 챔버를 정확하게 나타내지 못할 수 있습니다." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2993,6 +2970,12 @@ msgstr "" "다. \n" "(현재 동일한 브랜드, 재질, 색상의 소모품 자동 공급 지원)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 설정" @@ -3007,11 +2990,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 " @@ -3132,6 +3113,12 @@ msgstr "떠있는 예약 피연산자" msgid "Stack overflow" msgstr "스택 오버플로" +msgid "Running post-processing scripts" +msgstr "사후 처리 스크립트 실행중" + +msgid "Successfully executed post-processing script" +msgstr "" + msgid "Unknown error when export G-code." msgstr "G코드를 내보낼 때 알 수 없는 오류가 발생했습니다." @@ -3145,13 +3132,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 +3204,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" @@ -3305,25 +3298,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 +3360,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 "자동 베드 레벨링" @@ -3673,6 +3668,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 "값이 범위를 벗어났습니다." @@ -3753,12 +3752,12 @@ msgstr "표시" msgid "Flushed" msgstr "버리기" -msgid "Total" -msgstr "합계" - msgid "Tower" msgstr "타워" +msgid "Total" +msgstr "합계" + msgid "Total Estimation" msgstr "추정치 합계" @@ -3861,6 +3860,12 @@ msgstr "추정 시간" msgid "Normal mode" msgstr "일반 모드" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "준비 시간" @@ -3954,6 +3959,9 @@ msgstr "정렬 옵션" msgid "Spacing" msgstr "간격" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "자동 회전 후 정렬" @@ -4099,6 +4107,9 @@ msgstr "모니터링 자동 기록" msgid "Go Live" msgstr "실시간" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "해상도" @@ -4606,40 +4617,49 @@ msgstr "" msgid "Synchronization" msgstr "동기화" -msgid "Initialize failed (No Device)!" -msgstr "초기화 실패 (장치 없음)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "장치에서 더 많은 대화를 처리할 수 없습니다. 나중에 다시 시도해 주세요." -msgid "Initialize failed (Device connection not ready)!" -msgstr "초기화 실패 (장치 연결 준비 안 됨)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "초기화 실패 (카메라 없음)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "프린터가 다운로드 중입니다. 다운로드가 완료될 때까지 기다리십시오." +msgid "Please confirm if the printer is connected." +msgstr "" -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "초기화 실패(현재 프린터 버전에서는 지원되지 않음)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "초기화 실패 (LAN 전용 모드에서는 액세스할 수 없음)!" +msgid "Printer camera is malfunctioning." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "초기화 실패 (프린터의 LAN IP 누락)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +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 "중지됨." @@ -4670,16 +4690,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 +4733,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 +4750,12 @@ msgstr "선택" msgid "Batch manage files." msgstr "파일을 일괄 관리합니다." +msgid "Refresh" +msgstr "새로 고침" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "프린터 없음." @@ -4741,13 +4766,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?" @@ -4768,11 +4812,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 " @@ -4785,6 +4829,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 "다운로드 대기 중..." @@ -4801,14 +4851,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 studio/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 "파일 체크섬 오류입니다. 다시 시도해 주세요." @@ -4914,6 +4968,9 @@ msgstr "카메라 보기 전환" msgid "Control" msgstr "제어" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "출력 옵션" @@ -5150,6 +5207,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 마우스가 분리됨." @@ -5333,6 +5420,19 @@ msgstr "프롬프트 소리 허용" msgid "Filament Tangle Detect" msgstr "필라멘트 엉킴 감지" +msgid "Nozzle Type" +msgstr "" + +msgid "Stainless Steel" +msgstr "스테인레스 스틸" + +msgid "Hardened Steel" +msgstr "경화강" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "전역" @@ -5538,9 +5638,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 " @@ -5866,9 +5963,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 "" -"모델 메쉬에 부울 연산을 수행할 수 없습니다. 오직 양수 부품만 내보내집니다." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6022,7 +6134,7 @@ msgid "Stealth Mode" msgstr "스텔스 모드" msgid "Enable network plugin" -msgstr "" +msgstr "네트워크 플러그인 사용" msgid "Check for stable updates only" msgstr "안정적인 업데이트만 확인" @@ -6045,6 +6157,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 "마우스 위치로 확대" @@ -6061,6 +6185,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,9 +6209,24 @@ msgstr "플러시 볼륨: 색상이 변경될 때마다 자동 계산됩니다." msgid "If enabled, auto-calculate everytime the color changed." msgstr "활성화하면 색상이 변경될 때마다 자동 계산됩니다." -msgid "Network" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "" +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Network" +msgstr "네트워크" + msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "사용자 사전 설정 자동 동기화(프린터/필라멘트/프로세스)" @@ -6297,6 +6442,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 "" + msgid "Plate name" msgstr "플레이트 이름" @@ -6306,8 +6463,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 +6652,6 @@ msgstr "뱀부 텍스처 PEI 플레이트" msgid "Send print job to" msgstr "출력 작업 보내기" -msgid "Refresh" -msgstr "새로 고침" - msgid "Bed Leveling" msgstr "베드 레벨링" @@ -6584,8 +6744,11 @@ 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 "" msgid "An SD card needs to be inserted to record timelapse." msgstr "타임랩스를 녹화하려면 SD 카드를 삽입해야 합니다." @@ -6644,26 +6807,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 "프린터에 연결 중입니다. 연결 진행 중에는 취소할 수 없습니다." @@ -6696,6 +6857,9 @@ 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 카드를 삽입해야 합니다." @@ -6925,6 +7089,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" @@ -7331,23 +7509,26 @@ msgstr "정의되지 않음" msgid "Unsaved Changes" msgstr "저장되지 않은 변경 사항" -msgid "Transfer or discard changes" -msgstr "변경 사항 폐기 또는 유지" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "이전 값" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "새로운 값" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "이전" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "저장하지 않음" -msgid "Discard" -msgstr "폐기" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "마우스 오른쪽 버튼을 클릭하여 전체 텍스트를 표시합니다." @@ -7404,21 +7585,34 @@ 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?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" msgstr "" -"일부 사전 설정을 변경했습니다.\n" -"사전 설정 전환 후 변경된 설정(새 값)을 유지하시겠습니까?" msgid "Extruders count" msgstr "압출기 수" @@ -7435,6 +7629,9 @@ msgstr "모든 사전 설정 표시(미 호환 포함)" msgid "Select presets to compare" msgstr "비교할 사전 설정 선택" +msgid "Transfer" +msgstr "이전" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7452,7 +7649,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 "" "이 대화 상자를 활성화하면 선택한 값을 왼쪽에서 오른쪽으로 사전 설정으로 변환" @@ -7917,6 +8114,9 @@ msgstr "이 버전 건너뛰기" msgid "Done" msgstr "완료" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "노즐 확인 및 업데이트" @@ -8510,6 +8710,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 +8798,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 +8982,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올리기 전에 모든 레이어 변경에 삽입됩니다" @@ -9633,6 +9848,12 @@ msgid "" "printing." msgstr "압출기 주변의 회피 반경. 개체별 출력에서 충돌 방지에 사용됩니다." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "배드 메쉬 최소" @@ -10341,6 +10562,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 "원호 맞춤" @@ -11227,6 +11457,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 올리기" @@ -11360,7 +11608,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 +11684,7 @@ msgstr "" "냄) 스카프 조인트 솔기가 사용됩니다. 기본값은 155°입니다." msgid "Conditional overhang threshold" -msgstr "" +msgstr "조건부 오버행 임계값" #, no-c-format, no-boost-format msgid "" @@ -11446,6 +11694,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 "스카프 조인트 속도" @@ -11620,9 +11872,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 " @@ -13119,12 +13368,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" @@ -13364,6 +13607,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?" @@ -13462,9 +13711,6 @@ msgstr "출력 매개변수" msgid "- ℃" msgstr "- ℃" -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "플레이트 타입" @@ -13529,6 +13775,9 @@ msgstr "체적 속도로" msgid "Flow Dynamics Calibration Result" msgstr "동적 유량 교정 결과" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "기록 결과 없음" @@ -13544,6 +13793,22 @@ msgstr "실행" msgid "Edit Flow Dynamics Calibration" msgstr "동적 유량 교정 편집" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "네트워크 조회" @@ -13824,7 +14089,7 @@ msgid "Export Log" msgstr "로그 내보내기" msgid "OrcaSlicer Version:" -msgstr "" +msgstr "OrcaSlicer 버전:" msgid "System Version:" msgstr "시스템 버전:" @@ -13833,10 +14098,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 +14198,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" @@ -14144,12 +14416,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 "프린터 설정" @@ -14255,6 +14533,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 +14610,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 +14647,7 @@ msgid "Success!" msgstr "성공!" msgid "Are you sure to log out?" -msgstr "" +msgstr "정말 로그아웃하시겠습니까?" msgid "Refresh Printers" msgstr "프린터 새로 고침" @@ -14388,7 +14680,7 @@ msgstr "" "시오." msgid "Login/Test" -msgstr "" +msgstr "로그인/테스트" msgid "Connection to printers connected via the print host failed." msgstr "출력 호스트를 통해 연결된 프린터에 연결하지 못했습니다." @@ -14525,45 +14817,49 @@ msgstr "" "오류: \"%2%\"" msgid "Connected to Obico successfully!" -msgstr "" +msgstr "Obico에 성공적으로 연결되었습니다!" msgid "Could not connect to Obico" -msgstr "" +msgstr "Obico에 연결할 수 없습니다" msgid "Connected to SimplyPrint successfully!" -msgstr "" +msgstr "SimplyPrint에 성공적으로 연결되었습니다!" msgid "Could not connect to SimplyPrint" -msgstr "" +msgstr "SimplyPrint에 연결할 수 없습니다" msgid "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 +15239,148 @@ msgstr "" "ABS 등 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이" "면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ 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 "" +#~ "모델 메쉬에 부울 연산을 수행할 수 없습니다. 오직 양수 부품만 내보내집니다." + +#~ msgid "Transfer or discard changes" +#~ msgstr "변경 사항 폐기 또는 유지" + +#~ msgid "Old Value" +#~ msgstr "이전 값" + +#~ msgid "New Value" +#~ msgstr "새로운 값" + +#~ msgid "Discard" +#~ msgstr "폐기" + +#, boost-format +#~ msgid "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "사전 설정 \"%1%\"의 일부 설정을 변경했습니다.\n" +#~ "사전 설정 전환 후 변경된 설정(새 값)을 유지하시겠습니까?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "일부 사전 설정을 변경했습니다.\n" +#~ "사전 설정 전환 후 변경된 설정(새 값)을 유지하시겠습니까?" + +#~ msgid " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "필요한 경우 필라멘트 설정으로 이동하여 사전 설정을 편집하세요.\n" +#~ "노즐 온도, 핫베드 온도 및 최대 체적 속도는 출력 품질에 큰 영향을 미칩니" +#~ "다. 신중하게 설정해 주세요." + #~ msgid "Studio Version:" #~ msgstr "스튜디오 버전:" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index cdb1b24ba..20163263b 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-04-15 22:59+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" @@ -1936,9 +1939,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 +2285,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." @@ -2929,37 +2926,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 "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -3010,6 +2985,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS Instellingen" @@ -3024,11 +3005,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 " @@ -3153,6 +3132,12 @@ 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 when export G-code." msgstr "Onbekende fout tijdens het exporteren van de G-code" @@ -3166,13 +3151,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 +3232,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 +3330,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 +3390,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" @@ -3694,6 +3685,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 +3769,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 +3877,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 +3976,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 +4124,9 @@ msgstr "Automatische opnamebewaking" msgid "Go Live" msgstr "Live gaan" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Resolutie" @@ -4627,41 +4634,49 @@ msgstr "" msgid "Synchronization" msgstr "Synchronisatie" -msgid "Initialize failed (No Device)!" -msgstr "Het initializeren is mislukt (geen apparaat)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initialization failed (Device connection not ready)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Initialisatie is mislukt (geen camera-apparaat)!" - -msgid "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 supported on the current printer version)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialisatie mislukt (niet toegankelijk in alleen LAN-modus)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialisatie is mislukt (LAN-IP van de printer ontbreekt)!" +msgid "The player is not loaded, please click \"play\" button to retry." +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 camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 +4707,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 +4767,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 +4783,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 +4830,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 +4845,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 +4867,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 studio/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 +4981,9 @@ msgstr "" msgid "Control" msgstr "Besturing" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Print Opties" @@ -5155,6 +5207,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5432,19 @@ msgstr "" msgid "Filament Tangle Detect" 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 +5647,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 " @@ -5885,10 +5977,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 " @@ -6067,6 +6173,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 +6201,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 +6226,21 @@ 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 "Network" msgstr "" @@ -6326,6 +6465,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 +6486,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 +6683,6 @@ msgstr "" msgid "Send print job to" msgstr "Stuur de printtaak naar" -msgid "Refresh" -msgstr "Vernieuwen" - msgid "Bed Leveling" msgstr "Bed leveling" @@ -6627,7 +6781,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,12 +6847,18 @@ 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 "" @@ -6703,12 +6866,6 @@ msgid "" msgstr "" "Please click the confirm button if you still want to proceed with printing." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" @@ -6739,6 +6896,9 @@ 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." @@ -6975,6 +7135,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" @@ -7389,23 +7563,26 @@ msgstr "Niet gedefinieerd" msgid "Unsaved Changes" msgstr "niet-opgeslagen wijzigingen" -msgid "Transfer or discard changes" -msgstr "Verwerp of bewaar aanpassingen" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Oude waarde" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Nieuwe waarde" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Overdracht" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Niet opslaan" -msgid "Discard" -msgstr "Verwerpen" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Klik op de rechtermuisknop om de volledige tekst weer te geven." @@ -7466,23 +7643,34 @@ msgstr "" "bevat de navolgende nog niet opgeslagen aanpassingen:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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" @@ -7499,6 +7687,9 @@ msgstr "Toon alle presets (inclusief incompatibele)" msgid "Select presets to compare" msgstr "Select presets to compare" +msgid "Transfer" +msgstr "Overdracht" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7513,7 +7704,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 "" @@ -7977,6 +8168,9 @@ msgstr "" msgid "Done" msgstr "Done" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8839,6 +9033,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 +9794,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 "" @@ -10239,6 +10448,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 +11269,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 +11633,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 " @@ -12834,12 +13067,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" @@ -13019,6 +13246,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?" @@ -13112,9 +13345,6 @@ msgstr "" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -13176,6 +13406,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13191,6 +13424,22 @@ msgstr "" msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "" @@ -13555,6 +13804,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 +14002,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 +14103,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 +14176,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 "" @@ -14459,6 +14736,134 @@ msgid "" "probability of warping." msgstr "" +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Verwerp of bewaar aanpassingen" + +#~ msgid "Old Value" +#~ msgstr "Oude waarde" + +#~ msgid "New Value" +#~ msgstr "Nieuwe waarde" + +#~ msgid "Discard" +#~ msgstr "Verwerpen" + +#, 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 7f709798a..feba61139 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: Orca Slicer\n" +"Project-Id-Version: OrcaSlicer 2.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" +"POT-Creation-Date: 2024-04-15 22:59+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 "" + msgid "°" msgstr "°" @@ -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" @@ -1980,9 +1983,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 +2324,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" @@ -2975,37 +2972,15 @@ msgstr "Wyłącz AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Drukuj z filamentem zamontowanym na tylnej części obudowy" -msgid "Cabin humidity" -msgstr "Wilgotność w kabinie" +msgid "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Zielony kolor oznacza, że wilgotność w AMS jest normalna, pomarańczowy " -"oznacza wysoką wilgotność, czerwony oznacza zbyt wysoką wilgotność. " -"(Higrometr: im niższa, tym lepiej.)" - -msgid "Desiccant status" -msgstr "Stan wilgotności" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Stan wilgotności poniżej dwóch kresek oznacza, że sorbent może być " -"nieaktywny. Proszę wymień sorbent. (Im więcej kresek, tym lepiej.)" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"Uwaga: gdy pokrywa jest otwarta lub zmieniono pakiet sorbentu, może potrwać " -"kilka godzin lub noc, aby wchłonąć wilgoć. Niska temperatura również " -"spowalnia proces. W tym czasie wskaźnik może nie dokładnie odzwierciedlać " -"stan komory." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3066,6 +3041,12 @@ msgstr "" "(System obecnie wspiera automatyczne przełączanie na materiały " "eksploatacyjne tej samej marki, rodzaju i koloru)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Ustawienia AMS" @@ -3080,11 +3061,9 @@ 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." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3208,6 +3187,12 @@ 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 "" + msgid "Unknown error when export G-code." msgstr "Nieznany błąd podczas eksportowania kodu G." @@ -3221,13 +3206,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,6 +3283,19 @@ 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 "" + +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" @@ -3392,26 +3383,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 +3453,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" @@ -3771,6 +3762,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 "" + msgid "Value is out of range." msgstr "Wartość jest poza zakresem." @@ -3851,12 +3846,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 +3954,12 @@ msgstr "Szacowany czas" msgid "Normal mode" msgstr "Tryb normalny" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Czas przygotowania" @@ -4052,6 +4053,9 @@ msgstr "Opcje rozmieszczania" msgid "Spacing" msgstr "Rozstaw" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Automatyczna rotacja podczas rozmieszczania" @@ -4198,6 +4202,9 @@ msgstr "Monitorowanie Auto-nagrywania" msgid "Go Live" msgstr "Na żywo" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Rozdzielczość" @@ -4717,43 +4724,51 @@ msgstr "" msgid "Synchronization" msgstr "Synchronizacja" -msgid "Initialize failed (No Device)!" -msgstr "Inicjalizacja nie powiodła się (Brak urządzenia)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Inicjalizacja nie powiodła się (Brak gotowości połączenia urządzenia)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Inicjalizacja nie powiodła się (Brak urządzenia kamery)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Drukarka jest zajęta pobieraniem. Proszę czekać, aż pobieranie zostanie " -"zakończone." +"Urządzenie nie może obsłużyć więcej rozmów. Proszę spróbować ponownie " +"później." -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -"Inicjalizacja nie powiodła się (Nieobsługiwane w obecnej wersji drukarki)!" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Inicjalizacja nie powiodła się (Niedostępne w trybie tylko LAN)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Inicjalizacja nie powiodła się (Brak adresu IP drukarki w sieci LAN)!" +msgid "Please confirm if the printer is connected." +msgstr "" + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" + +msgid "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Zatrzymano [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Zatrzymano." @@ -4784,16 +4799,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 +4859,12 @@ msgstr "Wybierz" msgid "Batch manage files." msgstr "Partycjonuj zarządzanie plikami." +msgid "Refresh" +msgstr "Odśwież" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Brak drukarek." @@ -4855,13 +4875,32 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "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 +4926,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 "" -msgid "Failed to parse model infomations." -msgstr "Nie udało się sparsować informacji o modelach." +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4904,6 +4943,12 @@ 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 "" + msgid "Download waiting..." msgstr "Oczekiwanie na pobranie..." @@ -4920,16 +4965,18 @@ msgstr "Pobieranie zakończone" msgid "Downloading %d%%..." msgstr "Pobieranie %d%%..." -msgid "Connection lost. Please retry." -msgstr "Utracono połączenie. Proszę spróbować ponownie." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Urządzenie nie może obsłużyć więcej rozmów. Proszę spróbować ponownie " -"później." -msgid "File not exists." -msgstr "Plik nie istnieje." +msgid "" +"Over 4 studio/handy are using remote access, you can close some and try " +"again." +msgstr "" + +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Błąd sumy kontrolnej pliku. Proszę spróbować ponownie." @@ -5034,6 +5081,9 @@ msgstr "Zmień widok kamery" msgid "Control" msgstr "Sterowanie" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Opcje drukowania" @@ -5273,6 +5323,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 niepodłączona." @@ -5462,6 +5542,19 @@ msgstr "Zezwól na dźwiękowe powiadomienia" msgid "Filament Tangle Detect" msgstr "Wykrywanie splątanych filamentów" +msgid "Nozzle Type" +msgstr "" + +msgid "Stainless Steel" +msgstr "Stal nierdzewna" + +msgid "Hardened Steel" +msgstr "Stal utwardzana" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "Globalne" @@ -5622,8 +5715,8 @@ msgid "" "front door and/or remove the upper glass." msgstr "" "Aktualna temperatura podgrzewanego stołu jest stosunkowo wysoka. Dysza może " -"się zatkać podczas drukowania tym filamentu w zamkniętej obudowie. Proszę " -"otworzyć drzwi przednie i/lub zdjąć górny panel." +"się zatkać podczas drukowania tym filamentu w zamkniętej obudowie. Proszę " +"otworzyć drzwi przednie i/lub zdjąć górny panel." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5669,9 +5762,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 " @@ -6005,10 +6095,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 "" -"Nie można wykonywać operacji boolowskich na siatkach modeli. Eksportowane " -"będą tylko części dodatnie." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6194,6 +6298,18 @@ msgstr "Domyślna Strona" msgid "Set the page opened on startup." msgstr "Ustaw stronę otwieraną przy uruchomieniu." +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 "Powiększ do pozycji myszki" @@ -6211,6 +6327,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 "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "Pokaż ekran powitalny" @@ -6232,6 +6354,21 @@ 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 "" + +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 "Network" msgstr "Sieć" @@ -6455,6 +6592,18 @@ msgstr "Niekompatybilne" msgid "The selected preset is null!" msgstr "Wybrany profil jest pusty!" +msgid "End" +msgstr "" + +msgid "Customize" +msgstr "Dostosuj" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." +msgstr "" + msgid "Plate name" msgstr "Nazwa płyty" @@ -6464,8 +6613,14 @@ msgstr "Tak samo jak globalna sekwencja druku" msgid "Print sequence" msgstr "Sekwencja druku" -msgid "Customize" -msgstr "Dostosuj" +msgid "Same as Global" +msgstr "" + +msgid "Disable" +msgstr "Rozłącz" + +msgid "Spiral vase" +msgstr "Tryb Wazy" msgid "First layer filament sequence" msgstr "Sekwencja koloru pierwszej warstwy" @@ -6648,9 +6803,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 +6900,11 @@ 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." msgid "An SD card needs to be inserted to record timelapse." msgstr "Aby nagrywać timelapse, należy włożyć kartę SD." @@ -6813,16 +6967,19 @@ 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ę?" #, 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 "" -"*Drukowanie filamentu %s z użyciem %s może spowodować uszkodzenie dyszy" msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -6830,12 +6987,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." @@ -6868,6 +7019,10 @@ 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." @@ -7106,6 +7261,20 @@ 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 "" + +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" @@ -7534,23 +7703,26 @@ msgstr "Niezdefiniowany" msgid "Unsaved Changes" msgstr "Niezapisane zmiany" -msgid "Transfer or discard changes" -msgstr "Przenieść lub odrzucić zmiany" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Stara wartość" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Nowa wartość" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Przenieś" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Nie zapisuj" -msgid "Discard" -msgstr "Odrzuć" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Kliknij prawym przyciskiem myszy, aby wyświetlić pełny tekst." @@ -7607,23 +7779,34 @@ msgstr "" "następujące niezapisane zmiany:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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?" +"\n" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" msgstr "" -"Zmieniłeś niektóre ustawienia profilu. \n" -"Czy chciałbyś zachować te zmienione ustawienia (nowa wartość) po zmianie " -"profilu?" msgid "Extruders count" msgstr "Liczba extruderów" @@ -7640,6 +7823,9 @@ msgstr "Pokaż wszystkie profile (łącznie z niekompatybilnymi)" msgid "Select presets to compare" msgstr "Wybierz profile do porównania" +msgid "Transfer" +msgstr "Przenieś" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7659,7 +7845,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 " @@ -8129,6 +8315,9 @@ msgstr "Pomiń tę wersję" msgid "Done" msgstr "Gotowe" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Potwierdź i zaktualizuj dyszę" @@ -8852,7 +9041,7 @@ msgid "Printer preset names" msgstr "Nazwy profilu drukarki" msgid "Use 3rd-party print host" -msgstr "Użyj innego serwera druku" +msgstr "Użyj zewnętrznego serwera druku" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" msgstr "" @@ -9045,6 +9234,15 @@ msgstr "Engineering Plate" msgid "First layer print sequence" msgstr "Sekwencja druku pierwszej warstwy" +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 "" "Ten G-code jest wstawiany przy każdej zmianie warstwy, tuż przed " @@ -9975,6 +10173,12 @@ msgstr "" "Promień odstępu wokół extrudera. Używane do unikania kolizji w druku obiekt-" "po-obiekcie." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "Min. obszar skanowania stołu" @@ -10733,6 +10937,15 @@ msgstr "" "Prędkość wypełniania przerw. Przerwa zazwyczaj ma nieregularną szerokość " "linii i powinna być drukowana wolniej" +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 "Dopasowanie łuków" @@ -11675,6 +11888,24 @@ 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 "" + +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 podczas retrakcji" @@ -11885,13 +12116,13 @@ msgid "" "(indicating the absence of sharp corners), a scarf joint seam will be used. " "The default value is 155°." msgstr "" -"Ta opcja ustawia próg kątowy do zastosowania warunkowo szwu ukośnego.\n" +"Ten parametr określa minimalny kąt do zastosowania szwu ukośnego.\n" "Jeśli maksymalny kąt w obrębie pętli obwodu przekroczy tę wartość (co " "wskazuje na brak ostrych narożników), zostanie użyty szew ukośny. Domyślna " "wartość to 155°." msgid "Conditional overhang threshold" -msgstr "" +msgstr "Wartość progowa nawisu" #, no-c-format, no-boost-format msgid "" @@ -11901,6 +12132,11 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"Ten parametr określa wartości progowe nawisu dla zastosowania szwu ukośnego. " +"Jeśli niepodparta część obwodu jest mniejsza niż ten próg, zostanie " +"zastosowany szew ukośny. Domyślny próg jest ustawiony na 40% szerokości " +"zewnętrznego obwodu. Ze względów wydajnościowych stopień nawisu jest " +"szacowany." msgid "Scarf joint speed" msgstr "Prędkość szwu ukośnego" @@ -12091,9 +12327,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 " @@ -13672,12 +13905,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" @@ -13936,6 +14163,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?" @@ -14037,9 +14270,6 @@ msgstr "Parametry drukowania" msgid "- ℃" msgstr "- ℃" -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Typ Płyty" @@ -14105,6 +14335,9 @@ msgstr "Do Prędkości Przepływu" msgid "Flow Dynamics Calibration Result" msgstr "Wyniki Kalibracji Dynamiki Przepływu" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Brak historii wyników" @@ -14120,6 +14353,22 @@ msgstr "Akcja" msgid "Edit Flow Dynamics Calibration" msgstr "Edytuj Kalibrację Dynamiki Przepływu" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "Wyszukiwanie w sieci" @@ -14516,6 +14765,13 @@ 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 "" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Niektóre istniejące profile nie zostały utworzone:\n" @@ -14733,14 +14989,18 @@ 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ą." + +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 "Ustawienia drukarki" @@ -14851,6 +15111,9 @@ 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 "" + msgid "Edit Filament" msgstr "Edytuj Filament" @@ -14930,6 +15193,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" @@ -15562,6 +15837,160 @@ msgstr "" "takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może " "zmniejszyć prawdopodobieństwo odkształceń." +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Przenieść lub odrzucić zmiany" + +#~ msgid "Old Value" +#~ msgstr "Stara wartość" + +#~ msgid "New Value" +#~ msgstr "Nowa wartość" + +#~ msgid "Discard" +#~ msgstr "Odrzuć" + +#, 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." @@ -16902,9 +17331,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)" @@ -16956,8 +17382,8 @@ msgstr "" #~ "the front door and/or remove the upper glass." #~ msgstr "" #~ "Aktualna temperatura stołu drukującego jest stosunkowo wysoka. Dysza może " -#~ "się zatkać podczas drukowania tego filamentu w zamkniętej obudowie. " -#~ "Proszę otworzyć drzwi przednie i/lub zdjąć górny panel." +#~ "się zatkać podczas drukowania tego filamentu w zamkniętej obudowie. " +#~ "Proszę otworzyć drzwi przednie i/lub zdjąć górny panel." #~ msgid "" #~ "The nozzle hardness required by the filament is higher than the default " diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 7edc32559..951f5dfe7 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: OrcaSlicer V2.0.0 beta\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-17 18:48+0700\n" +"POT-Creation-Date: 2024-04-15 22:59+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" @@ -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 "Отмасштабировать под область печати" @@ -1987,9 +1990,6 @@ msgstr "Сменить пруток" msgid "Set Filament for selected items" msgstr "Задать пруток для выбранных элементов" -msgid "current" -msgstr "текущий" - msgid "Unlock" msgstr "Разблокировать" @@ -2332,9 +2332,6 @@ msgstr "Введите пользовательский G-код для теку msgid "Jump to Layer" msgstr "Перейти к слою" -msgid "Jump to layer" -msgstr "Перейти к слою" - msgid "Please enter the layer number" msgstr "Пожалуйста, введите номер слоя" @@ -2982,37 +2979,15 @@ msgstr "Отключить АСПП" msgid "Print with the filament mounted on the back of chassis" msgstr "Печать материалом, установленным на задней части корпуса." -msgid "Cabin humidity" -msgstr "Влажность внутри" +msgid "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Зелёный цвет означает, что влажность в системе АСПП нормальная, оранжевый - " -"высокая, красный - слишком высокая. Чем ниже значение гигрометра, тем лучше." - -msgid "Desiccant status" -msgstr "Состояние влагопоглотителя" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Состояние влагопоглотителя (силикагеля) ниже двух делений указывает на то, " -"что он может уже не выполнять свою функцию. Пожалуйста, замените его. Чем " -"больше делений на индикаторе, тем лучше." - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"Примечание: при открытой крышке или заменённом влагопоглотителе, может " -"потребоваться несколько часов или ночь для поглощения влаги. Кроме того, " -"процесс может замедлиться из-за низкой температуры окружающей среды. В " -"течение этого времени значения индикатора могут быть неточными." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3074,6 +3049,12 @@ msgstr "" "(В настоящее время поддерживается автоматическая дозаправка материала только " "одного производителя, типа и цвета)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Настройки АСПП" @@ -3088,11 +3069,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 " @@ -3218,6 +3197,12 @@ msgstr "Плавающий зарезервированный операнд" msgid "Stack overflow" msgstr "Переполнение стека" +msgid "Running post-processing scripts" +msgstr "Запуск скриптов постобработки" + +msgid "Successfully executed post-processing script" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Неизвестная ошибка при экспорте G-кода." @@ -3231,13 +3216,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 +3297,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,35 +3398,12 @@ 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. " msgstr "" +"Чередующаяся дополнительная стенка не работает, если для \"Обеспечивать " +"верт. толщину оболочки\" установлено значение «Везде»." msgid "" "Change these settings automatically? \n" @@ -3443,6 +3411,10 @@ msgid "" "alternate extra wall\n" "No - Dont use alternate extra wall" msgstr "" +"Изменить эти настройки автоматически?\n" +"Да - Изменить в «Обеспечивать верт. толщину оболочки» на значение " +"«Умеренное» и включить чередующуюся дополнительную стенку\n" +"Нет - Отказаться от использования чередующейся дополнительной стенки" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -3492,6 +3464,33 @@ msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" +"seam_slope_start_height должна быть меньше высоты слоя.\n" +"Значение сброшено на 0." + +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional." +msgstr "" +"Для режима печати «Спиральная ваза» необходимо чтобы соблюдались следующие " +"условия:\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 "Автовыравнивание стола" @@ -3786,6 +3785,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 "Введённое значение вне диапазона." @@ -3866,12 +3869,12 @@ msgstr "Видимость" msgid "Flushed" msgstr "Очищено" -msgid "Total" -msgstr "Общее" - msgid "Tower" msgstr "Башня" +msgid "Total" +msgstr "Общее" + msgid "Total Estimation" msgstr "Общая оценка" @@ -3974,6 +3977,12 @@ msgstr "Оценка времени" msgid "Normal mode" msgstr "Нормальный режим" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Время подготовки" @@ -4067,6 +4076,9 @@ msgstr "Параметры расстановки" msgid "Spacing" msgstr "Интервал" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Разрешить вращение при расстановке" @@ -4214,6 +4226,9 @@ msgstr "Автозапись мониторинга" msgid "Go Live" msgstr "Запустить трансляцию" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Разрешение" @@ -4225,7 +4240,7 @@ msgstr "Имя хоста или IP-адрес" # ??? Пользовательская камера msgid "Custom camera source" -msgstr "Источник пользовательской камеры" +msgstr "Пользовательский источник камеры" msgid "Show \"Live Video\" guide page." msgstr "Показать страницу руководства «Прямая трансляция»." @@ -4729,40 +4744,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 "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 "Остановлено." @@ -4795,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 "Загрузка..." @@ -4856,6 +4881,12 @@ msgstr "Выбрать" msgid "Batch manage files." msgstr "Пакетное управление файлами." +msgid "Refresh" +msgstr "Обновить" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Принтеры отсутствуют." @@ -4866,13 +4897,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?" @@ -4901,11 +4951,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 " @@ -4918,6 +4968,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 "Ожидание загрузки..." @@ -4934,16 +4990,18 @@ msgstr "Загрузка завершена" msgid "Downloading %d%%..." msgstr "Загрузка %d%%..." -msgid "Connection lost. Please retry." -msgstr "Соединение потеряно. Пожалуйста, повторите попытку." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Устройство не может обработать больше сообщений. Пожалуйста, повторите " -"попытку позже." -msgid "File not exists." -msgstr "Файл не существует." +msgid "" +"Over 4 studio/handy are using remote access, you can close some and try " +"again." +msgstr "" + +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Ошибка контрольной суммы файла. Повторите попытку." @@ -5048,6 +5106,9 @@ msgstr "Переключение позиции камеры" msgid "Control" msgstr "Управление" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Настройки печати" @@ -5290,6 +5351,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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-мышь отключена." @@ -5478,6 +5569,19 @@ msgstr "Разрешить звуковые уведомления" msgid "Filament Tangle Detect" msgstr "Обнаружение запутывания прутка" +msgid "Nozzle Type" +msgstr "" + +msgid "Stainless Steel" +msgstr "Нержавеющая сталь" + +msgid "Hardened Steel" +msgstr "Закаленная сталь" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "Общие" @@ -5686,9 +5790,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 " @@ -6023,10 +6124,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 " @@ -6187,7 +6302,7 @@ msgid "Stealth Mode" msgstr "Режим конфиденциальности (отключение телеметрии Bambulab)" msgid "Enable network plugin" -msgstr "" +msgstr "Включить сетевой плагин" msgid "Check for stable updates only" msgstr "Уведомлять только о стабильных версиях программы" @@ -6214,6 +6329,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 "Приближать к положению курсор" @@ -6232,6 +6359,12 @@ msgstr "" "Если включено, используется свободное вращение камеры. Если выключено, " "используется вращение камера с ограничениями." +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "Показывать заставку при запуске программы" @@ -6254,9 +6387,24 @@ msgstr "" "Если включено, выполняется автоматический перерасчет объёма очистки при " "каждом изменении цвета." -msgid "Network" +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "" +msgid "If enabled, auto-calculate every time when filament is changed" +msgstr "" + +msgid "Remember printer configuration" +msgstr "" + +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" + +msgid "Network" +msgstr "Сеть" + msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "Автосинхронизация пользовательских профилей (принтера/прутка/процесса)" @@ -6477,6 +6625,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 "Имя печатной пластины" @@ -6486,8 +6646,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 "Последовательность прутков на первом слое" @@ -6674,9 +6840,6 @@ msgstr "Текстурированная PEI пластина Bambu" msgid "Send print job to" msgstr "Отправка задания на печать" -msgid "Refresh" -msgstr "Обновить" - msgid "Bed Leveling" msgstr "" "Выравнивание\n" @@ -6783,8 +6946,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-карту." @@ -6847,26 +7013,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 "" @@ -6900,6 +7064,9 @@ 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-карту, сначала вставьте её в принтер." @@ -7144,6 +7311,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" @@ -7578,23 +7759,26 @@ msgstr "Не задано" msgid "Unsaved Changes" msgstr "Несохранённые изменения" -msgid "Transfer or discard changes" -msgstr "Отклонить или сохранить изменения" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Старое значение" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Новое значение" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Перенести" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Не сохранять" -msgid "Discard" -msgstr "Не сохранять" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Нажмите правой кнопкой мыши, чтобы отобразить полный текст." @@ -7651,21 +7835,34 @@ 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?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" msgstr "" -"Вы изменили некоторые параметры профиля.\n" -"Хотите сохранить эти изменения (новые значения)?" msgid "Extruders count" msgstr "Количество экструдеров" @@ -7682,6 +7879,9 @@ msgstr "Показать все профили (включая несовмес msgid "Select presets to compare" msgstr "Выберите профили для сравнения" +msgid "Transfer" +msgstr "Перенести" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7700,7 +7900,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 "" "Если включено, это диалоговое окно можно использовать для переноса выбранных " @@ -8173,6 +8373,9 @@ msgstr "Пропустите эту версию" msgid "Done" msgstr "Готово" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Подтвердить и обновить сопло" @@ -8794,7 +8997,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" "Программа автоматически ограничит это ускорение, чтобы оно не превышало " @@ -8810,6 +9013,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" +"Программа автоматически ограничит это ускорение, чтобы оно не превышало " +"возможности принтера. \n" +"Если хотите получить более высокие скорости, вы можете изменить это значение " +"в настройках принтера (вкладка «Ограничение принтера»)." msgid "Generating skirt & brim" msgstr "Генерация юбки и каймы" @@ -8894,10 +9103,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 "Позволяет управлять принтером BambuLab через сторонние хосты печати." msgid "Hostname, IP or URL" msgstr "Имя хоста, IP/URL-адрес" @@ -9085,6 +9294,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-код вставляется при каждой смене слоя, непосредственно перед " @@ -9375,7 +9593,7 @@ msgstr "" "степени их нависания." msgid "Bridge counterbore holes" -msgstr "" +msgstr "Мост для зенкованных отверстий" msgid "" "This option creates bridges for counterbore holes, allowing them to be " @@ -9590,11 +9808,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 "Скорость вентилятора" @@ -10004,6 +10223,12 @@ msgstr "" "Безопасное расстояние вокруг экструдера. Используется для предотвращения " "столкновений при печати отдельно стоящих моделей." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "Мин. сетка стола" @@ -10769,6 +10994,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 "Поддержка движения по дуге окружности" @@ -10929,15 +11163,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-кода" @@ -11707,6 +11941,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 при откате" @@ -11927,13 +12179,14 @@ msgid "" "(indicating the absence of sharp corners), a scarf joint seam will be used. " "The default value is 155°." msgstr "" -"Этот параметр задает пороговый угол для применения клиновидного шва.\n" +"Этот параметр задаёт пороговое значение угола для применения клиновидного " +"шва.\n" "Если максимальный угол в контуре периметра превышает это значение (что " "указывает на отсутствие острых углов), будет использован клиновидный шов. " "Значение по умолчанию - 155°." msgid "Conditional overhang threshold" -msgstr "" +msgstr "Пороговая величина нависания" #, no-c-format, no-boost-format msgid "" @@ -11943,6 +12196,11 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" +"Этот параметр задаёт пороговое значение нависания для применения " +"клиновидного шва. Если неподдерживаемая часть периметра меньше этого " +"порогового значения, то будут применён клиновидный шов. Пороговое значение " +"по умолчанию установлено на 40% от ширины внешней периметра. Из соображений " +"производительности оценивается степень нависания." msgid "Scarf joint speed" msgstr "Скорость клиновидного шва" @@ -12125,9 +12383,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 " @@ -13745,12 +14000,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" @@ -14011,6 +14260,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?" @@ -14112,9 +14367,6 @@ msgstr "Параметры печати" msgid "- ℃" msgstr "- ℃" -msgid " ℃" -msgstr " ℃" - msgid "Plate Type" msgstr "Типа печатной пластины" @@ -14138,7 +14390,7 @@ msgstr "" "семейство = Basic - базовый, Matte - матовый)" msgid "Pattern" -msgstr "" +msgstr "Шаблон" msgid "Method" msgstr "Метод" @@ -14180,6 +14432,9 @@ msgstr "К объёмной скорости" msgid "Flow Dynamics Calibration Result" msgstr "Результаты калибровки динамики потока" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Журнал результатов пуст" @@ -14195,6 +14450,22 @@ msgstr "Действие" msgid "Edit Flow Dynamics Calibration" msgstr "Редактировать калибровку динамики потока" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "Поиск по сети" @@ -14475,7 +14746,7 @@ msgid "Export Log" msgstr "Журнал экспорта" msgid "OrcaSlicer Version:" -msgstr "" +msgstr "Версия OrcaSlicer:" msgid "System Version:" msgstr "Версия ОС:" @@ -14484,10 +14755,10 @@ msgid "DNS Server:" msgstr "DNS-сервер:" msgid "Test OrcaSlicer(GitHub)" -msgstr "" +msgstr "Тест доступности OrcaSlicer(GitHub)" msgid "Test OrcaSlicer(GitHub):" -msgstr "" +msgstr "Тест доступности OrcaSlicer(GitHub):" msgid "Test Bing.com" msgstr "Тест Bing.com" @@ -14585,6 +14856,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" @@ -14803,14 +15081,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 "Настройка принтера" @@ -14916,6 +15198,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 "Изменение прутка" @@ -14992,6 +15277,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 "Нужно выбрать принтер" @@ -15017,8 +15313,9 @@ msgstr "Не удалось получить действительную ссы msgid "Success!" msgstr "Успешно!" +# ??? Вы уверены, что хотите выйти, разлогиниться? msgid "Are you sure to log out?" -msgstr "" +msgstr "Вы уверены, что хотите выйти из системы?" msgid "Refresh Printers" msgstr "Обновить принтеры" @@ -15052,7 +15349,7 @@ msgstr "" "его в хранилище сертификатов/Keychain." msgid "Login/Test" -msgstr "" +msgstr "Вход/Тест" msgid "Connection to printers connected via the print host failed." msgstr "Не удалось подключиться к принтерам, подключенным через хост печати." @@ -15190,45 +15487,51 @@ msgstr "" "Ошибка: \"%2%\"" msgid "Connected to Obico successfully!" -msgstr "" +msgstr "Соединение с Obico успешно установлено." msgid "Could not connect to Obico" -msgstr "" +msgstr "Не удалось подключиться к Obico" msgid "Connected to SimplyPrint successfully!" -msgstr "" +msgstr "Соединение с SimplyPrint успешно установлено." msgid "Could not connect to SimplyPrint" -msgstr "" +msgstr "Не удалось подключиться к SimplyPrint" msgid "SimplyPrint account not linked. Go to Connect options to set it up." msgstr "" +"Учётная запись SimplyPrint не привязана. Перейдите в раздел подключения для " +"настройки." msgid "" "File size exceeds the 100MB upload limit. Please upload your file through " "the panel." msgstr "" +"Размер файла превышает лимит загрузки в 100 МБ. Пожалуйста, загрузите файл " +"через панель." msgid "Unknown error" -msgstr "" +msgstr "Неизвестная ошибка" msgid "Connection to Flashforge works correctly." -msgstr "" +msgstr "Соединение с Flashforge успешно установлено." msgid "Could not connect to Flashforge" -msgstr "" +msgstr "Не удалось подключиться к Flashforge" msgid "The provided state is not correct." -msgstr "" +msgstr "Указано неверное состояние." msgid "Please give the required permissions when authorizing this application." msgstr "" +"Пожалуйста, предоставьте необходимые разрешения при авторизации этого " +"приложения." msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "При попытке войти произошла какая-то ошибка, попробуйте ещё раз." msgid "User cancelled." -msgstr "" +msgstr "Отменено пользователем." #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -15285,9 +15588,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 "" @@ -15620,96 +15922,154 @@ msgstr "" "ABS, повышение температуры подогреваемого стола может снизить эту " "вероятность?" -#~ msgid "" -#~ "Alternate extra wall only works with ensure vertical shell thickness " -#~ "disabled. " -#~ msgstr "" -#~ "Альтернативный дополнительный периметр работает только при отключенной " -#~ "опции «Обеспечивать верт. толщину оболочки». " +#~ msgid "active" +#~ msgstr "активный" + +#~ msgid "Jump to layer" +#~ msgstr "Перейти к слою" + +#~ msgid "Cabin humidity" +#~ 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" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" #~ msgstr "" -#~ "Изменить эти настройки автоматически?\n" -#~ "Да - Отключить обеспечение вертикальной толщины оболочки и включить " -#~ "альтернативный дополнительный периметр\n" -#~ "Нет - Отказаться от использования альтернативного дополнительного " -#~ "периметра" +#~ "Зелёный цвет означает, что влажность в системе АСПП нормальная, оранжевый " +#~ "- высокая, красный - слишком высокая. Чем ниже значение гигрометра, тем " +#~ "лучше." + +#~ msgid "Desiccant status" +#~ msgstr "Состояние влагопоглотителя" #~ 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." +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" #~ msgstr "" -#~ "Значение максимальной скорости перемещения (machine_max_speed_x/" -#~ "machine_max_speed_y) превышает значение заданное в настройках принтера.\n" -#~ "Программа автоматически ограничит это ускорение, чтобы оно не превышало " -#~ "возможности принтера.\n" -#~ "Если хотите получить более высокие скорости, вы можете изменить это " -#~ "значение в настройках принтера (вкладка «Ограничение принтера»)." +#~ "Состояние влагопоглотителя (силикагеля) ниже двух делений указывает на " +#~ "то, что он может уже не выполнять свою функцию. Пожалуйста, замените его. " +#~ "Чем больше делений на индикаторе, тем лучше." -#~ msgid "Bridge counterbole holes" -#~ 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 "Studio Version:" -#~ msgstr "Версия программы:" +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "Примечание: если во время печати вставляется новая пластиковая нить, АСПП " +#~ "автоматически считает информацию о ней только по завершению печати." -#~ msgid "Test BambuLab" -#~ msgstr "Тест BambuLab" +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "Файл G-кода экспортирован в %1%" -#~ msgid "Test BambuLab:" -#~ msgstr "Тест BambuLab:" +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "Ошибка инициализации (устройство не обнаружено)!" -#~ msgid "Test HTTP" -#~ msgstr "Тест HTTP" +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "Ошибка инициализации (камера не обнаружена)!" -#~ msgid "Test HTTP Service:" -#~ msgstr "Тест HTTP сервера:" +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "Принтер занят загрузкой. Дождитесь завершения загрузки." -#~ msgid "Test storage" -#~ msgstr "Тест накопителя" +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "Ошибка инициализации (не поддерживается в текущей версии принтера)!" -#~ msgid "Test Storage Upload:" -#~ msgstr "Тест накопителя (отправка):" +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "Ошибка инициализации (Недоступно в режиме «Только LAN»)!" -#~ msgid "Test storage upgrade" -#~ msgstr "Тест накопителя (обновление)" +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "" +#~ "Ошибка инициализации (отсутствует IP-адрес принтера в локальной сети)!" -#~ msgid "Test Storage Upgrade:" -#~ msgstr "Тест накопителя (обновление):" +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "Остановлено [%d]!" -#~ msgid "Test storage download" -#~ msgstr "Тест накопителя (загрузка)" +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "Ошибка загрузки [%d]!" -#~ msgid "Test Storage Download:" -#~ msgstr "Тест накопителя (загрузка):" +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "Файлы отсутствуют [%d]" -#~ msgid "Test plugin download" -#~ msgstr "Тест загрузки плагина" +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "Ошибка загрузки [%d]" -#~ msgid "Test Plugin Download:" -#~ msgstr "Тест загрузки плагина:" +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "Не удалось получить информацию о модели с принтера." -#~ msgid "Test Storage Upload" -#~ 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 "" +#~ "Невозможно выполнить булевы операции над сетками модели. Будут " +#~ "экспортированы только положительные части." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Отклонить или сохранить изменения" + +#~ msgid "Old Value" +#~ msgstr "Старое значение" + +#~ msgid "New Value" +#~ msgstr "Новое значение" + +#~ msgid "Discard" +#~ msgstr "Не сохранять" + +#, boost-format +#~ msgid "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Вы изменили некоторые параметры профиля \"%1%\". \n" +#~ "Хотите сохранить эти изменения (новые значения)?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Вы изменили некоторые параметры профиля.\n" +#~ "Хотите сохранить эти изменения (новые значения)?" + +#~ msgid " ℃" +#~ msgstr " ℃" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "При необходимости перейдите в настройку прутка для редактирования " +#~ "настроек профиля.\n" +#~ "Пожалуйста, обратите внимание, что температура сопла, температура " +#~ "нагреваемого стола и максимальная объёмная скорость существенно влияют на " +#~ "качество печати. Пожалуйста, тщательнее подбирайте настройки." #~ msgid "AMS %s" #~ msgstr "АСПП №%s" - -#~ msgid "Left Preset Value" -#~ msgstr "Значение в левом профиле" - -#~ msgid "Right Preset Value" -#~ msgstr "Значение в правом профиле" - -#~ msgid "Undef category" -#~ msgstr "Неопределённая категория" - -#~ msgid "Undef group" -#~ msgstr "Неопределённая группа" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 656fca2e4..cdfe5f68a 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-04-15 22:59+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" @@ -1922,9 +1925,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 +2261,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." @@ -2898,37 +2895,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 "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"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 "" "Config which AMS slot should be used for a filament used in the print job" @@ -2979,6 +2954,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS Inställningar" @@ -2993,11 +2974,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 " @@ -3119,6 +3098,12 @@ 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 when export G-code." msgstr "Okänt fel vid exportering av G-code." @@ -3132,13 +3117,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 +3196,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 +3291,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 +3350,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" @@ -3654,6 +3645,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 +3729,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 +3837,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 +3936,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 +4083,9 @@ msgstr "Automatisk inspelning av övervakning" msgid "Go Live" msgstr "Sänd live" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Upplösning" @@ -4586,41 +4593,49 @@ msgstr "" msgid "Synchronization" msgstr "Synkronisering" -msgid "Initialize failed (No Device)!" -msgstr "Start misslyckad (Ingen Enhet)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Initieringen misslyckades (Enhets anslutningen är inte klar)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Initieringen misslyckades (ingen kamera enhet)!" - -msgid "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 supported on the current printer version)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initieringen misslyckades (Ej tillgängligt i endast LAN-läge)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initieringen misslyckades (skrivarens LAN-IP saknas)!" +msgid "The player is not loaded, please click \"play\" button to retry." +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 camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 +4666,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 +4726,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 +4742,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 +4789,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 +4804,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 +4826,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 studio/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 +4940,9 @@ msgstr "" msgid "Control" msgstr "Kontroll" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Utskriftsalternativ" @@ -5114,6 +5166,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5381,19 @@ msgstr "" msgid "Filament Tangle Detect" 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 +5592,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 " @@ -5822,10 +5914,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 " @@ -5999,6 +6105,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 +6133,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 +6157,21 @@ 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 "Network" msgstr "" @@ -6251,6 +6390,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 +6411,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 +6603,6 @@ msgstr "" msgid "Send print job to" msgstr "Skicka utskriftsjobb till" -msgid "Refresh" -msgstr "Uppdatera" - msgid "Bed Leveling" msgstr "Justering av Byggplattan" @@ -6546,7 +6700,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,12 +6764,18 @@ 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 "" @@ -6620,12 +6783,6 @@ msgid "" msgstr "" "Klicka på knappen Bekräfta om du fortfarande vill fortsätta med utskriften." -msgid "Hardened Steel" -msgstr "" - -msgid "Stainless Steel" -msgstr "" - msgid "" "Connecting to the printer. Unable to cancel during the connection process." msgstr "" @@ -6656,6 +6813,9 @@ 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." @@ -6888,6 +7048,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" @@ -7302,23 +7476,26 @@ msgstr "Oidentifierad" msgid "Unsaved Changes" msgstr "Ej sparade ändringar" -msgid "Transfer or discard changes" -msgstr "Överge eller Behåll ändringar" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Gammalt värde" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Nytt värde" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Överför" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Spara inte" -msgid "Discard" -msgstr "Överge" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Högerklicka för att se hela texten." @@ -7375,22 +7552,34 @@ msgstr "" "innehåller följande osparade ändringar:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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" @@ -7407,6 +7596,9 @@ msgstr "Visa alla inställningar (inklusive inkompatibla)" msgid "Select presets to compare" msgstr "Välj förinställningar att jämföra" +msgid "Transfer" +msgstr "Överför" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7421,7 +7613,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 "" @@ -7875,6 +8067,9 @@ msgstr "" msgid "Done" msgstr "Klar" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8705,6 +8900,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 +9648,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 "" @@ -10084,6 +10294,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 +11102,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 +11462,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 " @@ -12646,12 +12880,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" @@ -12831,6 +13059,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?" @@ -12924,9 +13158,6 @@ msgstr "" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "Typ av byggplatta" @@ -12988,6 +13219,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13003,6 +13237,22 @@ msgstr "" msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "" @@ -13367,6 +13617,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 +13815,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 +13916,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 +13989,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 "" @@ -14271,6 +14549,133 @@ msgid "" "probability of warping." msgstr "" +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Överge eller Behåll ändringar" + +#~ msgid "Old Value" +#~ msgstr "Gammalt värde" + +#~ msgid "New Value" +#~ msgstr "Nytt värde" + +#~ msgid "Discard" +#~ msgstr "Överge" + +#, 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 d90504548..fd4439480 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -1,22 +1,17 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. msgid "" msgstr "" -"Project-Id-Version: OrcaSlicer\n" +"Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-29 21:10+0800\n" -"PO-Revision-Date: 2024-03-29 21:50+0300\n" +"POT-Creation-Date: 2024-04-15 22:59+0800\n" +"PO-Revision-Date: 2024-04-14 16:06+0300\n" "Last-Translator: Olcay ÖREN\n" -"Language-Team: Türkçe\n" -"Language: tr_TR\n" +"Language-Team: \n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.3.2\n" -"X-Loco-Version: 2.6.4-dev; wp-6.3.1\n" +"X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" msgstr "Destek Boyama" @@ -260,6 +255,9 @@ msgstr "Döndürmeyi Sıfırla" msgid "World coordinates" msgstr "Dünya koordinatları" +msgid "Object coordinates" +msgstr "" + msgid "°" msgstr "°" @@ -500,13 +498,13 @@ 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[0] "%1$d bağlayıcı kesim konturunun dışında" msgstr[1] "" #, c-format, boost-format msgid "%1$d connector is out of object" msgid_plural "%1$d connectors are out of object" -msgstr[0] "" +msgstr[0] "%1$d bağlayıcı nesnenin dışında" msgstr[1] "" msgid "Some connectors are overlapped" @@ -1800,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" @@ -1977,9 +1975,6 @@ msgstr "Filamenti Değiştir" msgid "Set Filament for selected items" msgstr "Seçilen öğeler için Filamenti ayarla" -msgid "current" -msgstr "geçerli" - msgid "Unlock" msgstr "Kilidi aç" @@ -2307,9 +2302,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" @@ -2950,37 +2942,15 @@ 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 "" 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." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3039,6 +3009,12 @@ msgstr "" "(Şu anda aynı markaya ait sarf malzemelerinin otomatik temini " "desteklenmektedir, malzeme türü ve rengi)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS Ayarları" @@ -3053,11 +3029,9 @@ msgstr "" "olarak okuyacaktır. Bu yaklaşık 20 saniye sürer." msgid "" -"Note: if new filament is inserted during printing, the AMS will not " +"Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Not: Yazdırma sırasında yeni filament takılırsa AMS, yazdırma tamamlanana " -"kadar herhangi bir bilgiyi otomatik olarak okumayacaktır." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3180,6 +3154,12 @@ 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 "" + msgid "Unknown error when export G-code." msgstr "G kodunu dışa aktarırken bilinmeyen hata." @@ -3193,13 +3173,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" @@ -3274,6 +3247,19 @@ 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 "" + +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" @@ -3359,28 +3345,6 @@ msgstr "" "\n" "Değer 0'a sıfırlanacaktır." -msgid "" -"Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional." -msgstr "" -"Spiral mod yalnızca duvar döngüleri 1 olduğunda, destek devre dışı " -"bırakıldığında, üst kabuk katmanları 0 olduğunda, seyrek dolgu yoğunluğu 0 " -"olduğunda ve timelapse türü geleneksel olduğunda çalışır." - -msgid " But machines with I3 structure will not generate timelapse videos." -msgstr "" -" Ancak I3 yapısına sahip yazıcılar timelapse videolar oluşturmayacaktır." - -msgid "" -"Change these settings automatically? \n" -"Yes - Change these settings and enable spiral mode automatically\n" -"No - Give up using spiral mode this time" -msgstr "" -"Bu ayarlar otomatik olarak değiştirilsin mi?\n" -"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak " -"etkinleştirin\n" -"Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" - msgid "" "Alternate extra wall does't work well when ensure vertical shell thickness " "is set to All. " @@ -3446,9 +3410,32 @@ msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" -"Dikiş eğimi başlangıç ​​yüksekliğinin katman yüksekliğinden daha küçük olması gerekir.\n" +"Dikiş eğimi başlangıç ​​yüksekliğinin katman yüksekliğinden daha küçük olması " +"gerekir.\n" "0 a sıfırla." +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional." +msgstr "" +"Spiral mod yalnızca duvar döngüleri 1 olduğunda, destek devre dışı " +"bırakıldığında, üst kabuk katmanları 0 olduğunda, seyrek dolgu yoğunluğu 0 " +"olduğunda ve timelapse türü geleneksel olduğunda çalışır." + +msgid " But machines with I3 structure will not generate timelapse videos." +msgstr "" +" Ancak I3 yapısına sahip yazıcılar timelapse videolar oluşturmayacaktır." + +msgid "" +"Change these settings automatically? \n" +"Yes - Change these settings and enable spiral mode automatically\n" +"No - Give up using spiral mode this time" +msgstr "" +"Bu ayarlar otomatik olarak değiştirilsin mi?\n" +"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak " +"etkinleştirin\n" +"Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" + msgid "Auto bed leveling" msgstr "Otomatik yatak tesviyesi" @@ -3738,6 +3725,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 "" + msgid "Value is out of range." msgstr "Değer aralık dışında." @@ -3818,12 +3809,12 @@ msgstr "Ekran" msgid "Flushed" msgstr "Temizlenmiş" -msgid "Total" -msgstr "Toplam" - msgid "Tower" msgstr "Kule" +msgid "Total" +msgstr "Toplam" + msgid "Total Estimation" msgstr "Toplam Tahmini" @@ -3926,6 +3917,12 @@ msgstr "Zaman Tahmini" msgid "Normal mode" msgstr "Normal mod" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Hazırlık süresi" @@ -4019,6 +4016,9 @@ msgstr "Hizalama seçenekleri" msgid "Spacing" msgstr "Boşluk" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Düzenleme için otomatik döndür" @@ -4165,6 +4165,9 @@ msgstr "Otomatik Kayıt İzleme" msgid "Go Live" msgstr "Canlı Yayına Geçin" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Çözünürlük" @@ -4682,41 +4685,50 @@ msgstr "" msgid "Synchronization" msgstr "Senkronizasyon" -msgid "Initialize failed (No Device)!" -msgstr "Başlatma başarısız (Cihaz Yok)!" - -msgid "Initialize failed (Device connection not ready)!" -msgstr "Başlatma başarısız oldu (Cihaz bağlantısı hazır değil)!" - -msgid "Initialize failed (No Camera Device)!" -msgstr "Başlatma başarısız oldu (Kamera Cihazı Yok)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"Yazıcı indirme işlemiyle meşgul. Lütfen indirme işleminin bitmesini bekleyin." +"Cihaz daha fazla konuşmayı yönetemiyor. Lütfen daha sonra tekrar deneyin." -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "Başlatma başarısız oldu (Geçerli yazıcı sürümünde desteklenmiyor)!" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Başlatma başarısız oldu (Yalnızca LAN modunda erişilemez)!" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Başlatma başarısız oldu (Yazıcının LAN ip'si eksik)!" +msgid "Please confirm if the printer is connected." +msgstr "" + +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" + +msgid "Printer camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" msgid "Initializing..." msgstr "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 "" -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 "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "[%d] durduruldu!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Durdu." @@ -4747,16 +4759,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..." @@ -4808,6 +4819,12 @@ msgstr "Seç" msgid "Batch manage files." msgstr "Dosyaları toplu olarak yönet." +msgid "Refresh" +msgstr "Yenile" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Yazıcı yok." @@ -4818,13 +4835,32 @@ 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 "" + +msgid "Load failed" +msgstr "" + +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 "" + +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 "Yükleme başarısız [%d]" +msgid "Initialize failed (%s)!" +msgstr "Başlatma başarısız oldu (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4848,11 +4884,11 @@ msgstr "Dosyayı sil" msgid "Fetching model infomations ..." msgstr "Model bilgileri alınıyor..." -msgid "Failed to fetching model infomations from printer." -msgstr "Model bilgileri yazıcıdan alınamadı." +msgid "Failed to fetch model information from printer." +msgstr "" -msgid "Failed to parse model infomations." -msgstr "Model bilgileri ayrıştırılamadı." +msgid "Failed to parse model information." +msgstr "" msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4865,6 +4901,12 @@ 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 "" + msgid "Download waiting..." msgstr "İndirme bekleniyor..." @@ -4881,15 +4923,18 @@ msgstr "İndirme tamamlandı" msgid "Downloading %d%%..." msgstr "%d%% indiriliyor..." -msgid "Connection lost. Please retry." -msgstr "Bağlantı koptu. Lütfen tekrar deneyiniz." - -msgid "The device cannot handle more conversations. Please retry later." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." msgstr "" -"Cihaz daha fazla konuşmayı yönetemiyor. Lütfen daha sonra tekrar deneyin." -msgid "File not exists." -msgstr "Dosya mevcut değil." +msgid "" +"Over 4 studio/handy are using remote access, you can close some and try " +"again." +msgstr "" + +msgid "File does not exist." +msgstr "" msgid "File checksum error. Please retry." msgstr "Dosya kontrol hatası. Lütfen tekrar deneyin." @@ -4996,6 +5041,9 @@ msgstr "Kamera Görünümünü Değiştir" msgid "Control" msgstr "Kontrol" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Yazdırma Seçenekleri" @@ -5236,6 +5284,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 Fare bağlantısı kesildi." @@ -5422,6 +5500,19 @@ msgstr "Uyarı Sesine İzin Ver" msgid "Filament Tangle Detect" msgstr "Filament Dolaşma Tespiti" +msgid "Nozzle Type" +msgstr "" + +msgid "Stainless Steel" +msgstr "Paslanmaz çelik" + +msgid "Hardened Steel" +msgstr "Güçlendirilmiş çelik" + +#, c-format, boost-format +msgid "%.1f" +msgstr "" + msgid "Global" msgstr "Genel" @@ -5630,9 +5721,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 " @@ -5963,10 +6051,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 "" -"Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca pozitif parçalar " -"ihraç edilecektir." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6146,6 +6248,18 @@ msgstr "Varsayılan Sayfa" msgid "Set the page opened on startup." msgstr "Açılışta açılacak sayfayı ayarlayın." +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 "Fare konumuna yakınlaştır" @@ -6164,6 +6278,12 @@ msgstr "" "Etkinleştirilirse serbest kamerayı kullanın. Etkin değilse kısıtlı kamerayı " "kullanın." +msgid "Reverse mouse zoom" +msgstr "" + +msgid "If enabled, reverses the direction of zoom with mouse wheel." +msgstr "" + msgid "Show splash screen" msgstr "Açılış ekranını göster" @@ -6182,6 +6302,21 @@ 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 "" + +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 "Network" msgstr "Ağ" @@ -6404,6 +6539,18 @@ msgstr "Uyumsuz" msgid "The selected preset is null!" msgstr "Seçilen ön ayar boş!" +msgid "End" +msgstr "" + +msgid "Customize" +msgstr "Özelleştirmek" + +msgid "Other layer filament sequence" +msgstr "" + +msgid "Please input layer value (>= 2)." +msgstr "" + msgid "Plate name" msgstr "Plaka adı" @@ -6413,8 +6560,14 @@ 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 "" + +msgid "Disable" +msgstr "" + +msgid "Spiral vase" +msgstr "Spiral vazo" msgid "First layer filament sequence" msgstr "İlk katman filament dizisi" @@ -6596,9 +6749,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" @@ -6696,8 +6846,11 @@ 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 "" 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." @@ -6760,15 +6913,19 @@ 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?" #, 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 "" + +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." @@ -6776,12 +6933,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." @@ -6814,6 +6965,9 @@ 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." @@ -7054,6 +7208,20 @@ 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 "" + +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 +7640,26 @@ msgstr "Tanımsız" msgid "Unsaved Changes" msgstr "Kaydedilmemiş Değişiklikler" -msgid "Transfer or discard changes" -msgstr "Değişiklikleri Çıkart veya Sakla" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Eski Değer" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Yeni değer" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Aktar" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Kaydetme" -msgid "Discard" -msgstr "Çıkart" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Tam metni görüntülemek için farenin sağ tuşuna tıklayın." @@ -7545,23 +7716,34 @@ msgstr "" "kaydedilmemiş değişiklikleri içeriyor:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" +msgid "You have changed some settings of preset \"%1%\". " 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?" +"\n" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" 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 "Extruders count" msgstr "Ekstruder sayısı" @@ -7578,6 +7760,9 @@ msgstr "Tüm ön ayarları göster (uyumsuz olanlar dahil)" msgid "Select presets to compare" msgstr "Karşılaştırılacak ön ayarları seçin" +msgid "Transfer" +msgstr "Aktar" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7596,7 +7781,7 @@ msgid "Transfer values from left to right" msgstr "Değerleri soldan sağa aktarın" msgid "" -"If enabled, this dialog can be used for transver selected values from left " +"If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" "Etkinleştirilirse, bu iletişim kutusu seçilen değerleri soldan sağa ön ayara " @@ -8064,6 +8249,9 @@ msgstr "Bu versiyonu atla" msgid "Done" msgstr "Tamamlandı" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Nozulu Onaylayın ve Güncelleyin" @@ -8684,6 +8872,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" @@ -8771,7 +8965,9 @@ msgid "Use 3rd-party print host" msgstr "3. taraf yazdırma ana bilgisayarını kullanın" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" -msgstr "BambuLab yazıcısının 3. taraf yazdırma ana bilgisayarları aracılığıyla kontrol edilmesine izin ver" +msgstr "" +"BambuLab yazıcısının 3. taraf yazdırma ana bilgisayarları aracılığıyla " +"kontrol edilmesine izin ver" msgid "Hostname, IP or URL" msgstr "Ana bilgisayar adı, IP veya URL" @@ -8958,6 +9154,15 @@ msgstr "Mühendislik Plakası" msgid "First layer print sequence" msgstr "İlk katman yazdırma sırası" +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 "Bu G kodu, z'yi kaldırmadan önce her katman değişikliğinde eklenir" @@ -9853,6 +10058,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 "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "Minimum yatak ağı" @@ -10594,6 +10805,15 @@ 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 "" + +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 "Ark" @@ -11517,6 +11737,24 @@ 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 "" + +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 "Geri çekme esnasında Z sıçraması" @@ -11655,7 +11893,8 @@ msgstr "Kalan yazdırma süresini ayarlamayı devre dışı bırak" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" msgstr "" -"M73'ün oluşturulmasını devre dışı bırakın: Son gcode'da kalan yazdırma süresini ayarlayın" +"M73'ün oluşturulmasını devre dışı bırakın: Son gcode'da kalan yazdırma " +"süresini ayarlayın" msgid "Seam position" msgstr "Dikiş konumu" @@ -11744,11 +11983,11 @@ msgid "" "at 40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" -"Bu seçenek, atkı bağlantı dikişlerinin uygulanması için sarkma " -"eşiğini belirler. Çevrenin desteklenmeyen kısmı bu eşikten az ise atkı " -"birleştirme dikişleri uygulanacaktır. Varsayılan eşik, dış duvar genişliğinin " -"%40'ına ayarlanmıştır. Performans değerlendirmeleri nedeniyle çıkıntının " -"derecesi tahmin edilir." +"Bu seçenek, atkı bağlantı dikişlerinin uygulanması için sarkma eşiğini " +"belirler. Çevrenin desteklenmeyen kısmı bu eşikten az ise atkı birleştirme " +"dikişleri uygulanacaktır. Varsayılan eşik, dış duvar genişliğinin %40'ına " +"ayarlanmıştır. Performans değerlendirmeleri nedeniyle çıkıntının derecesi " +"tahmin edilir." msgid "Scarf joint speed" msgstr "Atkı birleşim hızı" @@ -11934,9 +12173,6 @@ msgstr "" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "Üst ve alt yüzeyin değil, iç katı dolgunun hızı" -msgid "Spiral vase" -msgstr "Spiral vazo" - msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " "model into a single walled print with solid bottom layers. The final " @@ -13511,12 +13747,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" @@ -13770,6 +14000,12 @@ 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?" @@ -13870,9 +14106,6 @@ msgstr "Yazdırma Parametreleri" msgid "- ℃" msgstr "- °C" -msgid " ℃" -msgstr " °C" - msgid "Plate Type" msgstr "Plaka Tipi" @@ -13937,6 +14170,9 @@ msgstr "Hacimsel Hıza" msgid "Flow Dynamics Calibration Result" msgstr "Akış Dinamiği Kalibrasyon Sonucu" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "Geçmiş Sonucu Yok" @@ -13952,6 +14188,22 @@ msgstr "İşlem" msgid "Edit Flow Dynamics Calibration" msgstr "Akış Dinamiği Kalibrasyonunu Düzenle" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "Ağ araması" @@ -14339,6 +14591,13 @@ 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 "" + msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Aşağıdaki gibi bazı mevcut ön ayarlar oluşturulamadı:\n" @@ -14552,14 +14811,18 @@ 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 " -"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 "" msgid "Printer Setting" msgstr "Yazıcı Ayarı" @@ -14669,6 +14932,9 @@ 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 "" + msgid "Edit Filament" msgstr "Filamenti Düzenle" @@ -14744,6 +15010,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" @@ -14956,7 +15233,8 @@ 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 " @@ -14981,7 +15259,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." @@ -15374,6 +15653,157 @@ msgstr "" "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "azaltabileceğini biliyor muydunuz?" +#~ 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." + +#~ msgid "Transfer or discard changes" +#~ msgstr "Değişiklikleri Çıkart veya Sakla" + +#~ msgid "Old Value" +#~ msgstr "Eski Değer" + +#~ msgid "New Value" +#~ msgstr "Yeni değer" + +#~ msgid "Discard" +#~ msgstr "Çıkart" + +#, boost-format +#~ msgid "" +#~ "You have changed some settings of preset \"%1%\". \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "\"%1%\" ön ayarının bazı ayarlarını değiştirdiniz.\n" +#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) " +#~ "korumak ister misiniz?" + +#~ msgid "" +#~ "You have changed some preset settings. \n" +#~ "Would you like to keep these changed settings (new value) after switching " +#~ "preset?" +#~ msgstr "" +#~ "Bazı ön ayar ayarlarını değiştirdiniz.\n" +#~ "Ön ayarı değiştirdikten sonra değiştirilen bu ayarları (yeni değer) " +#~ "korumak ister misiniz?" + +#~ msgid " ℃" +#~ msgstr " °C" + +#~ msgid "" +#~ "Please go to filament setting to edit your presets if you need.\n" +#~ "Please note that nozzle temperature, hot bed temperature, and maximum " +#~ "volumetric speed have a significant impact on printing quality. Please " +#~ "set them carefully." +#~ msgstr "" +#~ "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament " +#~ "ayarına gidin.\n" +#~ "Lütfen püskürtme ucu sıcaklığının, sıcak yatak sıcaklığının ve maksimum " +#~ "hacimsel hızın yazdırma kalitesi üzerinde önemli bir etkiye sahip " +#~ "olduğunu unutmayın. Lütfen bunları dikkatlice ayarlayın." + #~ msgid "Studio Version:" #~ msgstr "Stüdyo Sürümü:" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 948a1d8e2..34fe07085 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-04-15 22:59+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 "Масштабування для збільшення обсягу" @@ -1934,9 +1937,6 @@ msgstr "Змінити філамент" msgid "Set Filament for selected items" msgstr "Встановити філамент для вибраних елементів" -msgid "current" -msgstr "поточний" - msgid "Unlock" msgstr "Розблокувати" @@ -2278,9 +2278,6 @@ msgstr "Введіть G-код користувача, що використо msgid "Jump to Layer" msgstr "Перейти до шару" -msgid "Jump to layer" -msgstr "Перейти до шару" - msgid "Please enter the layer number" msgstr "Будь ласка, введіть номер шару" @@ -2918,40 +2915,15 @@ msgstr "Вимкнути AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "Друк із ниткою, встановленою на задній частині корпусу" -msgid "Cabin humidity" -msgstr "Вологість салону" +msgid "Current Cabin humidity" +msgstr "" msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"Зелений означає, що вологість AMS нормальна, помаранчевий означає, " -"щоВологість висока,\n" -"червоний означає, що вологість занадто висока. (Гігрометр: чим нижче, тим " -"краще.)" - -msgid "Desiccant status" -msgstr "Статус вологопоглинача" - -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"Стан влагопоглинача нижче двох поділів свідчить про те, що вологопоглинач " -"може бути\n" -"неактивний. Будь ласка, замініть осушувач. (Смуги: чим вище, тим краще.)" - -msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." -msgstr "" -"Примітка. Коли кришку відкрито або замінено пакет з вологопоглиначем, це " -"може зайняти деякий час.\n" -"годин або ночі, щоб увібрати вологу. Низькі температури також уповільнюють\n" -"процес. У цей час індикатор може не відображати патронник.\n" -"точно." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3003,6 +2975,12 @@ msgid "" "material type, and color)" msgstr "" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "Налаштування AMS" @@ -3017,11 +2995,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 " @@ -3148,6 +3124,12 @@ msgstr "Плаваючий зарезервований операнд" msgid "Stack overflow" msgstr "Переповнення стека" +msgid "Running post-processing scripts" +msgstr "Запуск скриптів постобробки" + +msgid "Successfully executed post-processing script" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Невідома помилка під час експорту G-коду." @@ -3161,13 +3143,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 +3220,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 +3317,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 +3376,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 "Автоматичне вирівнювання столу" @@ -3684,6 +3672,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 +3756,12 @@ msgstr "Відображати" msgid "Flushed" msgstr "Очищення" -msgid "Total" -msgstr "Загальний" - msgid "Tower" msgstr "Вежа" +msgid "Total" +msgstr "Загальний" + msgid "Total Estimation" msgstr "Загальна оцінка" @@ -3872,6 +3864,12 @@ msgstr "Оцінка часу" msgid "Normal mode" msgstr "Нормальний режим" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "Час підготовки" @@ -3965,6 +3963,9 @@ msgstr "Упорядкувати варіанти" msgid "Spacing" msgstr "Відстань" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "Автоповорот для розташування" @@ -4111,6 +4112,9 @@ msgstr "Автозапис Моніторингу" msgid "Go Live" msgstr "У прямому ефірі" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "Дозвіл нарізки" @@ -4632,41 +4636,49 @@ msgstr "" msgid "Synchronization" msgstr "Синхронізація" -msgid "Initialize failed (No Device)!" -msgstr "Помилка ініціалізації (немає пристрою)!" - -msgid "Initialize failed (Device connection not ready)!" +msgid "The device cannot handle more conversations. Please retry later." msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "Помилка ініціалізації (немає камери)!" - -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "Принтер зайнятий завантаженням. Дочекайтеся завершення завантаження." - -msgid "Initialize failed (Not supported on the current printer version)!" +msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Ініціалізація не вдалася (недоступна лише в режимі LAN)!" - -msgid "Initialize failed (Missing LAN ip of printer)!" +msgid "The player is not loaded, please click \"play\" button to retry." +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 camera is malfunctioning." +msgstr "" + +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." msgstr "" -"Помилка ініціалізації (відсутня IP-адреса принтера в локальній мережі)!" msgid "Initializing..." msgstr "Ініціалізація..." -#, c-format, boost-format -msgid "Initialize failed (%s)!" -msgstr "Помилка ініціалізації (%s)!" +msgid "Connection Failed. Please check the network and try again" +msgstr "" -msgid "Network unreachable" -msgstr "Мережа недоступна" +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" -#, c-format, boost-format -msgid "Stopped [%d]!" -msgstr "Зупинено [%d]!" +msgid "The printer has been logged out and cannot connect." +msgstr "" msgid "Stopped." msgstr "Зупинено." @@ -4697,16 +4709,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 +4769,12 @@ msgstr "Вибір" msgid "Batch manage files." msgstr "Пакетне керування файлами." +msgid "Refresh" +msgstr "Оновити" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "Ніяких принтерів." @@ -4768,13 +4785,32 @@ msgstr "Помилка підключення [%d]!" msgid "Loading file list..." msgstr "Завантаження списку файлів..." -#, c-format, 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 "" #, c-format, boost-format -msgid "Load failed [%d]" -msgstr "" +msgid "Initialize failed (%s)!" +msgstr "Помилка ініціалізації (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" @@ -4797,10 +4833,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 +4848,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 +4870,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 studio/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 +4984,9 @@ msgstr "" msgid "Control" msgstr "Контроль" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "Параметри друку" @@ -5161,6 +5210,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5428,19 @@ msgstr "" msgid "Filament Tangle Detect" 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 +5641,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 " @@ -5874,7 +5963,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 "" @@ -6054,6 +6159,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 +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 "" @@ -6087,6 +6210,21 @@ 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 "Network" msgstr "" @@ -6310,6 +6448,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 +6469,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 +6659,6 @@ msgstr "" msgid "Send print job to" msgstr "Надіслати завдання на друк на" -msgid "Refresh" -msgstr "Оновити" - msgid "Bed Leveling" msgstr "Вирівнювання столу" @@ -6603,8 +6756,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 +6820,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 "" @@ -6712,6 +6868,9 @@ 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." @@ -6926,6 +7085,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" @@ -7344,23 +7517,26 @@ msgstr "Undef" msgid "Unsaved Changes" msgstr "Незбережені зміни" -msgid "Transfer or discard changes" -msgstr "Відкинути або зберегти зміни" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "Старе значення" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "Нове значення" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "Передача" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "Не зберігати" -msgid "Discard" -msgstr "Не зберігати" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Натисніть праву кнопку миші, щоб відобразити повний текст." @@ -7417,23 +7593,34 @@ 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?" +msgid "You have changed some settings of preset \"%1%\". " 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" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" msgstr "" -"Ви змінили деякі налаштування передустановки. \n" -"Зберегти ці змінені налаштування (нове значення) після перемикання Набір " -"параметрів?" msgid "Extruders count" msgstr "Кількість екструдерів" @@ -7450,6 +7637,9 @@ msgstr "Показати всі налаштування (включаючи н msgid "Select presets to compare" msgstr "Виберіть налаштування для порівняння" +msgid "Transfer" +msgstr "Передача" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7464,7 +7654,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 +8105,9 @@ msgstr "" msgid "Done" msgstr "Виконано" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8761,6 +8954,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 +9720,12 @@ msgstr "" "Радіус вільного простору навколо екструдера. Використовується для уникнення " "зіткнення під час друку за об’єктами." +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -10208,6 +10416,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 +11248,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 +11636,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 " @@ -12810,12 +13042,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" @@ -12995,6 +13221,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?" @@ -13088,9 +13320,6 @@ msgstr "" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "" @@ -13152,6 +13381,9 @@ msgstr "" msgid "Flow Dynamics Calibration Result" msgstr "" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "" @@ -13167,6 +13399,22 @@ msgstr "" msgid "Edit Flow Dynamics Calibration" msgstr "" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "" @@ -13535,6 +13783,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 +13981,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 +14082,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 +14156,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 "" @@ -14446,6 +14722,116 @@ msgid "" "probability of warping." 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 нормальна, помаранчевий означає, " +#~ "щоВологість висока,\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]!" + +#~ msgid "Transfer or discard changes" +#~ msgstr "Відкинути або зберегти зміни" + +#~ msgid "Old Value" +#~ msgstr "Старе значення" + +#~ msgid "New Value" +#~ msgstr "Нове значення" + +#~ msgid "Discard" +#~ 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 "" #~ "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 56ca0ac14..7def90dc4 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-04-15 22:59+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 "缩放到构建空间大小" @@ -1917,9 +1920,6 @@ msgstr "更换耗材丝" msgid "Set Filament for selected items" msgstr "设置所选项的耗材丝" -msgid "current" -msgstr "当前" - msgid "Unlock" msgstr "解锁" @@ -2234,9 +2234,6 @@ msgstr "输入当前层上使用的自定义G-code:" msgid "Jump to Layer" msgstr "跳转到层" -msgid "Jump to layer" -msgstr "跳转到层" - msgid "Please enter the layer number" msgstr "请输入层数" @@ -2837,31 +2834,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 +2893,12 @@ msgstr "" "如果AMS中有两卷相同的耗材,则自动补给启用。\n" "(目前支持品牌、材料种类、颜色相同的耗材的自动补给)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 设置" @@ -2926,11 +2913,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 " @@ -3040,6 +3025,12 @@ msgstr "浮点保留操作数" msgid "Stack overflow" msgstr "栈溢出" +msgid "Running post-processing scripts" +msgstr "运行后处理脚本" + +msgid "Successfully executed post-processing script" +msgstr "" + msgid "Unknown error when export G-code." msgstr "导出G-code文件发生未知错误。" @@ -3053,13 +3044,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 +3116,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 +3205,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 +3266,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 "自动热床调平" @@ -3569,6 +3566,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 +3650,12 @@ msgstr "显示" msgid "Flushed" msgstr "冲刷" -msgid "Total" -msgstr "总计" - msgid "Tower" msgstr "擦料塔" +msgid "Total" +msgstr "总计" + msgid "Total Estimation" msgstr "总预估" @@ -3757,6 +3758,12 @@ msgstr "时间预估" msgid "Normal mode" msgstr "普通模式" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "准备时间" @@ -3851,6 +3858,9 @@ msgstr "自动摆放选项" msgid "Spacing" msgstr "间距" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "自动旋转以优化自动摆放效果" @@ -3995,6 +4005,9 @@ msgstr "监控录像" msgid "Go Live" msgstr "开启直播" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "分辨率" @@ -4501,40 +4514,49 @@ msgstr "" msgid "Synchronization" msgstr "同步" -msgid "Initialize failed (No Device)!" -msgstr "初始化失败(没有设备)!" +msgid "The device cannot handle more conversations. Please retry later." +msgstr "设备无法处理更多的对话。请稍后重试。" -msgid "Initialize failed (Device connection not ready)!" -msgstr "初始化失败(设备未连接)" +msgid "Player is malfunctioning. Please reinstall the system player." +msgstr "" -msgid "Initialize failed (No Camera Device)!" -msgstr "初始化失败(没有摄像头)" +msgid "The player is not loaded, please click \"play\" button to retry." +msgstr "" -msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "打印机正忙于下载,请等待下载完成。" +msgid "Please confirm if the printer is connected." +msgstr "" -msgid "Initialize failed (Not supported on the current printer version)!" -msgstr "初始化失败(当前打印机的版本不支持)!" +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" -msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "初始化失败(在局域网模式中不可访问)!" +msgid "Printer camera is malfunctioning." +msgstr "" -msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "初始化失败(未找到打印机的局域网地址)!" +msgid "Problem occured. Please update the printer firmware and try again." +msgstr "" + +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" + +msgid "Please enter the IP of printer to connect." +msgstr "" 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 +4585,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 +4645,12 @@ msgstr "选择" msgid "Batch manage files." msgstr "批量管理文件" +msgid "Refresh" +msgstr "刷新" + +msgid "Reload file list from printer." +msgstr "" + msgid "No printers." msgstr "未选择打印机" @@ -4634,13 +4661,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 +4707,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 +4724,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 +4746,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 studio/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 +4860,9 @@ msgstr "" msgid "Control" msgstr "控制" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "打印选项" @@ -5033,6 +5092,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5299,19 @@ msgstr "允许提示音" msgid "Filament Tangle Detect" 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 +5503,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 " @@ -5712,8 +5811,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 " @@ -5887,6 +6002,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 +6028,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 +6052,21 @@ 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 "Network" msgstr "网络" @@ -6133,6 +6281,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 +6302,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 +6491,6 @@ msgstr "" msgid "Send print job to" msgstr "发送打印任务至" -msgid "Refresh" -msgstr "刷新" - msgid "Bed Leveling" msgstr "热床调平" @@ -6415,8 +6578,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 +6638,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 "正在连接打印机。连接过程中无法取消。" @@ -6520,6 +6686,9 @@ 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卡" @@ -6735,6 +6904,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" @@ -7128,23 +7311,26 @@ msgstr "未定义" msgid "Unsaved Changes" msgstr "未保存的更改" -msgid "Transfer or discard changes" -msgstr "放弃或保留更改" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "旧值" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "新值" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "迁移" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "不保存" -msgid "Discard" -msgstr "放弃" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "单击鼠标右键显示全文。" @@ -7197,17 +7383,34 @@ msgid "" msgstr "预设“%1%”和新的工艺预设不兼容,并且它包含以下未保存的修改:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "您已经更改了预设 \"%1%\",是否在切换后要保留这些更改的预设参数?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "您已经更改了预设参数,是否在切换后要保留这些更改的预设参数?" +"\n" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" +msgstr "" msgid "Extruders count" msgstr "挤出机数量" @@ -7224,6 +7427,9 @@ msgstr "显示所有预设(包括不兼容的)" msgid "Select presets to compare" msgstr "选择要比较的预设" +msgid "Transfer" +msgstr "迁移" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7238,7 +7444,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 +7902,9 @@ msgstr "跳过本版本" msgid "Done" msgstr "完成" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "确认并更新喷嘴" @@ -8492,6 +8701,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 +9503,12 @@ msgid "" "printing." msgstr "挤出机四周的避让半径。用于在逐件打印中避免碰撞。" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "网床最小点" @@ -9937,6 +10161,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 +10984,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 +11360,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 " @@ -12503,12 +12751,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" @@ -12733,6 +12975,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?" @@ -12828,9 +13076,6 @@ msgstr "打印参数" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "热床类型" @@ -12895,6 +13140,9 @@ msgstr "至体积速度" msgid "Flow Dynamics Calibration Result" msgstr "动态流量校准结果" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "无历史结果" @@ -12910,6 +13158,22 @@ msgstr "操作" msgid "Edit Flow Dynamics Calibration" msgstr "编辑动态流量校准" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "搜索网络" @@ -13290,6 +13554,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 +13758,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 +13871,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 +13946,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 "需要选择打印机" @@ -14242,6 +14532,138 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ 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 "无法对模型网格执行布尔运算。只有正面部分将被导出。" + +#~ msgid "Transfer or discard changes" +#~ msgstr "放弃或保留更改" + +#~ msgid "Old Value" +#~ msgstr "旧值" + +#~ msgid "New Value" +#~ msgstr "新值" + +#~ msgid "Discard" +#~ 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 7c28c1555..2633001ac 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-04-15 22:59+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 "縮放到列印空間範圍大小" @@ -1979,10 +1983,6 @@ msgstr "更換線材" msgid "Set Filament for selected items" msgstr "為所選項目設定使用的線材" -#, fuzzy -msgid "current" -msgstr "目前" - msgid "Unlock" msgstr "解鎖" @@ -2316,9 +2316,6 @@ msgstr "輸入目前層上使用的自訂 G-code:" msgid "Jump to Layer" msgstr "轉換到層" -msgid "Jump to layer" -msgstr "轉換到層" - msgid "Please enter the layer number" msgstr "請輸入層數" @@ -2946,36 +2943,15 @@ msgstr "停用 AMS" msgid "Print with the filament mounted on the back of chassis" msgstr "使用機箱背後掛載的線材列印" -msgid "Cabin humidity" -msgstr "AMS 內部濕度" - -#, fuzzy -msgid "" -"Green means that AMS humidity is normal, orange represent humidity is high, " -"red represent humidity is too high.(Hygrometer: lower the better.)" +msgid "Current Cabin humidity" msgstr "" -"綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越" -"好。)" - -msgid "Desiccant status" -msgstr "乾燥劑狀態" - -#, fuzzy -msgid "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant.(The bars: higher the better.)" -msgstr "" -"乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越" -"好)。" msgid "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." msgstr "" -"注意:當 AMS 蓋子打開或更換乾燥劑包裝時,可能需要數小時或一晚才能吸收水分,低" -"溫也會減慢這一過程。在此期間,濕度指示的數值可能並不準確。" #, fuzzy msgid "" @@ -3033,6 +3009,12 @@ msgstr "" "如果 AMS 中有兩個相同的線材,則會啟用 AMS 備用線材自動補給功能。\n" "(目前支援同品牌、同材質、同顏色的耗材自動供應)" +msgid "DRY" +msgstr "" + +msgid "WET" +msgstr "" + msgid "AMS Settings" msgstr "AMS 設定" @@ -3047,11 +3029,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 " @@ -3167,6 +3147,12 @@ msgstr "浮點保留操作數" msgid "Stack overflow" msgstr "堆疊溢位" +msgid "Running post-processing scripts" +msgstr "執行後處理腳本" + +msgid "Successfully executed post-processing script" +msgstr "" + msgid "Unknown error when export G-code." msgstr "匯出 G-code 檔案發生未知錯誤。" @@ -3180,13 +3166,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 +3241,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 +3339,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 +3396,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 "熱床自動調平" @@ -3717,6 +3709,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 +3804,12 @@ msgstr "顯示" msgid "Flushed" msgstr "廢料" -msgid "Total" -msgstr "總計" - msgid "Tower" msgstr "" +msgid "Total" +msgstr "總計" + msgid "Total Estimation" msgstr "總預估" @@ -3921,6 +3917,12 @@ msgstr "時間預估" msgid "Normal mode" msgstr "普通模式" +msgid "Total Filament" +msgstr "" + +msgid "Model Filament" +msgstr "" + msgid "Prepare time" msgstr "準備時間" @@ -4015,6 +4017,9 @@ msgstr "自動擺放選項" msgid "Spacing" msgstr "間距" +msgid "0 means auto spacing." +msgstr "" + msgid "Auto rotate for arrangement" msgstr "自動旋轉以最佳化自動擺放效果" @@ -4164,6 +4169,9 @@ msgstr "監控錄影" msgid "Go Live" msgstr "開啟直播" +msgid "Liveview Retry" +msgstr "" + msgid "Resolution" msgstr "解析度" @@ -4694,43 +4702,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 +4774,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 +4836,12 @@ msgstr "選擇" msgid "Batch manage files." msgstr "批次管理檔案" +msgid "Refresh" +msgstr "刷新" + +msgid "Reload file list from printer." +msgstr "" + #, fuzzy msgid "No printers." msgstr "未選擇列印設備" @@ -4834,13 +4853,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 +4899,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 +4916,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 +4938,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 studio/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 +5056,9 @@ msgstr "" msgid "Control" msgstr "控制" +msgid "Printer Parts" +msgstr "" + msgid "Print Options" msgstr "列印選項" @@ -5246,6 +5296,36 @@ 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 Bambu " +"Studio version." +msgstr "" + +msgid "If you would like to try Bambu Studio Beta, you may click to" +msgstr "" + +msgid "Download Beta Version" +msgstr "" + +msgid "The 3mf file version is newer than the current Bambu Studio version." +msgstr "" + +msgid "" +"Update your Bambu Studio 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 +5509,19 @@ msgstr "允許提示音效" msgid "Filament Tangle Detect" 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 +5732,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 " @@ -5957,11 +6047,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 " @@ -6143,6 +6248,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 +6274,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 +6299,21 @@ 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 "Network" msgstr "" @@ -6408,6 +6546,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 +6568,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 +6765,6 @@ msgstr "" msgid "Send print job to" msgstr "傳送列印作業至" -msgid "Refresh" -msgstr "刷新" - msgid "Bed Leveling" msgstr "熱床調平" @@ -6710,9 +6863,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 +6930,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." @@ -6827,6 +6982,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 記憶卡" @@ -7060,6 +7219,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 " @@ -7484,23 +7657,26 @@ msgstr "未定義" msgid "Unsaved Changes" msgstr "未儲存的更改" -msgid "Transfer or discard changes" -msgstr "放棄或保留更改" +msgid "Actions For Unsaved Changes" +msgstr "" -msgid "Old Value" -msgstr "舊值" +msgid "Preset Value" +msgstr "" -msgid "New Value" -msgstr "新值" +msgid "Modified Value" +msgstr "" -msgid "Transfer" -msgstr "遷移" +msgid "Transfer Modified Value" +msgstr "" msgid "Don't save" msgstr "不儲存" -msgid "Discard" -msgstr "放棄" +msgid "Use Preset Value" +msgstr "" + +msgid "Save Modified Value" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "單擊滑鼠右鍵顯示全文。" @@ -7553,17 +7729,34 @@ msgid "" msgstr "預設 \"%1%\" 和新的列印品質預設不相容,並且它包含以下未儲存的修改:" #, boost-format -msgid "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "您已經更改了預設 \"%1%\",是否在切換後要保留這些更改的預設參數?" +msgid "You have changed some settings of preset \"%1%\". " +msgstr "" msgid "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"preset?" -msgstr "您已經更改了預設參數,是否在切換後要保留這些更改的預設參數?" +"\n" +"Would you like to save these changed settings(modified value)?" +msgstr "" + +msgid "" +"\n" +"Would you like to keep these changed settings(modified value) after " +"switching preset?" +msgstr "" + +msgid "" +"You have previously modified your settings and are about to overwrite them " +"with new ones." +msgstr "" + +msgid "" +"\n" +"Do you want to keep your current modified settings, or use preset settings?" +msgstr "" + +msgid "" +"\n" +"Do you want to save your current modified settings?" +msgstr "" msgid "Extruders count" msgstr "擠出機數量" @@ -7582,6 +7775,9 @@ msgstr "顯示所有預設(包括不相容的)" msgid "Select presets to compare" msgstr "選擇要比較的預設" +msgid "Transfer" +msgstr "遷移" + msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7596,7 +7792,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 "" @@ -8089,6 +8285,9 @@ msgstr "" msgid "Done" msgstr "完成" +msgid "resume" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -8917,6 +9116,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 +9897,12 @@ msgid "" "printing." msgstr "擠出機四周的避讓半徑。用於在逐件列印中避免碰撞。" +msgid "Nozzle height" +msgstr "" + +msgid "The height of nozzle tip." +msgstr "" + msgid "Bed mesh min" msgstr "" @@ -10358,6 +10572,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 +11422,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 +11781,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 " @@ -12972,13 +13210,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" @@ -13219,6 +13450,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?" @@ -13320,9 +13558,6 @@ msgstr "列印參數" msgid "- ℃" msgstr "" -msgid " ℃" -msgstr "" - msgid "Plate Type" msgstr "熱床類型" @@ -13389,6 +13624,9 @@ msgstr "至體積速度" msgid "Flow Dynamics Calibration Result" msgstr "動態流量校準結果" +msgid "New" +msgstr "" + msgid "No History Result" msgstr "無歷史結果" @@ -13404,6 +13642,22 @@ msgstr "操作" msgid "Edit Flow Dynamics Calibration" msgstr "編輯動態流量校準" +msgid "New Flow Dynamics Calibration" +msgstr "" + +msgid "Ok" +msgstr "" + +msgid "The filament must be selected." +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 "" + msgid "Network lookup" msgstr "搜尋網路" @@ -13791,6 +14045,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 +14243,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 +14344,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 +14416,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 "需要選擇列印設備" @@ -14699,6 +14981,130 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "active" +#~ msgstr "活動的" + +#~ msgid "Jump to layer" +#~ msgstr "轉換到層" + +#~ msgid "Cabin humidity" +#~ msgstr "AMS 內部濕度" + +#, fuzzy +#~ msgid "" +#~ "Green means that AMS humidity is normal, orange represent humidity is " +#~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" +#~ msgstr "" +#~ "綠色表示 AMS 濕度正常,橙色表示濕度高,紅色表示濕度過高。(濕度計:越低越" +#~ "好。)" + +#~ msgid "Desiccant status" +#~ msgstr "乾燥劑狀態" + +#, fuzzy +#~ msgid "" +#~ "A desiccant status lower than two bars indicates that desiccant may be " +#~ "inactive. Please change the desiccant.(The bars: higher the better.)" +#~ msgstr "" +#~ "乾燥劑狀態低於兩格表示乾燥劑可能是趨近無效。請更換乾燥劑。(指示格:越高越" +#~ "好)。" + +#~ msgid "" +#~ "Note: When the lid is open or the desiccant pack is changed, it can take " +#~ "hours or a night to absorb the moisture. Low temperatures also slow down " +#~ "the process. During this time, the indicator may not represent the " +#~ "chamber accurately." +#~ msgstr "" +#~ "注意:當 AMS 蓋子打開或更換乾燥劑包裝時,可能需要數小時或一晚才能吸收水" +#~ "分,低溫也會減慢這一過程。在此期間,濕度指示的數值可能並不準確。" + +#~ msgid "" +#~ "Note: if new filament is inserted during printing, the AMS will not " +#~ "automatically read any information until printing is completed." +#~ msgstr "" +#~ "注意:如果是在列印過程中插入新的線材,AMS 會在列印作業結束後自動讀取此線材" +#~ "信息。" + +#, boost-format +#~ msgid "Succeed to export G-code to %1%" +#~ msgstr "成功匯出 G-code 至 %1%" + +#~ msgid "Initialize failed (No Device)!" +#~ msgstr "初始化失敗(沒有列印設備)!" + +#~ msgid "Initialize failed (No Camera Device)!" +#~ msgstr "初始化失敗(沒有攝影機)" + +#, fuzzy +#~ msgid "" +#~ "Printer is busy downloading, Please wait for the downloading to finish." +#~ msgstr "列印設備正忙於下載,請等待下載完成。" + +#, fuzzy +#~ msgid "Initialize failed (Not supported on the current printer version)!" +#~ msgstr "初始化失敗(目前列印設備的版本不支援)!" + +#~ msgid "Initialize failed (Not accessible in LAN-only mode)!" +#~ msgstr "初始化失敗(在區域網路模式中不可存取)!" + +#, fuzzy +#~ msgid "Initialize failed (Missing LAN ip of printer)!" +#~ msgstr "初始化失敗(未找到列印設備的區域網路地址)!" + +#, c-format, boost-format +#~ msgid "Stopped [%d]!" +#~ msgstr "已停止 [%d]!" + +#, c-format, boost-format +#~ msgid "Load failed [%d]!" +#~ msgstr "載入失敗 [%d]!" + +#, c-format, boost-format +#~ msgid "No files [%d]" +#~ msgstr "檔案清單為空[%d]" + +#, c-format, boost-format +#~ msgid "Load failed [%d]" +#~ msgstr "載入失敗 [%d]" + +#, fuzzy +#~ msgid "Failed to fetching model infomations from printer." +#~ msgstr "無法從列印設備獲取模型資訊。" + +#~ msgid "Failed to parse model infomations." +#~ msgstr "解析模型資訊失敗。" + +#, fuzzy +#~ msgid "" +#~ "Unable to perform boolean operation on model meshes. Only positive parts " +#~ "will be exported." +#~ msgstr "無法對模型網格執行布林運算。只有正面部分將被導出。" + +#~ msgid "Transfer or discard changes" +#~ msgstr "放棄或保留更改" + +#~ msgid "Old Value" +#~ msgstr "舊值" + +#~ msgid "New Value" +#~ msgstr "新值" + +#~ msgid "Discard" +#~ 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/fd_pattern_manual_device.png b/resources/images/fd_pattern_manual_device.png new file mode 100644 index 000000000..a5d5b90bc Binary files /dev/null and b/resources/images/fd_pattern_manual_device.png differ diff --git a/resources/images/hum_level1_dark.svg b/resources/images/hum_level1_dark.svg new file mode 100644 index 000000000..16511f4f5 --- /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 000000000..37870888f --- /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 000000000..66951ad47 --- /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 000000000..4d62440ae --- /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 000000000..be9f85965 --- /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 000000000..2c0334ee3 --- /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 000000000..4dc749ccb --- /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 000000000..299c1506c --- /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 000000000..d7ef458e0 --- /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 000000000..4121832f9 --- /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 000000000..cf48700ee --- /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 000000000..d482fb1b3 Binary files /dev/null and b/resources/images/humidity_list_background.png differ diff --git a/resources/images/monitor_hms_new.svg b/resources/images/monitor_hms_new.svg new file mode 100644 index 000000000..eb8d6a147 --- /dev/null +++ b/resources/images/monitor_hms_new.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/tab_auxiliary_avtice.svg b/resources/images/tab_auxiliary_active.svg similarity index 100% rename from resources/images/tab_auxiliary_avtice.svg rename to resources/images/tab_auxiliary_active.svg diff --git a/resources/printers/N1.json b/resources/printers/N1.json index 85da86231..8bcd035a5 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 e287cd1fa..2857bb17e 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/BBL.json b/resources/profiles/BBL.json index 4c70999b1..2afe0897d 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.04", "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 352292b1e..413d8ce79 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 3358a7fc7..f85009c07 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 3949e1851..f21efe7f8 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 10bfd2565..6145a910b 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 80f4f7c92..88ad1a408 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 000000000..ff5f41cae --- /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 000000000..37acd1252 --- /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 000000000..89916b17b --- /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 000000000..777cf8508 --- /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 a934418ec..916abbfbe 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 abaa62c35..90b80ac8d 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 e98e02789..5e6a6788c 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 5693a2c1d..4c9c47f1a 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 4eb57181d..7ae30500d 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 000000000..ceca584ce --- /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 000000000..03be549c9 --- /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 000000000..2a0eaaa79 --- /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 000000000..f469aeebc --- /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 000000000..76b7da433 --- /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 000000000..d0ff9e318 --- /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 000000000..cf166026a --- /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 000000000..24a6fa15b --- /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 3a65f1d44..790ddb7c4 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 5d291b7b7..fa10655ee 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 31d13f48e..fd33b7778 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 3b5399efa..ec8d95d22 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 b1cc742c2..6cd58cc06 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 7ee213146..cccf6aad5 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 c7dd9923c..24857fa2e 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 0a24cb5a1..73d7aab02 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 d68745bb1..18b87c587 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 f3160585a..fd83a7dfd 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 3a70c808a..6f016020a 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 ddaeb7a61..0ef0264d4 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 d8d8307fc..671e01032 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 2cb005d6f..8619d452d 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 68496df69..fb09d370f 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 3a18c1f6f..029cc864b 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 608465d6d..ff52a275e 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 9251208bd..7bb8e8f94 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 b3e250b6e..43457c192 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 cf3e399b3..d95ffa6a6 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 115adb144..5d0c2705a 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 51137bdee..30c339132 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 7cdc6f3e4..029a5f66a 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 4199fd943..29592f9b4 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 7721eacbc..c0b3df555 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 824e96a5e..04b51f810 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 7e2d1f4fc..fc0962cd0 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 a7e1e7663..0987393ec 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 7ed6ab8f3..8a1934d52 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 91995ef06..81e5b51d6 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 85c560fcd..31478a998 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 5d7593431..33d9312ab 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 fdc02d06c..40ef93176 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 eb6f63a2f..ea19cfcc5 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 418cc8f9c..d2b9a4603 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 3b5c25a41..204237570 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 c917e0745..2e4aa2e93 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 000000000..52f12d83e --- /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 000000000..cc081f215 --- /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 000000000..e896919e4 --- /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 000000000..ad2bc888a --- /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 000000000..0352dc891 --- /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 000000000..1f47df1ec --- /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 000000000..fa58a048a --- /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 000000000..8672833ea --- /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 000000000..4e6283586 --- /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 000000000..c719bc4f8 --- /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 000000000..c7c2bb1fb --- /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 000000000..12205f9c9 --- /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 000000000..34b3d72d1 --- /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 000000000..1090e5759 --- /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 000000000..9d903da18 --- /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 000000000..c10fe78b5 --- /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 000000000..6a24cfdba --- /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 000000000..0d7ddda1c --- /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 000000000..3f02a3a3e --- /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 000000000..e7802ed3d --- /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 000000000..ca51974e2 --- /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 000000000..39e244510 --- /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 000000000..c1127d412 --- /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 000000000..da34e44a6 --- /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 000000000..c93659062 --- /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 000000000..50584fff9 --- /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 000000000..2e3b4b4bf --- /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 000000000..bf9502964 --- /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 000000000..929d738ff --- /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 000000000..32f3fd84a --- /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 000000000..a3c615800 --- /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 000000000..0305af0ee --- /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 000000000..f91285ad4 --- /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 f2e682804..7263d42f8 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 c1011d708..40fa7b252 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 000000000..4c4b6c171 --- /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 000000000..3c4907f8c --- /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 000000000..664b7be27 --- /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 000000000..faf0a211f --- /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 000000000..3c3ad6cfd --- /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 000000000..2653f7acc --- /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 000000000..c131f9587 --- /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 000000000..b8d3231f4 --- /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 000000000..7a94c1ad9 --- /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 000000000..b58eace53 --- /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 cedb6ba84..ba16728a5 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 7d5a7ecd5..bdfcdeef9 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 c36384a9e..28b917ca5 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 15c06a2ca..62a0d4d9e 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 e703e3d6a..f99a91cfb 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 b1206b169..63d6bb3f2 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 b4bcf7550..bbf4b7ee5 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 a34eef36a..2a5769421 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/PolyTerra PLA @BBL P1P.json b/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P.json index 7504020d8..5728ac0c5 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 4ed582192..77a037efd 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 c9c27d914..a24021705 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 d3fd2251c..46e2144b4 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 c3444436a..72378493d 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_bvoh.json b/resources/profiles/BBL/filament/fdm_filament_bvoh.json new file mode 100644 index 000000000..2b481e35d --- /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 6f1291c6e..6ec95db4a 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 000000000..1b2efe299 --- /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 572911429..03bc9e566 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pc.json +++ b/resources/profiles/BBL/filament/fdm_filament_pc.json @@ -7,76 +7,76 @@ "cool_plate_temp": [ "0" ], - "eng_plate_temp": [ - "110" - ], - "hot_plate_temp": [ - "110" - ], - "textured_plate_temp": [ - "110" - ], "cool_plate_temp_initial_layer": [ "0" ], + "eng_plate_temp": [ + "110" + ], "eng_plate_temp_initial_layer": [ "110" ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ], "fan_cooling_layer_time": [ "30" ], - "filament_max_volumetric_speed": [ - "23.2" - ], - "filament_type": [ - "PC" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], "fan_max_speed": [ "60" ], "fan_min_speed": [ "10" ], - "overhang_fan_threshold": [ - "25%" + "filament_cost": [ + "20" ], - "overhang_fan_speed": [ - "60" + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_type": [ + "PC" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" ], "nozzle_temperature": [ "280" ], - "temperature_vitrification": [ - "120" - ], - "nozzle_temperature_range_low": [ - "260" + "nozzle_temperature_initial_layer": [ + "270" ], "nozzle_temperature_range_high": [ "290" ], - "slow_down_min_speed": [ - "20" + "nozzle_temperature_range_low": [ + "260" + ], + "overhang_fan_speed": [ + "60" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" ], "slow_down_layer_time": [ "2" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "120" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_pe.json b/resources/profiles/BBL/filament/fdm_filament_pe.json new file mode 100644 index 000000000..8ce20df68 --- /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 000000000..82519f1b2 --- /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 000000000..83a427825 --- /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 700b24df8..3e0225bb7 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 7feaa0a6a..078e12ae4 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: 20240311 =====================\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 S3 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S25 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\nG1 Z4 F1200\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 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;===== nozzle 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 Y1.000 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_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}", + "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\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" } \ 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 567377326..8478b5c81 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,7 +67,7 @@ "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\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 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;===== 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.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\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", 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 62526620e..b1219b59d 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 d7e4726a4..b39a7e025 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" : "1", "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}\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 P1P 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json index 528dcad10..e3952a891 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 1ae5c22b3..3364e0744 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 8e021245c..45ce15c99 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 8da15f1ad..a5a55c74e 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" : "1", "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}\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 P1S 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1S 0.6 nozzle.json index 058eae33f..195857d3e 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 ae628412c..0db7e015b 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 af54617e2..a5196e5c7 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 22c7cf476..4b96419d2 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 34b6e1894..74f5b0e3b 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 06b1cdc2a..9741939bd 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 61bdacbbd..115fab918 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 5b13c5adb..d64d97920 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 eb4bd945b..0ed084037 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 84fb5a17f..46ab176b0 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 8407b6e27..3b36361af 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 aca4485ae..d8e4794ea 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 a81d53911..1799d2773 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 bcbcca7a0..99f878f4f 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 4ccc2d081..6e116866e 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 3d3a04e2a..eea8eab1a 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{endif}\nM142 P1 R35 S40\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}\nM142 P1 R35 S40\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 067e53b5d..e736dc666 100644 --- a/resources/profiles/BBL/machine/fdm_machine_common.json +++ b/resources/profiles/BBL/machine/fdm_machine_common.json @@ -76,7 +76,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": [ @@ -106,7 +106,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 0b5df0897..a46163008 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 152b44e9a..829e91767 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 deb52983a..d05620a78 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 000a6d08d..19c218e4e 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 0ce299634..15f97d190 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 66e56802f..da1f6a89c 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 502c4cdae..70e54ac6c 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 06a7a9eec..5ffde15e9 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 8e7e8cab9..a77c85e63 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 0a87af8bb..b54ff1ac7 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 bc9f93e28..080e4005e 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 f59172238..ddb385860 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 2cbd3c2c9..774597738 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 15c848b8b..7d7f7be45 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 6865d2fed..2d181eae1 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 069a975b0..71e2f43b7 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 c7d6188f2..6424eae3c 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 454b86baf..f135573cf 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 aeb1c1765..5b04803ce 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 777e9f4e4..1c7a15e91 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 ad2143b2c..072bfd59b 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 15a9dc636..19f857782 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 b0ccea002..999505758 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 7c8e7bbbe..4d1c9fa00 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 c848de06c..23393e37b 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 5eb21ef67..cb96b785a 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 8167ee4df..f463a9e06 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 af661fd78..60f8e2686 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 4b2576ef0..56a9bface 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 972961766..9841209d7 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 0b50342c1..37a2a1277 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 9b04506d0..241c0a358 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 3a711c372..549a6d7fe 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 917812c46..66a9004da 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 faef462ee..675c21747 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 4bf79151e..6cb7369ad 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 3fb96a907..74d30722a 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 03afc8bee..172d506ec 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 16c75d85c..d42c4dcd6 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 131b39e8b..0a1a28314 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 830584994..dbe1743fb 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 da83aa813..1acd431c1 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 df9625b60..f2e438994 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 5d3d9b8d6..e90901731 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 342f481af..c1ff7b34a 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 1c5b9def3..c8b97600b 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 568f51d50..d19c428cd 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 227940298..b6d8ecc23 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 1f246929f..5632bdbe2 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 58ac77c4c..fe51c4740 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 d36e464f8..a3cd2eb87 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 32295f8e8..e5f73eab5 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 1ec6906d6..eedbf6577 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 88ef46e48..509404f9c 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 1e0462da7..6df7fae3f 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 2465e38c1..0d12d4ddb 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 447c7994a..f19e70c25 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 7bc6534c7..7b1612a79 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 a1635bd9d..53d29a785 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 ae327ef12..15ebedb2a 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 e1c6f5ebd..91feaa677 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 33edabab4..78b09fc67 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 1b60746ef..cea5a44b6 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 1d05bdfa6..2f38b67fa 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 17c882470..30e9ca38e 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 2c2595cc9..3a261d636 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 c38f5f711..9edb0342a 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 27b9c0312..a62137630 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 abdd58e9b..20e452f19 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 3915f80f4..4c791c460 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 87866d4f7..ed3bd535f 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 4ef6dae40..01505bf22 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 af778978f..629884dc7 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 8a542171d..ca2631fb7 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 5b02a41a1..7f7934ad5 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 f616ccd80..f8388f626 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 e5eaf7207..28082afef 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 54941c532..a143d7b63 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 47ee33688..992bb0f1c 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 a45123964..9be5eed98 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 432bb9292..490c0026c 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 f2ea4704d..f1923e0d6 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 ca64d1e31..4f9bb7b53 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 211a43a31..8c2e794da 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 b05e7cea1..26ad6e580 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 ef0567d6d..910c119eb 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 37b7593e8..164c03866 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 f53720838..e50173119 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 c09f04e21..3f0a4dacb 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 f4978b869..775523f0d 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 5eac111e7..044c7c24c 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 c5bcdf6cd..284206f4f 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 08493a223..affc54538 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 fbeab32f6..b1e8658fc 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 f793ab206..e3778f370 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 54463e5b3..7586ed84b 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 0a61d6aaa..a75637780 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 3448a0f1b..e5ebbcfe3 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 4a40cfb3d..0268a0ea0 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 b7a618da1..51251017b 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 24acdebf3..f259218f1 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 e642efe3f..de5ffe19c 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 39300abc5..e4a2b2aaa 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 547915d19..a647b300b 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 649f3e803..f5115f43b 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 ed00b1679..2c7cb9ba8 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 b0eda7568..d6b15c6eb 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 b29e070b8..571ab55f0 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 9305139f2..69578536b 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 38b90393d..dbf825510 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 a03f301b7..d3e5e0c26 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 29d78d74d..dc3159fb7 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 0299ac8fe..7a5062a36 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 407569608..77c258594 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 8b1312dfb..7669c35cd 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 43895dd83..8090a6461 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 ca90e061e..fcc8b66b8 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 48cb2aac2..64d3187b4 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 c01ea5498..0857a48e0 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 836980d3f..61897f7a7 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 43a8b60f0..80670ce3b 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 cc7d77395..9d54d14c1 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 e76673b43..e22593fb3 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 040df9f8a..9d35f2501 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 be12c21e1..573669d4a 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 ecc31c542..3d60b01d8 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 3baf1fd45..0220f43a0 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/Creality.json b/resources/profiles/Creality.json index ca8810ad6..e8cdb7435 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -84,6 +84,10 @@ "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" @@ -295,8 +299,8 @@ "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.2.json" }, { - "name": "0.12mm Fine @Creality Ender3V3SE", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE.json" + "name": "0.12mm Fine @Creality Ender3V3SE 0.4", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.4.json" }, { "name": "0.12mm Fine @Creality Ender3V3SE 0.6", @@ -403,8 +407,8 @@ "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.2.json" }, { - "name": "0.16mm Optimal @Creality Ender3V3SE", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE.json" + "name": "0.16mm Optimal @Creality Ender3V3SE 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.4.json" }, { "name": "0.16mm Optimal @Creality Ender3V3SE 0.6", @@ -563,8 +567,8 @@ "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.2.json" }, { - "name": "0.20mm Standard @Creality Ender3V3SE", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE.json" + "name": "0.20mm Standard @Creality Ender3V3SE 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.4.json" }, { "name": "0.20mm Standard @Creality Ender3V3SE 0.6", @@ -679,8 +683,8 @@ "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.2.json" }, { - "name": "0.24mm Draft @Creality Ender3V3SE", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE.json" + "name": "0.24mm Draft @Creality Ender3V3SE 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.4.json" }, { "name": "0.24mm Draft @Creality Ender3V3SE 0.6", @@ -814,6 +818,18 @@ "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" @@ -1250,6 +1266,10 @@ "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" 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 000000000..4f5a07ef3 Binary files /dev/null and b/resources/profiles/Creality/Creality Sermoon V1_cover.png differ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json index e00049c08..67a76a08d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json @@ -47,12 +47,12 @@ "8000" ], "machine_max_acceleration_z": [ - "500", - "500" + "300", + "300" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ "500", @@ -71,12 +71,12 @@ "5" ], "machine_max_jerk_x": [ - "10", - "10" + "7", + "7" ], "machine_max_jerk_y": [ - "10", - "10" + "7", + "7" ], "machine_max_jerk_z": [ "0.4", @@ -91,8 +91,11 @@ "retraction_minimum_travel": [ "2" ], + "wipe_distance": [ + "2" + ], "retract_before_wipe": [ - "70%" + "0%" ], "retraction_length": [ "0.5" @@ -116,11 +119,11 @@ "default_filament_profile": [ "Creality Generic PLA @Ender-3V3-all" ], - "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \n \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.0 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.0 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-1.7 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-1.7 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", - "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z5 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", + "machine_start_gcode": "M220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp\nG1 X-2.0 Y20 Z0.28 F5000.0 ;Move to start position\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X-2.0 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X-1.7 Y145.0 Z0.28 F5000.0 ;Move to side a little\nG1 X-1.7 Y30 Z0.28 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", + "machine_end_gcode": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z20 ;Raise Z more\nG90 ;Absolute positionning\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", "thumbnails": [ "96x96", "300x300" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json index 0ad476040..c004b1c4c 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_retracting": [ "2500", "2500" ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -117,8 +117,7 @@ "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json index 4911dcc32..532c2b1bf 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_variant": "0.4", "gcode_flavor": "marlin2", "printer_structure": "i3", - "default_print_profile": "0.20mm Standard @Creality Ender3V3SE", + "default_print_profile": "0.20mm Standard @Creality Ender3V3SE 0.4", "extruder_clearance_height_to_rod": "47", "extruder_clearance_max_radius": "90", "extruder_clearance_radius": "90", @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_retracting": [ "2500", "2500" ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -117,8 +117,7 @@ "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json index 75b28a18a..f8f186ad4 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_retracting": [ "2500", "2500" ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -117,8 +117,7 @@ "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json index 59e8f249d..036ea052e 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json @@ -28,44 +28,44 @@ "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_retracting": [ "2500", "2500" ], "machine_max_acceleration_travel": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_x": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_y": [ - "5000", - "5000" + "2500", + "2500" ], "machine_max_acceleration_z": [ "500", "500" ], "machine_max_speed_e": [ - "100", - "100" + "40", + "40" ], "machine_max_speed_x": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_y": [ - "500", - "500" + "250", + "250" ], "machine_max_speed_z": [ - "30", - "30" + "5", + "5" ], "machine_max_jerk_e": [ "5", @@ -117,8 +117,7 @@ "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp \nG28 ;Home \nM420 S1; Enable mesh leveling \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positionning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z10 ;Raise Z more \nG90 ;Absolute positionning \n \nG1 X0 Y220 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \n \nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", + "disable_m73": "1", "thumbnails": [ - "96x96", - "300x300" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json new file mode 100644 index 000000000..bff01e508 --- /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 000000000..93bcb4bd8 --- /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 Ender3V3KE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json index b67f41ee2..feebc0013 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json @@ -13,7 +13,7 @@ "bottom_shell_layers": "5", "bottom_shell_thickness": "0", "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,21 +23,21 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "5000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", - "infill_combination": "0", + "infill_combination": "1", "sparse_infill_line_width": "0.45", "infill_wall_overlap": "25%", "interface_shells": "0", @@ -49,10 +49,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -69,9 +69,9 @@ "support_type": "normal(auto)", "support_style": "grid", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", + "support_top_z_distance": "0.16", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "4", @@ -88,30 +88,30 @@ "tree_support_wall_count": "0", "detect_thin_wall": "1", "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", + "top_surface_line_width": "0.42", "top_shell_layers": "5", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", "outer_wall_speed": "250", "inner_wall_speed": "300", - "internal_solid_infill_speed": "300", + "internal_solid_infill_speed": "250", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json similarity index 97% rename from resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json index b9b5e749f..6193b866f 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.12mm Fine @Creality Ender3V3SE", + "name": "0.12mm Fine @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -113,6 +113,6 @@ "initial_layer_jerk": "8", "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json index 77463015b..13b0f53b3 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json @@ -13,7 +13,7 @@ "bottom_shell_layers": "4", "bottom_shell_thickness": "0", "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,21 +23,21 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "5000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", - "infill_combination": "0", + "infill_combination": "1", "sparse_infill_line_width": "0.45", "infill_wall_overlap": "25%", "interface_shells": "0", @@ -49,10 +49,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -71,7 +71,7 @@ "support_on_build_plate_only": "0", "support_top_z_distance": "0.2", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "3", @@ -88,30 +88,30 @@ "tree_support_wall_count": "0", "detect_thin_wall": "1", "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", + "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", "outer_wall_speed": "250", "inner_wall_speed": "300", - "internal_solid_infill_speed": "300", + "internal_solid_infill_speed": "250", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json similarity index 97% rename from resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json index 9f784cdb1..9c5884cf0 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.16mm Optimal @Creality Ender3V3SE", + "name": "0.16mm Optimal @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -113,6 +113,6 @@ "initial_layer_jerk": "8", "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json new file mode 100644 index 000000000..2300af43a --- /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 Ender3V3KE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json index e1dd35fd3..e492dadef 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json @@ -13,7 +13,7 @@ "bottom_shell_layers": "4", "bottom_shell_thickness": "0", "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,21 +23,21 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "5000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", - "infill_combination": "0", + "infill_combination": "1", "sparse_infill_line_width": "0.45", "infill_wall_overlap": "25%", "interface_shells": "0", @@ -49,10 +49,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -69,9 +69,9 @@ "support_type": "normal(auto)", "support_style": "grid", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", + "support_top_z_distance": "0.16", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -88,30 +88,30 @@ "tree_support_wall_count": "0", "detect_thin_wall": "1", "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", + "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", "outer_wall_speed": "250", "inner_wall_speed": "300", - "internal_solid_infill_speed": "300", + "internal_solid_infill_speed": "250", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json similarity index 97% rename from resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json index 1978a6e65..55bf46c03 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.20mm Standard @Creality Ender3V3SE", + "name": "0.20mm Standard @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -113,6 +113,6 @@ "initial_layer_jerk": "8", "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json new file mode 100644 index 000000000..256696e05 --- /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 Ender3V3KE.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json index 01ab4fa9c..2d2bfe256 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json @@ -13,7 +13,7 @@ "bottom_shell_layers": "4", "bottom_shell_thickness": "0", "bridge_flow": "0.95", - "bridge_speed": "100", + "bridge_speed": "65", "brim_type": "no_brim", "brim_width": "5", "brim_object_gap": "0.1", @@ -23,21 +23,21 @@ "top_surface_acceleration": "5000", "bridge_no_support": "0", "draft_shield": "disabled", - "elefant_foot_compensation": "0", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.4", + "elefant_foot_compensation": "0.1", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", + "line_width": "0.42", "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "grid", - "initial_layer_acceleration": "500", + "initial_layer_acceleration": "1000", "travel_acceleration": "5000", "inner_wall_acceleration": "5000", - "outer_wall_acceleration": "2500", + "outer_wall_acceleration": "5000", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", - "infill_combination": "0", + "infill_combination": "1", "sparse_infill_line_width": "0.45", "infill_wall_overlap": "25%", "interface_shells": "0", @@ -49,10 +49,10 @@ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.42", + "inner_wall_line_width": "0.45", "wall_loops": "2", "print_settings_id": "", "raft_layers": "0", @@ -69,9 +69,9 @@ "support_type": "normal(auto)", "support_style": "grid", "support_on_build_plate_only": "0", - "support_top_z_distance": "0.15", + "support_top_z_distance": "0.16", "support_filament": "0", - "support_line_width": "0.38", + "support_line_width": "0.42", "support_interface_loop_pattern": "0", "support_interface_filament": "0", "support_interface_top_layers": "2", @@ -88,30 +88,30 @@ "tree_support_wall_count": "0", "detect_thin_wall": "1", "top_surface_pattern": "monotonic", - "top_surface_line_width": "0.4", + "top_surface_line_width": "0.42", "top_shell_layers": "4", "top_shell_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", "outer_wall_speed": "250", "inner_wall_speed": "300", - "internal_solid_infill_speed": "300", + "internal_solid_infill_speed": "250", "top_surface_speed": "250", - "gap_infill_speed": "100", + "gap_infill_speed": "200", "sparse_infill_speed": "300", - "travel_speed": "300", + "travel_speed": "400", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "default_jerk": "7", - "outer_wall_jerk": "8", + "outer_wall_jerk": "7", "inner_wall_jerk": "7", - "infill_jerk": "8", + "infill_jerk": "7", "top_surface_jerk": "7", "initial_layer_jerk": "7", - "travel_jerk": "8", + "travel_jerk": "7", "compatible_printers": [ "Creality Ender-3 V3 KE 0.4 nozzle" ] diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json similarity index 97% rename from resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE.json rename to resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json index 43f9be098..4883e507a 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json @@ -1,7 +1,7 @@ { "type": "process", "setting_id": "GP004", - "name": "0.24mm Draft @Creality Ender3V3SE", + "name": "0.24mm Draft @Creality Ender3V3SE 0.4", "from": "system", "inherits": "fdm_process_creality_common", "instantiation": "true", @@ -113,6 +113,6 @@ "initial_layer_jerk": "8", "travel_jerk": "8", "compatible_printers": [ - "Creality Ender-3 V3 SE" + "Creality Ender-3 V3 SE 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json new file mode 100644 index 000000000..1371d26cc --- /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/Flashforge/flashfoge_adventurer5m_series_buildplate_model.STL b/resources/profiles/Flashforge/flashfoge_adventurer5m_series_buildplate_model.STL deleted file mode 100644 index 810b7f900..000000000 Binary files a/resources/profiles/Flashforge/flashfoge_adventurer5m_series_buildplate_model.STL and /dev/null differ diff --git a/resources/profiles/Flashforge/flashforge_adventurer5m_series_buildplate_model.STL b/resources/profiles/Flashforge/flashforge_adventurer5m_series_buildplate_model.STL new file mode 100644 index 000000000..ba3120726 Binary files /dev/null and b/resources/profiles/Flashforge/flashforge_adventurer5m_series_buildplate_model.STL differ diff --git a/resources/profiles/Flashforge/flashfoge_adventurer_5m_series_hotend.stl b/resources/profiles/Flashforge/flashforge_adventurer_5m_series_hotend.stl similarity index 100% rename from resources/profiles/Flashforge/flashfoge_adventurer_5m_series_hotend.stl rename to resources/profiles/Flashforge/flashforge_adventurer_5m_series_hotend.stl diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json index 5d12cff14..ebd4b9d7f 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 @@ -61,7 +61,7 @@ "extruder_clearance_radius": [ "76" ], "extruder_clearance_height_to_rod": [ "27" ], "extruder_clearance_height_to_lid": [ "150" ], - "nozzle_type": "stainless_steel" + "nozzle_type": "hardened_steel" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json index 16a9e3011..c0a024542 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 @@ -61,6 +61,6 @@ "extruder_clearance_radius": [ "76" ], "extruder_clearance_height_to_rod": [ "27" ], "extruder_clearance_height_to_lid": [ "150" ], - "nozzle_type": "stainless_steel" + "nozzle_type": "hardened_steel" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json index 6420bf538..6e4d1e81e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json @@ -5,8 +5,8 @@ "nozzle_diameter": "0.4;0.6", "machine_tech": "FFF", "family": "Flashforge", - "bed_model": "flashfoge_adventurer5m_series_buildplate_model.STL", + "bed_model": "flashforge_adventurer5m_series_buildplate_model.STL", "bed_texture": "flashforge_adventurer5m_buildplate_texture.png", - "hotend_model": "", + "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json index dc9023abb..bd95c9a1f 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json @@ -5,8 +5,8 @@ "nozzle_diameter": "0.4;0.6", "machine_tech": "FFF", "family": "Flashforge", - "bed_model": "flashfoge_adventurer5m_series_buildplate_model.STL", + "bed_model": "flashforge_adventurer5m_series_buildplate_model.STL", "bed_texture": "flashforge_adventurer5m_buildplate_texture.png", - "hotend_model": "", + "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json index faf7e6222..6f30c8ede 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_adventurer3_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json index 5777b8ff9..537a691cc 100644 --- a/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json +++ b/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json @@ -19,10 +19,10 @@ "machine_max_acceleration_x": [ "500" ], "machine_max_acceleration_y": [ "500" ], "machine_max_acceleration_z": [ "100" ], - "machine_max_speed_e": [ "60" ], + "machine_max_speed_e": [ "30" ], "machine_max_speed_x": [ "150" ], "machine_max_speed_y": [ "150" ], - "machine_max_speed_z": [ "10" ], + "machine_max_speed_z": [ "20" ], "machine_max_jerk_e": [ "2.5" ], "machine_max_jerk_x": [ "8" ], "machine_max_jerk_y": [ "8" ], @@ -36,11 +36,13 @@ "deretraction_speed": [ "25" ], "z_hop": [ "0.4" ], "single_extruder_multi_material": "1", + "enable_filament_ramming": "0", + "purge_in_prime_tower": "0", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ "Flashforge PLA" ], - "machine_start_gcode": "M140 S[bed_temperature_initial_layer] T0\nM104 S[nozzle_temperature_initial_layer] T0\nM104 S0 T1\nM107\nM900 K[pressure_advance] T0\nG90\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255", - "machine_end_gcode": "M104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91\nM18", + "machine_start_gcode": "M140 S[bed_temperature_initial_layer] T0\nM104 S[nozzle_temperature_initial_layer] T0\nM104 S0 T1\nM107\nM900 K[pressure_advance] T0\nG90\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255\n;pre-extrude\nM108 T0\nG1 X-37.50 Y-75.00 F6000\nM106\nG1 Z0.200 F420\nG1 X-37.50 Y-75.00 F6000\nG1 X37.50 Y-75.00 E9.5 F1200\n", + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F9000\nM104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91\nM18", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "scan_first_layer": "0", @@ -53,5 +55,10 @@ "extruder_clearance_height_to_lid": "150", "manual_filament_change": "1", "nozzle_type": "stainless_steel", - "auxiliary_fan": "0" + "auxiliary_fan": "1", + "parking_pos_retraction": "0", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "extra_loading_move": "0", + "version": "2.0.2.0" } diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json index 1f070a751..a60d3b222 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json @@ -43,8 +43,7 @@ "enable_arc_fitting": "0", "initial_layer_min_bead_width": "100", "min_bead_width": "100", - "detect_thin_wall": "1", - "elefant_foot_compensation": "0", + "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", "overhang_speed_classic": "0", "internal_bridge_speed": "48", @@ -54,6 +53,7 @@ "slow_down_layers": "1", "wipe_speed": "200", "reduce_crossing_wall": "1", + "max_travel_detour_distance": "50", "compatible_printers": [ "Flashforge Adventurer 3 Series 0.4 Nozzle" ], diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD5M 0.4 Nozzle.json index 662b26542..12a480655 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 305ccce39..65baa249c 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 Fast @Flashforge AD3 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json index f254113bc..9fb5571ce 100644 --- a/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json @@ -43,8 +43,7 @@ "enable_arc_fitting": "0", "initial_layer_min_bead_width": "100", "min_bead_width": "100", - "detect_thin_wall": "1", - "elefant_foot_compensation": "0", + "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", "overhang_speed_classic": "0", "internal_bridge_speed": "64", @@ -54,6 +53,7 @@ "slow_down_layers": "1", "wipe_speed": "200", "reduce_crossing_wall": "1", + "max_travel_detour_distance": "50", "compatible_printers": [ "Flashforge Adventurer 3 Series 0.4 Nozzle" ], diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json index 92dcb51b0..972ad604d 100644 --- a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json @@ -43,8 +43,7 @@ "enable_arc_fitting": "0", "initial_layer_min_bead_width": "100", "min_bead_width": "100", - "detect_thin_wall": "1", - "elefant_foot_compensation": "0", + "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", "overhang_speed_classic": "0", "internal_bridge_speed": "50", @@ -54,6 +53,7 @@ "slow_down_layers": "1", "wipe_speed": "200", "reduce_crossing_wall": "1", + "max_travel_detour_distance": "50", "compatible_printers": [ "Flashforge Adventurer 3 Series 0.6 Nozzle" ], diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M 0.6 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD5M 0.6 Nozzle.json index 76f0ab91e..23deef5f1 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 74d314d74..8e1b3f5ec 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/Kingroon.json b/resources/profiles/Kingroon.json index 01a9377ea..292090de8 100644 --- a/resources/profiles/Kingroon.json +++ b/resources/profiles/Kingroon.json @@ -12,6 +12,10 @@ { "name": "Kingroon KP3S PRO V2", "sub_path": "machine/Kingroon KP3S PRO V2.json" + }, + { + "name": "Kingroon KP3S 3.0", + "sub_path": "machine/Kingroon KP3S 3.0.json" } ], "process_list": [ @@ -34,6 +38,10 @@ { "name": "0.20mm Standard @Kingroon KP3S PRO V2", "sub_path": "process/0.20mm Standard @Kingroon KP3S PRO V2.json" + }, + { + "name": "0.30mm Standard @Kingroon KP3S 3.0", + "sub_path": "process/0.30mm Standard @Kingroon KP3S 3.0.json" } ], "filament_list": [ @@ -130,6 +138,10 @@ { "name": "Kingroon KP3S PRO V2 0.4 nozzle", "sub_path": "machine/Kingroon KP3S PRO V2 0.4 nozzle.json" + }, + { + "name": "Kingroon KP3S 0.4 nozzle", + "sub_path": "machine/Kingroon KP3S 3.0 0.4 nozzle.json" } ] } diff --git a/resources/profiles/Kingroon/Kingroon KP3S 3.0_cover.png b/resources/profiles/Kingroon/Kingroon KP3S 3.0_cover.png new file mode 100644 index 000000000..1862987bb Binary files /dev/null and b/resources/profiles/Kingroon/Kingroon KP3S 3.0_cover.png differ diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json b/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json index b455ced60..5e11d9665 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic ABS.json @@ -14,6 +14,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json b/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json index d79ce2e17..2231d6a9f 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic ASA.json @@ -14,6 +14,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json b/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json index f1dd009cd..eac58e6a0 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PA-CF.json @@ -20,6 +20,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PA.json b/resources/profiles/Kingroon/filament/Kingroon Generic PA.json index eeeeda9eb..00e4ee468 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PA.json @@ -17,6 +17,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PC.json b/resources/profiles/Kingroon/filament/Kingroon Generic PC.json index 150815928..14378164d 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PC.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PC.json @@ -14,6 +14,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json b/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json index a89100b1e..d63d8fac2 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PETG.json @@ -44,6 +44,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json b/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json index 6a6c8d92f..d96b58a6c 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PLA-CF.json @@ -20,6 +20,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json b/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json index 2ae13dd84..e4b457bce 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PLA.json @@ -8,6 +8,7 @@ "inherits": "fdm_filament_pla", "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json b/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json index ea4ac2a1c..63e253dcf 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic PVA.json @@ -20,6 +20,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json b/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json index 95fd43add..8c07c5871 100644 --- a/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json +++ b/resources/profiles/Kingroon/filament/Kingroon Generic TPU.json @@ -11,6 +11,7 @@ ], "compatible_printers": [ "Kingroon KP3S PRO S1 0.4 nozzle", - "Kingroon KP3S PRO V2 0.4 nozzle" + "Kingroon KP3S PRO V2 0.4 nozzle", + "Kingroon KP3S 3.0 0.4 nozzle" ] } diff --git a/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0 0.4 nozzle.json b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0 0.4 nozzle.json new file mode 100644 index 000000000..1af9a09ef --- /dev/null +++ b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0 0.4 nozzle.json @@ -0,0 +1,96 @@ +{ + "setting_id": "GM003", + "name": "Kingroon KP3S 3.0 0.4 nozzle", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "Kingroon KP3S 3.0", + "default_print_profile": "0.30mm Standard @Kingroon KP3S 3.0", + "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\n M117 Purge extruder\n G1 X2 Y20 Z0.3 F5000.0 ; move to start-line position\n G1 X2 Y175.0 Z0.3 F1500.0 E15 ; draw 1st line\n G1 X2 Y175.0 Z0.4 F5000.0 ; move to side a little\n G1 X2 Y20 Z0.4 F1500.0 E30 ; draw 2nd line\n G92 E0 ; reset extruder\n G1 Z1.0 F3000 ; move z up little to prevent scratching of surface", + "type": "machine", + "nozzle_diameter": ["0.4"], + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "enable_filament_ramming": "0", + "extra_loading_move": "0", + "fan_speedup_overhangs": "0", + "fan_speedup_time": "1", + "from": "system", + "machine_max_acceleration_e": [ + "10000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "10000", + "9000" + ], + "machine_max_acceleration_retracting": [ + "10000", + "9000" + ], + "machine_max_acceleration_x": [ + "4000", + "9000" + ], + "machine_max_acceleration_y": [ + "4000", + "9000" + ], + "machine_max_acceleration_z": [ + "1100", + "100" + ], + "machine_max_speed_e": [ + "50", + "60" + ], + "machine_max_speed_x": [ + "300", + "200" + ], + "machine_max_speed_y": [ + "300", + "200" + ], + "machine_max_speed_z": [ + "30", + "12" + ], + "manual_filament_change": "1", + "min_layer_height": [ + "0.1" + ], + "nozzle_type": "brass", + "parking_pos_retraction": "0", + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "printable_height": "180", + "purge_in_prime_tower": "0", + "retract_length_toolchange": [ + "0.5" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.3" + ], + "retraction_minimum_travel": [ + "3" + ], + "retraction_speed": [ + "30" + ], + "support_air_filtration": "0", + "support_chamber_temp_control": "0", + "wipe": [ + "1" + ], + "z_hop": [ + "0.2" + ] +} diff --git a/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0.json b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0.json new file mode 100644 index 000000000..8b5b020da --- /dev/null +++ b/resources/profiles/Kingroon/machine/Kingroon KP3S 3.0.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Kingroon KP3S 3.0", + "model_id": "Kingroon KP3S 3.0", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "Kingroon", + "bed_model": "kp3s_bed.stl", + "bed_texture": "Kingroon_buildplate.png", + "hotend_model": "", + "default_materials": "Kingroon Generic ABS;Kingroon Generic PLA;Kingroon Generic PLA-CF;Kingroon Generic PETG;Kingroon Generic TPU;Kingroon Generic ASA;Kingroon Generic PC;Kingroon Generic PVA;Kingroon Generic PA;Kingroon Generic PA-CF" +} diff --git a/resources/profiles/Kingroon/process/0.30mm Standard @Kingroon KP3S 3.0.json b/resources/profiles/Kingroon/process/0.30mm Standard @Kingroon KP3S 3.0.json new file mode 100644 index 000000000..563f097ca --- /dev/null +++ b/resources/profiles/Kingroon/process/0.30mm Standard @Kingroon KP3S 3.0.json @@ -0,0 +1,87 @@ +{ + "type": "process", + "compatible_printers": [ + "Kingroon KP3S 3.0 0.4 nozzle" + ], + "name": "0.30mm Standard @Kingroon KP3S 3.0", + "inherits": "fdm_process_common", + "print_settings_id": "0.30mm Standard @Kingroon KP3S 3.0", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "500", + "bridge_speed": "30", + "brim_type": "no_brim", + "default_acceleration": "500", + "detect_narrow_internal_solid_infill": "0", + "dont_filter_internal_bridges": "limited", + "elefant_foot_compensation": "0.2", + "enable_prime_tower": "1", + "enable_support": "0", + "filter_out_gap_fill": "0.9", + "flush_into_support": "0", + "from": "User", + "gap_fill_target": "topbottom", + "gap_infill_speed": "40", + "infill_combination": "1", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "20", + "initial_layer_travel_speed": "250", + "inner_wall_acceleration": "700", + "inner_wall_line_width": "0.44", + "inner_wall_speed": "70", + "internal_bridge_speed": "50", + "internal_solid_infill_acceleration": "2000", + "internal_solid_infill_line_width": "0.5", + "internal_solid_infill_pattern": "monotonicline", + "internal_solid_infill_speed": "70", + "is_custom_defined": "0", + "layer_height": "0.3", + "line_width": "0.44", + "max_travel_detour_distance": "70", + "max_volumetric_extrusion_rate_slope": "20", + "outer_wall_acceleration": "500", + "outer_wall_line_width": "0.44", + "outer_wall_speed": "50", + "overhang_1_4_speed": "70%", + "overhang_2_4_speed": "50%", + "overhang_3_4_speed": "30%", + "overhang_4_4_speed": "20%", + "prime_tower_brim_width": "1", + "prime_tower_width": "20", + "prime_volume": "30", + "raft_first_layer_density": "100%", + "reduce_crossing_wall": "1", + "reduce_infill_retraction": "0", + "scarf_joint_speed": "70", + "seam_gap": "0", + "seam_slope_entire_loop": "1", + "seam_slope_start_height": "0.1", + "skirt_loops": "1", + "sparse_infill_acceleration": "1500", + "sparse_infill_line_width": "0.5", + "sparse_infill_pattern": "3dhoneycomb", + "sparse_infill_speed": "70", + "support_base_pattern": "default", + "support_interface_pattern": "auto", + "support_interface_speed": "40", + "support_line_width": "0.44", + "support_speed": "70", + "support_threshold_angle": "40", + "support_type": "normal(auto)", + "top_surface_acceleration": "500", + "top_surface_line_width": "0.44", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "40", + "travel_acceleration": "4000", + "travel_speed": "250", + "tree_support_angle_slow": "35", + "tree_support_branch_angle_organic": "45", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "1", + "tree_support_top_rate": "50%", + "version": "2.0.0.0", + "wall_transition_angle": "59", + "wipe_before_external_loop": "1", + "wipe_tower_bridging": "2" +} diff --git a/resources/profiles/MagicMaker.json b/resources/profiles/MagicMaker.json new file mode 100644 index 000000000..1da3457e3 --- /dev/null +++ b/resources/profiles/MagicMaker.json @@ -0,0 +1,226 @@ +{ + "name": "MagicMaker", + "version": "02.00.00.00", + "force_update": "0", + "description": "MagicMaker configurations", + "machine_model_list": [ + { + "name": "MM hqs hj", + "sub_path": "machine/MM hqs hj.json" + }, + { + "name": "MM hqs SF", + "sub_path": "machine/MM hqs SF.json" + }, + { + "name": "MM hj SK", + "sub_path": "machine/MM hj SK.json" + }, + { + "name": "MM BoneKing", + "sub_path": "machine/MM BoneKing.json" + }, + { + "name": "MM slb", + "sub_path": "machine/MM slb.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.10mm Fine @MM slb", + "sub_path": "process/0.10mm Fine @MM slb.json" + }, + { + "name": "0.20mm Standard @MM slb", + "sub_path": "process/0.20mm Standard @MM slb.json" + }, + { + "name": "0.30mm Draft @MM slb", + "sub_path": "process/0.30mm Draft @MM slb.json" + }, + { + "name": "0.10mm Fine @MM hqs hj", + "sub_path": "process/0.10mm Fine @MM hqs hj.json" + }, + { + "name": "0.20mm Standard @MM hqs hj", + "sub_path": "process/0.20mm Standard @MM hqs hj.json" + }, + { + "name": "0.30mm Draft @MM hqs hj", + "sub_path": "process/0.30mm Draft @MM hqs hj.json" + }, + { + "name": "0.10mm Fine @MM hqs SF", + "sub_path": "process/0.10mm Fine @MM hqs SF.json" + }, + { + "name": "0.20mm Standard @MM hqs SF", + "sub_path": "process/0.20mm Standard @MM hqs SF.json" + }, + { + "name": "0.30mm Draft @MM hqs SF", + "sub_path": "process/0.30mm Draft @MM hqs SF.json" + }, + { + "name": "0.10mm Fine Fast @MM hqs SF", + "sub_path": "process/0.10mm Fine Fast @MM hqs SF.json" + }, + { + "name": "0.20mm Standard Fast @MM hqs SF", + "sub_path": "process/0.20mm Standard Fast @MM hqs SF.json" + }, + { + "name": "0.30mm Draft Fast @MM hqs SF", + "sub_path": "process/0.30mm Draft Fast @MM hqs SF.json" + }, + { + "name": "0.10mm Fine @MM hj SK", + "sub_path": "process/0.10mm Fine @MM hj SK.json" + }, + { + "name": "0.20mm Standard @MM hj SK", + "sub_path": "process/0.20mm Standard @MM hj SK.json" + }, + { + "name": "0.30mm Draft @MM hj SK", + "sub_path": "process/0.30mm Draft @MM hj SK.json" + }, + { + "name": "0.10mm Fine Fast @MM hj SK", + "sub_path": "process/0.10mm Fine Fast @MM hj SK.json" + }, + { + "name": "0.20mm Standard Fast @MM hj SK", + "sub_path": "process/0.20mm Standard Fast @MM hj SK.json" + }, + { + "name": "0.30mm Draft Fast @MM hj SK", + "sub_path": "process/0.30mm Draft Fast @MM hj SK.json" + }, + { + "name": "0.10mm Fine @MM BoneKing", + "sub_path": "process/0.10mm Fine @MM BoneKing.json" + }, + { + "name": "0.20mm Standard @MM BoneKing", + "sub_path": "process/0.20mm Standard @MM BoneKing.json" + }, + { + "name": "0.30mm Draft @MM BoneKing", + "sub_path": "process/0.30mm Draft @MM BoneKing.json" + }, + { + "name": "0.10mm Fine Fast @MM BoneKing", + "sub_path": "process/0.10mm Fine Fast @MM BoneKing.json" + }, + { + "name": "0.20mm Standard Fast @MM BoneKing", + "sub_path": "process/0.20mm Standard Fast @MM BoneKing.json" + }, + { + "name": "0.30mm Draft Fast @MM BoneKing", + "sub_path": "process/0.30mm Draft Fast @MM BoneKing.json" + }, + { + "name": "0.12mm Fine SuperFast @MM BoneKing", + "sub_path": "process/0.12mm Fine SuperFast @MM BoneKing.json" + }, + { + "name": "0.12mm Fine BestFast @MM BoneKing", + "sub_path": "process/0.12mm Fine BestFast @MM BoneKing.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "fdm_filament_peek", + "sub_path": "filament/fdm_filament_peek.json" + }, + { + "name": "MM Generic PLA", + "sub_path": "filament/MM Generic PLA.json" + }, + { + "name": "MM Generic PETG", + "sub_path": "filament/MM Generic PETG.json" + }, + { + "name": "MM Generic ABS", + "sub_path": "filament/MM Generic ABS.json" + }, + { + "name": "MM Generic TPU", + "sub_path": "filament/MM Generic TPU.json" + }, + { + "name": "MM Generic PC", + "sub_path": "filament/MM Generic PC.json" + }, + { + "name": "MM Generic PA", + "sub_path": "filament/MM Generic PA.json" + }, + { + "name": "MM Generic PEEK", + "sub_path": "filament/MM Generic PEEK.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "MM hqs hj 0.4 nozzle", + "sub_path": "machine/MM hqs hj 0.4 nozzle.json" + }, + { + "name": "MM hqs SF 0.4 nozzle", + "sub_path": "machine/MM hqs SF 0.4 nozzle.json" + }, + { + "name": "MM hj SK 0.4 nozzle", + "sub_path": "machine/MM hj SK 0.4 nozzle.json" + }, + { + "name": "MM BoneKing 0.4 nozzle", + "sub_path": "machine/MM BoneKing 0.4 nozzle.json" + }, + { + "name": "MM slb 0.4 nozzle", + "sub_path": "machine/MM slb 0.4 nozzle.json" + } + ] +} diff --git a/resources/profiles/MagicMaker/120_buildplate_model.stl b/resources/profiles/MagicMaker/120_buildplate_model.stl new file mode 100644 index 000000000..2c4ecb81e Binary files /dev/null and b/resources/profiles/MagicMaker/120_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/125_buildplate_model.stl b/resources/profiles/MagicMaker/125_buildplate_model.stl new file mode 100644 index 000000000..e3e9f0807 Binary files /dev/null and b/resources/profiles/MagicMaker/125_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/150_buildplate_model.stl b/resources/profiles/MagicMaker/150_buildplate_model.stl new file mode 100644 index 000000000..6b8b197d4 Binary files /dev/null and b/resources/profiles/MagicMaker/150_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/160_buildplate_model.stl b/resources/profiles/MagicMaker/160_buildplate_model.stl new file mode 100644 index 000000000..be6b21436 Binary files /dev/null and b/resources/profiles/MagicMaker/160_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/220210_buildplate_model.stl b/resources/profiles/MagicMaker/220210_buildplate_model.stl new file mode 100644 index 000000000..5afb83c33 Binary files /dev/null and b/resources/profiles/MagicMaker/220210_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/220_buildplate_model.stl b/resources/profiles/MagicMaker/220_buildplate_model.stl new file mode 100644 index 000000000..01f43ca84 Binary files /dev/null and b/resources/profiles/MagicMaker/220_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/250_buildplate_model.stl b/resources/profiles/MagicMaker/250_buildplate_model.stl new file mode 100644 index 000000000..0b6d7de9b Binary files /dev/null and b/resources/profiles/MagicMaker/250_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/310_buildplate_model.stl b/resources/profiles/MagicMaker/310_buildplate_model.stl new file mode 100644 index 000000000..21c407a49 Binary files /dev/null and b/resources/profiles/MagicMaker/310_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/MM BoneKing_cover.png b/resources/profiles/MagicMaker/MM BoneKing_cover.png new file mode 100644 index 000000000..18b5ad2d1 Binary files /dev/null and b/resources/profiles/MagicMaker/MM BoneKing_cover.png differ diff --git a/resources/profiles/MagicMaker/MM hj sk_cover.png b/resources/profiles/MagicMaker/MM hj sk_cover.png new file mode 100644 index 000000000..cd910e220 Binary files /dev/null and b/resources/profiles/MagicMaker/MM hj sk_cover.png differ diff --git a/resources/profiles/MagicMaker/MM hj_buildplate_model.stl b/resources/profiles/MagicMaker/MM hj_buildplate_model.stl new file mode 100644 index 000000000..ab78d2fc4 Binary files /dev/null and b/resources/profiles/MagicMaker/MM hj_buildplate_model.stl differ diff --git a/resources/profiles/MagicMaker/MM hqs SF_cover.png b/resources/profiles/MagicMaker/MM hqs SF_cover.png new file mode 100644 index 000000000..fd0a4ba09 Binary files /dev/null and b/resources/profiles/MagicMaker/MM hqs SF_cover.png differ diff --git a/resources/profiles/MagicMaker/MM hqs hj_cover.png b/resources/profiles/MagicMaker/MM hqs hj_cover.png new file mode 100644 index 000000000..3f5cd8f9e Binary files /dev/null and b/resources/profiles/MagicMaker/MM hqs hj_cover.png differ diff --git a/resources/profiles/MagicMaker/MM slb_cover.png b/resources/profiles/MagicMaker/MM slb_cover.png new file mode 100644 index 000000000..0e186b74c Binary files /dev/null and b/resources/profiles/MagicMaker/MM slb_cover.png differ diff --git a/resources/profiles/MagicMaker/MM_buildplate_texture.png b/resources/profiles/MagicMaker/MM_buildplate_texture.png new file mode 100644 index 000000000..56a2cc04e Binary files /dev/null and b/resources/profiles/MagicMaker/MM_buildplate_texture.png differ diff --git a/resources/profiles/MagicMaker/filament/MM Generic ABS.json b/resources/profiles/MagicMaker/filament/MM Generic ABS.json new file mode 100644 index 000000000..3dec8e66d --- /dev/null +++ b/resources/profiles/MagicMaker/filament/MM Generic ABS.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "is_custom_defined": "0", + "name": "MM Generic ABS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_max_volumetric_speed": [ + "50" + ], + "fan_max_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "full_fan_speed_layer": [ + "5" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "slow_down_min_speed": [ + "5" + ], + "compatible_printers": [ + "MM hqs hj 0.4 nozzle", + "MM hqs SF 0.4 nozzle", + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle", + "MM slb 0.4 nozzle" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/filament/MM Generic PA.json b/resources/profiles/MagicMaker/filament/MM Generic PA.json new file mode 100644 index 000000000..cfffeec42 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/MM Generic PA.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "is_custom_defined": "0", + "name": "MM Generic PA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "chamber_temperature": [ + "60" + ], + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "100" + ], + "filament_diameter": [ + "1.75" + ], + "full_fan_speed_layer": [ + "5" + ], + "compatible_printers": [ + "MM hqs hj 0.4 nozzle", + "MM hqs SF 0.4 nozzle", + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/filament/MM Generic PC.json b/resources/profiles/MagicMaker/filament/MM Generic PC.json new file mode 100644 index 000000000..3bc754c45 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/MM Generic PC.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "is_custom_defined": "0", + "name": "MM Generic PC", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "100" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "full_fan_speed_layer": [ + "5" + ], + "nozzle_temperature": [ + "270" + ], + "compatible_printers": [ + "MM hqs hj 0.4 nozzle", + "MM hqs SF 0.4 nozzle", + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/filament/MM Generic PEEK.json b/resources/profiles/MagicMaker/filament/MM Generic PEEK.json new file mode 100644 index 000000000..e3a4ba6b1 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/MM Generic PEEK.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "MM Generic PEEK", + "is_custom_defined": "0", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_peek", + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "1000" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "full_fan_speed_layer": [ + "5" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "420" + ], + "nozzle_temperature_initial_layer": [ + "420" + ], + "nozzle_temperature_range_high": [ + "460" + ], + "nozzle_temperature_range_low": [ + "380" + ], + "temperature_vitrification": [ + "340" + ], + "compatible_printers": [ + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle" + ], + "version": "2.0.0.0" +} diff --git a/resources/profiles/MagicMaker/filament/MM Generic PETG.json b/resources/profiles/MagicMaker/filament/MM Generic PETG.json new file mode 100644 index 000000000..5e9eae5c4 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/MM Generic PETG.json @@ -0,0 +1,87 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "MM Generic PETG", + "is_custom_defined": "0", + "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": [ + "70" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "5" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "chamber_temperature": [ + "40" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "100" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_retraction_length": [ + "2" + ], + "full_fan_speed_layer": [ + "4" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_range_high": [ + "245" + ], + "nozzle_temperature_range_low": [ + "225" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "MM hqs hj 0.4 nozzle", + "MM hqs SF 0.4 nozzle", + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle", + "MM slb 0.4 nozzle" + ], + "version": "2.0.0.0" +} diff --git a/resources/profiles/MagicMaker/filament/MM Generic PLA.json b/resources/profiles/MagicMaker/filament/MM Generic PLA.json new file mode 100644 index 000000000..a2aa68f8a --- /dev/null +++ b/resources/profiles/MagicMaker/filament/MM Generic PLA.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "MM Generic PLA", + "is_custom_defined": "0", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_max_volumetric_speed": [ + "50" + ], + "slow_down_layer_time": [ + "5" + ], + + "filament_cost": [ + "100" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "205" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "compatible_printers": [ + "MM hqs hj 0.4 nozzle", + "MM hqs SF 0.4 nozzle", + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle", + "MM slb 0.4 nozzle" + ], + "version": "2.0.0.0" +} diff --git a/resources/profiles/MagicMaker/filament/MM Generic TPU.json b/resources/profiles/MagicMaker/filament/MM Generic TPU.json new file mode 100644 index 000000000..e9700a279 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/MM Generic TPU.json @@ -0,0 +1,58 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSA04", + "name": "MM Generic TPU", + "is_custom_defined": "0", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "100" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_retraction_length": [ + "0.5" + ], + + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "45" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "slow_down_min_speed": [ + "5" + ], + "compatible_printers": [ + "MM hqs hj 0.4 nozzle", + "MM hqs SF 0.4 nozzle", + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle", + "MM slb 0.4 nozzle" + ], + "version": "2.0.0.0" +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_abs.json b/resources/profiles/MagicMaker/filament/fdm_filament_abs.json new file mode 100644 index 000000000..1ada3b4ae --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_abs.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_abs", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "80" + ], + "eng_plate_temp" : [ + "80" + ], + "hot_plate_temp" : [ + "80" + ], + "textured_plate_temp" : [ + "80" + ], + "cool_plate_temp_initial_layer" : [ + "80" + ], + "eng_plate_temp_initial_layer" : [ + "80" + ], + "hot_plate_temp_initial_layer" : [ + "80" + ], + "textured_plate_temp_initial_layer" : [ + "80" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_type": [ + "ABS" + ], + "filament_density": [ + "1.10" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "5" + ], + "fan_min_speed": [ + "5" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "235" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "235" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_asa.json b/resources/profiles/MagicMaker/filament/fdm_filament_asa.json new file mode 100644 index 000000000..38126ffe5 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_asa.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_asa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "textured_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "textured_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "35" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ASA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_common.json b/resources/profiles/MagicMaker/filament/fdm_filament_common.json new file mode 100644 index 000000000..1e4b7b89e --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_common.json @@ -0,0 +1,144 @@ +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "60" + ], + "hot_plate_temp_initial_layer" : [ + "60" + ], + "textured_plate_temp_initial_layer" : [ + "60" + ], + "overhang_fan_threshold": [ + "95%" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "0" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "2.85" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "bed_type": [ + "Cool Plate" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "full_fan_speed_layer": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_pa.json b/resources/profiles/MagicMaker/filament/fdm_filament_pa.json new file mode 100644 index 000000000..671549041 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_pa.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_pa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "textured_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "textured_plate_temp_initial_layer" : [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "4" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "0" + ], + "overhang_fan_speed": [ + "30" + ], + "nozzle_temperature": [ + "290" + ], + "temperature_vitrification": [ + "108" + ], + "nozzle_temperature_range_low": [ + "270" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_pc.json b/resources/profiles/MagicMaker/filament/fdm_filament_pc.json new file mode 100644 index 000000000..e87b47be0 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_pc.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_pc", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "110" + ], + "hot_plate_temp" : [ + "110" + ], + "textured_plate_temp" : [ + "110" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "110" + ], + "hot_plate_temp_initial_layer" : [ + "110" + ], + "textured_plate_temp_initial_layer" : [ + "110" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "23.2" + ], + "filament_type": [ + "PC" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "60" + ], + "nozzle_temperature": [ + "280" + ], + "temperature_vitrification": [ + "140" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_peek.json b/resources/profiles/MagicMaker/filament/fdm_filament_peek.json new file mode 100644 index 000000000..c14cfa15b --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_peek.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_peek", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "textured_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "textured_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "35" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "PEEK" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_pet.json b/resources/profiles/MagicMaker/filament/fdm_filament_pet.json new file mode 100644 index 000000000..58fd5baf3 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_pet.json @@ -0,0 +1,82 @@ +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "85" + ], + "eng_plate_temp" : [ + "85" + ], + "hot_plate_temp" : [ + "85" + ], + "textured_plate_temp" : [ + "85" + ], + "cool_plate_temp_initial_layer" : [ + "85" + ], + "eng_plate_temp_initial_layer" : [ + "85" + ], + "hot_plate_temp_initial_layer" : [ + "85" + ], + "textured_plate_temp_initial_layer" : [ + "85" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "15" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_type": [ + "PETG" + ], + "filament_density": [ + "1.27" + ], + "filament_cost": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "50" + ], + "nozzle_temperature": [ + "235" + ], + "temperature_vitrification": [ + "80" + ], + "nozzle_temperature_range_low": [ + "235" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_pla.json b/resources/profiles/MagicMaker/filament/fdm_filament_pla.json new file mode 100644 index 000000000..eb53896e6 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_pla.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "textured_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "55" + ], + "eng_plate_temp_initial_layer" : [ + "55" + ], + "hot_plate_temp_initial_layer" : [ + "55" + ], + "textured_plate_temp_initial_layer" : [ + "55" + ], + "nozzle_temperature_initial_layer": [ + "205" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "210" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "210" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_pva.json b/resources/profiles/MagicMaker/filament/fdm_filament_pva.json new file mode 100644 index 000000000..773d97da7 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_pva.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "fdm_filament_pva", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "35" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "45" + ], + "textured_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "35" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "45" + ], + "textured_plate_temp_initial_layer" : [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_soluble": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "50" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/MagicMaker/filament/fdm_filament_tpu.json b/resources/profiles/MagicMaker/filament/fdm_filament_tpu.json new file mode 100644 index 000000000..c153d3851 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/fdm_filament_tpu.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_tpu", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "30" + ], + "eng_plate_temp" : [ + "30" + ], + "hot_plate_temp" : [ + "35" + ], + "textured_plate_temp" : [ + "35" + ], + "cool_plate_temp_initial_layer" : [ + "30" + ], + "eng_plate_temp_initial_layer" : [ + "30" + ], + "hot_plate_temp_initial_layer" : [ + "35" + ], + "textured_plate_temp_initial_layer" : [ + "35" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_type": [ + "TPU" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "filament_retraction_length": [ + "0.4" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/MagicMaker/machine/MM BoneKing 0.4 nozzle.json b/resources/profiles/MagicMaker/machine/MM BoneKing 0.4 nozzle.json new file mode 100644 index 000000000..4bc95f809 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM BoneKing 0.4 nozzle.json @@ -0,0 +1,136 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "MM BoneKing 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "MM BoneKing", + "default_print_profile": "0.10mm Fine @MM BoneKing", + "nozzle_diameter": [ + "0.4" + ], + "gcode_flavor": "klipper", + "machine_pause_gcode": "PAUSE", + "printable_height": "300", + "auxiliary_fan": "0", + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "max_layer_height": [ + "0.3" + ], + "printer_settings_id": "MM", + "retract_before_wipe": [ + "70%" + ], + "wipe_distance": [ + "1" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "scan_first_layer": "0", + "cooling_tube_length": "20", + "cooling_tube_retraction": "60", + "extruder_clearance_height_to_lid": "100", + "extruder_clearance_height_to_rod": "32", + "extruder_clearance_radius": "50", + "machine_end_gcode": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 E3 F300\nG1 E-10 F9000\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ; turn off fan\nPRINT_END", + "machine_max_speed_e": [ + "60", + "120" + ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home\nG1 Z1 F9000 ;move the platform to 15mm\nG92 E0\nG1 F500 E10\nG0 X0 Y0\nG92 E0 ;zero the extruded length\nG1 F1000 Y100 E20\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing...", + "min_layer_height": [ + "0.05" + ], + "nozzle_type": "brass", + "parking_pos_retraction": "22", + "retract_length_toolchange": [ + "5" + ], + "retraction_minimum_travel": [ + "1" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "20" + ], + "machine_max_jerk_y": [ + "9", + "20" + ], + "deretraction_speed": [ + "30" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "retraction_length": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "z_hop_types": [ + "Spiral Lift" + ], + "default_filament_profile": [ + "MM Generic PLA" + ], + "is_custom_defined": "0", + "machine_max_acceleration_e": [ + "10000" + ], + "machine_max_acceleration_extruding": [ + "10000", + "1500" + ], + "machine_max_acceleration_retracting": [ + "10000", + "1500" + ], + "machine_max_acceleration_x": [ + "100000", + "3000" + ], + "machine_max_acceleration_y": [ + "100000", + "3000" + ], + "machine_max_jerk_z": [ + "0.5", + "0.4" + ], + "machine_max_speed_z": [ + "10", + "12" + ], + "printable_area": [ + "0x0", + "310x0", + "310x310", + "0x310" + ], + "thumbnails": [ + "310x310" + ], + "z_hop": [ + "0.2" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/machine/MM BoneKing.json b/resources/profiles/MagicMaker/machine/MM BoneKing.json new file mode 100644 index 000000000..31167c41d --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM BoneKing.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "MM BoneKing", + "model_id": "MM-BoneKing", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "magicmaker", + "bed_model": "310_buildplate_model.stl", + "bed_texture": "MM_buildplate_texture.png", + "hotend_model": "MM_hotend.stl", + "default_materials": "MM Generic PLA;MM Generic PETG;MM Generic ABS;MM Generic TPU;MM Generic PC;MM Generic PA;MM Generic PEEK" +} diff --git a/resources/profiles/MagicMaker/machine/MM hj SK 0.4 nozzle.json b/resources/profiles/MagicMaker/machine/MM hj SK 0.4 nozzle.json new file mode 100644 index 000000000..0f22e90e4 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM hj SK 0.4 nozzle.json @@ -0,0 +1,138 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "MM hj SK 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "MM hj SK", + "default_print_profile": "0.10mm Fine @MM hj SK", + "nozzle_diameter": [ + "0.4" + ], + "gcode_flavor": "klipper", + "is_custom_defined": "0", + "machine_pause_gcode": "PAUSE", + "printable_area": [ + "0x0", + "220x0", + "220x210", + "0x210" + ], + "printable_height": "300", + "auxiliary_fan": "0", + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "max_layer_height": [ + "0.3" + ], + "printer_settings_id": "MM", + "retract_before_wipe": [ + "70%" + ], + "wipe_distance": [ + "1" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "scan_first_layer": "0", + "cooling_tube_length": "20", + "cooling_tube_retraction": "60", + "extruder_clearance_height_to_lid": "100", + "extruder_clearance_height_to_rod": "32", + "extruder_clearance_radius": "50", + "machine_end_gcode": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 E3 F300\nG1 E-10 F9000\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ; turn off fan\nPRINT_END", + "machine_max_acceleration_e": [ + "6000" + ], + "machine_max_speed_e": [ + "60", + "120" + ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home\nG1 Z1 F9000 ;move the platform to 15mm\nG92 E0\nG1 F500 E10\nG0 X0 Y0\nG92 E0 ;zero the extruded length\nG1 F1000 Y100 E20\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing...", + "min_layer_height": [ + "0.05" + ], + "nozzle_type": "brass", + "parking_pos_retraction": "22", + "retract_length_toolchange": [ + "5" + ], + "retraction_minimum_travel": [ + "1" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "20" + ], + "machine_max_jerk_y": [ + "9", + "20" + ], + "thumbnails": [ + "220x220" + ], + + + "deretraction_speed": [ + "30" + ], + "machine_max_acceleration_extruding": [ + "5000", + "1500" + ], + "machine_max_acceleration_retracting": [ + "5000", + "1500" + ], + "machine_max_acceleration_x": [ + "20000", + "3000" + ], + "machine_max_acceleration_y": [ + "20000", + "3000" + ], + "machine_max_jerk_z": [ + "2", + "0.4" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "retraction_length": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Spiral Lift" + ], + "default_filament_profile": [ + "MM Generic PLA" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/machine/MM hj SK.json b/resources/profiles/MagicMaker/machine/MM hj SK.json new file mode 100644 index 000000000..1cefdfb90 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM hj SK.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "MM hj SK", + "model_id": "MM-hj-SK", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "magicmaker", + "bed_model": "220210_buildplate_model.stl", + "bed_texture": "MM_buildplate_texture.png", + "hotend_model": "MM_hotend.stl", + "default_materials": "MM Generic PLA;MM Generic PETG;MM Generic ABS;MM Generic TPU" +} diff --git a/resources/profiles/MagicMaker/machine/MM hqs SF 0.4 nozzle.json b/resources/profiles/MagicMaker/machine/MM hqs SF 0.4 nozzle.json new file mode 100644 index 000000000..17cfbf1c1 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM hqs SF 0.4 nozzle.json @@ -0,0 +1,137 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "MM hqs SF 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "MM hqs SF", + "default_print_profile": "0.10mm Fine @MM hqs SF", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x210", + "0x210" + ], + "printable_height": "300", + "auxiliary_fan": "0", + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "max_layer_height": [ + "0.3" + ], + "printer_settings_id": "MM", + "retract_before_wipe": [ + "70%" + ], + "wipe_distance": [ + "1" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "scan_first_layer": "0", + "cooling_tube_length": "20", + "cooling_tube_retraction": "60", + "extruder_clearance_height_to_lid": "100", + "extruder_clearance_height_to_rod": "32", + "extruder_clearance_radius": "50", + "machine_end_gcode": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 E3 F300\nG1 E-10 F9000\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ; turn off fan\nPRINT_END", + "machine_max_acceleration_e": [ + "6000" + ], + "machine_max_speed_e": [ + "60", + "120" + ], + "machine_pause_gcode": "M601", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home\nG1 Z1 F9000 ;move the platform to 15mm\nG92 E0\nG1 F500 E10\nG0 X0 Y0\nG92 E0 ;zero the extruded length\nG1 F1000 Y100 E20\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing...", + "min_layer_height": [ + "0.05" + ], + "nozzle_type": "brass", + "parking_pos_retraction": "22", + "retract_length_toolchange": [ + "5" + ], + "retraction_minimum_travel": [ + "1" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "20" + ], + "machine_max_jerk_y": [ + "9", + "20" + ], + "thumbnails": [ + "220x220" + ], + + + "deretraction_speed": [ + "30" + ], + "is_custom_defined": "0", + "machine_max_acceleration_extruding": [ + "5000", + "1500" + ], + "machine_max_acceleration_retracting": [ + "5000", + "1500" + ], + "machine_max_acceleration_x": [ + "20000", + "3000" + ], + "machine_max_acceleration_y": [ + "20000", + "3000" + ], + "machine_max_jerk_z": [ + "2", + "0.4" + ], + "machine_max_speed_x": [ + "500", + "500" + ], + "machine_max_speed_y": [ + "500", + "500" + ], + "retraction_length": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Spiral Lift" + ], + "default_filament_profile": [ + "MM Generic PLA" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/machine/MM hqs SF.json b/resources/profiles/MagicMaker/machine/MM hqs SF.json new file mode 100644 index 000000000..e3240b226 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM hqs SF.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "MM hqs SF", + "model_id": "MM-hqs-SF", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "magicmaker", + "bed_model": "220210_buildplate_model.stl", + "bed_texture": "MM_buildplate_texture.png", + "hotend_model": "MM_hotend.stl", + "default_materials": "MM Generic PLA;MM Generic PETG;MM Generic ABS;MM Generic TPU" +} diff --git a/resources/profiles/MagicMaker/machine/MM hqs hj 0.4 nozzle.json b/resources/profiles/MagicMaker/machine/MM hqs hj 0.4 nozzle.json new file mode 100644 index 000000000..95a623649 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM hqs hj 0.4 nozzle.json @@ -0,0 +1,129 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "MM hqs hj 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "MM hqs hj", + "default_print_profile": "0.10mm Fine @MM hqs hj", + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "0x0", + "220x0", + "220x210", + "0x210" + ], + "printable_height": "300", + "auxiliary_fan": "0", + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_acceleration_x": [ + "3000", + "3000" + ], + "machine_max_acceleration_y": [ + "3000", + "3000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "max_layer_height": [ + "0.3" + ], + "printer_settings_id": "MM", + "retract_before_wipe": [ + "70%" + ], + "wipe_distance": [ + "1" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "scan_first_layer": "0", + "cooling_tube_length": "20", + "cooling_tube_retraction": "60", + "deretraction_speed": [ + "25" + ], + "extruder_clearance_height_to_lid": "100", + "extruder_clearance_height_to_rod": "32", + "extruder_clearance_radius": "50", + "is_custom_defined": "0", + "machine_end_gcode": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 E3 F300\nG1 E-10 F9000\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ; turn off fan\nPRINT_END", + "machine_max_acceleration_e": [ + "6000" + ], + "machine_max_speed_e": [ + "60", + "120" + ], + "machine_max_speed_x": [ + "300", + "500" + ], + "machine_max_speed_y": [ + "300", + "500" + ], + "machine_pause_gcode": "M601", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home\nG1 Z1 F9000 ;move the platform to 15mm\nG92 E0\nG1 F500 E10\nG0 X0 Y0\nG92 E0 ;zero the extruded length\nG1 F1000 Y100 E20\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing...", + "min_layer_height": [ + "0.05" + ], + "nozzle_type": "brass", + "parking_pos_retraction": "22", + "retract_length_toolchange": [ + "5" + ], + "retraction_length": [ + "1.5" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "25" + ], + "machine_max_acceleration_extruding": [ + "2000", + "1500" + ], + "machine_max_acceleration_retracting": [ + "2000", + "1500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "20" + ], + "machine_max_jerk_y": [ + "9", + "20" + ], + "machine_max_jerk_z": [ + "0.2", + "0.4" + ], + "thumbnails": [ + "220x220" + ], + "default_filament_profile": [ + "MM Generic PLA" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/machine/MM hqs hj.json b/resources/profiles/MagicMaker/machine/MM hqs hj.json new file mode 100644 index 000000000..aac0ee20c --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM hqs hj.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "MM hqs hj", + "model_id": "MM-hqs-hj", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "magicmaker", + "bed_model": "220210_buildplate_model.stl", + "bed_texture": "MM_buildplate_texture.png", + "hotend_model": "MM_hotend.stl", + "default_materials": "MM Generic PLA;MM Generic PETG;MM Generic ABS;MM Generic TPU" +} diff --git a/resources/profiles/MagicMaker/machine/MM slb 0.4 nozzle.json b/resources/profiles/MagicMaker/machine/MM slb 0.4 nozzle.json new file mode 100644 index 000000000..c6e32b7e0 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM slb 0.4 nozzle.json @@ -0,0 +1,129 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "MM slb 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "MM slb", + "default_print_profile": "0.10mm Fine @MM slb", + "nozzle_diameter": [ + "0.4" + ], + "auxiliary_fan": "0", + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "max_layer_height": [ + "0.3" + ], + "printer_settings_id": "MM", + "retract_before_wipe": [ + "70%" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "scan_first_layer": "0", + "cooling_tube_length": "20", + "cooling_tube_retraction": "60", + "deretraction_speed": [ + "25" + ], + "extruder_clearance_height_to_lid": "100", + "extruder_clearance_height_to_rod": "32", + "extruder_clearance_radius": "50", + "machine_max_jerk_e": [ + "5", + "2.5" + ], + "machine_max_speed_e": [ + "60", + "120" + ], + "machine_pause_gcode": "M601", + "nozzle_type": "brass", + "parking_pos_retraction": "22", + "retract_length_toolchange": [ + "5" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "25" + ], + "default_filament_profile": [ + "MM Generic PLA" + ], + "is_custom_defined": "0", + "machine_end_gcode": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG28 X0\nG0 Y120\nG1 E-10 F9000\nM84 ;steppers off\nG90 ;absolute positioning\nPRINT_END", + "machine_max_acceleration_e": [ + "4000" + ], + "machine_max_acceleration_extruding": [ + "2000", + "1500" + ], + "machine_max_acceleration_retracting": [ + "2000", + "1500" + ], + "machine_max_acceleration_x": [ + "2000", + "3000" + ], + "machine_max_acceleration_y": [ + "2000", + "3000" + ], + "machine_max_jerk_x": [ + "9", + "20" + ], + "machine_max_jerk_y": [ + "9", + "20" + ], + "machine_max_jerk_z": [ + "0.2", + "0.4" + ], + "machine_max_speed_x": [ + "200", + "500" + ], + "machine_max_speed_y": [ + "200", + "500" + ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home\nG0 Z1\nG0 X0 Y0\nG92 E0\nG0 Z0.5\nG1 F1000 Y100 E20\nG92 E0\nM117 Printing...", + "min_layer_height": [ + "0.1" + ], + "printable_area": [ + "0x0", + "125x0", + "125x125", + "0x125" + ], + "printable_height": "160", + "retraction_length": [ + "2" + ], + "thumbnails": [ + "120x120" + ], + "wipe_distance": [ + "1" + ], + "version": "2.0.0.0" +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/machine/MM slb.json b/resources/profiles/MagicMaker/machine/MM slb.json new file mode 100644 index 000000000..83f4b5749 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/MM slb.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "MM slb", + "model_id": "MM-slb", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "magicmaker", + "bed_model": "125_buildplate_model.stl", + "bed_texture": "MM_buildplate_texture.png", + "hotend_model": "MM_hotend.stl", + "default_materials": "MM Generic PLA;MM Generic PETG;MM Generic ABS;MM Generic TPU" +} diff --git a/resources/profiles/MagicMaker/machine/fdm_machine_common.json b/resources/profiles/MagicMaker/machine/fdm_machine_common.json new file mode 100644 index 000000000..b1cbabd88 --- /dev/null +++ b/resources/profiles/MagicMaker/machine/fdm_machine_common.json @@ -0,0 +1,118 @@ +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "printer_technology": "FFF", + "deretraction_speed": [ + "40" + ], + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "gcode_flavor": "marlin", + "silent_mode": "0", + "machine_max_acceleration_e": [ + "10000" + ], + "machine_max_acceleration_extruding": [ + "1500" + ], + "machine_max_acceleration_retracting": [ + "1500" + ], + "machine_max_acceleration_x": [ + "3000" + ], + "machine_max_acceleration_y": [ + "3000" + ], + "machine_max_acceleration_z": [ + "500" + ], + "machine_max_speed_e": [ + "120" + ], + "machine_max_speed_x": [ + "500" + ], + "machine_max_speed_y": [ + "500" + ], + "machine_max_speed_z": [ + "12" + ], + "machine_max_jerk_e": [ + "2.5" + ], + "machine_max_jerk_x": [ + "20" + ], + "machine_max_jerk_y": [ + "20" + ], + "machine_max_jerk_z": [ + "0.4" + ], + "machine_min_extruding_rate": [ + "0" + ], + "machine_min_travel_rate": [ + "0" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.07" + ], + "printable_height": "212", + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "nozzle_diameter": [ + "0.4" + ], + "printer_settings_id": "", + "printer_variant": "0.4", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "6" + ], + "retract_length_toolchange": [ + "10" + ], + "z_hop": [ + "0" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retraction_speed": [ + "50" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "wipe": [ + "1" + ], + "z_lift_type": "NormalLift", + "default_print_profile": "0.10mm Fine @MM hj", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_start_gcode": "", + "machine_end_gcode": "" +} diff --git a/resources/profiles/MagicMaker/magicmaker_hotend.stl b/resources/profiles/MagicMaker/magicmaker_hotend.stl new file mode 100644 index 000000000..4ef5fcde1 Binary files /dev/null and b/resources/profiles/MagicMaker/magicmaker_hotend.stl differ diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json new file mode 100644 index 000000000..96031f453 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_acceleration": "500", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "60", + "internal_solid_infill_speed": "90", + "layer_height": "0.1", + "line_width": "0.4", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "top_surface_speed": "60", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json new file mode 100644 index 000000000..9e65e3c0f --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine @MM hj SK", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_acceleration": "500", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "60", + "internal_solid_infill_speed": "90", + "layer_height": "0.1", + "line_width": "0.4", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "top_surface_speed": "60", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "compatible_printers": [ + "MM hj SK 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json new file mode 100644 index 000000000..aac3d619e --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine @MM hqs SF", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_acceleration": "500", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "60", + "internal_solid_infill_speed": "90", + "layer_height": "0.1", + "line_width": "0.4", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "top_surface_speed": "60", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "compatible_printers": [ + "MM hqs SF 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json new file mode 100644 index 000000000..1cf2bb15b --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine @MM hqs hj", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "1000", + "default_acceleration": "1600", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_acceleration": "1200", + "initial_layer_acceleration": "500", + "inner_wall_speed": "60", + "internal_solid_infill_acceleration": "1600", + "internal_solid_infill_speed": "90", + "is_custom_defined": "0", + "layer_height": "0.1", + "line_width": "0.4", + "outer_wall_acceleration": "1000", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_acceleration": "1600", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "top_surface_acceleration": "1000", + "top_surface_speed": "60", + "travel_acceleration": "1600", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "compatible_printers": [ + "MM hqs hj 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json new file mode 100644 index 000000000..0d8414590 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine @MM slb", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bridge_acceleration": "1000", + "enable_support": "1", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "layer_height": "0.1", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "top_surface_acceleration": "1000", + "default_acceleration": "1200", + "gap_infill_speed": "60", + "initial_layer_print_height": "0.2", + "initial_layer_acceleration": "500", + "inner_wall_acceleration": "1000", + "inner_wall_speed": "45", + "internal_solid_infill_acceleration": "1200", + "internal_solid_infill_speed": "60", + "is_custom_defined": "0", + "outer_wall_acceleration": "800", + "outer_wall_speed": "30", + "sparse_infill_acceleration": "1200", + "sparse_infill_speed": "60", + "support_interface_speed": "60", + "support_speed": "60", + "top_surface_speed": "50", + "travel_acceleration": "1200", + "travel_speed": "120", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "compatible_printers": [ + "MM slb 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json new file mode 100644 index 000000000..edcec6770 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine Fast @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "initial_layer_acceleration": "500", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "layer_height": "0.1", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "3000", + "default_acceleration": "10000", + "gap_infill_speed": "250", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "200", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "250", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "150", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "250", + "support_interface_speed": "80", + "support_speed": "150", + "top_surface_acceleration": "2000", + "top_surface_speed": "180", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json new file mode 100644 index 000000000..12fbabfa1 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine Fast @MM hj SK", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "initial_layer_acceleration": "500", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "layer_height": "0.1", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "3000", + "default_acceleration": "10000", + "gap_infill_speed": "250", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "200", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "250", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "150", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "250", + "support_interface_speed": "80", + "support_speed": "150", + "top_surface_acceleration": "2000", + "top_surface_speed": "180", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM hj SK 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json new file mode 100644 index 000000000..95d35c597 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Fine Fast @MM hqs SF", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "initial_layer_acceleration": "500", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "layer_height": "0.1", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "3000", + "default_acceleration": "10000", + "gap_infill_speed": "250", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "200", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "250", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "150", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "250", + "support_interface_speed": "80", + "support_speed": "150", + "top_surface_acceleration": "2000", + "top_surface_speed": "180", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM hqs SF 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json new file mode 100644 index 000000000..a852f468c --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine BestFast @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "initial_layer_acceleration": "500", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "initial_layer_print_height": "0.2", + "internal_solid_infill_acceleration": "10000", + "sparse_infill_acceleration": "10000", + "top_surface_acceleration": "2000", + "bridge_acceleration": "50000", + "default_acceleration": "100000", + "gap_infill_speed": "1000", + "initial_layer_infill_speed": "105", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "100000", + "inner_wall_speed": "800", + "internal_solid_infill_speed": "1000", + "is_custom_defined": "0", + "layer_height": "0.12", + "outer_wall_acceleration": "50000", + "outer_wall_speed": "500", + "overhang_2_4_speed": "30", + "sparse_infill_speed": "1000", + "support_interface_speed": "100", + "support_speed": "350", + "top_surface_speed": "800", + "travel_acceleration": "100000", + "travel_speed": "1500", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json new file mode 100644 index 000000000..9993d37aa --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine SuperFast @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "initial_layer_acceleration": "500", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "enable_support": "1", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "support_top_z_distance": "0.1", + "top_shell_layers": "8", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "default_acceleration": "10000", + "initial_layer_print_height": "0.2", + "internal_solid_infill_acceleration": "10000", + "outer_wall_acceleration": "5000", + "sparse_infill_acceleration": "10000", + "support_interface_speed": "80", + "support_speed": "150", + "top_surface_acceleration": "2000", + "travel_acceleration": "10000", + "bridge_acceleration": "5000", + "gap_infill_speed": "350", + "initial_layer_infill_speed": "105", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "10000", + "inner_wall_speed": "350", + "internal_solid_infill_speed": "350", + "is_custom_defined": "0", + "layer_height": "0.12", + "outer_wall_speed": "200", + "overhang_2_4_speed": "30", + "sparse_infill_speed": "450", + "top_surface_speed": "200", + "travel_speed": "500", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json new file mode 100644 index 000000000..309d1d3ab --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "initial_layer_acceleration": "500", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "initial_layer_travel_speed": "60", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "60", + "internal_solid_infill_speed": "90", + "layer_height": "0.2", + "line_width": "0.4", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "top_shell_layers": "6", + "top_surface_speed": "60", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "travel_speed": "150", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json new file mode 100644 index 000000000..89506213f --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MM hj SK", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "initial_layer_acceleration": "500", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "initial_layer_travel_speed": "60", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "60", + "internal_solid_infill_speed": "90", + "layer_height": "0.2", + "line_width": "0.4", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "top_shell_layers": "6", + "top_surface_speed": "60", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "travel_speed": "150", + "compatible_printers": [ + "MM hj SK 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json new file mode 100644 index 000000000..c04bf6077 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MM hqs SF", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "initial_layer_acceleration": "500", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "initial_layer_travel_speed": "60", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "60", + "internal_solid_infill_speed": "90", + "layer_height": "0.2", + "line_width": "0.4", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "top_shell_layers": "6", + "top_surface_speed": "60", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "travel_speed": "150", + "compatible_printers": [ + "MM hqs SF 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json new file mode 100644 index 000000000..4f0224481 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MM hqs hj", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "initial_layer_travel_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "bridge_acceleration": "1000", + "default_acceleration": "1600", + "enable_support": "1", + "gap_infill_speed": "100", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_acceleration": "1200", + "inner_wall_speed": "60", + "internal_solid_infill_acceleration": "1600", + "internal_solid_infill_speed": "90", + "is_custom_defined": "0", + "layer_height": "0.2", + "line_width": "0.4", + "outer_wall_acceleration": "1000", + "outer_wall_speed": "45", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_acceleration": "1600", + "initial_layer_acceleration": "500", + "sparse_infill_speed": "90", + "support_bottom_z_distance": "0.1", + "support_interface_speed": "90", + "support_speed": "80", + "top_shell_layers": "6", + "top_surface_acceleration": "1000", + "top_surface_speed": "60", + "travel_acceleration": "1600", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "compatible_printers": [ + "MM hqs hj 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json new file mode 100644 index 000000000..3a2ce22e6 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MM slb", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "initial_layer_travel_speed": "60", + "travel_speed": "120", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "bridge_acceleration": "1000", + "enable_support": "1", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "layer_height": "0.2", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "initial_layer_acceleration": "500", + "support_bottom_z_distance": "0.1", + "top_shell_layers": "6", + "top_surface_acceleration": "1000", + "default_acceleration": "1200", + "gap_infill_speed": "60", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "1000", + "inner_wall_speed": "45", + "internal_solid_infill_acceleration": "1200", + "internal_solid_infill_speed": "60", + "is_custom_defined": "0", + "outer_wall_acceleration": "800", + "outer_wall_speed": "30", + "sparse_infill_acceleration": "1200", + "sparse_infill_speed": "60", + "support_interface_speed": "60", + "support_speed": "60", + "top_surface_speed": "50", + "travel_acceleration": "1200", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "compatible_printers": [ + "MM slb 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json new file mode 100644 index 000000000..c496a8b2b --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard Fast @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "enable_support": "1", + "layer_height": "0.2", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "initial_layer_acceleration": "500", + "top_shell_layers": "6", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "5000", + "default_acceleration": "10000", + "gap_infill_speed": "200", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "200", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "240", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "150", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "250", + "support_interface_speed": "80", + "support_speed": "150", + "top_surface_acceleration": "2000", + "top_surface_speed": "180", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json new file mode 100644 index 000000000..ed09680bb --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard Fast @MM hj SK", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "enable_support": "1", + "layer_height": "0.2", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "initial_layer_acceleration": "500", + "top_shell_layers": "6", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "5000", + "default_acceleration": "10000", + "gap_infill_speed": "200", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "200", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "240", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "150", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "250", + "support_interface_speed": "80", + "support_speed": "150", + "top_surface_acceleration": "2000", + "top_surface_speed": "180", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM hj SK 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json new file mode 100644 index 000000000..0c7e0bab2 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json @@ -0,0 +1,117 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard Fast @MM hqs sf", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "20%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.45", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.45", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.45", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "4", + "enable_support": "1", + "layer_height": "0.2", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "support_bottom_z_distance": "0.1", + "initial_layer_acceleration": "500", + "top_shell_layers": "6", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "5000", + "default_acceleration": "10000", + "gap_infill_speed": "200", + "initial_layer_infill_speed": "50", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "200", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "240", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "150", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "250", + "support_interface_speed": "80", + "support_speed": "150", + "top_surface_acceleration": "2000", + "top_surface_speed": "180", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM hqs sf 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json new file mode 100644 index 000000000..bdce77e82 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json @@ -0,0 +1,115 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "initial_layer_acceleration": "500", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "enable_support": "1", + "gap_infill_speed": "90", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "55", + "internal_solid_infill_speed": "80", + "layer_height": "0.3", + "line_width": "0.4", + "outer_wall_speed": "40", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "80", + "support_speed": "70", + "top_shell_layers": "4", + "top_surface_speed": "50", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "3000", + "travel_acceleration": "3000", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json new file mode 100644 index 000000000..bf9b4bf47 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json @@ -0,0 +1,115 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft @MM hj SK", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "initial_layer_acceleration": "500", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "enable_support": "1", + "gap_infill_speed": "90", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "55", + "internal_solid_infill_speed": "80", + "layer_height": "0.3", + "line_width": "0.4", + "outer_wall_speed": "40", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "80", + "support_speed": "70", + "top_shell_layers": "4", + "top_surface_speed": "50", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "3000", + "travel_acceleration": "3000", + "compatible_printers": [ + "MM hj SK 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json new file mode 100644 index 000000000..0929e9dd4 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json @@ -0,0 +1,115 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft @MM hqs SF", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "initial_layer_acceleration": "500", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "enable_support": "1", + "gap_infill_speed": "90", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_speed": "55", + "internal_solid_infill_speed": "80", + "layer_height": "0.3", + "line_width": "0.4", + "outer_wall_speed": "40", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_speed": "80", + "support_speed": "70", + "top_shell_layers": "4", + "top_surface_speed": "50", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "2000", + "default_acceleration": "3000", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "2000", + "internal_solid_infill_acceleration": "3000", + "is_custom_defined": "0", + "outer_wall_acceleration": "1600", + "sparse_infill_acceleration": "3000", + "top_surface_acceleration": "3000", + "travel_acceleration": "3000", + "compatible_printers": [ + "MM hqs SF 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json new file mode 100644 index 000000000..2dae174d7 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json @@ -0,0 +1,115 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft @MM hqs hj", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "bridge_acceleration": "1000", + "default_acceleration": "1600", + "enable_support": "1", + "gap_infill_speed": "90", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "inner_wall_acceleration": "1200", + "inner_wall_speed": "55", + "internal_solid_infill_acceleration": "1600", + "internal_solid_infill_speed": "80", + "is_custom_defined": "0", + "layer_height": "0.3", + "line_width": "0.4", + "outer_wall_acceleration": "1000", + "outer_wall_speed": "40", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "sparse_infill_acceleration": "1600", + "sparse_infill_speed": "80", + "support_speed": "70", + "top_shell_layers": "4", + "top_surface_acceleration": "1000", + "top_surface_speed": "50", + "travel_acceleration": "1600", + "initial_layer_acceleration": "500", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "compatible_printers": [ + "MM hqs hj 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json new file mode 100644 index 000000000..7314b4cfa --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json @@ -0,0 +1,115 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft @MM slb", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "bridge_acceleration": "1000", + "enable_support": "1", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "30", + "initial_layer_speed": "15", + "layer_height": "0.3", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "top_shell_layers": "4", + "top_surface_acceleration": "1000", + "default_acceleration": "1200", + "gap_infill_speed": "50", + "initial_layer_print_height": "0.2", + "inner_wall_acceleration": "1000", + "inner_wall_speed": "40", + "internal_solid_infill_acceleration": "1200", + "internal_solid_infill_speed": "50", + "is_custom_defined": "0", + "outer_wall_acceleration": "800", + "outer_wall_speed": "30", + "sparse_infill_acceleration": "1200", + "sparse_infill_speed": "50", + "support_interface_speed": "50", + "support_speed": "50", + "top_surface_speed": "40", + "travel_acceleration": "1200", + "travel_speed": "120", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "compatible_printers": [ + "MM slb 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json new file mode 100644 index 000000000..f1feb9d4d --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json @@ -0,0 +1,116 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft Fast @MM BoneKing", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "enable_support": "1", + "layer_height": "0.3", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "top_shell_layers": "4", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "5000", + "default_acceleration": "10000", + "gap_infill_speed": "200", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "150", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "180", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "120", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "200", + "support_speed": "130", + "top_surface_acceleration": "2000", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM BoneKing 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json new file mode 100644 index 000000000..4935a4a22 --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json @@ -0,0 +1,116 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft Fast @MM hj SK", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "enable_support": "1", + "layer_height": "0.3", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "top_shell_layers": "4", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "5000", + "default_acceleration": "10000", + "gap_infill_speed": "200", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "150", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "180", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "120", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "200", + "support_speed": "130", + "top_surface_acceleration": "2000", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM hj SK 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json new file mode 100644 index 000000000..90aaa46fb --- /dev/null +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json @@ -0,0 +1,116 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Draft Fast @MM hqs SF", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "60", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "35%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_height": "1", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.2", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_threshold_angle": "30", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "bottom_shell_layers": "3", + "enable_support": "1", + "layer_height": "0.3", + "line_width": "0.4", + "skirt_distance": "1", + "skirt_loops": "1", + "slowdown_for_curled_perimeters": "1", + "top_shell_layers": "4", + "version": "2.0.0.0", + "wall_loops": "3", + "wipe_on_loops": "1", + "bridge_acceleration": "5000", + "default_acceleration": "10000", + "gap_infill_speed": "200", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "150", + "inner_wall_acceleration": "5000", + "inner_wall_speed": "150", + "internal_solid_infill_acceleration": "10000", + "internal_solid_infill_speed": "180", + "is_custom_defined": "0", + "outer_wall_acceleration": "5000", + "outer_wall_speed": "120", + "sparse_infill_acceleration": "10000", + "sparse_infill_speed": "200", + "support_speed": "130", + "top_surface_acceleration": "2000", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_speed": "300", + "compatible_printers": [ + "MM hqs SF 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/MagicMaker/process/fdm_process_common.json b/resources/profiles/MagicMaker/process/fdm_process_common.json new file mode 100644 index 000000000..a3623f219 --- /dev/null +++ b/resources/profiles/MagicMaker/process/fdm_process_common.json @@ -0,0 +1,70 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "bridge_flow": "0.95", + "bridge_speed": "25", + "brim_width": "5", + "compatible_printers": [], + "print_sequence": "by layer", + "default_acceleration": "0", + "bridge_no_support": "0", + "elefant_foot_compensation": "0.1", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "120", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "initial_layer_line_width": "0.42", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "20", + "gap_infill_speed": "30", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "sparse_infill_speed": "50", + "interface_shells": "0", + "detect_overhang_wall": "0", + "reduce_infill_retraction": "0", + "filename_format": "{input_filename_base}.gcode", + "wall_loops": "3", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "40", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "nearest", + "skirt_distance": "2", + "skirt_height": "2", + "minimum_sparse_infill_area": "0", + "internal_solid_infill_line_width": "0.45", + "internal_solid_infill_speed": "40", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.15", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0", + "support_interface_speed": "80", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2", + "support_speed": "40", + "support_threshold_angle": "40", + "support_object_xy_distance": "0.5", + "detect_thin_wall": "0", + "top_surface_line_width": "0.4", + "top_surface_speed": "30", + "travel_speed": "400", + "enable_prime_tower": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0" +} 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 dfeb0d299..2e672aee1 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 879f9d98b..ecc26b3b3 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 8846cb566..18bdc378d 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 06008c154..dc2643c67 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/Qidi.json b/resources/profiles/Qidi.json index 0242cba66..9a6e3fa2d 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -549,184 +549,8 @@ "sub_path": "filament/Qidi Generic ABS.json" }, { - "name": "Qidi Generic ASA", - "sub_path": "filament/Qidi Generic ASA.json" - }, - { - "name": "Qidi Generic PA", - "sub_path": "filament/Qidi Generic PA.json" - }, - { - "name": "Qidi Generic PA-CF", - "sub_path": "filament/Qidi Generic PA-CF.json" - }, - { - "name": "Qidi Generic PC", - "sub_path": "filament/Qidi Generic PC.json" - }, - { - "name": "Qidi Generic PETG", - "sub_path": "filament/Qidi Generic PETG.json" - }, - { - "name": "Qidi Generic PETG-CF", - "sub_path": "filament/Qidi Generic PETG-CF.json" - }, - { - "name": "Qidi Generic PLA Silk", - "sub_path": "filament/Qidi Generic PLA Silk.json" - }, - { - "name": "Qidi Generic PLA", - "sub_path": "filament/Qidi Generic PLA.json" - }, - { - "name": "Qidi Generic PLA-CF", - "sub_path": "filament/Qidi Generic PLA-CF.json" - }, - { - "name": "Qidi Generic PVA", - "sub_path": "filament/Qidi Generic PVA.json" - }, - { - "name": "Qidi TPU 95A-HF", - "sub_path": "filament/Qidi TPU 95A-HF.json" - }, - { - "name": "QIDI ABS Rapido", - "sub_path": "filament/QIDI ABS Rapido.json" - }, - { - "name": "QIDI ABS Rapido 0.2 nozzle", - "sub_path": "filament/QIDI ABS Rapido 0.2 nozzle.json" - }, - { - "name": "QIDI ABS Rapido 0.8 nozzle", - "sub_path": "filament/QIDI ABS Rapido 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Rapido", - "sub_path": "filament/QIDI PLA Rapido.json" - }, - { - "name": "QIDI PLA Rapido 0.2 nozzle", - "sub_path": "filament/QIDI PLA Rapido 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Rapido 0.8 nozzle", - "sub_path": "filament/QIDI PLA Rapido 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Tough", - "sub_path": "filament/QIDI PETG Tough.json" - }, - { - "name": "QIDI PETG Tough 0.2 nozzle", - "sub_path": "filament/QIDI PETG Tough 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Tough 0.6 nozzle", - "sub_path": "filament/QIDI PETG Tough 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Tough 0.8 nozzle", - "sub_path": "filament/QIDI PETG Tough 0.8 nozzle.json" - }, - { - "name": "QIDI PET-CF", - "sub_path": "filament/QIDI PET-CF.json" - }, - { - "name": "QIDI PA12-CF", - "sub_path": "filament/QIDI PA12-CF.json" - }, - { - "name": "QIDI PAHT-CF", - "sub_path": "filament/QIDI PAHT-CF.json" - }, - { - "name": "QIDI ABS-GF25", - "sub_path": "filament/QIDI ABS-GF25.json" - }, - { - "name": "QIDI PA-Ultra", - "sub_path": "filament/QIDI PA-Ultra.json" - }, - { - "name": "Tinmorry PETG-ECO", - "sub_path": "filament/Tinmorry PETG-ECO.json" - }, - { - "name": "Qidi Generic TPU", - "sub_path": "filament/Qidi Generic TPU.json" - }, - { - "name": "QIDI ABS-GF10", - "sub_path": "filament/QIDI ABS-GF10.json" - }, - { - "name": "Qidi PC-ABS-FR", - "sub_path": "filament/Qidi PC-ABS-FR.json" - }, - { - "name": "Qidi ASA-Aero", - "sub_path": "filament/Qidi ASA-Aero.json" - }, - { - "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.2 nozzle", - "sub_path": "filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 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" - }, - { - "name": "QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle", - "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-GF10 @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 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 @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "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-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 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 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 ABS @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" }, { "name": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", @@ -741,36 +565,36 @@ "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 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 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 ASA @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.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 ASA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 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 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 Generic PETG", + "sub_path": "filament/Qidi Generic PETG.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 Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 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 Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 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 Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 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 Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json" }, { "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", @@ -785,20 +609,24 @@ "sub_path": "filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.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 Generic PLA", + "sub_path": "filament/Qidi Generic PLA.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 PLA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 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 Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 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 Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 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 Generic PLA @Qidi X-Max 3 0.2 nozzle", @@ -813,32 +641,128 @@ "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 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 Generic TPU 95A", + "sub_path": "filament/Qidi Generic TPU 95A.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 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 Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" + "name": "QIDI ABS Odorless", + "sub_path": "filament/QIDI ABS Odorless.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 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 @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.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 PA-Ultra @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.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 PA-Ultra @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.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 ABS Odorless @0.2 nozzle", + "sub_path": "filament/QIDI ABS Odorless @0.2 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" + }, + { + "name": "QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI ABS Rapido @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 ABS Rapido 0.8 nozzle", + "sub_path": "filament/QIDI ABS Rapido 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", + "sub_path": "filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "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 PA12-CF", + "sub_path": "filament/QIDI PA12-CF.json" }, { "name": "QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle", @@ -852,6 +776,10 @@ "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 PAHT-CF", + "sub_path": "filament/QIDI PAHT-CF.json" + }, { "name": "QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json" @@ -864,6 +792,10 @@ "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 PC-ABS-FR", + "sub_path": "filament/Qidi PC-ABS-FR.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" @@ -876,6 +808,10 @@ "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 PET-CF", + "sub_path": "filament/QIDI PET-CF.json" + }, { "name": "QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json" @@ -889,25 +825,49 @@ "sub_path": "filament/QIDI PET-CF @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 PETG Tough", + "sub_path": "filament/QIDI PETG Tough.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 PETG Tough @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 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 PETG Tough @Qidi Q1 Pro 0.8 nozzle", "sub_path": "filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 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 PETG Tough 0.2 nozzle", + "sub_path": "filament/QIDI PETG Tough 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Tough 0.6 nozzle", + "sub_path": "filament/QIDI PETG Tough 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Tough 0.8 nozzle", + "sub_path": "filament/QIDI PETG Tough 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido", + "sub_path": "filament/QIDI PLA Rapido.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 PLA Rapido @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 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" @@ -916,6 +876,198 @@ "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 ABS-GF10", + "sub_path": "filament/QIDI ABS-GF10.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-GF10 @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 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": "Tinmorry PETG-ECO", + "sub_path": "filament/Tinmorry PETG-ECO.json" + }, + { + "name": "Qidi Generic TPU", + "sub_path": "filament/Qidi Generic TPU.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 Generic ASA", + "sub_path": "filament/Qidi Generic ASA.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 Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 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 Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 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 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 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 Generic PA", + "sub_path": "filament/Qidi Generic PA.json" + }, + { + "name": "Qidi Generic PA-CF", + "sub_path": "filament/Qidi Generic PA-CF.json" + }, + { + "name": "Qidi Generic PC", + "sub_path": "filament/Qidi Generic PC.json" + }, + { + "name": "Qidi Generic PETG-CF", + "sub_path": "filament/Qidi Generic PETG-CF.json" + }, + { + "name": "Qidi Generic PLA Silk", + "sub_path": "filament/Qidi Generic PLA Silk.json" + }, + { + "name": "Qidi Generic 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", "sub_path": "filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json" @@ -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 000000000..8f0cd8942 --- /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 000000000..0474f7217 --- /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 000000000..8e56cc5a0 --- /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 000000000..c0a349fa3 --- /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 000000000..020153b31 --- /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 000000000..ccaacdfe1 --- /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 000000000..ccc24c26c --- /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 52d285cfa..87970900d 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 346053821..8a348e7ac 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 7656eb8f6..683be9035 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 7a02f947c..94d9f981c 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 1b3cd4ac6..ac603a177 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 29e4c1db5..b661799a9 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 347f1dba8..e9b5f7573 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 000000000..fe72ee456 --- /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 000000000..80621e46a --- /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 000000000..b81523c61 --- /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 000000000..1e946ef06 --- /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 a0ab3b342..e77c21a52 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 cc825857d..86b941809 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 532b8229e..4070af994 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 baf5860ad..a102a1213 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 246901116..fd278ed2d 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 0d56960e8..a3782cc2a 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 aa7dd8a79..da2469deb 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 3c5b8af58..ff520549c 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 000000000..1cf845ad2 --- /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 000000000..01fb0eaca --- /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 000000000..fc21c6e1e --- /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 000000000..9d11a1834 --- /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 000000000..543a8f2bb --- /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 000000000..88404df2b --- /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 000000000..596ee112e --- /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 000000000..860d743bb --- /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 adb871839..7c7a3dc95 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 000000000..9c7d962dd --- /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 94fd3a3c4..fe2af9df1 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 e4d1b7679..91b087313 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 13cbe61f4..9a28add43 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 be1bbc67d..0674bacba 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 37469c94f..71723f666 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 08f55efc1..c53243db4 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 5f76aa62b..b1e941182 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 5b5f87a14..857aa4552 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 85819678e..91d06fc31 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 a00403898..0ec727013 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 ee1fd3976..f991ef960 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 1f22f9ff2..efaefef83 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 7a11be473..9eff17f58 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 c27f725f1..b1173f811 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 de315e824..78aa5e904 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 3b938eb9d..7f4da85e5 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 8b2f70e6f..a99c52e8b 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 0fe156f43..eb65ae3ef 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 6b4c5a396..26def59c5 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 000000000..6183243f5 --- /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 662fa6852..5ca1cbdec 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 972e94bd9..c0f3a7ad4 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 216b98c41..83805585f 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 55615fd03..81059b30b 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 000000000..f5889b114 --- /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 0f80b8075..f2b961f82 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 6830a7053..9fde95454 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 22eb83879..f5fc9e326 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 1f5a17c1b..42df71e5e 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 000000000..b4da1cbf1 --- /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 000000000..b770f889a --- /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 000000000..c206d0e35 --- /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 000000000..56d802676 --- /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 000000000..80dc5879b --- /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 000000000..472cde3a8 --- /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 000000000..b73e847cc --- /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 000000000..578b18b1d --- /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 5b07e3e1f..302d1c5bd 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 000000000..dc30ce7db --- /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 000000000..6d1364ce4 --- /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 000000000..7b47a552f --- /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 000000000..0fec33528 --- /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 000000000..d0387282d --- /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 df0aecfa3..2dae49d2a 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 b5464463c..ca2c07fcf 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 0f180e402..4c43d6167 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 678d0130f..329a417ba 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 8ad2038b9..98639f292 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 afad4a341..4b532fe90 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 32292c6fe..21a9b03ba 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 cdd8044ae..805cfb1ae 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 39fa92571..0eeacbf73 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 e3c944e82..cd4513a2b 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 072826e60..c07dae16b 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" + "from": "system", + "instantiation": "true", + "inherits": "Qidi Generic ASA", + "filament_flow_ratio": [ + "0.92" ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "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 346215757..a068ae060 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 d586d8187..49485cc78 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 ed38ebb6f..53c36fd95 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 0f60692f6..f6cd88e9e 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 d32e2c80c..91ea783e3 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 2e754bdb4..1d2f9a7a4 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 eab6cf1e0..3181967e2 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 b939dc768..3d64c5d79 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 19e29799d..d747a1b29 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 8bab081a8..5c5650e55 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 b9c65494d..16bf02d8e 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 907a637ca..b699fb1a4 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 26f380952..bdf952339 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 628ba1a92..bb48060f5 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 55acc6530..242c0f01f 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 bd7a5d17b..d96fb2155 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 88e7d4a18..98e60a99d 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 45f268562..f11220550 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 31f0e2acc..f23903b87 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" - ], - "fan_min_speed": [ "40" ], - "slow_down_min_speed": [ + "fan_min_speed": [ "10" ], + "slow_down_min_speed": [ + "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 a45234ae2..8a7d1c3ae 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 87d3bece3..4a87b977d 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 59b31e5f0..6668f9444 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 979091eba..b25ce1015 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 eac3229bd..78a3483c1 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 0c73db382..75e046ea4 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 21c563ab6..b593ed0f3 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 d9287994e..e99189fd8 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 4989e95f0..c1cf194a3 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 4068d3948..ebcf82840 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 ca1b3c2bc..93bb0e381 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 000000000..3f5a9bc85 --- /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 000000000..b27676fa3 --- /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 6d0e15e2a..a64de438a 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 84a25b23c..1bc87b6bc 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 6416f28ac..2db0187cc 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 8d7927f98..db1e75811 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 4098bb90e..b5f892136 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 000000000..dda26e182 --- /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 f7468558e..91a4c272c 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 a9d22a8cc..b92f99f0a 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 99c638722..c17dcfb87 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 ed997e088..0a2551e03 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 ec1a0103f..d04f771b9 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 6e162b00f..24bbf363b 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 41e53258e..3d315713f 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 52709182d..22fc68b7f 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" @@ -65,6 +65,6 @@ "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", "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 1bfefcd78..d54f5ec51 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 397df4346..d6c7a2779 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 62a6acc62..d869a61f6 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 2505730d9..0a0422540 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" 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 8921e1cc4..4915207a6 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 e22bca8b0..6d15b376e 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 5f167207b..566afbb4f 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 f2b9122af..335d5c916 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 c722d7ca3..ce361e8f2 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" 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 c29bdd665..9f56f59c1 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 c63f6028a..199f9a943 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 d635074a5..90dd0d1cd 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 5b51b03bf..6e97b8224 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 059c5aeac..2c29bd399 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 c92361578..a11de8479 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 1902dc189..f2b95c974 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 7e7cfa7a1..6c56efc5d 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 b81b6b2a4..94bcd6b7e 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,7 +111,7 @@ "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" diff --git a/resources/profiles/Qidi/process/fdm_process_common.json b/resources/profiles/Qidi/process/fdm_process_common.json index 779c5b1dd..8da0fd26b 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 686376d56..c5eb0d706 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 f6ea715fd..ee8fc101a 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 4e726f6d4..6371cee8d 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 b7028a5e9..621517491 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 42d4b5f89..6494922db 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -878,8 +878,8 @@ var LangText = { t111: "Создать новый", t112: "Присоединяйтесь к программе", t113: "Вы можете изменить свой выбор в любое время.", - orca1: "Edit Project Info", - orca2: "no model information", + orca1: "Редактировать информацию о проекте", + orca2: "Информации о модели отсутствует", }, ko_KR: { t1: "Orca Slicer에 오신 것을 환영합니다", @@ -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", diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index 17de9d6b3..2fbaa4330 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 000000000..cfed7f41c --- /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 000000000..1e3729e21 --- /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 30bbdce67..b401bea75 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 09e6b3b57..b5530bc62 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."}, @@ -889,6 +891,8 @@ int CLI::run(int argc, char **argv) // instruct the window manager to fall back to X server mode. ::setenv("GDK_BACKEND", "x11", /* replace */ true); + ::setenv("WEBKIT_DISABLE_COMPOSITING_MODE", "1", /* replace */ false); + // Also on Linux, we need to tell Xlib that we will be using threads, // lest we crash when we fire up GStreamer. XInitThreads(); @@ -1028,7 +1032,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 +1077,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 +1136,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 +1235,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; @@ -1312,14 +1330,14 @@ int CLI::run(int argc, char **argv) old_height_to_rod = config.opt_float("extruder_clearance_height_to_rod"); if (config.option("extruder_clearance_height_to_lid")) old_height_to_lid = config.opt_float("extruder_clearance_height_to_lid"); - if (config.option("extruder_clearance_max_radius")) - old_max_radius = config.opt_float("extruder_clearance_max_radius"); + if (config.option("extruder_clearance_radius")) + old_max_radius = config.opt_float("extruder_clearance_radius"); if (config.option("max_layer_height")) old_max_layer_height = config.option("max_layer_height")->values; if (config.option("min_layer_height")) old_min_layer_height = config.option("min_layer_height")->values; BOOST_LOG_TRIVIAL(info) << boost::format("old printable size from 3mf: {%1%, %2%, %3%}")%old_printable_width %old_printable_depth %old_printable_height; - BOOST_LOG_TRIVIAL(info) << boost::format("old extruder_clearance_height_to_rod %1%, extruder_clearance_height_to_lid %2%, extruder_clearance_max_radius %3%}")%old_height_to_rod %old_height_to_lid %old_max_radius; + BOOST_LOG_TRIVIAL(info) << boost::format("old extruder_clearance_height_to_rod %1%, extruder_clearance_height_to_lid %2%, extruder_clearance_radius %3%}")%old_height_to_rod %old_height_to_lid %old_max_radius; } else { @@ -2605,8 +2623,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(); if (filament_is_support->size() != project_filament_count) { @@ -2615,9 +2633,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 +2663,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) { @@ -2774,7 +2796,7 @@ int CLI::run(int argc, char **argv) double print_height = m_print_config.opt_float("printable_height"); double height_to_lid = m_print_config.opt_float("extruder_clearance_height_to_lid"); double height_to_rod = m_print_config.opt_float("extruder_clearance_height_to_rod"); - double cleareance_radius = m_print_config.opt_float("extruder_clearance_max_radius"); + double cleareance_radius = m_print_config.opt_float("extruder_clearance_radius"); //double plate_stride; std::string bed_texture; @@ -3540,6 +3562,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 +3589,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 +4037,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 +4061,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 +4069,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; } diff --git a/src/admesh/stl.h b/src/admesh/stl.h index 259377796..0f1a0cec8 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 26f5dc321..221572bca 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 ec044f87e..8196bf10c 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/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index e474ca642..9e9b56e9d 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -173,10 +173,11 @@ void AppConfig::set_defaults() if (get("use_free_camera").empty()) set_bool("use_free_camera", false); -#ifdef SUPPORT_REVERSE_MOUSE_ZOOM + if (get("camera_navigation_style").empty()) + set("camera_navigation_style", "0"); + if (get("reverse_mouse_wheel_zoom").empty()) set_bool("reverse_mouse_wheel_zoom", false); -#endif if (get("zoom_to_mouse").empty()) set_bool("zoom_to_mouse", false); @@ -274,6 +275,14 @@ void AppConfig::set_defaults() set_bool("auto_calculate", true); } + if (get("remember_printer_config").empty()) { + set_bool("remember_printer_config", true); + } + + if (get("auto_calculate_when_filament_change").empty()){ + set_bool("auto_calculate_when_filament_change", true); + } + if (get("show_home_page").empty()) { set_bool("show_home_page", true); } @@ -557,6 +566,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++) { @@ -679,6 +690,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; @@ -1031,6 +1043,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; } diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index b7e0ea61e..5d085f333 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -10,37 +10,17 @@ #include #include -#include "utils/VoronoiUtils.hpp" - #include "utils/linearAlg2D.hpp" #include "Utils.hpp" #include "SVG.hpp" #include "Geometry/VoronoiVisualUtils.hpp" #include "Geometry/VoronoiUtilsCgal.hpp" #include "../EdgeGrid.hpp" -#include "ankerl/unordered_dense.h" + +#include "Geometry/VoronoiUtils.hpp" #define SKELETAL_TRAPEZOIDATION_BEAD_SEARCH_MAX 1000 //A limit to how long it'll keep searching for adjacent beads. Increasing will re-use beadings more often (saving performance), but search longer for beading (costing performance). -namespace boost::polygon { - -template<> struct geometry_concept -{ - typedef segment_concept type; -}; - -template<> struct segment_traits -{ - typedef coord_t coordinate_type; - typedef Slic3r::Point point_type; - static inline point_type get(const Slic3r::Arachne::PolygonsSegmentIndex &CSegment, direction_1d dir) - { - return dir.to_int() ? CSegment.p() : CSegment.next().p(); - } -}; - -} // namespace boost::polygon - namespace Slic3r::Arachne { @@ -109,8 +89,7 @@ static void export_graph_to_svg(const std::string } #endif -SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_type& vd_node, Point p) -{ +SkeletalTrapezoidation::node_t &SkeletalTrapezoidation::makeNode(const VD::vertex_type &vd_node, Point p) { auto he_node_it = vd_node_to_he_node.find(&vd_node); if (he_node_it == vd_node_to_he_node.end()) { @@ -125,8 +104,7 @@ SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_ty } } -void SkeletalTrapezoidation::transferEdge(Point from, Point to, vd_t::edge_type& vd_edge, edge_t*& prev_edge, Point& start_source_point, Point& end_source_point, const std::vector& segments) -{ +void SkeletalTrapezoidation::transferEdge(Point from, Point to, const VD::edge_type &vd_edge, edge_t *&prev_edge, Point &start_source_point, Point &end_source_point, const std::vector &segments) { auto he_edge_it = vd_edge_to_he_edge.find(vd_edge.twin()); if (he_edge_it != vd_edge_to_he_edge.end()) { // Twin segment(s) have already been made @@ -181,7 +159,7 @@ void SkeletalTrapezoidation::transferEdge(Point from, Point to, vd_t::edge_type& } else { - std::vector discretized = discretize(vd_edge, segments); + Points discretized = discretize(vd_edge, segments); assert(discretized.size() >= 2); if(discretized.size() < 2) { @@ -236,45 +214,42 @@ void SkeletalTrapezoidation::transferEdge(Point from, Point to, vd_t::edge_type& } } -std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_edge, const std::vector& segments) +Points SkeletalTrapezoidation::discretize(const VD::edge_type& vd_edge, const std::vector& segments) { + assert(Geometry::VoronoiUtils::is_in_range(vd_edge)); + /*Terminology in this function assumes that the edge moves horizontally from left to right. This is not necessarily the case; the edge can go in any direction, but it helps to picture it in a certain direction in your head.*/ - const vd_t::cell_type* left_cell = vd_edge.cell(); - const vd_t::cell_type* right_cell = vd_edge.twin()->cell(); + const VD::cell_type *left_cell = vd_edge.cell(); + const VD::cell_type *right_cell = vd_edge.twin()->cell(); - assert(VoronoiUtils::p(vd_edge.vertex0()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex0()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge.vertex0()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex0()).y() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge.vertex1()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex1()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge.vertex1()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge.vertex1()).y() >= std::numeric_limits::lowest()); + Point start = Geometry::VoronoiUtils::to_point(vd_edge.vertex0()).cast(); + Point end = Geometry::VoronoiUtils::to_point(vd_edge.vertex1()).cast(); - Point start = VoronoiUtils::p(vd_edge.vertex0()).cast(); - Point end = VoronoiUtils::p(vd_edge.vertex1()).cast(); - bool point_left = left_cell->contains_point(); bool point_right = right_cell->contains_point(); if ((!point_left && !point_right) || vd_edge.is_secondary()) // Source vert is directly connected to source segment { - return std::vector({ start, end }); + return Points({ start, end }); } else if (point_left != point_right) //This is a parabolic edge between a point and a line. { - Point p = VoronoiUtils::getSourcePoint(*(point_left ? left_cell : right_cell), segments); - const Segment& s = VoronoiUtils::getSourceSegment(*(point_left ? right_cell : left_cell), segments); - return VoronoiUtils::discretizeParabola(p, s, start, end, discretization_step_size, transitioning_angle); + Point p = Geometry::VoronoiUtils::get_source_point(*(point_left ? left_cell : right_cell), segments.begin(), segments.end()); + const Segment& s = Geometry::VoronoiUtils::get_source_segment(*(point_left ? right_cell : left_cell), segments.begin(), segments.end()); + return Geometry::VoronoiUtils::discretize_parabola(p, s, start, end, discretization_step_size, transitioning_angle); } else //This is a straight edge between two points. { /*While the edge is straight, it is still discretized since the part becomes narrower between the two points. As such it may need different beadings along the way.*/ - Point left_point = VoronoiUtils::getSourcePoint(*left_cell, segments); - Point right_point = VoronoiUtils::getSourcePoint(*right_cell, segments); - coord_t d = (right_point - left_point).cast().norm(); - Point middle = (left_point + right_point) / 2; - Point x_axis_dir = Point(right_point - left_point).rotate_90_degree_ccw(); + Point left_point = Geometry::VoronoiUtils::get_source_point(*left_cell, segments.begin(), segments.end()); + Point right_point = Geometry::VoronoiUtils::get_source_point(*right_cell, segments.begin(), segments.end()); + coord_t d = (right_point - left_point).cast().norm(); + Point middle = (left_point + right_point) / 2; + Point x_axis_dir = perp(Point(right_point - left_point)); coord_t x_axis_length = x_axis_dir.cast().norm(); const auto projected_x = [x_axis_dir, x_axis_length, middle](Point from) //Project a point on the edge. @@ -311,7 +286,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ //Start generating points along the edge. Point a = start; Point b = end; - std::vector ret; + Points ret; ret.emplace_back(a); //Introduce an extra edge at the borders of the markings? @@ -351,8 +326,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ } } -bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments) -{ +bool SkeletalTrapezoidation::computePointCellRange(const VD::cell_type &cell, Point &start_source_point, Point &end_source_point, const VD::edge_type *&starting_vd_edge, const VD::edge_type *&ending_vd_edge, const std::vector &segments) { if (cell.incident_edge()->is_infinite()) return false; //Infinite edges only occur outside of the polygon. Don't copy any part of this cell. @@ -360,16 +334,16 @@ bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& // Copy whole cell into graph or not at all // If the cell.incident_edge()->vertex0() is far away so much that it doesn't even fit into Vec2i64, then there is no way that it will be inside the input polygon. - if (const vd_t::vertex_type &vert = *cell.incident_edge()->vertex0(); + if (const VD::vertex_type &vert = *cell.incident_edge()->vertex0(); vert.x() >= double(std::numeric_limits::max()) || vert.x() <= double(std::numeric_limits::lowest()) || vert.y() >= double(std::numeric_limits::max()) || vert.y() <= double(std::numeric_limits::lowest())) return false; // Don't copy any part of this cell - const Point source_point = VoronoiUtils::getSourcePoint(cell, segments); - const PolygonsPointIndex source_point_index = VoronoiUtils::getSourcePointIndex(cell, segments); - Vec2i64 some_point = VoronoiUtils::p(cell.incident_edge()->vertex0()); + const Point source_point = Geometry::VoronoiUtils::get_source_point(cell, segments.begin(), segments.end()); + const PolygonsPointIndex source_point_index = Geometry::VoronoiUtils::get_source_point_index(cell, segments.begin(), segments.end()); + Vec2i64 some_point = Geometry::VoronoiUtils::to_point(cell.incident_edge()->vertex0()); if (some_point == source_point.cast()) - some_point = VoronoiUtils::p(cell.incident_edge()->vertex1()); + some_point = Geometry::VoronoiUtils::to_point(cell.incident_edge()->vertex1()); //Test if the some_point is even inside the polygon. //The edge leading out of a polygon must have an endpoint that's not in the corner following the contour of the polygon at that vertex. @@ -378,16 +352,16 @@ bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& if (!LinearAlg2D::isInsideCorner(source_point_index.prev().p(), source_point_index.p(), source_point_index.next().p(), some_point)) return false; // Don't copy any part of this cell - vd_t::edge_type* vd_edge = cell.incident_edge(); + const VD::edge_type* vd_edge = cell.incident_edge(); do { assert(vd_edge->is_finite()); - if (Vec2i64 p1 = VoronoiUtils::p(vd_edge->vertex1()); p1 == source_point.cast()) { + if (Vec2i64 p1 = Geometry::VoronoiUtils::to_point(vd_edge->vertex1()); p1 == source_point.cast()) { start_source_point = source_point; end_source_point = source_point; starting_vd_edge = vd_edge->next(); ending_vd_edge = vd_edge; } else { - assert((VoronoiUtils::p(vd_edge->vertex0()) == source_point.cast() || !vd_edge->is_secondary()) && "point cells must end in the point! They cannot cross the point with an edge, because collinear edges are not allowed in the input."); + assert((Geometry::VoronoiUtils::to_point(vd_edge->vertex0()) == source_point.cast() || !vd_edge->is_secondary()) && "point cells must end in the point! They cannot cross the point with an edge, because collinear edges are not allowed in the input."); } } while (vd_edge = vd_edge->next(), vd_edge != cell.incident_edge()); @@ -396,47 +370,6 @@ bool SkeletalTrapezoidation::computePointCellRange(vd_t::cell_type& cell, Point& return true; } -void SkeletalTrapezoidation::computeSegmentCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments) -{ - const Segment &source_segment = VoronoiUtils::getSourceSegment(cell, segments); - const Point from = source_segment.from(); - const Point to = source_segment.to(); - - // Find starting edge - // Find end edge - bool seen_possible_start = false; - bool after_start = false; - bool ending_edge_is_set_before_start = false; - vd_t::edge_type* edge = cell.incident_edge(); - do { - if (edge->is_infinite()) - continue; - - Vec2i64 v0 = VoronoiUtils::p(edge->vertex0()); - Vec2i64 v1 = VoronoiUtils::p(edge->vertex1()); - - assert(!(v0 == to.cast() && v1 == from.cast() )); - if (v0 == to.cast() && !after_start) { // Use the last edge which starts in source_segment.to - starting_vd_edge = edge; - seen_possible_start = true; - } - else if (seen_possible_start) { - after_start = true; - } - - if (v1 == from.cast() && (!ending_vd_edge || ending_edge_is_set_before_start)) { - ending_edge_is_set_before_start = !after_start; - ending_vd_edge = edge; - } - } while (edge = edge->next(), edge != cell.incident_edge()); - - assert(starting_vd_edge && ending_vd_edge); - assert(starting_vd_edge != ending_vd_edge); - - start_source_point = source_segment.to(); - end_source_point = source_segment.from(); -} - SkeletalTrapezoidation::SkeletalTrapezoidation(const Polygons& polys, const BeadingStrategy& beading_strategy, double transitioning_angle, coord_t discretization_step_size, coord_t transition_filter_dist, coord_t allowed_filter_deviation, @@ -451,128 +384,6 @@ SkeletalTrapezoidation::SkeletalTrapezoidation(const Polygons& polys, const Bead constructFromPolygons(polys); } -static bool has_finite_edge_with_non_finite_vertex(const Geometry::VoronoiDiagram &voronoi_diagram) -{ - for (const VoronoiUtils::vd_t::edge_type &edge : voronoi_diagram.edges()) { - if (edge.is_finite()) { - assert(edge.vertex0() != nullptr && edge.vertex1() != nullptr); - if (edge.vertex0() == nullptr || edge.vertex1() == nullptr || !VoronoiUtils::is_finite(*edge.vertex0()) || - !VoronoiUtils::is_finite(*edge.vertex1())) - return true; - } - } - return false; -} - -static bool detect_missing_voronoi_vertex(const Geometry::VoronoiDiagram &voronoi_diagram, const std::vector &segments) { - if (has_finite_edge_with_non_finite_vertex(voronoi_diagram)) - return true; - - for (VoronoiUtils::vd_t::cell_type cell : voronoi_diagram.cells()) { - if (!cell.incident_edge()) - continue; // There is no spoon - - if (cell.contains_segment()) { - const SkeletalTrapezoidation::Segment &source_segment = VoronoiUtils::getSourceSegment(cell, segments); - const Point from = source_segment.from(); - const Point to = source_segment.to(); - - // Find starting edge - // Find end edge - bool seen_possible_start = false; - bool after_start = false; - bool ending_edge_is_set_before_start = false; - VoronoiUtils::vd_t::edge_type *starting_vd_edge = nullptr; - VoronoiUtils::vd_t::edge_type *ending_vd_edge = nullptr; - VoronoiUtils::vd_t::edge_type *edge = cell.incident_edge(); - do { - if (edge->is_infinite() || edge->vertex0() == nullptr || edge->vertex1() == nullptr || !VoronoiUtils::is_finite(*edge->vertex0()) || !VoronoiUtils::is_finite(*edge->vertex1())) - continue; - - Vec2i64 v0 = VoronoiUtils::p(edge->vertex0()); - Vec2i64 v1 = VoronoiUtils::p(edge->vertex1()); - - assert(!(v0 == to.cast() && v1 == from.cast())); - if (v0 == to.cast() && !after_start) { // Use the last edge which starts in source_segment.to - starting_vd_edge = edge; - seen_possible_start = true; - } else if (seen_possible_start) { - after_start = true; - } - - if (v1 == from.cast() && (!ending_vd_edge || ending_edge_is_set_before_start)) { - ending_edge_is_set_before_start = !after_start; - ending_vd_edge = edge; - } - } while (edge = edge->next(), edge != cell.incident_edge()); - - if (!starting_vd_edge || !ending_vd_edge || starting_vd_edge == ending_vd_edge) - return true; - } - } - - return false; -} - -static bool has_missing_twin_edge(const SkeletalTrapezoidationGraph &graph) -{ - for (const auto &edge : graph.edges) - if (edge.twin == nullptr) - return true; - return false; -} - -inline static ankerl::unordered_dense::map try_to_fix_degenerated_voronoi_diagram_by_rotation( - Geometry::VoronoiDiagram &voronoi_diagram, - const Polygons &polys, - Polygons &polys_rotated, - std::vector &segments, - const double fix_angle) -{ - ankerl::unordered_dense::map vertex_mapping; - for (Polygon &poly : polys_rotated) - poly.rotate(fix_angle); - - assert(polys_rotated.size() == polys.size()); - for (size_t poly_idx = 0; poly_idx < polys.size(); ++poly_idx) { - assert(polys_rotated[poly_idx].size() == polys[poly_idx].size()); - for (size_t point_idx = 0; point_idx < polys[poly_idx].size(); ++point_idx) - vertex_mapping.insert({polys_rotated[poly_idx][point_idx], polys[poly_idx][point_idx]}); - } - - segments.clear(); - for (size_t poly_idx = 0; poly_idx < polys_rotated.size(); poly_idx++) - for (size_t point_idx = 0; point_idx < polys_rotated[poly_idx].size(); point_idx++) - segments.emplace_back(&polys_rotated, poly_idx, point_idx); - - voronoi_diagram.clear(); - construct_voronoi(segments.begin(), segments.end(), &voronoi_diagram); - -#ifdef ARACHNE_DEBUG_VORONOI - { - static int iRun = 0; - dump_voronoi_to_svg(debug_out_path("arachne_voronoi-diagram-rotated-%d.svg", iRun++).c_str(), voronoi_diagram, to_points(polys), to_lines(polys)); - } -#endif - - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); - - return vertex_mapping; -} - -inline static void rotate_back_skeletal_trapezoidation_graph_after_fix(SkeletalTrapezoidationGraph &graph, - const double fix_angle, - const ankerl::unordered_dense::map &vertex_mapping) -{ - for (STHalfEdgeNode &node : graph.nodes) { - // If a mapping exists between a rotated point and an original point, use this mapping. Otherwise, rotate a point in the opposite direction. - if (auto node_it = vertex_mapping.find(node.p); node_it != vertex_mapping.end()) - node.p = node_it->second; - else - node.p.rotate(-fix_angle); - } -} - void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) { #ifdef ARACHNE_DEBUG @@ -604,8 +415,8 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) } #endif - Geometry::VoronoiDiagram voronoi_diagram; - construct_voronoi(segments.begin(), segments.end(), &voronoi_diagram); + VD voronoi_diagram; + voronoi_diagram.construct_voronoi(segments.cbegin(), segments.cend()); #ifdef ARACHNE_DEBUG_VORONOI { @@ -614,126 +425,59 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) } #endif - // Try to detect cases when some Voronoi vertex is missing and when - // the Voronoi diagram is not planar. - // When any Voronoi vertex is missing, or the Voronoi diagram is not - // planar, rotate the input polygon and try again. - const bool has_missing_voronoi_vertex = detect_missing_voronoi_vertex(voronoi_diagram, segments); - // Detection of non-planar Voronoi diagram detects at least GH issues #8474, #8514 and #8446. - const bool is_voronoi_diagram_planar = Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram); - const double fix_angle = PI / 6; - - ankerl::unordered_dense::map vertex_mapping; - // polys_copy is referenced through items stored in the std::vector segments. - Polygons polys_copy = polys; - if (has_missing_voronoi_vertex || !is_voronoi_diagram_planar) { - if (has_missing_voronoi_vertex) - BOOST_LOG_TRIVIAL(warning) << "Detected missing Voronoi vertex, input polygons will be rotated back and forth."; - else if (!is_voronoi_diagram_planar) - BOOST_LOG_TRIVIAL(warning) << "Detected non-planar Voronoi diagram, input polygons will be rotated back and forth."; - - vertex_mapping = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angle); - - assert(!detect_missing_voronoi_vertex(voronoi_diagram, segments)); - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram)); - if (detect_missing_voronoi_vertex(voronoi_diagram, segments)) - BOOST_LOG_TRIVIAL(error) << "Detected missing Voronoi vertex even after the rotation of input."; - else if (!Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram)) - BOOST_LOG_TRIVIAL(error) << "Detected non-planar Voronoi diagram even after the rotation of input."; - } - - bool degenerated_voronoi_diagram = has_missing_voronoi_vertex || !is_voronoi_diagram_planar; - -process_voronoi_diagram: assert(this->graph.edges.empty() && this->graph.nodes.empty() && this->vd_edge_to_he_edge.empty() && this->vd_node_to_he_node.empty()); - for (vd_t::cell_type cell : voronoi_diagram.cells()) { + for (const VD::cell_type &cell : voronoi_diagram.cells()) { if (!cell.incident_edge()) continue; // There is no spoon - Point start_source_point; - Point end_source_point; - vd_t::edge_type* starting_vonoroi_edge = nullptr; - vd_t::edge_type* ending_vonoroi_edge = nullptr; + Point start_source_point; + Point end_source_point; + const VD::edge_type *starting_voronoi_edge = nullptr; + const VD::edge_type *ending_voronoi_edge = nullptr; // Compute and store result in above variables - + if (cell.contains_point()) { - const bool keep_going = computePointCellRange(cell, start_source_point, end_source_point, starting_vonoroi_edge, ending_vonoroi_edge, segments); + const bool keep_going = computePointCellRange(cell, start_source_point, end_source_point, starting_voronoi_edge, ending_voronoi_edge, segments); if (!keep_going) continue; } else { assert(cell.contains_segment()); - computeSegmentCellRange(cell, start_source_point, end_source_point, starting_vonoroi_edge, ending_vonoroi_edge, segments); + Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, segments.cbegin(), segments.cend()); + assert(cell_range.is_valid()); + start_source_point = cell_range.segment_start_point; + end_source_point = cell_range.segment_end_point; + starting_voronoi_edge = cell_range.edge_begin; + ending_voronoi_edge = cell_range.edge_end; } - - if (!starting_vonoroi_edge || !ending_vonoroi_edge) { + + if (!starting_voronoi_edge || !ending_voronoi_edge) { assert(false && "Each cell should start / end in a polygon vertex"); continue; } - + // Copy start to end edge to graph - edge_t* prev_edge = nullptr; - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex1()).x() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex1()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex1()).y() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex1()).y() >= std::numeric_limits::lowest()); - transferEdge(start_source_point, VoronoiUtils::p(starting_vonoroi_edge->vertex1()).cast(), *starting_vonoroi_edge, prev_edge, start_source_point, end_source_point, segments); - node_t* starting_node = vd_node_to_he_node[starting_vonoroi_edge->vertex0()]; + assert(Geometry::VoronoiUtils::is_in_range(*starting_voronoi_edge)); + edge_t *prev_edge = nullptr; + transferEdge(start_source_point, Geometry::VoronoiUtils::to_point(starting_voronoi_edge->vertex1()).cast(), *starting_voronoi_edge, prev_edge, start_source_point, end_source_point, segments); + node_t *starting_node = vd_node_to_he_node[starting_voronoi_edge->vertex0()]; starting_node->data.distance_to_boundary = 0; constexpr bool is_next_to_start_or_end = true; graph.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); - for (vd_t::edge_type* vd_edge = starting_vonoroi_edge->next(); vd_edge != ending_vonoroi_edge; vd_edge = vd_edge->next()) { + for (const VD::edge_type* vd_edge = starting_voronoi_edge->next(); vd_edge != ending_voronoi_edge; vd_edge = vd_edge->next()) { assert(vd_edge->is_finite()); + assert(Geometry::VoronoiUtils::is_in_range(*vd_edge)); - assert(VoronoiUtils::p(vd_edge->vertex0()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex0()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge->vertex0()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex0()).y() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge->vertex1()).x() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex1()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(vd_edge->vertex1()).y() <= std::numeric_limits::max() && VoronoiUtils::p(vd_edge->vertex1()).y() >= std::numeric_limits::lowest()); - - Point v1 = VoronoiUtils::p(vd_edge->vertex0()).cast(); - Point v2 = VoronoiUtils::p(vd_edge->vertex1()).cast(); + Point v1 = Geometry::VoronoiUtils::to_point(vd_edge->vertex0()).cast(); + Point v2 = Geometry::VoronoiUtils::to_point(vd_edge->vertex1()).cast(); transferEdge(v1, v2, *vd_edge, prev_edge, start_source_point, end_source_point, segments); - - graph.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_vonoroi_edge); + graph.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_voronoi_edge); } - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex0()).x() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex0()).x() >= std::numeric_limits::lowest()); - assert(VoronoiUtils::p(starting_vonoroi_edge->vertex0()).y() <= std::numeric_limits::max() && VoronoiUtils::p(starting_vonoroi_edge->vertex0()).y() >= std::numeric_limits::lowest()); - transferEdge(VoronoiUtils::p(ending_vonoroi_edge->vertex0()).cast(), end_source_point, *ending_vonoroi_edge, prev_edge, start_source_point, end_source_point, segments); + transferEdge(Geometry::VoronoiUtils::to_point(ending_voronoi_edge->vertex0()).cast(), end_source_point, *ending_voronoi_edge, prev_edge, start_source_point, end_source_point, segments); prev_edge->to->data.distance_to_boundary = 0; } - // For some input polygons, as in GH issues #8474 and #8514 resulting Voronoi diagram is degenerated because it is not planar. - // When this degenerated Voronoi diagram is processed, the resulting half-edge structure contains some edges that don't have - // a twin edge. Based on this, we created a fast mechanism that detects those causes and tries to recompute the Voronoi - // diagram on slightly rotated input polygons that usually make the Voronoi generator generate a non-degenerated Voronoi diagram. - if (!degenerated_voronoi_diagram && has_missing_twin_edge(this->graph)) { - BOOST_LOG_TRIVIAL(warning) << "Detected degenerated Voronoi diagram, input polygons will be rotated back and forth."; - degenerated_voronoi_diagram = true; - vertex_mapping = try_to_fix_degenerated_voronoi_diagram_by_rotation(voronoi_diagram, polys, polys_copy, segments, fix_angle); - - assert(!detect_missing_voronoi_vertex(voronoi_diagram, segments)); - if (detect_missing_voronoi_vertex(voronoi_diagram, segments)) - BOOST_LOG_TRIVIAL(error) << "Detected missing Voronoi vertex after the rotation of input."; - - assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); - - this->graph.edges.clear(); - this->graph.nodes.clear(); - this->vd_edge_to_he_edge.clear(); - this->vd_node_to_he_node.clear(); - - goto process_voronoi_diagram; - } - - if (degenerated_voronoi_diagram) { - assert(!has_missing_twin_edge(this->graph)); - - if (has_missing_twin_edge(this->graph)) - BOOST_LOG_TRIVIAL(error) << "Detected degenerated Voronoi diagram even after the rotation of input."; - } - - if (degenerated_voronoi_diagram) - rotate_back_skeletal_trapezoidation_graph_after_fix(this->graph, fix_angle, vertex_mapping); - #ifdef ARACHNE_DEBUG assert(Geometry::VoronoiUtilsCgal::is_voronoi_diagram_planar_intersection(voronoi_diagram)); #endif @@ -742,7 +486,7 @@ process_voronoi_diagram: graph.collapseSmallEdges(); - // Set [incident_edge] the the first possible edge that way we can iterate over all reachable edges from node.incident_edge, + // Set [incident_edge] the first possible edge that way we can iterate over all reachable edges from node.incident_edge, // without needing to iterate backward for (edge_t& edge : graph.edges) if (!edge.prev) @@ -751,7 +495,7 @@ process_voronoi_diagram: void SkeletalTrapezoidation::separatePointyQuadEndNodes() { - ankerl::unordered_dense::set visited_nodes; + NodeSet visited_nodes; for (edge_t& edge : graph.edges) { if (edge.prev) @@ -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 225bf5386..75ff94015 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 @@ protected: * mapping each voronoi VD edge to the corresponding halfedge HE edge * In case the result segment is discretized, we map the VD edge to the *last* HE edge */ - ankerl::unordered_dense::map vd_edge_to_he_edge; - ankerl::unordered_dense::map vd_node_to_he_node; - node_t& makeNode(vd_t::vertex_type& vd_node, Point p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. + EdgeMap vd_edge_to_he_edge; + NodeMap vd_node_to_he_node; + node_t &makeNode(const VD::vertex_type &vd_node, Point p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. /*! * (Eventual) returned 'polylines per index' result (from generateToolpaths): @@ -176,7 +180,7 @@ protected: * Transfer an edge from the VD to the HE and perform discretization of parabolic edges (and vertex-vertex edges) * \p prev_edge serves as input and output. May be null as input. */ - void transferEdge(Point from, Point to, vd_t::edge_type& vd_edge, edge_t*& prev_edge, Point& start_source_point, Point& end_source_point, const std::vector& segments); + void transferEdge(Point from, Point to, const VD::edge_type &vd_edge, edge_t *&prev_edge, Point &start_source_point, Point &end_source_point, const std::vector &segments); /*! * Discretize a Voronoi edge that represents the medial axis of a vertex- @@ -203,7 +207,7 @@ protected: * \return A number of coordinates along the edge where the edge is broken * up into discrete pieces. */ - std::vector discretize(const vd_t::edge_type& segment, const std::vector& segments); + Points discretize(const VD::edge_type& segment, const std::vector& segments); /*! * Compute the range of line segments that surround a cell of the skeletal @@ -229,33 +233,7 @@ protected: * /return Whether the cell is inside of the polygon. If it's outside of the * polygon we should skip processing it altogether. */ - bool computePointCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments); - - /*! - * Compute the range of line segments that surround a cell of the skeletal - * graph that belongs to a line segment of the medial axis. - * - * This should only be used on cells that belong to a central line segment - * of the skeletal graph, e.g. trapezoid cells, not triangular cells. - * - * The resulting line segments is just the first and the last segment. They - * are linked to the neighboring segments, so you can iterate over the - * segments until you reach the last segment. - * \param cell The cell to compute the range of line segments for. - * \param[out] start_source_point The start point of the source segment of - * this cell. - * \param[out] end_source_point The end point of the source segment of this - * cell. - * \param[out] starting_vd_edge The edge of the Voronoi diagram where the - * loop around the cell starts. - * \param[out] ending_vd_edge The edge of the Voronoi diagram where the loop - * around the cell ends. - * \param points All vertices of the input Polygons. - * \param segments All edges of the input Polygons. - * /return Whether the cell is inside of the polygon. If it's outside of the - * polygon we should skip processing it altogether. - */ - void computeSegmentCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& segments); + static bool computePointCellRange(const VD::cell_type &cell, Point &start_source_point, Point &end_source_point, const VD::edge_type *&starting_vd_edge, const VD::edge_type *&ending_vd_edge, const std::vector &segments); /*! * For VD cells associated with an input polygon vertex, we need to separate the node at the end and start of the cell into two diff --git a/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp b/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp index 6eff3d62e..3258b41c7 100644 --- a/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp +++ b/src/libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp @@ -27,5 +27,24 @@ public: } // namespace Slic3r::Arachne +namespace boost::polygon { + +template<> struct geometry_concept +{ + typedef segment_concept type; +}; + +template<> struct segment_traits +{ + typedef coord_t coordinate_type; + typedef Slic3r::Point point_type; + + static inline point_type get(const Slic3r::Arachne::PolygonsSegmentIndex &CSegment, direction_1d dir) + { + return dir.to_int() ? CSegment.to() : CSegment.from(); + } +}; + +} // namespace boost::polygon #endif//UTILS_POLYGONS_SEGMENT_INDEX_H diff --git a/src/libslic3r/Arachne/utils/VoronoiUtils.cpp b/src/libslic3r/Arachne/utils/VoronoiUtils.cpp deleted file mode 100644 index 82bd79523..000000000 --- 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 aa4693643..000000000 --- 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 2631b936e..7952b3aa8 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) { diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp index bf9815be6..fd5342041 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 ebabfab42..dfd82cbde 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -194,9 +194,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 @@ -238,6 +241,8 @@ set(lisbslic3r_sources NSVGUtils.hpp ObjectID.cpp ObjectID.hpp + ParameterUtils.cpp + ParameterUtils.hpp PerimeterGenerator.cpp PerimeterGenerator.hpp PlaceholderParser.cpp @@ -431,8 +436,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 diff --git a/src/libslic3r/CSGMesh/CSGMesh.hpp b/src/libslic3r/CSGMesh/CSGMesh.hpp index d14ed7659..177d34329 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 446326dc8..5963b2910 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 e98903378..a9a48b48c 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/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index dee747793..942a5d07b 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 0f6a37779..4394d0026 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -151,7 +151,7 @@ class ExtrusionPath : public ExtrusionEntity { public: Polyline polyline; - int overhang_degree = 0; + double overhang_degree = 0; int curve_degree = 0; // Volumetric velocity. mm^3 of plastic per mm of linear head motion. Used by the G-code generator. double mm3_per_mm; @@ -163,7 +163,8 @@ public: ExtrusionPath() : mm3_per_mm(-1), width(-1), height(-1), m_role(erNone), m_no_extrusion(false) {} ExtrusionPath(ExtrusionRole role) : mm3_per_mm(-1), width(-1), height(-1), m_role(role), m_no_extrusion(false) {} ExtrusionPath(ExtrusionRole role, double mm3_per_mm, float width, float height, bool no_extrusion = false) : mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role), m_no_extrusion(no_extrusion) {} - ExtrusionPath(int overhang_degree, int curve_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) : overhang_degree(overhang_degree), curve_degree(curve_degree), mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {} + ExtrusionPath(double overhang_degree, int curve_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) : overhang_degree(overhang_degree), curve_degree(curve_degree), mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {} + ExtrusionPath(const ExtrusionPath &rhs) : polyline(rhs.polyline) , overhang_degree(rhs.overhang_degree) @@ -277,8 +278,8 @@ public: }; int get_overhang_degree() const { // only perimeter has overhang degree. Other return 0; - if (is_perimeter(m_role) || is_bridge(m_role)) - return overhang_degree; + if (is_perimeter(m_role)) + return (int)overhang_degree; return 0; }; void set_curve_degree(int curve) { @@ -513,6 +514,10 @@ public: ExtrusionLoopRole role = elrDefault); [[nodiscard]] std::vector get_all_paths() const; + void clip_slope(double distance, bool inter_perimeter = false ); + void clip_end(const double distance); + void clip_front(const double distance); + double slope_path_length(); }; inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, ExtrusionRole role, double mm3_per_mm, float width, float height) @@ -525,7 +530,7 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, Ex } } -inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, int overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) +inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) { dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) @@ -546,7 +551,7 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, E polylines.clear(); } -inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, int overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) +inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) { dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) @@ -557,6 +562,16 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, i polylines.clear(); } +inline void extrusion_paths_append(ExtrusionPaths &dst, Polyline &&polyline, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) +{ + dst.reserve(dst.size() + 1); + if (polyline.is_valid()) { + dst.push_back(ExtrusionPath(overhang_degree, curva_degree, role, mm3_per_mm, width, height)); + dst.back().polyline = std::move(polyline); + } + polyline.clear(); +} + inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, Polylines &polylines, ExtrusionRole role, double mm3_per_mm, float width, float height, bool can_reverse = true) { dst.reserve(dst.size() + polylines.size()); diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index d68c14ce5..d87588c6d 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 6c8c099c4..7b7a3b887 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/Format/STL.cpp b/src/libslic3r/Format/STL.cpp index 133a7a505..1888f5cd1 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 5f2f838bf..e545e1c6d 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 a451c0849..8275cf7c5 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -291,6 +291,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"; @@ -1491,6 +1493,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 +4100,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 +4202,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; @@ -7415,6 +7442,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"; @@ -7780,18 +7825,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/GCode.cpp b/src/libslic3r/GCode.cpp index 3f16dc866..467ec4bbe 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; @@ -1425,8 +1427,21 @@ namespace DoExport { total_cost += weight * extruder->filament_cost() * 0.001; } - total_cost += config.time_cost.getFloat() * (normal_print_time/3600.0); - + for (auto volume : result.print_statistics.support_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; + } + print_statistics.total_extruded_volume = total_extruded_volume; print_statistics.total_used_filament = total_used_filament; print_statistics.total_weight = total_weight; @@ -1613,6 +1628,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); @@ -2000,13 +2024,16 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // if thumbnail type of BTT_TFT, insert above header // if not, it is inserted under the header in its normal spot - const GCodeThumbnailsFormat m_gcode_thumbnail_format = print.full_print_config().opt_enum("thumbnails_format"); - if (m_gcode_thumbnail_format == GCodeThumbnailsFormat::BTT_TFT) - GCodeThumbnails::export_thumbnails_to_file( - thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, - m_gcode_thumbnail_format, - [&file](const char *sz) { file.write(sz); }, - [&print]() { print.throw_if_canceled(); }); + GCodeThumbnailsFormat m_gcode_thumbnail_format = GCodeThumbnailsFormat::PNG; + if (thumbnail_cb != nullptr) { + m_gcode_thumbnail_format = print.full_print_config().opt_enum("thumbnails_format"); + if (m_gcode_thumbnail_format == GCodeThumbnailsFormat::BTT_TFT) + GCodeThumbnails::export_thumbnails_to_file( + thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, + m_gcode_thumbnail_format, + [&file](const char *sz) { file.write(sz); }, + [&print]() { print.throw_if_canceled(); }); + } file.write_format("; HEADER_BLOCK_START\n"); // Write information on the generator. @@ -2067,32 +2094,32 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // as configuration key / value pairs to be parsable by older versions of // PrusaSlicer G-code viewer. { - if (is_bbl_printers) { - file.write("; CONFIG_BLOCK_START\n"); - std::string full_config; - append_full_config(print, full_config); - if (!full_config.empty()) - file.write(full_config); + if (is_bbl_printers) { + file.write("; CONFIG_BLOCK_START\n"); + std::string full_config; + append_full_config(print, full_config); + if (!full_config.empty()) + file.write(full_config); - // SoftFever: write compatiple image - int first_layer_bed_temperature = get_bed_temperature(0, true, print.config().curr_bed_type); - file.write_format("; first_layer_bed_temperature = %d\n", - first_layer_bed_temperature); - file.write_format( - "; first_layer_temperature = %d\n", - print.config().nozzle_temperature_initial_layer.get_at(0)); - file.write("; CONFIG_BLOCK_END\n\n"); - } else { - if (m_gcode_thumbnail_format != GCodeThumbnailsFormat::BTT_TFT) { - auto thumbnaim_fmt = m_gcode_thumbnail_format; - // Orca: if the thumbnail format is ColPic, we write PNG in the beginning of gcode file and ColPic in the end of gcode file. - if(m_gcode_thumbnail_format == GCodeThumbnailsFormat::ColPic) - thumbnaim_fmt = GCodeThumbnailsFormat::PNG; - GCodeThumbnails::export_thumbnails_to_file( - thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, - thumbnaim_fmt, [&file](const char* sz) { file.write(sz); }, [&print]() { print.throw_if_canceled(); }); + // SoftFever: write compatiple image + int first_layer_bed_temperature = get_bed_temperature(0, true, print.config().curr_bed_type); + file.write_format("; first_layer_bed_temperature = %d\n", + first_layer_bed_temperature); + file.write_format( + "; first_layer_temperature = %d\n", + print.config().nozzle_temperature_initial_layer.get_at(0)); + file.write("; CONFIG_BLOCK_END\n\n"); + } else if (thumbnail_cb != nullptr) { + if (m_gcode_thumbnail_format != GCodeThumbnailsFormat::BTT_TFT) { + auto thumbnaim_fmt = m_gcode_thumbnail_format; + // Orca: if the thumbnail format is ColPic, we write PNG in the beginning of gcode file and ColPic in the end of gcode file. + if (m_gcode_thumbnail_format == GCodeThumbnailsFormat::ColPic) + thumbnaim_fmt = GCodeThumbnailsFormat::PNG; + GCodeThumbnails::export_thumbnails_to_file( + thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, + thumbnaim_fmt, [&file](const char* sz) { file.write(sz); }, [&print]() { print.throw_if_canceled(); }); + } } - } } @@ -2272,6 +2299,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. @@ -2292,6 +2325,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() })); @@ -2319,12 +2353,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; @@ -4702,6 +4761,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()) { @@ -4982,6 +5042,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; @@ -5089,12 +5173,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; } @@ -5103,9 +5186,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) { @@ -5194,76 +5277,67 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, (is_bridge(path.role()) || is_perimeter(path.role()))) { bool is_external = is_external_perimeter(path.role()); double ref_speed = is_external ? m_config.get_abs_value("outer_wall_speed") : m_config.get_abs_value("inner_wall_speed"); + if (ref_speed == 0) + ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + + if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) { + ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm); + } if (sloped) { ref_speed = std::min(ref_speed, m_config.scarf_joint_speed.get_abs_value(ref_speed)); } + ConfigOptionPercents overhang_overlap_levels({75, 50, 25, 13, 12.99, 0}); - if (m_config.slowdown_for_curled_perimeters){ - ConfigOptionFloatsOrPercents dynamic_overhang_speeds( - {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}}); - if (ref_speed == 0) - ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + if (m_config.slowdown_for_curled_perimeters){ + ConfigOptionFloatsOrPercents dynamic_overhang_speeds( + {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}}); - if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) { - ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm); - } - - new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, + new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, ref_speed, speed, m_config.slowdown_for_curled_perimeters); }else{ - ConfigOptionFloatsOrPercents dynamic_overhang_speeds( - {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, - (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? - FloatOrPercent{100, true} : - FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, - FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}, - FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}}); - - if (ref_speed == 0) - ref_speed = EXTRUDER_CONFIG(filament_max_volumetric_speed) / _mm3_per_mm; + ConfigOptionFloatsOrPercents dynamic_overhang_speeds( + {(m_config.get_abs_value("overhang_1_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_1_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_2_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_2_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_3_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_3_4_speed", ref_speed) * 100 / ref_speed, true}, + (m_config.get_abs_value("overhang_4_4_speed", ref_speed) < 0.5) ? + FloatOrPercent{100, true} : + FloatOrPercent{m_config.get_abs_value("overhang_4_4_speed", ref_speed) * 100 / ref_speed, true}, + FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}, + FloatOrPercent{m_config.get_abs_value("bridge_speed") * 100 / ref_speed, true}}); - if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) { - ref_speed = std::min(ref_speed, EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm); - } - - new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, + new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds, ref_speed, speed, m_config.slowdown_for_curled_perimeters); - } + } variable_speed = std::any_of(new_points.begin(), new_points.end(), [speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > EPSILON; }); + } double F = speed * 60; // convert mm/sec to mm/min - if(abs(F - 5753.504) < 0.002) - { - std::cout << "F: " << F << std::endl; - } //Orca: process custom gcode for extrusion role change if (path.role() != m_last_extrusion_role && !m_config.change_extrusion_role_gcode.value.empty()) { @@ -5411,6 +5485,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) { @@ -5450,6 +5526,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; @@ -5470,6 +5548,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) { @@ -5551,6 +5631,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) { @@ -5977,6 +6059,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. @@ -6168,6 +6252,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 03ba079fa..18ea65354 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -577,6 +577,7 @@ private: int get_bed_temperature(const int extruder_id, const bool is_first_layer, const BedType bed_type) const; std::string _extrude(const ExtrusionPath &path, std::string description = "", double speed = -1); + double get_overhang_degree_corr_speed(float speed, double path_degree); void print_machine_envelope(GCodeOutputStream &file, Print &print); void _print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait); void _print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait); diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index e10e32ef9..9258c6bf5 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -762,6 +762,15 @@ void GCodeProcessor::UsedFilaments::reset() wipe_tower_cache = 0.0f; wipe_tower_volume_per_extruder.clear(); + + support_volume_cache = 0.0f; + support_volume_per_extruder.clear(); +} + +void GCodeProcessor::UsedFilaments::increase_support_caches(double extruded_volume) +{ + support_volume_cache += extruded_volume; + role_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::increase_model_caches(double extruded_volume) @@ -774,6 +783,7 @@ void GCodeProcessor::UsedFilaments::increase_model_caches(double extruded_volume void GCodeProcessor::UsedFilaments::increase_wipe_tower_caches(double extruded_volume) { wipe_tower_cache += extruded_volume; + role_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::process_color_change_cache() @@ -808,6 +818,18 @@ void GCodeProcessor::UsedFilaments::process_wipe_tower_cache(GCodeProcessor* pro } } +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_volume_per_extruder.find(active_extruder_id) != support_volume_per_extruder.end()) + support_volume_per_extruder[active_extruder_id] += support_volume_cache; + else + support_volume_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()) @@ -842,6 +864,7 @@ void GCodeProcessor::UsedFilaments::process_caches(GCodeProcessor* processor) process_model_cache(processor); process_role_cache(processor); process_wipe_tower_cache(processor); + process_support_cache(processor); } #if ENABLE_GCODE_VIEWER_STATISTICS @@ -885,6 +908,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 +2956,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 +3433,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 +3726,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 +4541,7 @@ 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); //BBS: reset remaining filament m_remaining_volume = m_nozzle_volume; } @@ -4527,6 +4575,7 @@ void GCodeProcessor::update_estimated_times_stats() 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.support_volumes_per_extruder = m_used_filaments.support_volume_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; } diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 2b3a46206..ed38b2af3 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 { @@ -74,6 +75,7 @@ namespace Slic3r { std::vector volumes_per_color_change; std::map volumes_per_extruder; std::map wipe_tower_volumes_per_extruder; + std::map support_volumes_per_extruder; //BBS: the flush amount of every filament std::map flush_per_filament; std::map> used_filaments_per_role; @@ -195,6 +197,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 +235,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; @@ -500,6 +505,9 @@ namespace Slic3r { double wipe_tower_cache; std::mapwipe_tower_volume_per_extruder; + double support_volume_cache; + std::mapsupport_volume_per_extruder; + //BBS: the flush amount of every filament std::map flush_per_filament; @@ -508,12 +516,15 @@ namespace Slic3r { 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 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 e1440bc7d..8462e7311 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 a5aaf4e00..dc272e946 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 1cc6f74c8..d9a93131a 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -156,7 +156,9 @@ public: // (print->config().print_sequence == PrintSequence::ByObject is false). ToolOrdering(const Print& print, unsigned int first_extruder, bool prime_multi_material = false); - void clear() { m_layer_tools.clear(); } + void clear() { + m_layer_tools.clear(); m_tool_order_cache.clear(); + } // Only valid for non-sequential print: // Assign a pointer to a custom G-code to the respective ToolOrdering::LayerTools. @@ -207,7 +209,7 @@ private: unsigned int m_last_printing_extruder = (unsigned int)-1; // All extruders, which extrude some material over m_layer_tools. std::vector m_all_printing_extruders; - + std::unordered_map> m_tool_order_cache; const PrintConfig* m_print_config_ptr = nullptr; const PrintObject* m_print_object_ptr = nullptr; bool m_is_BBL_printer = false; diff --git a/src/libslic3r/GCodeReader.hpp b/src/libslic3r/GCodeReader.hpp index ea0df3dd7..52a37dde5 100644 --- a/src/libslic3r/GCodeReader.hpp +++ b/src/libslic3r/GCodeReader.hpp @@ -26,6 +26,7 @@ public: const std::string_view comment() const { size_t pos = m_raw.find(';'); return (pos == std::string::npos) ? std::string_view() : std::string_view(m_raw).substr(pos + 1); } + void clear() { m_raw.clear(); } bool has(Axis axis) const { return (m_mask & (1 << int(axis))) != 0; } float value(Axis axis) const { return m_axis[axis]; } bool has(char axis) const; diff --git a/src/libslic3r/Geometry/MedialAxis.cpp b/src/libslic3r/Geometry/MedialAxis.cpp index 39677c928..44eccd985 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 000000000..e1df7322a --- /dev/null +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -0,0 +1,354 @@ +#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; + } 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 5529750f3..ef1c62276 100644 --- a/src/libslic3r/Geometry/Voronoi.hpp +++ b/src/libslic3r/Geometry/Voronoi.hpp @@ -4,10 +4,8 @@ #include "../Line.hpp" #include "../Polyline.hpp" -#define BOOST_VORONOI_USE_GMP 1 - #ifdef _MSC_VER -// Suppress warning C4146 in OpenVDB: unary minus operator applied to unsigned type, result still unsigned +// Suppress warning C4146 in OpenVDB: unary minus operator applied to unsigned type, result still unsigned #pragma warning(push) #pragma warning(disable : 4146) #endif // _MSC_VER @@ -16,18 +14,182 @@ #pragma warning(pop) #endif // _MSC_VER -namespace Slic3r { +namespace Slic3r::Geometry { -namespace Geometry { - -class VoronoiDiagram : public boost::polygon::voronoi_diagram { +class VoronoiDiagram +{ public: - typedef double coord_type; - typedef boost::polygon::point_data point_type; - typedef boost::polygon::segment_data segment_type; - typedef boost::polygon::rectangle_data rect_type; + using coord_type = double; + using voronoi_diagram_type = boost::polygon::voronoi_diagram; + using point_type = boost::polygon::point_data; + using segment_type = boost::polygon::segment_data; + using rect_type = boost::polygon::rectangle_data; + + using coordinate_type = voronoi_diagram_type::coordinate_type; + using vertex_type = voronoi_diagram_type::vertex_type; + using edge_type = voronoi_diagram_type::edge_type; + using cell_type = voronoi_diagram_type::cell_type; + + using const_vertex_iterator = voronoi_diagram_type::const_vertex_iterator; + using const_edge_iterator = voronoi_diagram_type::const_edge_iterator; + using const_cell_iterator = voronoi_diagram_type::const_cell_iterator; + + using vertex_container_type = voronoi_diagram_type::vertex_container_type; + using edge_container_type = voronoi_diagram_type::edge_container_type; + using cell_container_type = voronoi_diagram_type::cell_container_type; + + enum class IssueType { + NO_ISSUE_DETECTED, + FINITE_EDGE_WITH_NON_FINITE_VERTEX, + MISSING_VORONOI_VERTEX, + NON_PLANAR_VORONOI_DIAGRAM, + VORONOI_EDGE_INTERSECTING_INPUT_SEGMENT, + UNKNOWN // Repairs are disabled in the constructor. + }; + + enum class State { + REPAIR_NOT_NEEDED, // The original Voronoi diagram doesn't have any issue. + REPAIR_SUCCESSFUL, // The original Voronoi diagram has some issues, but it was repaired. + REPAIR_UNSUCCESSFUL, // The original Voronoi diagram has some issues, but it wasn't repaired. + UNKNOWN // Repairs are disabled in the constructor. + }; + + VoronoiDiagram() = default; + + virtual ~VoronoiDiagram() = default; + + IssueType get_issue_type() const { return m_issue_type; } + + State get_state() const { return m_state; } + + bool is_valid() const { return m_state != State::REPAIR_UNSUCCESSFUL; } + + void clear(); + + const vertex_container_type &vertices() const { return m_is_modified ? m_vertices : m_voronoi_diagram.vertices(); } + + const edge_container_type &edges() const { return m_is_modified ? m_edges : m_voronoi_diagram.edges(); } + + const cell_container_type &cells() const { return m_is_modified ? m_cells : m_voronoi_diagram.cells(); } + + std::size_t num_vertices() const { return m_is_modified ? m_vertices.size() : m_voronoi_diagram.num_vertices(); } + + std::size_t num_edges() const { return m_is_modified ? m_edges.size() : m_voronoi_diagram.num_edges(); } + + std::size_t num_cells() const { return m_is_modified ? m_cells.size() : m_voronoi_diagram.num_cells(); } + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + void>::type + construct_voronoi(SegmentIterator segment_begin, SegmentIterator segment_end, bool try_to_repair_if_needed = true); + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + void>::type + construct_voronoi(const PointIterator first, const PointIterator last) + { + boost::polygon::construct_voronoi(first, last, &m_voronoi_diagram); + m_state = State::UNKNOWN; + m_issue_type = IssueType::UNKNOWN; + } + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_and< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + typename boost::polygon::gtl_if::value_type>::type>::type>::type>::type, + void>::type + construct_voronoi(const PointIterator p_first, const PointIterator p_last, const SegmentIterator s_first, const SegmentIterator s_last) + { + boost::polygon::construct_voronoi(p_first, p_last, s_first, s_last, &m_voronoi_diagram); + m_state = State::UNKNOWN; + m_issue_type = IssueType::UNKNOWN; + } + + // Try to detect cases when some Voronoi vertex is missing, when the Voronoi diagram + // is not planar or some Voronoi edge is intersecting input segment. + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + IssueType>::type + detect_known_issues(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end); + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type + try_to_repair_degenerated_voronoi_diagram_by_rotation(SegmentIterator segment_begin, SegmentIterator segment_end, double fix_angle); + + template + typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + VoronoiDiagram::IssueType>::type + try_to_repair_degenerated_voronoi_diagram(SegmentIterator segment_begin, SegmentIterator segment_end); + +private: + struct Segment + { + Point from; + Point to; + + Segment() = delete; + explicit Segment(const Point &from, const Point &to) : from(from), to(to) {} + }; + + void copy_to_local(voronoi_diagram_type &voronoi_diagram); + + // Detect issues related to Voronoi cells, or that can be detected by iterating over Voronoi cells. + // The first type of issue that can be detected is a missing Voronoi vertex, especially when it is + // missing at one of the endpoints of the input segment. + // The second type of issue that can be detected is a Voronoi edge that intersects the input segment. + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + IssueType>::type + detect_known_voronoi_cell_issues(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end); + + static bool has_finite_edge_with_non_finite_vertex(const VoronoiDiagram &voronoi_diagram); + + voronoi_diagram_type m_voronoi_diagram; + vertex_container_type m_vertices; + edge_container_type m_edges; + cell_container_type m_cells; + bool m_is_modified = false; + State m_state = State::UNKNOWN; + IssueType m_issue_type = IssueType::UNKNOWN; + +public: + using SegmentIt = std::vector::iterator; + + friend struct boost::polygon::segment_traits; }; -} } // namespace Slicer::Geometry +} // namespace Slic3r::Geometry + +namespace boost::polygon { +template<> struct geometry_concept +{ + typedef segment_concept type; +}; + +template<> struct segment_traits +{ + using coordinate_type = coord_t; + using point_type = Slic3r::Point; + using segment_type = Slic3r::Geometry::VoronoiDiagram::Segment; + + static inline point_type get(const segment_type &segment, direction_1d dir) { return dir.to_int() ? segment.to : segment.from; } +}; +} // namespace boost::polygon #endif // slic3r_Geometry_Voronoi_hpp_ diff --git a/src/libslic3r/Geometry/VoronoiOffset.cpp b/src/libslic3r/Geometry/VoronoiOffset.cpp index ed8d9c2b1..46105220a 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 000000000..1e9436325 --- /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 000000000..bf6391467 --- /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 e76decf5f..a0e2191af 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 897891bd9..33ae84780 100644 --- a/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp +++ b/src/libslic3r/Geometry/VoronoiUtilsCgal.hpp @@ -2,6 +2,7 @@ #define slic3r_VoronoiUtilsCgal_hpp_ #include "Voronoi.hpp" +#include "../Arachne/utils/PolygonsSegmentIndex.hpp" namespace Slic3r::Geometry { class VoronoiDiagram; @@ -13,8 +14,12 @@ public: static bool is_voronoi_diagram_planar_intersection(const VoronoiDiagram &voronoi_diagram); // Check if the Voronoi diagram is planar using verification that all neighboring edges are ordered CCW for each vertex. - static bool is_voronoi_diagram_planar_angle(const VoronoiDiagram &voronoi_diagram); - + template + static typename boost::polygon::enable_if< + typename boost::polygon::gtl_if::value_type>::type>::type>::type, + bool>::type + is_voronoi_diagram_planar_angle(const VoronoiDiagram &voronoi_diagram, SegmentIterator segment_begin, SegmentIterator segment_end); }; } // namespace Slic3r::Geometry diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index f9e66e9eb..f6dd46e9e 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 8d475cefb..66aef84a3 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -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); @@ -217,6 +219,8 @@ 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, ".oltp")) + result = load_stl(input_file.c_str(), &model, nullptr, stlFn,256); 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, ".svg")) @@ -954,6 +958,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 +1513,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())); } diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index ecab5a129..03b25b810 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -482,6 +482,7 @@ public: //BBS: add instance convex hull bounding box BoundingBoxf3 instance_convex_hull_bounding_box(size_t instance_idx, bool dont_translate = false) const; + BoundingBoxf3 instance_convex_hull_bounding_box(const ModelInstance* instance, bool dont_translate = false) const; // Calculate 2D convex hull of of a projection of the transformed printable volumes into the XY plane. // This method is cheap in that it does not make any unnecessary copy of the volume meshes. @@ -1510,6 +1511,7 @@ public: // DesignInfo of Model std::string stl_design_id; + std::string stl_design_country; std::shared_ptr design_info = nullptr; std::shared_ptr model_info = nullptr; std::shared_ptr profile_info = nullptr; diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp index 92ac77b19..477509e69 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 596fc56db..148fdc992 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; -}; -} +//#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 -#include -namespace boost::polygon { -template <> -struct geometry_concept { typedef segment_concept type; }; +#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 -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; - } -}; -} - -//#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]); } + + size_t poly_idx = 0; + for (ColoredLines &color_lines : colorized_contours) { + size_t line_idx = 0; + for (size_t color_line_idx = 0; color_line_idx < color_lines.size(); ++color_line_idx) { + color_lines[color_line_idx].poly_idx = int(poly_idx); + color_lines[color_line_idx].local_line_idx = int(line_idx); + ++line_idx; + } + ++poly_idx; + } + return colorized_contours; } -using boost::polygon::voronoi_diagram; - -static inline Point mk_point(const Voronoi::VD::vertex_type *point) { return {coord_t(point->x()), coord_t(point->y())}; } - -static inline Point mk_point(const Voronoi::Internal::point_type &point) { return {coord_t(point.x()), coord_t(point.y())}; } - -static inline Point mk_point(const voronoi_diagram::vertex_type &point) { return {coord_t(point.x()), coord_t(point.y())}; } - -static inline Point mk_point(const Vec2d &point) { return {coord_t(std::round(point.x())), coord_t(std::round(point.y()))}; } - -static inline Vec2d mk_vec2(const voronoi_diagram::vertex_type *point) { return {point->x(), point->y()}; } - -struct MMU_Graph -{ - enum class ARC_TYPE { BORDER, NON_BORDER }; - - struct Arc - { - size_t from_idx; - size_t to_idx; - int color; - ARC_TYPE type; - - bool operator==(const Arc &rhs) const { return (from_idx == rhs.from_idx) && (to_idx == rhs.to_idx) && (color == rhs.color) && (type == rhs.type); } - bool operator!=(const Arc &rhs) const { return !operator==(rhs); } - }; - - struct Node - { - Vec2d point; - std::list arc_idxs; - - void remove_edge(const size_t to_idx, MMU_Graph &graph) - { - for (auto arc_it = this->arc_idxs.begin(); arc_it != this->arc_idxs.end(); ++arc_it) { - MMU_Graph::Arc &arc = graph.arcs[*arc_it]; - if (arc.to_idx == to_idx) { - assert(arc.type != ARC_TYPE::BORDER); - this->arc_idxs.erase(arc_it); - break; - } - } - } - }; - - std::vector nodes; - std::vector arcs; - size_t all_border_points{}; - - std::vector polygon_idx_offset; - std::vector polygon_sizes; - - void remove_edge(const size_t from_idx, const size_t to_idx) - { - nodes[from_idx].remove_edge(to_idx, *this); - nodes[to_idx].remove_edge(from_idx, *this); - } - - [[nodiscard]] size_t get_global_index(const size_t poly_idx, const size_t point_idx) const { return polygon_idx_offset[poly_idx] + point_idx; } - - void append_edge(const size_t &from_idx, const size_t &to_idx, int color = -1, ARC_TYPE type = ARC_TYPE::NON_BORDER) - { - // Don't append duplicate edges between the same nodes. - for (const size_t &arc_idx : this->nodes[from_idx].arc_idxs) - if (arcs[arc_idx].to_idx == to_idx) - return; - for (const size_t &arc_idx : this->nodes[to_idx].arc_idxs) - if (arcs[arc_idx].to_idx == from_idx) - return; - - this->nodes[from_idx].arc_idxs.push_back(this->arcs.size()); - this->arcs.push_back({from_idx, to_idx, color, type}); - - // Always insert only one directed arc for the input polygons. - // Two directed arcs in both directions are inserted if arcs aren't between points of the input polygons. - if (type == ARC_TYPE::NON_BORDER) { - this->nodes[to_idx].arc_idxs.push_back(this->arcs.size()); - this->arcs.push_back({to_idx, from_idx, color, type}); - } - } - - // It assumes that between points of the input polygons is always only one directed arc, - // with the same direction as lines of the input polygon. - [[nodiscard]] MMU_Graph::Arc get_border_arc(size_t idx) const { - assert(idx < this->all_border_points); - return this->arcs[idx]; - } - - [[nodiscard]] size_t nodes_count() const { return this->nodes.size(); } - - void remove_nodes_with_one_arc() - { - std::queue update_queue; - for (const MMU_Graph::Node &node : this->nodes) { - size_t node_idx = &node - &this->nodes.front(); - // Skip nodes that represent points of input polygons. - if (node.arc_idxs.size() == 1 && node_idx >= this->all_border_points) - update_queue.emplace(&node - &this->nodes.front()); - } - - while (!update_queue.empty()) { - size_t node_from_idx = update_queue.front(); - MMU_Graph::Node &node_from = this->nodes[update_queue.front()]; - update_queue.pop(); - if (node_from.arc_idxs.empty()) - continue; - - assert(node_from.arc_idxs.size() == 1); - size_t node_to_idx = arcs[node_from.arc_idxs.front()].to_idx; - MMU_Graph::Node &node_to = this->nodes[node_to_idx]; - this->remove_edge(node_from_idx, node_to_idx); - if (node_to.arc_idxs.size() == 1 && node_to_idx >= this->all_border_points) - update_queue.emplace(node_to_idx); - } - } - - void add_contours(const std::vector> &color_poly) - { - this->all_border_points = nodes.size(); - this->polygon_sizes = std::vector(color_poly.size()); - for (size_t polygon_idx = 0; polygon_idx < color_poly.size(); ++polygon_idx) - this->polygon_sizes[polygon_idx] = color_poly[polygon_idx].size(); - this->polygon_idx_offset = std::vector(color_poly.size()); - this->polygon_idx_offset[0] = 0; - for (size_t polygon_idx = 1; polygon_idx < color_poly.size(); ++polygon_idx) { - this->polygon_idx_offset[polygon_idx] = this->polygon_idx_offset[polygon_idx - 1] + color_poly[polygon_idx - 1].size(); - } - - size_t poly_idx = 0; - for (const std::vector &color_lines : color_poly) { - size_t line_idx = 0; - for (const ColoredLine &color_line : color_lines) { - size_t from_idx = this->get_global_index(poly_idx, line_idx); - size_t to_idx = this->get_global_index(poly_idx, (line_idx + 1) % color_lines.size()); - this->append_edge(from_idx, to_idx, color_line.color, ARC_TYPE::BORDER); - ++line_idx; - } - ++poly_idx; - } - } - - // Nodes 0..all_border_points are only one with are on countour. Other vertexis are consider as not on coouter. So we check if base on attach index - inline bool is_vertex_on_contour(const Voronoi::VD::vertex_type *vertex) const - { - assert(vertex != nullptr); - return vertex->color() < this->all_border_points; - } - - [[nodiscard]] inline bool is_edge_attach_to_contour(const voronoi_diagram::const_edge_iterator &edge_iterator) const - { - return this->is_vertex_on_contour(edge_iterator->vertex0()) || this->is_vertex_on_contour(edge_iterator->vertex1()); - } - - [[nodiscard]] inline bool is_edge_connecting_two_contour_vertices(const voronoi_diagram::const_edge_iterator &edge_iterator) const - { - return this->is_vertex_on_contour(edge_iterator->vertex0()) && this->is_vertex_on_contour(edge_iterator->vertex1()); - } - - // All Voronoi vertices are post-processes to merge very close vertices to single. Witch eliminates issues with intersection edges. - // Also, Voronoi vertices outside of the bounding of input polygons are throw away by marking them. - void append_voronoi_vertices(const Geometry::VoronoiDiagram &vd, const Polygons &color_poly_tmp, BoundingBox bbox) { - bbox.offset(SCALED_EPSILON); - - struct CPoint - { - CPoint() = delete; - CPoint(const Vec2d &point, size_t contour_idx, size_t point_idx) : m_point_double(point), m_point(mk_point(point)), m_point_idx(point_idx), m_contour_idx(contour_idx) {} - CPoint(const Vec2d &point, size_t point_idx) : m_point_double(point), m_point(mk_point(point)), m_point_idx(point_idx), m_contour_idx(0) {} - const Vec2d m_point_double; - const Point m_point; - size_t m_point_idx; - size_t m_contour_idx; - - [[nodiscard]] const Vec2d &point_double() const { return m_point_double; } - [[nodiscard]] const Point &point() const { return m_point; } - bool operator==(const CPoint &rhs) const { return this->m_point_double == rhs.m_point_double && this->m_contour_idx == rhs.m_contour_idx && this->m_point_idx == rhs.m_point_idx; } - }; - struct CPointAccessor { const Point* operator()(const CPoint &pt) const { return &pt.point(); }}; - typedef ClosestPointInRadiusLookup CPointLookupType; - - CPointLookupType closest_voronoi_point(coord_t(SCALED_EPSILON)); - CPointLookupType closest_contour_point(3 * coord_t(SCALED_EPSILON)); - for (const Polygon &polygon : color_poly_tmp) - for (const Point &pt : polygon.points) - closest_contour_point.insert(CPoint(Vec2d(pt.x(), pt.y()), &polygon - &color_poly_tmp.front(), &pt - &polygon.points.front())); - - for (const voronoi_diagram::vertex_type &vertex : vd.vertices()) { - vertex.color(-1); - Vec2d vertex_point_double = Vec2d(vertex.x(), vertex.y()); - Point vertex_point = mk_point(vertex); - - const Vec2d &first_point_double = this->nodes[this->get_border_arc(vertex.incident_edge()->cell()->source_index()).from_idx].point; - const Vec2d &second_point_double = this->nodes[this->get_border_arc(vertex.incident_edge()->twin()->cell()->source_index()).from_idx].point; - - if (vertex_equal_to_point(&vertex, first_point_double)) { - assert(vertex.color() != vertex.incident_edge()->cell()->source_index()); - assert(vertex.color() != vertex.incident_edge()->twin()->cell()->source_index()); - vertex.color(this->get_border_arc(vertex.incident_edge()->cell()->source_index()).from_idx); - } else if (vertex_equal_to_point(&vertex, second_point_double)) { - assert(vertex.color() != vertex.incident_edge()->cell()->source_index()); - assert(vertex.color() != vertex.incident_edge()->twin()->cell()->source_index()); - vertex.color(this->get_border_arc(vertex.incident_edge()->twin()->cell()->source_index()).from_idx); - } else if (bbox.contains(vertex_point)) { - if (auto [contour_pt, c_dist_sqr] = closest_contour_point.find(vertex_point); contour_pt != nullptr && c_dist_sqr < Slic3r::sqr(3 * SCALED_EPSILON)) { - vertex.color(this->get_global_index(contour_pt->m_contour_idx, contour_pt->m_point_idx)); - } else if (auto [voronoi_pt, v_dist_sqr] = closest_voronoi_point.find(vertex_point); voronoi_pt == nullptr || v_dist_sqr >= Slic3r::sqr(SCALED_EPSILON / 10.0)) { - closest_voronoi_point.insert(CPoint(vertex_point_double, this->nodes_count())); - vertex.color(this->nodes_count()); - this->nodes.push_back({vertex_point_double}); - } else { - // Boost Voronoi diagram generator sometimes creates two very closed points instead of one point. - // For the example points (146872.99999999997, -146872.99999999997) and (146873, -146873), this example also included in Voronoi generator test cases. - std::vector> all_closes_c_points = closest_voronoi_point.find_all(vertex_point); - int merge_to_point = -1; - for (const std::pair &c_point : all_closes_c_points) - if ((vertex_point_double - c_point.first->point_double()).squaredNorm() <= Slic3r::sqr(EPSILON)) { - merge_to_point = int(c_point.first->m_point_idx); - break; - } - - if (merge_to_point != -1) { - vertex.color(merge_to_point); - } else { - closest_voronoi_point.insert(CPoint(vertex_point_double, this->nodes_count())); - vertex.color(this->nodes_count()); - this->nodes.push_back({vertex_point_double}); - } - } - } - } - } - - void garbage_collect() - { - std::vector nodes_map(this->nodes.size(), -1); - int nodes_count = 0; - size_t arcs_count = 0; - for (const MMU_Graph::Node &node : this->nodes) - if (size_t node_idx = &node - &this->nodes.front(); !node.arc_idxs.empty()) { - nodes_map[node_idx] = nodes_count++; - arcs_count += node.arc_idxs.size(); - } - - std::vector new_nodes; - std::vector new_arcs; - new_nodes.reserve(nodes_count); - new_arcs.reserve(arcs_count); - for (const MMU_Graph::Node &node : this->nodes) - if (size_t node_idx = &node - &this->nodes.front(); nodes_map[node_idx] >= 0) { - new_nodes.push_back({node.point}); - for (const size_t &arc_idx : node.arc_idxs) { - const Arc &arc = this->arcs[arc_idx]; - new_nodes.back().arc_idxs.emplace_back(new_arcs.size()); - new_arcs.push_back({size_t(nodes_map[arc.from_idx]), size_t(nodes_map[arc.to_idx]), arc.color, arc.type}); - } - } - - this->nodes = std::move(new_nodes); - this->arcs = std::move(new_arcs); - } -}; - -static inline void mark_processed(const voronoi_diagram::const_edge_iterator &edge_iterator) -{ - edge_iterator->color(true); - edge_iterator->twin()->color(true); -} - -// Return true, if "p" is closer to line.a, then line.b -static inline bool is_point_closer_to_beginning_of_line(const Line &line, const Point &p) -{ - return (p - line.a).cast().squaredNorm() < (p - line.b).cast().squaredNorm(); -} - -static inline bool has_same_color(const ColoredLine &cl1, const ColoredLine &cl2) { return cl1.color == cl2.color; } - // Determines if the line points from the point between two contour lines is pointing inside polygon or outside. static inline bool points_inside(const Line &contour_first, const Line &contour_second, const Point &new_point) { - // Used in points_inside for decision if line leading thought the common point of two lines is pointing inside polygon or outside + // TODO: Used in points_inside for decision if line leading thought the common point of two lines is pointing inside polygon or outside auto three_points_inward_normal = [](const Point &left, const Point &middle, const Point &right) -> Vec2d { assert(left != middle); assert(middle != right); @@ -839,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 +}; + +#ifdef MM_SEGMENTATION_DEBUG_GRAPH +static void export_graph_to_svg(const std::string &path, const Voronoi::VD& vd, const std::vector& colored_polygons) { + const coordf_t stroke_width = scaled(0.05f); + const BoundingBox bbox = get_extents(colored_polygons); + + SVG svg(path.c_str(), bbox); + for (const ColoredLines &colored_lines : colored_polygons) + for (const ColoredLine &colored_line : colored_lines) + svg.draw(colored_line.line, "black", stroke_width); + + for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { + if (Geometry::VoronoiUtils::is_in_range(vertex)) { + if (const Point pt = Geometry::VoronoiUtils::to_point(&vertex).cast(); vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) { + svg.draw(pt, "blue", coord_t(stroke_width)); + } else if (vertex.color() != VD_ANNOTATION::DELETED) { + svg.draw(pt, "green", coord_t(stroke_width)); + } + } + } + + for (const Voronoi::VD::edge_type &edge : vd.edges()) { + if (edge.is_infinite() || !Geometry::VoronoiUtils::is_in_range(edge)) + continue; + + const Point from = Geometry::VoronoiUtils::to_point(edge.vertex0()).cast(); + const Point to = Geometry::VoronoiUtils::to_point(edge.vertex1()).cast(); + + if (edge.color() != VD_ANNOTATION::DELETED) + svg.draw(Line(from, to), "red", stroke_width); + } +} +#endif // MM_SEGMENTATION_DEBUG_GRAPH + +static size_t non_deleted_edge_count(const VD::vertex_type &vertex) { + size_t non_deleted_edge_cnt = 0; + const VD::edge_type *edge = vertex.incident_edge(); + do { + if (edge->color() != VD_ANNOTATION::DELETED) + ++non_deleted_edge_cnt; + } while (edge = edge->prev()->twin(), edge != vertex.incident_edge()); + + return non_deleted_edge_cnt; } -// For every ColoredLine in lines_colored_out, assign the index of the polygon to which belongs and also the index of this line inside of the polygon. -static inline void init_polygon_indices(const MMU_Graph &graph, - const std::vector> &color_poly, - std::vector &lines_colored_out) -{ - size_t poly_idx = 0; - for (const std::vector &color_lines : color_poly) { - size_t line_idx = 0; - for (size_t color_line_idx = 0; color_line_idx < color_lines.size(); ++color_line_idx) { - size_t from_idx = graph.get_global_index(poly_idx, line_idx); - lines_colored_out[from_idx].poly_idx = int(poly_idx); - lines_colored_out[from_idx].local_line_idx = int(line_idx); - ++line_idx; - } - ++poly_idx; +static bool can_vertex_be_deleted(const VD::vertex_type &vertex) { + if (vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR || vertex.color() == VD_ANNOTATION::DELETED) + return false; + + return non_deleted_edge_count(vertex) <= 1; +} + +static void delete_vertex_deep(const VD::vertex_type &vertex) { + std::queue vertices_to_delete; + vertices_to_delete.emplace(&vertex); + + while (!vertices_to_delete.empty()) { + const VD::vertex_type &vertex_to_delete = *vertices_to_delete.front(); + vertices_to_delete.pop(); + vertex_to_delete.color(VD_ANNOTATION::DELETED); + + const VD::edge_type *edge = vertex_to_delete.incident_edge(); + do { + edge->color(VD_ANNOTATION::DELETED); + edge->twin()->color(VD_ANNOTATION::DELETED); + + if (edge->is_finite() && can_vertex_be_deleted(*edge->vertex1())) + vertices_to_delete.emplace(edge->vertex1()); + } while (edge = edge->prev()->twin(), edge != vertex_to_delete.incident_edge()); } } -// Voronoi edges produced by Voronoi generator cloud have coordinates that don't fit inside coord_t (int32_t). -// Because of that, this function tries to clip edges that have one endpoint of the edge inside the BoundingBox. -static inline Line clip_finite_voronoi_edge(const Voronoi::VD::edge_type &edge, const BoundingBoxf &bbox) -{ +static inline Vec2d mk_point_vec2d(const VD::vertex_type *point) { + assert(point != nullptr); + return {point->x(), point->y()}; +} + +static inline Vec2d mk_vector_vec2d(const VD::edge_type *edge) { + assert(edge != nullptr); + return mk_point_vec2d(edge->vertex1()) - mk_point_vec2d(edge->vertex0()); +} + +static inline Vec2d mk_flipped_vector_vec2d(const VD::edge_type *edge) { + assert(edge != nullptr); + return mk_point_vec2d(edge->vertex0()) - mk_point_vec2d(edge->vertex1()); +} + +static double edge_length(const VD::edge_type &edge) { assert(edge.is_finite()); - Vec2d v0 = mk_vec2(edge.vertex0()); - Vec2d v1 = mk_vec2(edge.vertex1()); - bool contains_v0 = bbox.contains(v0); - bool contains_v1 = bbox.contains(v1); - if ((contains_v0 && contains_v1) || (!contains_v0 && !contains_v1)) - return {mk_point(edge.vertex0()), mk_point(edge.vertex1())}; - - Vec2d vector = (v1 - v0).normalized() * bbox.size().norm(); - if (!contains_v0) - v0 = (v1 - vector); - else - v1 = (v0 + vector); - - return {v0.cast(), v1.cast()}; -} - -static MMU_Graph build_graph(size_t layer_idx, const std::vector> &color_poly) -{ - Geometry::VoronoiDiagram vd; - std::vector lines_colored = to_lines(color_poly); - const Polygons color_poly_tmp = colored_points_to_polygon(color_poly); - const Points points = to_points(color_poly_tmp); - const Lines lines = to_lines(color_poly_tmp); - - // The algorithm adds edges to the graph that are between two different colors. - // If a polygon is colored entirely with one color, we need to add at least one edge from that polygon artificially. - // Adding this edge is necessary for cases where the expolygon has an outer contour colored whole with one color - // and a hole colored with a different color. If an edge wasn't added to the graph, - // the entire expolygon would be colored with single random color instead of two different. - std::vector force_edge_adding(color_poly.size()); - - // For each polygon, check if it is all colored with the same color. If it is, we need to force adding one edge to it. - for (const std::vector &c_poly : color_poly) { - bool force_edge = true; - for (const ColoredLine &c_line : c_poly) - if (c_line.color != c_poly.front().color) { - force_edge = false; - break; - } - force_edge_adding[&c_poly - &color_poly.front()] = force_edge; - } - - boost::polygon::construct_voronoi(lines_colored.begin(), lines_colored.end(), &vd); - MMU_Graph graph; - graph.nodes.reserve(points.size() + vd.vertices().size()); - for (const Point &point : points) - graph.nodes.push_back({Vec2d(double(point.x()), double(point.y()))}); - - graph.add_contours(color_poly); - init_polygon_indices(graph, color_poly, lines_colored); - - assert(graph.nodes.size() == lines_colored.size()); - BoundingBox bbox = get_extents(color_poly_tmp); - graph.append_voronoi_vertices(vd, color_poly_tmp, bbox); - - auto get_prev_contour_line = [&lines_colored, &color_poly, &graph](const voronoi_diagram::const_edge_iterator &edge_it) -> ColoredLine { - size_t contour_line_local_idx = lines_colored[edge_it->cell()->source_index()].local_line_idx; - size_t contour_line_size = color_poly[lines_colored[edge_it->cell()->source_index()].poly_idx].size(); - size_t contour_prev_idx = graph.get_global_index(lines_colored[edge_it->cell()->source_index()].poly_idx, - (contour_line_local_idx > 0) ? contour_line_local_idx - 1 : contour_line_size - 1); - return lines_colored[contour_prev_idx]; - }; - - auto get_next_contour_line = [&lines_colored, &color_poly, &graph](const voronoi_diagram::const_edge_iterator &edge_it) -> ColoredLine { - size_t contour_line_local_idx = lines_colored[edge_it->cell()->source_index()].local_line_idx; - size_t contour_line_size = color_poly[lines_colored[edge_it->cell()->source_index()].poly_idx].size(); - size_t contour_next_idx = graph.get_global_index(lines_colored[edge_it->cell()->source_index()].poly_idx, - (contour_line_local_idx + 1) % contour_line_size); - return lines_colored[contour_next_idx]; - }; - - bbox.offset(scale_(10.)); - const BoundingBoxf bbox_clip(bbox.min.cast(), bbox.max.cast()); - const double bbox_dim_max = double(std::max(bbox.size().x(), bbox.size().y())); - - // Make a copy of the input segments with the double type. - std::vector segments; - for (const Line &line : lines) - segments.emplace_back(Voronoi::Internal::point_type(double(line.a(0)), double(line.a(1))), - Voronoi::Internal::point_type(double(line.b(0)), double(line.b(1)))); - - for (auto edge_it = vd.edges().begin(); edge_it != vd.edges().end(); ++edge_it) { - // Skip second half-edge - if (edge_it->cell()->source_index() > edge_it->twin()->cell()->source_index() || edge_it->color()) - continue; - - if (edge_it->is_infinite() && (edge_it->vertex0() != nullptr || edge_it->vertex1() != nullptr)) { - // Infinite edge is leading through a point on the counter, but there are no Voronoi vertices. - // So we could fix this case by computing the intersection between the contour line and infinity edge. - std::vector samples; - Voronoi::Internal::clip_infinite_edge(points, segments, *edge_it, bbox_dim_max, &samples); - if (samples.empty()) - continue; - - const Line edge_line(mk_point(samples[0]), mk_point(samples[1])); - const ColoredLine &contour_line = lines_colored[edge_it->cell()->source_index()]; - Point contour_intersection; - - if (line_intersection_with_epsilon(contour_line.line, edge_line, &contour_intersection)) { - const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_it->cell()->source_index()); - const size_t from_idx = (edge_it->vertex1() != nullptr) ? edge_it->vertex1()->color() : edge_it->vertex0()->color(); - size_t to_idx = ((contour_line.line.a - contour_intersection).cast().squaredNorm() < - (contour_line.line.b - contour_intersection).cast().squaredNorm()) ? - graph_arc.from_idx : - graph_arc.to_idx; - if (from_idx != to_idx && from_idx < graph.nodes_count() && to_idx < graph.nodes_count()) { - graph.append_edge(from_idx, to_idx); - mark_processed(edge_it); - } - } - } else if (edge_it->is_finite()) { - // Both points are on contour, so skip them. In cases of duplicate Voronoi vertices, skip edges between the same two points. - if (graph.is_edge_connecting_two_contour_vertices(edge_it) || (edge_it->vertex0()->color() == edge_it->vertex1()->color())) - continue; - - const Line edge_line = clip_finite_voronoi_edge(*edge_it, bbox_clip); - const Line contour_line = lines_colored[edge_it->cell()->source_index()].line; - const ColoredLine colored_line = lines_colored[edge_it->cell()->source_index()]; - const ColoredLine contour_line_prev = get_prev_contour_line(edge_it); - const ColoredLine contour_line_next = get_next_contour_line(edge_it); - - if (edge_it->vertex0()->color() >= graph.nodes_count() || edge_it->vertex1()->color() >= graph.nodes_count()) { - enum class Vertex { VERTEX0, VERTEX1 }; - auto append_edge_if_intersects_with_contour = [&graph, &lines_colored, &edge_line, &contour_line](const voronoi_diagram::const_edge_iterator &edge_iterator, const Vertex vertex) { - Point intersection; - Line contour_line_twin = lines_colored[edge_iterator->twin()->cell()->source_index()].line; - if (line_intersection_with_epsilon(contour_line_twin, edge_line, &intersection)) { - const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_iterator->twin()->cell()->source_index()); - const size_t to_idx_l = is_point_closer_to_beginning_of_line(contour_line_twin, intersection) ? graph_arc.from_idx : - graph_arc.to_idx; - graph.append_edge(vertex == Vertex::VERTEX0 ? edge_iterator->vertex0()->color() : edge_iterator->vertex1()->color(), to_idx_l); - } else if (line_intersection_with_epsilon(contour_line, edge_line, &intersection)) { - const MMU_Graph::Arc &graph_arc = graph.get_border_arc(edge_iterator->cell()->source_index()); - const size_t to_idx_l = is_point_closer_to_beginning_of_line(contour_line, intersection) ? graph_arc.from_idx : graph_arc.to_idx; - graph.append_edge(vertex == Vertex::VERTEX0 ? edge_iterator->vertex0()->color() : edge_iterator->vertex1()->color(), to_idx_l); - } - mark_processed(edge_iterator); - }; - - if (edge_it->vertex0()->color() < graph.nodes_count() && !graph.is_vertex_on_contour(edge_it->vertex0())) - append_edge_if_intersects_with_contour(edge_it, Vertex::VERTEX0); - - if (edge_it->vertex1()->color() < graph.nodes_count() && !graph.is_vertex_on_contour(edge_it->vertex1())) - append_edge_if_intersects_with_contour(edge_it, Vertex::VERTEX1); - } else if (graph.is_edge_attach_to_contour(edge_it)) { - mark_processed(edge_it); - // Skip edges witch connection two points on a contour - if (graph.is_edge_connecting_two_contour_vertices(edge_it)) - continue; - - const size_t from_idx = edge_it->vertex0()->color(); - const size_t to_idx = edge_it->vertex1()->color(); - if (graph.is_vertex_on_contour(edge_it->vertex0())) { - if (is_point_closer_to_beginning_of_line(contour_line, edge_line.a)) { - if ((!has_same_color(contour_line_prev, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line_prev.line, contour_line, edge_line.b)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } else { - if ((!has_same_color(contour_line_next, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line, contour_line_next.line, edge_line.b)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } - } else { - assert(graph.is_vertex_on_contour(edge_it->vertex1())); - if (is_point_closer_to_beginning_of_line(contour_line, edge_line.b)) { - if ((!has_same_color(contour_line_prev, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line_prev.line, contour_line, edge_line.a)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } else { - if ((!has_same_color(contour_line_next, colored_line) || force_edge_adding[colored_line.poly_idx]) && points_inside(contour_line, contour_line_next.line, edge_line.a)) { - graph.append_edge(from_idx, to_idx); - force_edge_adding[colored_line.poly_idx] = false; - } - } - } - } else if (Point intersection; line_intersection_with_epsilon(contour_line, edge_line, &intersection)) { - mark_processed(edge_it); - Vec2d real_v0_double = graph.nodes[edge_it->vertex0()->color()].point; - Vec2d real_v1_double = graph.nodes[edge_it->vertex1()->color()].point; - Point real_v0 = Point(coord_t(real_v0_double.x()), coord_t(real_v0_double.y())); - Point real_v1 = Point(coord_t(real_v1_double.x()), coord_t(real_v1_double.y())); - - if (is_point_closer_to_beginning_of_line(contour_line, intersection)) { - Line first_part(intersection, real_v0); - Line second_part(intersection, real_v1); - - if (!has_same_color(contour_line_prev, colored_line)) { - if (points_inside(contour_line_prev.line, contour_line, first_part.b)) - graph.append_edge(edge_it->vertex0()->color(), graph.get_border_arc(edge_it->cell()->source_index()).from_idx); - - if (points_inside(contour_line_prev.line, contour_line, second_part.b)) - graph.append_edge(edge_it->vertex1()->color(), graph.get_border_arc(edge_it->cell()->source_index()).from_idx); - } - } else { - const size_t int_point_idx = graph.get_border_arc(edge_it->cell()->source_index()).to_idx; - const Vec2d int_point_double = graph.nodes[int_point_idx].point; - const Point int_point = Point(coord_t(int_point_double.x()), coord_t(int_point_double.y())); - - const Line first_part(int_point, real_v0); - const Line second_part(int_point, real_v1); - - if (!has_same_color(contour_line_next, colored_line)) { - if (points_inside(contour_line, contour_line_next.line, first_part.b)) - graph.append_edge(edge_it->vertex0()->color(), int_point_idx); - - if (points_inside(contour_line, contour_line_next.line, second_part.b)) - graph.append_edge(edge_it->vertex1()->color(), int_point_idx); - } - } - } - } - } - - for (auto edge_it = vd.edges().begin(); edge_it != vd.edges().end(); ++edge_it) { - // Skip second half-edge and processed edges - if (edge_it->cell()->source_index() > edge_it->twin()->cell()->source_index() || edge_it->color()) - continue; - - if (edge_it->is_finite() && !bool(edge_it->color()) && edge_it->vertex0()->color() < graph.nodes_count() && - edge_it->vertex1()->color() < graph.nodes_count()) { - // Skip cases, when the edge is between two same vertices, which is in cases two near vertices were merged together. - if (edge_it->vertex0()->color() == edge_it->vertex1()->color()) - continue; - - size_t from_idx = edge_it->vertex0()->color(); - size_t to_idx = edge_it->vertex1()->color(); - graph.append_edge(from_idx, to_idx); - } - mark_processed(edge_it); - } - - graph.remove_nodes_with_one_arc(); - return graph; -} - -static inline Polygon to_polygon(const std::vector> &id_to_lines) -{ - std::vector lines; - for (auto id_to_line : id_to_lines) - lines.emplace_back(id_to_line.second); - - Polygon poly_out; - poly_out.points.reserve(lines.size()); - for (const Linef &line : lines) - poly_out.points.emplace_back(mk_point(line.a)); - return poly_out; -} - - -static std::vector> get_all_next_arcs( - const MMU_Graph &graph, - std::vector &used_arcs, - const Linef &process_line, - const MMU_Graph::Arc &original_arc, - const int color) -{ - std::vector> all_next_arcs; - for (const size_t &arc_idx : graph.nodes[original_arc.to_idx].arc_idxs) { - std::vector next_continue_arc; - - const MMU_Graph::Arc & arc = graph.arcs[arc_idx]; - if (graph.nodes[arc.to_idx].point == process_line.a || used_arcs[arc_idx]) - continue; - - if (original_arc.type == MMU_Graph::ARC_TYPE::BORDER && original_arc.color != color) - continue; - - if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color != color) - continue; - - Vec2d arc_line = graph.nodes[arc.to_idx].point - graph.nodes[arc.from_idx].point; - next_continue_arc.emplace_back(&arc); - all_next_arcs.emplace_back(next_continue_arc); - } - return all_next_arcs; -} - -// two points that are very close are considered as one point -// std::vector contain the close points -static std::vector get_next_arc( - const MMU_Graph &graph, - std::vector &used_arcs, - const Linef &process_line, - const MMU_Graph::Arc &original_arc, - const int color) -{ - std::vector res; - - std::vector> all_next_arcs = get_all_next_arcs(graph, used_arcs, process_line, original_arc, color); - if (all_next_arcs.empty()) { - res.emplace_back(&original_arc); - return res; - } - - std::vector, double>> sorted_arcs; - for (auto next_arc : all_next_arcs) { - if (next_arc.empty()) - continue; - - Vec2d process_line_vec_n = (process_line.a - process_line.b).normalized(); - Vec2d neighbour_line_vec_n = (graph.nodes[next_arc.back()->to_idx].point - graph.nodes[next_arc.back()->from_idx].point).normalized(); - - double angle = ::acos(std::clamp(neighbour_line_vec_n.dot(process_line_vec_n), -1.0, 1.0)); - if (Slic3r::cross2(neighbour_line_vec_n, process_line_vec_n) < 0.0) - angle = 2.0 * (double) PI - angle; - - sorted_arcs.emplace_back(next_arc, angle); - } - - std::sort(sorted_arcs.begin(), sorted_arcs.end(), - [](std::pair, double> &l, std::pair, double> &r) -> bool { - return l.second < r.second; - }); - - // Try to return left most edge witch is unused - for (auto &sorted_arc : sorted_arcs) { - if (size_t arc_idx = sorted_arc.first.back() - &graph.arcs.front(); !used_arcs[arc_idx]) - return sorted_arc.first; - } - - if (sorted_arcs.empty()) { - res.emplace_back(&original_arc); - return res; - } - - return sorted_arcs.front().first; -} - -static bool is_profile_self_interaction(Polygon poly) -{ - auto lines = poly.lines(); - Point intersection; - for (int i = 0; i < lines.size(); ++i) { - for (int j = i + 2; j < std::min(lines.size(), lines.size() + i - 1); ++j) { - if (lines[i].intersection(lines[j], &intersection)) - return true; - } - } - return false; -} - -// Returns list of polygons and assigned colors. -// It iterates through all nodes on the border between two different colors, and from this point, -// start selection always left most edges for every node to construct CCW polygons. -// Assumes that graph is planar (without self-intersection edges) -static std::vector extract_colored_segments(const MMU_Graph &graph, const size_t num_extruders) -{ - std::vector used_arcs(graph.arcs.size(), false); - - auto all_arc_used = [&used_arcs](const MMU_Graph::Node &node) -> bool { - return std::all_of(node.arc_idxs.cbegin(), node.arc_idxs.cend(), [&used_arcs](const size_t &arc_idx) -> bool { return used_arcs[arc_idx]; }); - }; - - std::vector expolygons_segments(num_extruders + 1); - for (size_t node_idx = 0; node_idx < graph.all_border_points; ++node_idx) { - const MMU_Graph::Node &node = graph.nodes[node_idx]; - - for (const size_t &arc_idx : node.arc_idxs) { - const MMU_Graph::Arc &arc = graph.arcs[arc_idx]; - if (arc.type == MMU_Graph::ARC_TYPE::NON_BORDER || used_arcs[arc_idx]) - continue; - - Linef process_line(graph.nodes[arc.from_idx].point, graph.nodes[arc.to_idx].point); - used_arcs[arc_idx] = true; - - std::vector> arc_id_to_face_lines; - arc_id_to_face_lines.emplace_back(std::make_pair(arc_idx, process_line)); - Vec2d start_p = process_line.a; - - Linef p_vec = process_line; - const MMU_Graph::Arc *p_arc = &arc; - bool flag = false; - do { - std::vector nexts = get_next_arc(graph, used_arcs, p_vec, *p_arc, arc.color); - for (auto next : nexts) { - size_t next_arc_idx = next - &graph.arcs.front(); - if (used_arcs[next_arc_idx]) { - flag = true; - break; - } - } - - if (flag) - break; - - for (auto next : nexts) { - size_t next_arc_idx = next - &graph.arcs.front(); - arc_id_to_face_lines.emplace_back(std::make_pair(next_arc_idx, Linef(graph.nodes[next->from_idx].point, graph.nodes[next->to_idx].point))); - used_arcs[next_arc_idx] = true; - } - - p_vec = Linef(graph.nodes[nexts.back()->from_idx].point, graph.nodes[nexts.back()->to_idx].point); - p_arc = nexts.back(); - - } while (graph.nodes[p_arc->to_idx].point != start_p || !all_arc_used(graph.nodes[p_arc->to_idx])); - - if (Polygon poly = to_polygon(arc_id_to_face_lines); poly.is_counter_clockwise() && poly.is_valid()) { - expolygons_segments[arc.color].emplace_back(std::move(poly)); - } else{ - while (arc_id_to_face_lines.size() > 1) - { - auto id_to_line = arc_id_to_face_lines.back(); - used_arcs[id_to_line.first] = false; - arc_id_to_face_lines.pop_back(); - Linef add_line(arc_id_to_face_lines.back().second.b, arc_id_to_face_lines.front().second.a); - arc_id_to_face_lines.emplace_back(std::make_pair(-1, add_line)); - Polygon poly = to_polygon(arc_id_to_face_lines); - if (!is_profile_self_interaction(poly) && poly.is_counter_clockwise() && poly.is_valid()) { - expolygons_segments[arc.color].emplace_back(std::move(poly)); - break; - } - arc_id_to_face_lines.pop_back(); - } - } - } - } - return expolygons_segments; + return mk_vector_vec2d(&edge).norm(); } // Used in remove_multiple_edges_in_vertices() // Returns length of edge with is connected to contour. To this length is include other edges with follows it if they are almost straight (with the // tolerance of 15) And also if node between two subsequent edges is connected only to these two edges. -static inline double compute_edge_length(const MMU_Graph &graph, const size_t start_idx, const size_t &start_arc_idx) +static inline double calc_total_edge_length(const VD::edge_type &starting_edge) { - assert(start_arc_idx < graph.arcs.size()); - std::vector used_arcs(graph.arcs.size(), false); - - used_arcs[start_arc_idx] = true; - const MMU_Graph::Arc *arc = &graph.arcs[start_arc_idx]; - size_t idx = start_idx; - double line_total_length = (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); - while (graph.nodes[arc->to_idx].arc_idxs.size() == 2) { - bool found = false; - for (const size_t &arc_idx : graph.nodes[arc->to_idx].arc_idxs) { - if (const MMU_Graph::Arc &arc_n = graph.arcs[arc_idx]; arc_n.type == MMU_Graph::ARC_TYPE::NON_BORDER && !used_arcs[arc_idx] && arc_n.to_idx != idx) { - Linef first_line(graph.nodes[idx].point, graph.nodes[arc->to_idx].point); - Linef second_line(graph.nodes[arc->to_idx].point, graph.nodes[arc_n.to_idx].point); - - Vec2d first_line_vec = (first_line.a - first_line.b); - Vec2d second_line_vec = (second_line.b - second_line.a); - Vec2d first_line_vec_n = first_line_vec.normalized(); - Vec2d second_line_vec_n = second_line_vec.normalized(); - double angle = ::acos(std::clamp(first_line_vec_n.dot(second_line_vec_n), -1.0, 1.0)); - if (Slic3r::cross2(first_line_vec_n, second_line_vec_n) < 0.0) - angle = 2.0 * (double) PI - angle; - - if (std::abs(angle - PI) >= (PI / 12)) - continue; - - idx = arc->to_idx; - arc = &arc_n; - - line_total_length += (graph.nodes[arc->to_idx].point - graph.nodes[idx].point).norm(); - used_arcs[arc_idx] = true; - found = true; - break; - } - } - if (!found) + 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; - } - return line_total_length; + bool found_next_edge = false; + const VD::edge_type *current = prev->next(); + do { + if (current->color() == VD_ANNOTATION::DELETED) + continue; + + 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; + + prev = current; + found_next_edge = true; + total_edge_length += edge_length(*current); + + break; + } while (current = current->prev()->twin(), current != prev->next()); + + if (!found_next_edge) + break; + + } while (prev != &starting_edge); + + return total_edge_length; } -// 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) +// When a Voronoi vertex has more than one Voronoi edge (for example, in concave parts of a polygon), +// we leave just one Voronoi edge in the Voronoi vertex. +// This Voronoi edge is selected based on a heuristic. +static void remove_multiple_edges_in_vertex(const VD::vertex_type &vertex) { + if (non_deleted_edge_count(vertex) <= 1) + return; + + std::vector> edges_to_check; + const VD::edge_type *edge = vertex.incident_edge(); + do { + if (edge->color() == VD_ANNOTATION::DELETED) + continue; + + edges_to_check.emplace_back(edge, calc_total_edge_length(*edge)); + } while (edge = edge->prev()->twin(), edge != vertex.incident_edge()); + + std::sort(edges_to_check.begin(), edges_to_check.end(), [](const auto &l, const auto &r) -> bool { + return l.second > r.second; + }); + + while (edges_to_check.size() > 1) { + const VD::edge_type &edge_to_check = *edges_to_check.back().first; + edge_to_check.color(VD_ANNOTATION::DELETED); + edge_to_check.twin()->color(VD_ANNOTATION::DELETED); + + if (const VD::vertex_type &vertex_to_delete = *edge_to_check.vertex1(); can_vertex_be_deleted(vertex_to_delete)) + delete_vertex_deep(vertex_to_delete); + + edges_to_check.pop_back(); + } +} + +// 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>> 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); + const ColoredLines colored_lines = to_lines(colored_polygons); + const BoundingBox bbox = get_extents(colored_polygons); - 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; }); + 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]; + }; - while (arc_to_check.size() > 1) { - graph.remove_edge(first_idx, arc_to_check.back().first->to_idx); - arc_to_check.pop_back(); - } - } + Voronoi::VD vd; + vd.construct_voronoi(colored_lines.begin(), colored_lines.end()); + + // First, mark each Voronoi vertex on the input polygon to prevent it from being deleted later. + for (const Voronoi::VD::cell_type &cell : vd.cells()) { + if (cell.is_degenerate() || !cell.contains_segment()) + continue; + + if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) + cell_range.edge_begin->vertex0()->color(VD_ANNOTATION::VERTEX_ON_CONTOUR); + } + + // Second, remove all Voronoi vertices that are outside the bounding box of input polygons. + // Such Voronoi vertices are definitely not inside of input polygons, so we don't care about them. + for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { + if (vertex.color() == VD_ANNOTATION::DELETED || vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) + continue; + + if (!Geometry::VoronoiUtils::is_in_range(vertex) || !bbox.contains(Geometry::VoronoiUtils::to_point(vertex).cast())) + delete_vertex_deep(vertex); + } + + // Third, remove all Voronoi edges that are infinite. + for (const Voronoi::VD::edge_type &edge : vd.edges()) { + if (edge.color() != VD_ANNOTATION::DELETED && edge.is_infinite()) { + edge.color(VD_ANNOTATION::DELETED); + edge.twin()->color(VD_ANNOTATION::DELETED); + + if (edge.vertex0() != nullptr && can_vertex_be_deleted(*edge.vertex0())) + delete_vertex_deep(*edge.vertex0()); + + if (edge.vertex1() != nullptr && can_vertex_be_deleted(*edge.vertex1())) + delete_vertex_deep(*edge.vertex1()); } } + + // Fourth, remove all edges that point outward from the input polygon. + for (Voronoi::VD::cell_type cell : vd.cells()) { + if (cell.is_degenerate() || !cell.contains_segment()) + continue; + + if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) { + const ColoredLine ¤t_line = Geometry::VoronoiUtils::get_source_segment(cell, colored_lines.begin(), colored_lines.end()); + const ColoredLine &next_line = get_next_contour_line(current_line); + + const VD::edge_type *edge = cell_range.edge_begin; + do { + if (edge->color() == VD_ANNOTATION::DELETED) + continue; + + 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); + } + } + + // Fifth, if a Voronoi vertex has more than one Voronoi edge, remove all but one of them based on heuristics. + for (const Voronoi::VD::vertex_type &vertex : vd.vertices()) { + if (vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR) + remove_multiple_edges_in_vertex(vertex); + } + +#ifdef MM_SEGMENTATION_DEBUG_GRAPH + { + static int iRun = 0; + export_graph_to_svg(debug_out_path("mm-graph-%d-%d.svg", layer_idx, iRun++), vd, colored_polygons); + } +#endif // MM_SEGMENTATION_DEBUG_GRAPH + + // Sixth, extract the colored segments from the annotated Voronoi diagram. + std::vector segmented_expolygons_per_extruder(num_extruders + 1); + for (const Voronoi::VD::cell_type &cell : vd.cells()) { + if (cell.is_degenerate() || !cell.contains_segment()) + continue; + + if (const Geometry::SegmentCellRange cell_range = Geometry::VoronoiUtils::compute_segment_cell_range(cell, colored_lines.begin(), colored_lines.end()); cell_range.is_valid()) { + if (cell_range.edge_begin->vertex0()->color() != VD_ANNOTATION::VERTEX_ON_CONTOUR) + continue; + + const ColoredLine source_segment = Geometry::VoronoiUtils::get_source_segment(cell, colored_lines.begin(), colored_lines.end()); + + Polygon segmented_polygon; + segmented_polygon.points.emplace_back(source_segment.line.b); + + // We have ensured that each segmented_polygon have to start at edge_begin->vertex0() and end at edge_end->vertex1(). + const VD::edge_type *edge = cell_range.edge_begin; + do { + if (edge->color() == VD_ANNOTATION::DELETED) + continue; + + const VD::vertex_type &next_vertex = *edge->vertex1(); + segmented_polygon.points.emplace_back(Geometry::VoronoiUtils::to_point(next_vertex).cast()); + edge->color(VD_ANNOTATION::DELETED); + + if (next_vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR || next_vertex.color() == VD_ANNOTATION::DELETED) { + assert(next_vertex.color() == VD_ANNOTATION::VERTEX_ON_CONTOUR); + break; + } + + edge = edge->twin(); + } while (edge = edge->twin()->next(), edge != cell_range.edge_begin); + + if (edge->vertex1() != cell_range.edge_end->vertex1()) + continue; + + cell_range.edge_begin->vertex0()->color(VD_ANNOTATION::DELETED); + segmented_expolygons_per_extruder[source_segment.color].emplace_back(std::move(segmented_polygon)); + } + } + + // Merge all polygons together for each extruder + for (auto &segmented_expolygons : segmented_expolygons_per_extruder) + segmented_expolygons = union_ex(segmented_expolygons); + + return segmented_expolygons_per_extruder; } 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 +#endif // MM_SEGMENTATION_DEBUG_REGIONS -#ifdef MMU_SEGMENTATION_DEBUG_GRAPH -static void export_graph_to_svg(const std::string &path, const MMU_Graph &graph, const ExPolygons &lslices) -{ - const std::vector colors = {"blue", "cyan", "red", "orange", "magenta", "pink", "purple", "green", "yellow"}; - coordf_t stroke_width = scale_(0.05); - BoundingBox bbox = get_extents(lslices); - bbox.offset(scale_(1.)); - ::Slic3r::SVG svg(path.c_str(), bbox); - for (const MMU_Graph::Node &node : graph.nodes) - for (const size_t &arc_idx : node.arc_idxs) { - const MMU_Graph::Arc &arc = graph.arcs[arc_idx]; - Line arc_line(mk_point(node.point), mk_point(graph.nodes[arc.to_idx].point)); - if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color >= 0 && arc.color < int(colors.size())) - svg.draw(arc_line, colors[arc.color], stroke_width); - else - svg.draw(arc_line, "black", stroke_width); - } -} -#endif // MMU_SEGMENTATION_DEBUG_GRAPH - -#ifdef MMU_SEGMENTATION_DEBUG_INPUT +#ifdef MM_SEGMENTATION_DEBUG_INPUT void export_processed_input_expolygons_to_svg(const std::string &path, const LayerRegionPtrs ®ions, const ExPolygons &processed_input_expolygons) { coordf_t stroke_width = scale_(0.05); @@ -1774,13 +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 4efdc6951..91d0f298b 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/ParameterUtils.cpp b/src/libslic3r/ParameterUtils.cpp new file mode 100644 index 000000000..4e5fed7e6 --- /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 000000000..090fd8d80 --- /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 c708e5620..86f9f5cea 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 = (it == lower_polygons_series->begin()) ? intersection_pl({polygon}, lower_polygons_series_clipped) : - intersection_pl(remain_polines, lower_polygons_series_clipped); + Polylines inside_polines = intersection_pl({polygon}, lower_polygons_series_clipped); + + + remain_polines = diff_pl({polygon}, lower_polygons_series_clipped); + + bool detect_overhang_degree = perimeter_generator.config->overhang_speed_classic && perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None; + + if (!detect_overhang_degree) { + if (!inside_polines.empty()) extrusion_paths_append( paths, std::move(inside_polines), - it->first, + 0, int(0), role, extrusion_mm3_per_mm, extrusion_width, (float)perimeter_generator.layer_height); - - remain_polines = (it == lower_polygons_series->begin()) ? diff_pl({polygon}, lower_polygons_series_clipped) : - diff_pl(remain_polines, lower_polygons_series_clipped); - - if (remain_polines.size() == 0) - break; - } } else { - auto it = lower_polygons_series->end(); - it--; - Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(it->second, bbox); + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_polygons_series->front(), bbox); - Polylines inside_polines = intersection_pl({polygon}, lower_polygons_series_clipped); - extrusion_paths_append( - paths, - std::move(inside_polines), - int(0), - int(0), - role, - extrusion_mm3_per_mm, - extrusion_width, - (float)perimeter_generator.layer_height); + Polylines middle_overhang_polyines = diff_pl({inside_polines}, lower_polygons_series_clipped); + //BBS: add zero_degree_path + Polylines zero_degree_polines = intersection_pl({inside_polines}, lower_polygons_series_clipped); + if (!zero_degree_polines.empty()) + extrusion_paths_append( + paths, + std::move(zero_degree_polines), + 0, + int(0), + role, + extrusion_mm3_per_mm, + extrusion_width, + (float)perimeter_generator.layer_height); + //BBS: detect middle line overhang + if (!middle_overhang_polyines.empty()) { + Polylines too_short_polylines; + std::deque polylines_degree_collection = detect_overahng_degree(lower_polygons_series->front(), + middle_overhang_polyines, + overhang_dist_boundary->first, + overhang_dist_boundary->second, + too_short_polylines); + if (!too_short_polylines.empty()) + extrusion_paths_append(paths, + std::move(too_short_polylines), + 0, + int(0), + role, + extrusion_mm3_per_mm, + extrusion_width, + (float) perimeter_generator.layer_height); + // BBS: add path with overhang degree + for (PolylineWithDegree polylines_collection : polylines_degree_collection) { + extrusion_paths_append(paths, + std::move(polylines_collection.polyline), + polylines_collection.overhang_degree, + int(0), + role, + extrusion_mm3_per_mm, + extrusion_width, (float) perimeter_generator.layer_height); + } + } - remain_polines = diff_pl({polygon}, lower_polygons_series_clipped); } - // get 100% overhang paths by checking what parts of this loop fall // outside the grown lower slices (thus where the distance between // the loop centerline and original lower slices is >= half nozzle diameter @@ -407,9 +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 e9da63238..c50f3b7fa 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -34,9 +34,13 @@ public: //BBS Flow smaller_ext_perimeter_flow; - std::map m_lower_polygons_series; - std::map m_external_lower_polygons_series; - std::map m_smaller_external_lower_polygons_series; + std::vector m_lower_polygons_series; + std::vector m_external_lower_polygons_series; + std::vector m_smaller_external_lower_polygons_series; + std::pair m_lower_overhang_dist_boundary; + std::pair m_external_overhang_dist_boundary; + std::pair m_smaller_external_overhang_dist_boundary; + PerimeterGenerator( // Input: @@ -79,10 +83,11 @@ public: Polygons lower_slices_polygons() const { return m_lower_slices_polygons; } private: - std::map generate_lower_polygons_series(float width); + std::vector generate_lower_polygons_series(float width); void split_top_surfaces(const ExPolygons &orig_polygons, ExPolygons &top_fills, ExPolygons &non_top_polygons, ExPolygons &fill_clip) const; void apply_extra_perimeters(ExPolygons& infill_area); void process_no_bridge(Surfaces& all_surfaces, coord_t perimeter_spacing, coord_t ext_perimeter_width); + std::pair dist_boundary(double width); private: bool m_spiral_vase; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index a9995c15d..20cf79206 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 { @@ -1184,6 +1186,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 +2143,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 +2205,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 +2465,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 +2483,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 +2837,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 +2859,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 b03ce605e..4922f12eb 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -554,6 +555,8 @@ public: const std::string& get_preset_name_by_alias(const std::string& alias) const; const std::string* get_preset_name_renamed(const std::string &old_name) const; + bool is_alias_exist(const std::string &alias, Preset* preset = nullptr); + void set_printer_hold_alias(const std::string &alias, Preset &preset); // used to update preset_choice from Tab const std::deque& get_presets() const { return m_presets; } @@ -705,6 +708,8 @@ protected: // Update m_map_system_profile_renamed from loaded system profiles. void update_map_system_profile_renamed(); + void set_custom_preset_alias(Preset &preset); + private: // Find a preset position in the sorted list of presets. // The "-- default -- " preset is always the first, so it needs @@ -748,7 +753,8 @@ private: // so that the addresses of the presets don't change during resizing of the container. std::deque m_presets; // System profiles may have aliases. Map to the full profile name. - std::vector> m_map_alias_to_profile_name; + std::map> m_map_alias_to_profile_name; + std::unordered_map> m_printer_hold_alias; // Map from old system profile name to a current system profile name. std::map m_map_system_profile_renamed; // Initially this preset contains a copy of the selected preset. Later on, this copy may be modified by the user. diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index f46e0aebc..e1503604b 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,96 @@ 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) { @@ -3544,8 +3633,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 c54ddda57..4cc62a3ed 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -125,6 +125,15 @@ public: void set_is_validation_mode(bool mode) { validation_mode = mode; } void set_vendor_to_validate(std::string vendor) { vendor_to_validate = vendor; } + std::set get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str); + bool check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray(const std::string &printer_type, + std::string & nozzle_diameter_str, + std::string & setting_id, + std::string & tag_uid, + std::string & nozzle_temp_min, + std::string & nozzle_temp_max, + std::string & preset_setting_id); + PresetCollection prints; PresetCollection sla_prints; PresetCollection filaments; diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index a4756a6e3..9dfe1f965 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 231761f95..f48466e57 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -38,6 +38,8 @@ class SupportLayer; class TreeSupportData; class TreeSupport; +#define MARGIN_HEIGHT 1.5 +#define MAX_OUTER_NOZZLE_DIAMETER 4 // BBS: move from PrintObjectSlice.cpp struct VolumeSlices { @@ -331,6 +333,7 @@ public: // Height is used for slicing, for sorting the objects by height for sequential printing and for checking vertical clearence in sequential print mode. // The height is snug. coord_t height() const { return m_size.z(); } + double max_z() const { return m_max_z; } // Centering offset of the sliced mesh from the scaled and rotated mesh of the model. const Point& center_offset() const { return m_center_offset; } @@ -505,6 +508,7 @@ private: // XYZ in scaled coordinates Vec3crd m_size; + double m_max_z; PrintObjectConfig m_config; // Translation in Z + Rotation + Scaling / Mirroring. Transform3d m_trafo = Transform3d::Identity(); @@ -954,7 +958,11 @@ public: // Unset types are just ignored. static int get_compatible_filament_type(const std::set& types); - protected: + bool is_all_objects_are_short() const { + return std::all_of(this->objects().begin(), this->objects().end(), [&](PrintObject* obj) { return obj->height() < scale_(this->config().nozzle_height.value); }); + } + +protected: // Invalidates the step, and its depending steps in Print. bool invalidate_step(PrintStep step); diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index 50fdee7cb..b6fd173c0 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 2edde94c4..ff7722c73 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -370,11 +370,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 +770,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 +1601,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( @@ -2390,6 +2419,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 +3431,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 +4986,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 +5000,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 +5037,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 +5068,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 +5860,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 +6356,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 +6919,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 28e9d0092..be3edef9a 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -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 f8ed199bf..c78e7de4b 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)); } @@ -1982,7 +1983,7 @@ void PrintObject::discover_vertical_shells() #ifdef DEBUG_BRIDGE_OVER_INFILL template void debug_draw(std::string name, const T& a, const T& b, const T& c, const T& d) { - std::vector colors = {"red", "green", "blue", "orange"}; + std::vector colors = {"red", "green", "blue", "orange"}; BoundingBox bbox = get_extents(a); bbox.merge(get_extents(b)); bbox.merge(get_extents(c)); @@ -2656,7 +2657,10 @@ void PrintObject::bridge_over_infill() Polygons lightning_area; Polygons expansion_area; Polygons total_fill_area; + Polygons total_top_area; for (const LayerRegion *region : layer->regions()) { + Polygons top_polys = to_polygons(region->fill_surfaces.filter_by_types({stTop})); + total_top_area.insert(total_top_area.end(), top_polys.begin(), top_polys.end()); Polygons internal_polys = to_polygons(region->fill_surfaces.filter_by_types({stInternal, stInternalSolid})); expansion_area.insert(expansion_area.end(), internal_polys.begin(), internal_polys.end()); Polygons fill_polys = to_polygons(region->fill_expolygons); @@ -2746,6 +2750,7 @@ void PrintObject::bridge_over_infill() bridging_area = closing(bridging_area, flow.scaled_spacing()); bridging_area = intersection(bridging_area, limiting_area); bridging_area = intersection(bridging_area, total_fill_area); + bridging_area = diff(bridging_area, total_top_area); expansion_area = diff(expansion_area, bridging_area); #ifdef DEBUG_BRIDGE_OVER_INFILL diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 78dd620eb..53c875555 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 103d82073..05f39f9b2 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 72e231c31..97a8700d8 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 464a05ba4..74b99eb8d 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 973d6c6d3..1ad9c03bd 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 fb6951c1d..54b2d45f8 100644 --- a/src/libslic3r/TriangleMesh.hpp +++ b/src/libslic3r/TriangleMesh.hpp @@ -105,7 +105,7 @@ public: 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 b03f27d18..43daedb5b 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.cpp b/src/libslic3r/calib.cpp index 224479c09..e5e0923c7 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -461,6 +461,7 @@ std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double star const auto filament_diameter = config.filament_diameter.get_at(0); const auto print_flow_ratio = config.print_flow_ratio; + const auto z_offset = config.z_offset; const double e_per_mm = CalibPressureAdvance::e_per_mm(m_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); @@ -472,7 +473,7 @@ std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double star const double fast = CalibPressureAdvance::speed_adjust(m_fast_speed); const double slow = CalibPressureAdvance::speed_adjust(m_slow_speed); std::stringstream gcode; - gcode << mp_gcodegen->writer().travel_to_z(m_height_layer); + gcode << mp_gcodegen->writer().travel_to_z(m_height_layer + z_offset); double y_pos = start_y; // prime line @@ -508,7 +509,7 @@ std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double star default_box_opt_args.is_filled = true; gcode << draw_box(writer, box_start_x, start_y - m_space_y, number_spacing() * 8, (num + 1) * m_space_y, default_box_opt_args); - gcode << writer.travel_to_z(m_height_layer*2); + gcode << writer.travel_to_z(m_height_layer*2 + z_offset); for (int i = 0; i < num; i += 2) { gcode << draw_number(box_start_x + 3 + m_line_width, y_pos + i * m_space_y + m_space_y / 2, start_pa + i * step_pa, m_draw_digit_mode, m_number_line_width, number_e_per_mm, 3600, writer); @@ -543,7 +544,7 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi refresh_setup(config, is_bbl_machine, model, origin); gcode << move_to(Vec2d(m_starting_point.x(), m_starting_point.y()), m_writer, "Move to start XY position"); - gcode << m_writer.travel_to_z(height_first_layer(), "Move to start Z position"); + gcode << m_writer.travel_to_z(height_first_layer() + height_z_offset(), "Move to start Z position"); gcode << m_writer.set_pressure_advance(m_params.start); const DrawBoxOptArgs default_box_opt_args(wall_count(), height_first_layer(), line_width_first_layer(), @@ -565,7 +566,7 @@ void CalibPressureAdvancePattern::generate_custom_gcodes(const DynamicPrintConfi // draw pressure advance pattern for (int i = 0; i < m_num_layers; ++i) { - const double layer_height = height_first_layer() + (i * height_layer()); + const double layer_height = height_first_layer() + height_z_offset() + (i * height_layer()); const double zhop_height = layer_height + height_layer(); if (i > 0) { diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index ee74d98a6..af5bbb81d 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 @@ -268,6 +274,7 @@ private: void _refresh_writer(bool is_bbl_machine, const Model &model, const Vec3d &origin); double height_first_layer() const { return m_config.option("initial_layer_print_height")->value; }; + double height_z_offset() const { return m_config.option("z_offset")->value; }; double height_layer() const { return m_config.option("layer_height")->value; }; const int get_num_patterns() const { return std::ceil((m_params.end - m_params.start) / m_params.step + 1); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index ddbf120b2..e91b01730 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -251,8 +251,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)); @@ -409,6 +412,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 +447,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 +565,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 +590,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 +629,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 +732,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 { @@ -774,8 +778,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 +795,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; } + + ConfigOption * printer_opt = filament_it->config.option("compatible_printers"); + ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); + for (auto printer_str : printer_strs->values) { + if (printer_names.find(printer_str) != printer_names.end()) { + if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { + continue; + } else { + filament_id_set.insert(filament_it->filament_id); + // name matched + if (filament_it->is_system) { + filament_items.push_back(filament_it->alias); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[filament_it->alias] = filament_infos; + } else { + char target = '@'; + size_t pos = filament_it->name.find(target); + if (pos != std::string::npos) { + std::string user_preset_alias = filament_it->name.substr(0, pos - 1); + wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); + user_preset_alias = wx_user_preset_alias.ToStdString(); - for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { - // filter by system preset - if (!printer_it->is_system) continue; - // get printer_model - ConfigOption* printer_model_opt = printer_it->config.option("printer_model"); - ConfigOptionString* printer_model_str = dynamic_cast(printer_model_opt); - if (!printer_model_str ) - continue; - - // use printer_model as printer type - if (printer_model_str->value != MachineObject::get_preset_printer_model_name(obj->printer_type)) - continue; - ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_it->name == printer_str) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } - else { - filament_id_set.insert(filament_it->filament_id); - // name matched - if (filament_it->is_system) { - filament_items.push_back(filament_it->alias); + filament_items.push_back(user_preset_alias); FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[filament_it->alias] = filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[user_preset_alias] = filament_infos; } - else { - char target = '@'; - size_t pos = filament_it->name.find(target); - if (pos != std::string::npos) { - std::string user_preset_alias = filament_it->name.substr(0, pos-1); - wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); - user_preset_alias = wx_user_preset_alias.ToStdString(); - - filament_items.push_back(user_preset_alias); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[user_preset_alias] = filament_infos; - } - - } - - if (filament_it->filament_id == ams_filament_id) { - selection_idx = idx; - - // update if nozzle_temperature_range is found - ConfigOption* opt_min = filament_it->config.option("nozzle_temperature_range_low"); - if (opt_min) { - ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); - if (opt_min_ints) { - wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); - m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); - } - } - ConfigOption* opt_max = filament_it->config.option("nozzle_temperature_range_high"); - if (opt_max) { - ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); - if (opt_max_ints) { - wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); - m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); - } - } - } - idx++; } + + if (filament_it->filament_id == ams_filament_id) { + selection_idx = idx; + + // update if nozzle_temperature_range is found + ConfigOption *opt_min = filament_it->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts *opt_min_ints = dynamic_cast(opt_min); + if (opt_min_ints) { + wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); + m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); + } + } + ConfigOption *opt_max = filament_it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); + } + } + } + idx++; } } } + } } @@ -884,7 +877,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(); @@ -943,12 +936,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) { @@ -1039,7 +1046,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) { @@ -1442,7 +1449,7 @@ void ColorPickerPopup::on_custom_clr_picker(wxMouseEvent& event) 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 c66052a07..6a10255d2 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -166,7 +166,7 @@ protected: wxStaticBitmap * bitmap_min_degree; Button * m_button_reset; Button * m_button_confirm; - wxStaticText* m_tip_readonly; + Label* m_tip_readonly; Button * m_button_close; wxColourData * m_clrData; diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index ac62d1eba..b2ef34e62 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); @@ -205,10 +210,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); @@ -224,7 +226,10 @@ void AMSSetting::create() 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 +250,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(); diff --git a/src/slic3r/GUI/AMSSetting.hpp b/src/slic3r/GUI/AMSSetting.hpp index 4fddf4766..f87479f03 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,7 +28,7 @@ public: ~AMSSetting(); void create(); - void update_insert_material_read_mode(bool selected); + void update_insert_material_read_mode(bool selected, std::string version); void update_ams_img(std::string ams_icon_str); void update_starting_read_mode(bool selected); void update_remain_mode(bool selected); @@ -49,6 +50,7 @@ protected: protected: wxPanel * m_panel_body; + wxPanel* m_panel_Insert_material; CheckBox * m_checkbox_Insert_material_auto_read; wxStaticText *m_title_Insert_material_auto_read; Label* m_tip_Insert_material_line1; diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 1c4c18681..f1308efec 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); } @@ -437,6 +464,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 +549,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 +704,38 @@ void MappingItem::set_data(wxColour colour, wxString name, TrayData data, bool u void MappingItem::doRender(wxDC &dc) { - dc.SetPen(m_coloul); - dc.SetBrush(wxBrush(m_coloul)); + wxSize size = GetSize(); + wxColour color = m_coloul; + change_the_opacity(color); - if (m_coloul.Alpha() == 0) { - dc.DrawBitmap( m_transparent_mapping_item.bmp(), 0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2); + dc.SetPen(color); + dc.SetBrush(wxBrush(color)); + + if (m_tray_data.material_cols.size() > 1) { + int left = 0; + int gwidth = std::round(MAPPING_ITEM_REAL_SIZE.x / (m_tray_data.material_cols.size() - 1)); + //gradient + if (m_tray_data.ctype == 0) { + for (int i = 0; i < m_tray_data.material_cols.size() - 1; i++) { + auto rect = wxRect(left, (size.y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); + dc.GradientFillLinear(rect, m_tray_data.material_cols[i], m_tray_data.material_cols[i + 1], wxEAST); + left += gwidth; + } + } + else { + int cols_size = m_tray_data.material_cols.size(); + for (int i = 0; i < cols_size; i++) { + dc.SetBrush(wxBrush(m_tray_data.material_cols[i])); + float x = (float)MAPPING_ITEM_REAL_SIZE.x * i / cols_size; + dc.DrawRectangle(x, (size.y - MAPPING_ITEM_REAL_SIZE.y) / 2, (float)MAPPING_ITEM_REAL_SIZE.x / cols_size, MAPPING_ITEM_REAL_SIZE.y); + } + } + } + else if (color.Alpha() == 0) { + dc.DrawBitmap( m_transparent_mapping_item.bmp(), 0, (size.y - MAPPING_ITEM_REAL_SIZE.y) / 2); } else { - dc.DrawRectangle(0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); + dc.DrawRectangle(0, (size.y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); } @@ -689,11 +744,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 +861,52 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) { SetBackgroundColour(*wxWHITE); - wxBoxSizer* main_sizer; - main_sizer = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + close_img = ScalableBitmap(this, "hum_popup_close", 24); - main_sizer->Add(0, 0, 0, wxTOP, 28); + m_staticText = new Label(this, _L("Current Cabin humidity")); + m_staticText->SetFont(::Label::Head_24); - wxBoxSizer* m_sizer_body; - m_sizer_body = new wxBoxSizer(wxHORIZONTAL); + humidity_level_list = new AmsHumidityLevelList(this); + curr_humidity_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("hum_level1_light", this, 132), wxDefaultPosition, wxSize(FromDIP(132), FromDIP(132)), 0); - m_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("ams_humidity_tips", this, 125), wxDefaultPosition, wxSize(FromDIP(125), FromDIP(145)), 0); - - m_sizer_body->Add(m_img, 0, wxEXPAND | wxALL, 2); - - - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(18)); - - wxBoxSizer* m_sizer_tips = new wxBoxSizer(wxVERTICAL); - - m_staticText1 = new Label(this, _L("Cabin humidity")); - m_staticText1->SetFont(::Label::Head_13); + m_staticText_note = new Label(this, _L("Please change the desiccant when it is too wet. The indicator may not represent accurately in following cases : when the lid is open or the desiccant pack is changed. it take hours to absorb the moisture, low temperatures also slow down the process.")); + m_staticText_note->SetMinSize(wxSize(FromDIP(680), -1)); + m_staticText_note->SetMaxSize(wxSize(FromDIP(680), -1)); + m_staticText_note->Wrap(FromDIP(680)); - m_staticText2 = new Label(this, _L("Green means that AMS humidity is normal, orange represent humidity is high, red represent humidity is too high.(Hygrometer: lower the better.)")); - m_staticText2->SetFont(::Label::Body_13); - m_staticText2->SetSize(wxSize(FromDIP(357), -1)); - m_staticText2->SetMinSize(wxSize(FromDIP(357), -1)); - m_staticText2->SetMaxSize(wxSize(FromDIP(357), -1)); - m_staticText2->Wrap(FromDIP(357)); - - - m_staticText3 = new Label(this, _L("Desiccant status")); - m_staticText3->SetFont(::Label::Head_13); - - - m_staticText4 = new Label(this, _L("A desiccant status lower than two bars indicates that desiccant may be inactive. Please change the desiccant.(The bars: higher the better.)")); - m_staticText4->SetFont(::Label::Body_13); - m_staticText4->SetSize(wxSize(FromDIP(357), -1)); - m_staticText4->SetMinSize(wxSize(FromDIP(357), -1)); - m_staticText4->SetMaxSize(wxSize(FromDIP(357), -1)); - m_staticText4->Wrap(FromDIP(357)); - - m_sizer_tips->Add(m_staticText1, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,2); - m_sizer_tips->Add(m_staticText2, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,8); - m_sizer_tips->Add(m_staticText3, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,2); - m_sizer_tips->Add(m_staticText4, 0, wxLEFT|wxRIGHT, 3); - - - m_sizer_body->Add(m_sizer_tips, 0, wxEXPAND, 0); - - - main_sizer->Add(m_sizer_body, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); - - m_staticText_note = new Label(this, _L("Note: When the lid is open or the desiccant pack is changed, it can take hours or a night to absorb the moisture. Low temperatures also slow down the process. During this time, the indicator may not represent the chamber accurately.")); - m_staticText4->SetFont(::Label::Body_13); - m_staticText_note->SetMinSize(wxSize(FromDIP(523), -1)); - m_staticText_note->SetMaxSize(wxSize(FromDIP(523), -1)); - m_staticText_note->Wrap(FromDIP(523)); - main_sizer->Add(m_staticText_note, 0, wxALL | wxLEFT | wxRIGHT, 22); - - m_button_confirm = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 150, 136), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_button_confirm->SetBackgroundColor(btn_bg_green); - m_button_confirm->SetBorderColor(wxColour(0, 150, 136)); - m_button_confirm->SetTextColor(wxColour(0xFFFFFE)); - m_button_confirm->SetSize(wxSize(FromDIP(72), FromDIP(24))); - m_button_confirm->SetMinSize(wxSize(FromDIP(72), FromDIP(24))); - m_button_confirm->SetCornerRadius(FromDIP(12)); - - - m_button_confirm->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { - Dismiss(); - }); - Bind(wxEVT_LEFT_UP, [this](auto& e) { + + auto rect = ClientToScreen(wxPoint(0, 0)); + + auto close_left = rect.x + GetSize().x - close_img.GetBmpWidth() - FromDIP(38); + auto close_right = close_left + close_img.GetBmpWidth(); + auto close_top = rect.y + FromDIP(24); + auto close_bottom = close_top + close_img.GetBmpHeight(); + auto mouse_pos = ClientToScreen(e.GetPosition()); - auto rect = m_button_confirm->ClientToScreen(wxPoint(0, 0)); - if (mouse_pos.x > rect.x && mouse_pos.y > rect.y - && mouse_pos.x < (rect.x + m_button_confirm->GetSize().x) - && mouse_pos.y < (rect.y + m_button_confirm->GetSize().y)) + if (mouse_pos.x > close_left + && mouse_pos.y > close_top + && mouse_pos.x < close_right + && mouse_pos.y < close_bottom + ) { Dismiss(); } - }); - main_sizer->Add(m_button_confirm, 0, wxALIGN_CENTER | wxALL, 0); - - - main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, 18); - + }); + main_sizer->Add(0, 0, 0, wxTOP, FromDIP(24)); + main_sizer->Add(m_staticText, 0, wxALIGN_CENTER, 0); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(28)); + main_sizer->Add(curr_humidity_img, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(35)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(15)); + main_sizer->Add(humidity_level_list, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(35)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(6)); + main_sizer->Add(m_staticText_note, 0, wxALIGN_CENTER, 0); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(5)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(25)); SetSizer(main_sizer); Layout(); Fit(); @@ -909,9 +918,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 +927,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 +1558,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 +1644,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 acfc8cd3e..e8e78b257 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -55,9 +55,11 @@ struct TrayData { TrayType type; int id; + int ctype = 0; std::string name; std::string filament_type; wxColour colour; + std::vector material_cols = std::vector(); }; class MaterialItem: public wxPanel @@ -72,6 +74,8 @@ public: wxColour m_ams_coloul; wxString m_ams_name; + int m_ams_ctype = 0; + std::vector m_ams_cols = std::vector(); ScalableBitmap m_arraw_bitmap_gray; ScalableBitmap m_arraw_bitmap_white; @@ -81,7 +85,7 @@ public: bool m_warning{false}; void msw_rescale(); - void set_ams_info(wxColour col, wxString txt); + void set_ams_info(wxColour col, wxString txt, int ctype=0, std::vector cols= std::vector()); void disable(); void enable(); @@ -185,6 +189,33 @@ public: wxStaticText * m_tip_disable_ams; }; +class AmsHumidityLevelList : public wxPanel +{ +public: + AmsHumidityLevelList(wxWindow* parent); + ~AmsHumidityLevelList() {}; + + ScalableBitmap background_img; + ScalableBitmap hum_level1_img; + ScalableBitmap hum_level2_img; + ScalableBitmap hum_level3_img; + ScalableBitmap hum_level4_img; + + std::vector hum_level_img_light; + std::vector hum_level_img_dark; + + wxStaticBitmap* hum_level1_bitmap; + wxStaticBitmap* hum_level2_bitmap; + wxStaticBitmap* hum_level3_bitmap; + wxStaticBitmap* hum_level4_bitmap; + wxStaticBitmap* hum_level5_bitmap; + + void msw_rescale(); + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); +}; + class AmsHumidityTipPopup : public PopupWindow { public: @@ -195,14 +226,19 @@ public: virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; + void set_humidity_level(int level); + void render(wxDC& dc); + void doRender(wxDC& dc); + public: + int current_humidity_level; + + ScalableBitmap close_img; + wxStaticBitmap* curr_humidity_img; + AmsHumidityLevelList* humidity_level_list{nullptr}; wxStaticBitmap* m_img; - Label* m_staticText1; - Label* m_staticText2; - Label* m_staticText3; - Label* m_staticText4; + Label* m_staticText;; Label* m_staticText_note; - Button* m_button_confirm; }; class AmsTutorialPopup : public PopupWindow diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 0ae0ef4ce..b9347b9c1 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -238,12 +238,13 @@ 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); }); + finalize_gcode(); 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(); + export_gcode(); } else if (! m_upload_job.empty()) { wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); prepare_upload(); @@ -767,44 +768,34 @@ bool BackgroundSlicingProcess::invalidate_all_steps() return m_step_state.invalidate_all([this](){ this->stop_internal(); }); } +//Call post-processing script for the last step during slicing +void BackgroundSlicingProcess::finalize_gcode() +{ + m_print->set_status(95, _utf8(L("Running post-processing scripts"))); + + run_post_process_scripts(m_temp_output_path, false, "File", m_temp_output_path, m_fff_print->full_print_config()); + + m_print->set_status(100, _utf8(L("Successfully executed post-processing script"))); +} + // 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::finalize_gcode() +void BackgroundSlicingProcess::export_gcode() { - //BBS: don't support running user-defined post-processing scripts - //m_print->set_status(95, _utf8(L("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 - // 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()); - auto remove_post_processed_temp_file = [post_processed, &output_path]() { - if (post_processed) - try { - boost::filesystem::remove(output_path); - } catch (const std::exception &ex) { - BOOST_LOG_TRIVIAL(error) << "Failed to remove temp file " << output_path << ": " << ex.what(); - } - }; - //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); - remove_post_processed_temp_file(); } catch (...) { - remove_post_processed_temp_file(); throw Slic3r::ExportError(_utf8(L("Unknown error when export G-code."))); } switch (copy_ret_val) { @@ -840,7 +831,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 diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp index b5b8ffcd7..78e897186 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -287,6 +287,7 @@ private: // If the background processing stop was requested, throw CanceledException. void throw_if_canceled() const { if (m_print->canceled()) throw CanceledException(); } void finalize_gcode(); + void export_gcode(); void prepare_upload(); // To be executed at the background thread. ThumbnailsList render_thumbnails(const ThumbnailsParams ¶ms); diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp index e1d0d8e07..ec3d76ecb 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)"; @@ -71,6 +72,21 @@ HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& auto scroll_sizer = new wxBoxSizer(wxVERTICAL); scroll_window->SetSizer(scroll_sizer); + Button * mew_btn = new Button(scroll_window, _L("New")); + StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + mew_btn->SetBackgroundColour(*wxWHITE); + mew_btn->SetBackgroundColor(btn_bg_green); + mew_btn->SetBorderColor(wxColour(0, 174, 66)); + 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); @@ -346,6 +362,11 @@ float HistoryWindow::get_nozzle_value() return nozzle_value; } +void HistoryWindow::on_click_new_button(wxCommandEvent& event) +{ + 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 +455,9 @@ PACalibResult EditCalibrationHistoryDialog::get_result() { void EditCalibrationHistoryDialog::on_save(wxCommandEvent& event) { wxString name = m_name_value->GetTextCtrl()->GetValue(); - if (name.IsEmpty()) + if (!CalibUtils::validate_input_name(name)) return; - if (name.Length() > 40) { - MessageDialog msg_dlg(nullptr, _L("The name cannot exceed 40 characters."), wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); - return; - } + m_new_result.name = m_name_value->GetTextCtrl()->GetValue().ToUTF8().data(); float k = 0.0f; @@ -465,5 +482,255 @@ 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 Dynamics 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; + + 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(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + ok_btn->SetBackgroundColour(*wxWHITE); + ok_btn->SetBackgroundColor(btn_bg_green); + ok_btn->SetBorderColor(wxColour(0, 174, 66)); + 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 + { + struct PACalibResult + { + size_t operator()(const std::pair &item) const + { + return std::hash()(item.first) * std::hash()(item.second); + } + }; + std::unordered_set, PACalibResult> set; + set.insert({m_new_result.name, m_new_result.filament_id}); + + for (auto &result : m_history_results) { + if (!set.insert({result.name, result.filament_id}).second) { + MessageDialog msg_dlg(nullptr, + wxString::Format(_L("There is already a historical calibration result with the same name: %s. Only one of the results with the same name " + "is saved. Are you sure you want to override the historical result?"), + 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 c44d4399e..94b3a874a 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.hpp +++ b/src/slic3r/GUI/CaliHistoryDialog.hpp @@ -25,6 +25,8 @@ protected: void enbale_action_buttons(bool enable); float get_nozzle_value(); + void on_click_new_button(wxCommandEvent &event); + wxPanel* m_history_data_panel; ComboBox* m_comboBox_nozzle_dia; Label* m_tips; @@ -55,6 +57,38 @@ protected: TextInput* m_k_value{ nullptr }; }; +class NewCalibrationHistoryDialog : public DPIDialog +{ +public: + NewCalibrationHistoryDialog(wxWindow *parent, const std::vector history_results); + ~NewCalibrationHistoryDialog(){}; + void on_dpi_changed(const wxRect &suggested_rect) override{}; + +protected: + virtual void on_ok(wxCommandEvent &event); + virtual void on_cancel(wxCommandEvent &event); + + + wxArrayString get_all_filaments(const MachineObject *obj); + +protected: + PACalibResult m_new_result; + std::vector m_history_results; + + 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 a96cc93f1..cbeabeb3c 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -19,21 +19,6 @@ 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; -} - std::map get_cached_selected_filament(MachineObject* obj) { std::map selected_filament_map; if (!obj) return selected_filament_map; @@ -90,6 +75,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 +302,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 +314,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); } @@ -698,34 +707,44 @@ 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; + } + 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; + 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; - } + 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); + 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(); @@ -1098,7 +1117,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 +1404,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/CalibrationWizardCaliPage.cpp b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp index 6279cc604..d41214674 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) @@ -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) diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index b428110c7..e6941066c 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -35,16 +35,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 +58,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 +128,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 +301,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); @@ -299,6 +314,38 @@ void CaliPresetCustomRangePanel::create_panel(wxWindow* parent) item_sizer->Add(m_title_texts[i], 0, wxALL, 0); m_value_inputs[i] = new TextInput(parent, wxEmptyString, _L("\u2103"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, 0); m_value_inputs[i]->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + 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); } @@ -390,10 +437,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 +721,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 +1086,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); @@ -1458,6 +1499,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 +1525,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 diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp index 9096c7a34..4adcd858f 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp @@ -16,6 +16,8 @@ enum FlowRatioCaliSource { FROM_COARSE_PAGE, }; +class CalibrationPresetPage; + class CaliPresetCaliStagePanel : public wxPanel { public: @@ -30,14 +32,17 @@ public: void get_cali_stage(CaliPresetStage& stage, float& value); void set_flow_ratio_value(float flow_ratio); - + void set_parent(CalibrationPresetPage* parent) { m_stage_panel_parent = parent; } + void set_flow_ratio_calibration_type(FlowRatioCalibrationType type); protected: CaliPresetStage m_stage; wxBoxSizer* m_top_sizer; wxRadioButton* m_complete_radioBox; wxRadioButton* m_fine_radioBox; TextInput * flow_ratio_input; + wxPanel* input_panel; float m_flow_ratio_value; + CalibrationPresetPage* m_stage_panel_parent; }; class CaliComboBox : public wxPanel @@ -162,6 +167,7 @@ public: void stripWhiteSpace(std::string& str); void update_priner_status_msg(wxString msg, bool is_warning); void update(MachineObject* obj) override; + void update_flow_ratio_type(FlowRatioCalibrationType type) { curr_obj->flow_ratio_calibration_type = type; } void on_device_connected(MachineObject* obj) override; @@ -206,7 +212,7 @@ public: CalibMode get_pa_cali_method(); CaliPresetPageStatus get_page_status() { return m_page_status; } - + MachineObject* get_current_object() { return curr_obj; } void msw_rescale() override; void on_sys_color_changed() override; @@ -306,4 +312,4 @@ public: }} // namespace Slic3r::GUI -#endif \ No newline at end of file +#endif diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.cpp b/src/slic3r/GUI/CalibrationWizardSavePage.cpp index 77637bc10..287fa6136 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 3857d0983..c65ddb72a 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/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index 08e480137..6ee071113 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 8135f41fa..dbdb81a9c 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -72,6 +72,8 @@ private: SwitchButton* m_switch_recording; wxStaticText* m_text_vcamera; SwitchButton* m_switch_vcamera; + wxStaticText* m_text_liveview_retry; + SwitchButton* m_switch_liveview_retry; wxStaticText* m_custom_camera_hint; TextInput* m_custom_camera_input; Button* m_custom_camera_input_confirm; diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index d9405e76b..ddc9877cd 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; + int temperature_range_low, temperature_range_high; + if (!get_temperature_range(config, temperature_range_low, temperature_range_high)) return; - if (temperature_range_low != 0 && - temperature_range_high != 0 && - config->has("nozzle_temperature")) { - if (config->opt_int("nozzle_temperature", 0) < temperature_range_low || - config->opt_int("nozzle_temperature", 0) > temperature_range_high) - { + if (config->has("nozzle_temperature")) { + if (config->opt_int("nozzle_temperature", 0) < temperature_range_low || config->opt_int("nozzle_temperature", 0) > temperature_range_high) { wxString msg_text = _(L("Nozzle may be blocked when the temperature is out of recommended range.\n" "Please make sure whether to use the temperature to print.\n\n")); msg_text += wxString::Format(_L("Recommended nozzle temperature of this filament type is [%d, %d] degree centigrade"), temperature_range_low, temperature_range_high); @@ -90,16 +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 da856c416..fec8d08f4 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -69,11 +69,12 @@ public: void toggle_line(const std::string& field_key, const bool toggle); // FFF print - void update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config = false); + void update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config = false, const bool is_plate_config = false); void toggle_print_fff_options(DynamicPrintConfig* config, const bool is_global_config = false); void apply_null_fff_config(DynamicPrintConfig *config, std::vector const &keys, std::map const & configs); //BBS: FFF filament nozzle temperature range + void check_nozzle_recommended_temperature_range(DynamicPrintConfig *config); void check_nozzle_temperature_range(DynamicPrintConfig* config); void check_nozzle_temperature_initial_layer_range(DynamicPrintConfig* config); void check_filament_max_volumetric_speed(DynamicPrintConfig *config); @@ -89,10 +90,10 @@ public: m_is_initialized_support_material_overhangs_queried = true; m_support_material_overhangs_queried = queried; } + int show_spiral_mode_settings_dialog(bool is_object_config = false); private: - std::vector get_temperature_range_by_filament_type(const std::string &filament_type); - + bool get_temperature_range(DynamicPrintConfig *config, int &range_low, int &range_high); }; } // GUI diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 91a0a6210..85bee59d5 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 9c79bc71f..911caca5e 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -70,12 +70,13 @@ private: std::unordered_map> m_filament_choice_map; std::unordered_map m_public_name_to_filament_id_map; std::unordered_map m_all_presets_map; + std::unordered_set m_system_filament_types_set; std::set m_visible_printers; CreateType m_create_type; Button * m_button_create = nullptr; Button * m_button_cancel = nullptr; ComboBox * m_filament_vendor_combobox = nullptr; - ::CheckBox * m_can_not_find_vendor_checkbox = nullptr; + ::CheckBox * m_can_not_find_vendor_checkbox = nullptr; ComboBox * m_filament_type_combobox = nullptr; ComboBox * m_exist_vendor_combobox = nullptr; ComboBox * m_filament_preset_combobox = nullptr; @@ -262,6 +263,7 @@ private: void on_dpi_changed(const wxRect &suggested_rect) override; void show_export_result(const ExportCase &export_case); bool has_check_box_selected(); + bool earse_preset_fields_for_safe(Preset *preset); std::string initial_file_path(const wxString &path, const std::string &sub_file_path); std::string initial_file_name(const wxString &path, const std::string file_name); wxBoxSizer *create_export_config_item(wxWindow *parent); @@ -314,7 +316,6 @@ private: std::string m_filament_vendor; std::string m_filament_type; std::shared_ptr m_preset_bundle; - std::string m_filamnt_type; ComboBox * m_selected_printer = nullptr; ComboBox * m_selected_filament = nullptr; Button * m_ok_btn = nullptr; diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index f3ffa85bd..b9a6b758b 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -807,7 +807,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 +826,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 +861,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 +951,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 +967,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 +1008,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 +1144,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() @@ -1806,7 +1820,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 +1883,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"; @@ -2069,33 +2084,45 @@ int MachineObject::command_start_pa_calibration(const X1CCalibInfos &pa_data, in CNumericLocalesSetter locales_setter; pa_calib_results.clear(); - if (get_printer_series() == PrinterSeries::SERIES_X1) { - json j; - j["print"]["command"] = "extrusion_cali"; - j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_data.calib_datas[0].nozzle_diameter); - j["print"]["mode"] = mode; + json j; + j["print"]["command"] = "extrusion_cali"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_data.calib_datas[0].nozzle_diameter); + j["print"]["mode"] = mode; - for (int i = 0; i < pa_data.calib_datas.size(); ++i) { - j["print"]["filaments"][i]["tray_id"] = pa_data.calib_datas[i].tray_id; - j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp; - j["print"]["filaments"][i]["filament_id"] = pa_data.calib_datas[i].filament_id; - j["print"]["filaments"][i]["setting_id"] = pa_data.calib_datas[i].setting_id; - j["print"]["filaments"][i]["nozzle_temp"] = pa_data.calib_datas[i].nozzle_temp; - j["print"]["filaments"][i]["max_volumetric_speed"] = std::to_string(pa_data.calib_datas[i].max_volumetric_speed); - } + std::string filament_ids; + for (int i = 0; i < pa_data.calib_datas.size(); ++i) { + j["print"]["filaments"][i]["tray_id"] = pa_data.calib_datas[i].tray_id; + j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp; + j["print"]["filaments"][i]["filament_id"] = pa_data.calib_datas[i].filament_id; + j["print"]["filaments"][i]["setting_id"] = pa_data.calib_datas[i].setting_id; + j["print"]["filaments"][i]["nozzle_temp"] = pa_data.calib_datas[i].nozzle_temp; + j["print"]["filaments"][i]["max_volumetric_speed"] = std::to_string(pa_data.calib_datas[i].max_volumetric_speed); - BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: " << j.dump(); - return this->publish_json(j.dump()); + if (i > 0) filament_ids += ","; + filament_ids += pa_data.calib_datas[i].filament_id; } - return -1; + + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: " << j.dump(); + + try { + json js; + js["cali_type"] = "cali_pa_auto"; + js["nozzle_diameter"] = pa_data.calib_datas[0].nozzle_diameter; + js["filament_id"] = filament_ids; + js["printer_type"] = this->printer_type; + NetworkAgent *agent = GUI::wxGetApp().getAgent(); + if (agent) agent->track_event("cali", js.dump()); + } catch (...) {} + + return this->publish_json(j.dump()); } int MachineObject::command_set_pa_calibration(const std::vector &pa_calib_values, bool is_auto_cali) { CNumericLocalesSetter locales_setter; - if (get_printer_series() == PrinterSeries::SERIES_X1 && pa_calib_values.size() > 0) { + if (pa_calib_values.size() > 0) { json j; j["print"]["command"] = "extrusion_cali_set"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); @@ -2126,73 +2153,61 @@ int MachineObject::command_set_pa_calibration(const std::vector & int MachineObject::command_delete_pa_calibration(const PACalibIndexInfo& pa_calib) { - if (get_printer_series() == PrinterSeries::SERIES_X1) { - json j; - j["print"]["command"] = "extrusion_cali_del"; - j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["filament_id"] = pa_calib.filament_id; - j["print"]["cali_idx"] = pa_calib.cali_idx; - j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_calib.nozzle_diameter); + json j; + j["print"]["command"] = "extrusion_cali_del"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["filament_id"] = pa_calib.filament_id; + j["print"]["cali_idx"] = pa_calib.cali_idx; + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_calib.nozzle_diameter); - BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_del: " << j.dump(); - return this->publish_json(j.dump()); - } - return -1; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_del: " << j.dump(); + return this->publish_json(j.dump()); } int MachineObject::command_get_pa_calibration_tab(float nozzle_diameter, const std::string &filament_id) { reset_pa_cali_history_result(); - if (get_printer_series() == PrinterSeries::SERIES_X1) { - json j; - j["print"]["command"] = "extrusion_cali_get"; - j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["filament_id"] = filament_id; - j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(nozzle_diameter); + json j; + j["print"]["command"] = "extrusion_cali_get"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["filament_id"] = filament_id; + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(nozzle_diameter); - BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get: " << j.dump(); - return this->publish_json(j.dump()); - } - return -1; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get: " << j.dump(); + return this->publish_json(j.dump()); } int MachineObject::command_get_pa_calibration_result(float nozzle_diameter) { - if (get_printer_series() == PrinterSeries::SERIES_X1) { - json j; - j["print"]["command"] = "extrusion_cali_get_result"; - j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(nozzle_diameter); + json j; + j["print"]["command"] = "extrusion_cali_get_result"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(nozzle_diameter); - BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get_result: " << j.dump(); - return this->publish_json(j.dump()); - } - return -1; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_get_result: " << j.dump(); + return this->publish_json(j.dump()); } int MachineObject::commnad_select_pa_calibration(const PACalibIndexInfo& pa_calib_info) { - if (get_printer_series() == PrinterSeries::SERIES_X1) { - json j; - j["print"]["command"] = "extrusion_cali_sel"; - j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["tray_id"] = pa_calib_info.tray_id; - j["print"]["cali_idx"] = pa_calib_info.cali_idx; - j["print"]["filament_id"] = pa_calib_info.filament_id; - j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_calib_info.nozzle_diameter); + json j; + j["print"]["command"] = "extrusion_cali_sel"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["tray_id"] = pa_calib_info.tray_id; + j["print"]["cali_idx"] = pa_calib_info.cali_idx; + j["print"]["filament_id"] = pa_calib_info.filament_id; + j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(pa_calib_info.nozzle_diameter); - BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_sel: " << j.dump(); - return this->publish_json(j.dump()); - } - return -1; + BOOST_LOG_TRIVIAL(trace) << "extrusion_cali_sel: " << j.dump(); + return this->publish_json(j.dump()); } int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data) { CNumericLocalesSetter locales_setter; - if (get_printer_series() == PrinterSeries::SERIES_X1 && calib_data.calib_datas.size() > 0) { + if (calib_data.calib_datas.size() > 0) { json j; j["print"]["command"] = "flowrate_cali"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); @@ -2217,16 +2232,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) @@ -2678,6 +2690,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); } } } @@ -2690,6 +2703,8 @@ int MachineObject::parse_json(std::string payload) uint64_t t_utc = j.value("t_utc", 0ULL); if (t_utc > 0) last_utc_time = std::chrono::system_clock::time_point(t_utc * 1ms); + else + last_utc_time = last_update_time; BOOST_LOG_TRIVIAL(trace) << "parse_json: dev_id=" << dev_id << ", playload=" << j.dump(4); @@ -3341,14 +3356,21 @@ int MachineObject::parse_json(std::string payload) ; } #pragma endregion - 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()); + + 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()); + } } + + } } catch(...) { @@ -3357,8 +3379,14 @@ int MachineObject::parse_json(std::string payload) try { if (jj.contains("nozzle_type")) { - if (jj["nozzle_type"].is_string()) { - nozzle_type = jj["nozzle_type"].get(); + + if (nozzle_setting_hold_count > 0) { + nozzle_setting_hold_count--; + } + else { + if (jj["nozzle_type"].is_string()) { + nozzle_type = jj["nozzle_type"].get(); + } } } } @@ -3513,8 +3541,8 @@ int MachineObject::parse_json(std::string payload) 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); + 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")) { @@ -3526,7 +3554,7 @@ int MachineObject::parse_json(std::string payload) 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; + ? 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(); @@ -3620,11 +3648,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")) { @@ -3701,6 +3737,7 @@ int MachineObject::parse_json(std::string payload) 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); } @@ -3785,6 +3822,17 @@ int MachineObject::parse_json(std::string payload) } 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 = ""; @@ -3817,14 +3865,37 @@ int MachineObject::parse_json(std::string payload) curr_tray->bed_temp = (*tray_it)["bed_temp"].get(); else curr_tray->bed_temp = ""; - if (tray_it->contains("nozzle_temp_max")) + if (tray_it->contains("tray_color")) { + auto color = (*tray_it)["tray_color"].get(); + curr_tray->update_color_from_str(color); + } else { + curr_tray->color = ""; + } + if (tray_it->contains("nozzle_temp_max")) { curr_tray->nozzle_temp_max = (*tray_it)["nozzle_temp_max"].get(); + } else curr_tray->nozzle_temp_max = ""; if (tray_it->contains("nozzle_temp_min")) curr_tray->nozzle_temp_min = (*tray_it)["nozzle_temp_min"].get(); else curr_tray->nozzle_temp_min = ""; + if (curr_tray->nozzle_temp_min != "" && curr_tray->nozzle_temp_max != "") { + try { + std::string preset_setting_id; + bool is_equation = preset_bundle->check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( + MachineObject::get_preset_printer_model_name(this->printer_type), nozzle_diameter_str, curr_tray->setting_id, + curr_tray->tag_uid, curr_tray->nozzle_temp_min, curr_tray->nozzle_temp_max, preset_setting_id); + if (!is_equation) { + command_ams_filament_settings(std::stoi(ams_id), std::stoi(tray_id), curr_tray->setting_id, preset_setting_id, + curr_tray->color, curr_tray->type, + std::stoi(curr_tray->nozzle_temp_min), + std::stoi(curr_tray->nozzle_temp_max)); + } + } catch (...) { + BOOST_LOG_TRIVIAL(info) << "check fail and curr_tray ams_id" << ams_id << " curr_tray tray_id"<contains("xcam_info")) curr_tray->xcam_info = (*tray_it)["xcam_info"].get(); else @@ -3833,12 +3904,6 @@ int MachineObject::parse_json(std::string payload) 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(); @@ -3952,6 +4017,17 @@ int MachineObject::parse_json(std::string payload) else { vt_tray.type = type; } + if (filament_list.find(vt_tray.setting_id) == filament_list.end()) { + wxColour color = *wxWHITE; + char col_buf[10]; + sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); + try { + BOOST_LOG_TRIVIAL(info) << "no filament_id in filament_list and reset vt_tray and the filament_id is: " << vt_tray.setting_id; + this->command_ams_filament_settings(255, std::stoi(vt_tray.id), "", "", std::string(col_buf), "", 0, 0); + } catch (...) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " stoi error and tray_id" << vt_tray.id; + } + } } else { vt_tray.setting_id = ""; @@ -3985,6 +4061,12 @@ int MachineObject::parse_json(std::string payload) 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 @@ -3993,6 +4075,22 @@ int MachineObject::parse_json(std::string payload) 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 @@ -4001,13 +4099,6 @@ int MachineObject::parse_json(std::string payload) 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(); @@ -5450,7 +5541,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 +5563,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 +5582,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 +5686,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 1c3c5881b..b8e7f3d45 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -133,6 +133,7 @@ enum ManualPaCaliMethod { PA_PATTERN, }; + struct RatingInfo { bool request_successful; int http_code; @@ -289,6 +290,7 @@ public: unsigned reserved; HMSMessageLevel msg_level = HMS_UNKNOWN; int msg_code = 0; + bool already_read = false; bool parse_hms_info(unsigned attr, unsigned code); std::string get_long_error_code(); @@ -622,6 +624,7 @@ public: std::vector selected_cali_preset; float cache_flow_ratio { 0.0 }; bool cali_finished = true; + FlowRatioCalibrationType flow_ratio_calibration_type = FlowRatioCalibrationType::COMPLETE_CALIBRATION; ManualPaCaliMethod manual_pa_cali_method = ManualPaCaliMethod::PA_LINE; bool has_get_pa_calib_tab{ false }; @@ -694,6 +697,7 @@ public: std::string tutk_state; enum LiveviewLocal { LVL_None, + LVL_Disable, LVL_Local, LVL_Rtsps, LVL_Rtsp @@ -704,6 +708,8 @@ public: bool file_model_download{false}; bool virtual_camera{false}; + int nozzle_setting_hold_count = 0; + bool xcam_ai_monitoring{ false }; int xcam_ai_monitoring_hold_count = 0; std::string xcam_ai_monitoring_sensitivity; @@ -1026,11 +1032,13 @@ public: static bool get_printer_is_enclosed(std::string type_str); static std::vector get_resolution_supported(std::string type_str); static std::vector get_compatible_machine(std::string type_str); - static bool load_filaments_blacklist_config(std::string config_file); + static bool load_filaments_blacklist_config(); static void check_filaments_in_blacklist(std::string tag_vendor, std::string tag_type, bool& in_blacklist, std::string& ac, std::string& info); static std::string load_gcode(std::string type_str, std::string gcode_file); }; +// change the opacity +void change_the_opacity(wxColour& colour); } // namespace Slic3r #endif // slic3r_DeviceManager_hpp_ diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index aa366e20e..6738b3226 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -82,7 +82,6 @@ wxString get_thumbnails_string(const std::vector& values) return ret_str; } - Field::~Field() { if (m_on_kill_focus) @@ -93,11 +92,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 +127,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 +157,7 @@ void Field::PostInitialize() } evt.Skip(); - }); + }, getWindow()->GetId()); } } @@ -302,6 +298,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 +315,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 +502,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 +661,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 +732,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 +901,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 +1021,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 +1051,7 @@ void SpinCtrl::BUILD() { } propagate_value(); - })); + }), temp->GetId()); temp->Bind(wxEVT_SPINCTRL, ([this](wxCommandEvent e) { propagate_value(); }), temp->GetId()); @@ -1084,14 +1203,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 +1223,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 +1281,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 +1292,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())); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index cec2f1e40..1661eb003 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::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] }); + + float column_sum_m = 0.0f; + float column_sum_g = 0.0f; + if (displayed_columns & ColumnData::Model) { + if ((displayed_columns & ~ColumnData::Model) > 0) + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] / unit_conver); + else + ::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] / unit_conver); + columns_offsets.push_back({ buf, offsets[_u8L("Model")] }); + column_sum_m += model_used_filaments_m_all_plates[i]; + column_sum_g += model_used_filaments_g_all_plates[i]; } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) { - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] / unit_conver); - columns_offsets.push_back({ buf, offsets[1] }); - - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m_all_plates[i], flushed_filaments_g_all_plates[i] / unit_conver); - columns_offsets.push_back({ buf, offsets[2] }); - - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (model_used_filaments_m_all_plates[i] + flushed_filaments_m_all_plates[i]), - (model_used_filaments_g_all_plates[i] + flushed_filaments_g_all_plates[i]) / unit_conver); - columns_offsets.push_back({ buf, offsets[3] }); + if (displayed_columns & ColumnData::Support) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", support_used_filaments_m_all_plates[i], support_used_filaments_g_all_plates[i] / unit_conver); + columns_offsets.push_back({ buf, offsets[_u8L("Support")] }); + column_sum_m += support_used_filaments_m_all_plates[i]; + column_sum_g += support_used_filaments_g_all_plates[i]; } - if (displayed_columns == (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) { - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m_all_plates[i], model_used_filaments_g_all_plates[i] / unit_conver); - columns_offsets.push_back({ buf, offsets[1] }); - + if (displayed_columns & ColumnData::Flushed) { ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m_all_plates[i], flushed_filaments_g_all_plates[i] / unit_conver); - columns_offsets.push_back({ buf, offsets[2] }); - + columns_offsets.push_back({ buf, offsets[_u8L("Flushed")] }); + column_sum_m += flushed_filaments_m_all_plates[i]; + column_sum_g += flushed_filaments_g_all_plates[i]; + } + if (displayed_columns & ColumnData::WipeTower) { ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", wipe_tower_used_filaments_m_all_plates[i], wipe_tower_used_filaments_g_all_plates[i] / unit_conver); - columns_offsets.push_back({ buf, offsets[3] }); - - ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (model_used_filaments_m_all_plates[i] + flushed_filaments_m_all_plates[i] + wipe_tower_used_filaments_m_all_plates[i]), - (model_used_filaments_g_all_plates[i] + flushed_filaments_g_all_plates[i] + wipe_tower_used_filaments_g_all_plates[i]) / unit_conver); - columns_offsets.push_back({ buf, offsets[4] }); + columns_offsets.push_back({ buf, offsets[_u8L("Tower")] }); + column_sum_m += wipe_tower_used_filaments_m_all_plates[i]; + column_sum_g += wipe_tower_used_filaments_g_all_plates[i]; + } + if ((displayed_columns & ~ColumnData::Model) > 0) { + ::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", column_sum_m, column_sum_g / unit_conver); + columns_offsets.push_back({ buf, offsets[_u8L("Total")] }); } append_item(filament_colors[it->first], columns_offsets); @@ -4686,19 +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.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; + } + } + + 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(); @@ -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 227c93d15..29addc673 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) { @@ -1137,6 +1158,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed) , m_multisample_allowed(false) , m_moving(false) , m_tab_down(false) + , m_camera_movement(false) , m_cursor_type(Standard) , m_color_by("volume") , m_reload_delayed(false) @@ -1151,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); @@ -1346,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; @@ -1770,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); @@ -3169,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; @@ -3684,11 +3747,7 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt) return; } // Calculate the zoom delta and apply it to the current zoom factor -#ifdef SUPPORT_REVERSE_MOUSE_ZOOM - double direction_factor = (wxGetApp().app_config->get("reverse_mouse_wheel_zoom") == "1") ? -1.0 : 1.0; -#else - double direction_factor = 1.0; -#endif + double direction_factor = wxGetApp().app_config->get_bool("reverse_mouse_wheel_zoom") ? -1.0 : 1.0; auto delta = direction_factor * (double)evt.GetWheelRotation() / (double)evt.GetWheelDelta(); bool zoom_to_mouse = wxGetApp().app_config->get("zoom_to_mouse") == "true"; if (!zoom_to_mouse) {// zoom to center @@ -3696,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); @@ -3721,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) { @@ -3853,7 +3922,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.ignore_left_up = true; m_tooltip.set_in_imgui(false); if (imgui->update_mouse_data(evt)) { - if (evt.LeftDown() && m_canvas != nullptr) + if ((evt.LeftDown() || (evt.Moving() && (evt.AltDown() || evt.ShiftDown()))) && m_canvas != nullptr) m_canvas->SetFocus(); m_mouse.position = evt.Leaving() ? Vec2d(-1.0, -1.0) : pos.cast(); m_tooltip.set_in_imgui(true); @@ -4027,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)) { @@ -4172,7 +4248,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; } } - else if (evt.Dragging()) { + else if (evt.Dragging() || is_camera_rotate(evt) || is_camera_pan(evt)) { m_mouse.dragging = true; if (m_layers_editing.state != LayersEditing::Unknown && layer_editing_object_idx != -1) { @@ -4182,7 +4258,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } // do not process the dragging if the left mouse was set down in another canvas - else if (evt.LeftIsDown()) { + else if (is_camera_rotate(evt)) { // Orca: Sphere rotation for painting view // if dragging over blank area with left button, rotate if ((any_gizmo_active || m_hover_volume_idxs.empty()) && m_mouse.is_start_position_3D_defined()) { @@ -4244,9 +4320,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; } + m_camera_movement = true; m_mouse.drag.start_position_3D = Vec3d((double)pos(0), (double)pos(1), 0.0); } - else if (evt.MiddleIsDown() || evt.RightIsDown()) { + else if (is_camera_pan(evt)) { // If dragging over blank area with right button, pan. if (m_mouse.is_start_position_2D_defined()) { // get point in model space at Z = 0 @@ -4268,10 +4345,12 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.ignore_right_up = true; } + m_camera_movement = true; m_mouse.drag.start_position_2D = pos; } } - else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) { + else if ((evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) || + (m_camera_movement && !is_camera_rotate(evt) && !is_camera_pan(evt))) { m_mouse.position = pos.cast(); if (evt.LeftUp()) { @@ -4450,6 +4529,25 @@ void GLCanvas3D::on_set_focus(wxFocusEvent& evt) } _refresh_if_shown_on_screen(); m_tooltip_enabled = true; + m_is_touchpad_navigation = wxGetApp().app_config->get_bool("camera_navigation_style"); +} + +bool GLCanvas3D::is_camera_rotate(const wxMouseEvent& evt) const +{ + if (m_is_touchpad_navigation) { + return evt.Moving() && evt.AltDown() && !evt.ShiftDown(); + } else { + return evt.Dragging() && evt.LeftIsDown(); + } +} + +bool GLCanvas3D::is_camera_pan(const wxMouseEvent& evt) const +{ + if (m_is_touchpad_navigation) { + return evt.Moving() && evt.ShiftDown() && !evt.AltDown(); + } else { + return evt.Dragging() && (evt.MiddleIsDown() || evt.RightIsDown()); + } } Size GLCanvas3D::get_canvas_size() const @@ -4967,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); } @@ -5052,6 +5152,7 @@ void GLCanvas3D::export_toolpaths_to_obj(const char* filename) const void GLCanvas3D::mouse_up_cleanup() { m_moving = false; + m_camera_movement = false; m_mouse.drag.move_volume_idx = -1; m_mouse.set_start_position_3D_as_invalid(); m_mouse.set_start_position_2D_as_invalid(); @@ -5103,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) { @@ -5413,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"; @@ -5424,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"; } } @@ -5459,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; @@ -6324,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(); @@ -7904,6 +8009,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 6f9de7c9a..5af8ee8aa 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 @@ private: unsigned int m_last_w, m_last_h; bool m_in_render; wxTimer m_timer; + wxTimer m_timer_set_color; LayersEditing m_layers_editing; Mouse m_mouse; GLGizmosManager m_gizmos; @@ -551,6 +554,8 @@ private: std::array m_old_size{ 0, 0 }; + bool m_is_touchpad_navigation{ false }; + // Screen is only refreshed from the OnIdle handler if it is dirty. bool m_dirty; bool m_initialized; @@ -564,6 +569,7 @@ private: bool m_multisample_allowed; bool m_moving; bool m_tab_down; + bool m_camera_movement; //BBS: add toolpath outside bool m_toolpath_outside{ false }; ECursorType m_cursor_type; @@ -604,25 +610,6 @@ private: PrinterTechnology current_printer_technology() const; - template - static auto & get_arrange_settings(Self *self) { - PrinterTechnology ptech = self->current_printer_technology(); - - auto *ptr = &self->m_arrange_settings_fff; - - if (ptech == ptSLA) { - ptr = &self->m_arrange_settings_sla; - } else if (ptech == ptFFF) { - auto co_opt = self->m_config->template option>("print_sequence"); - if (co_opt && (co_opt->value == PrintSequence::ByObject)) - ptr = &self->m_arrange_settings_fff_seq_print; - else - ptr = &self->m_arrange_settings_fff; - } - - return *ptr; - } - //BBS:record key botton frequency @@ -648,7 +635,11 @@ public: } void load_arrange_settings(); - ArrangeSettings& get_arrange_settings() { return get_arrange_settings(this); } + ArrangeSettings& get_arrange_settings();// { return get_arrange_settings(this); } + ArrangeSettings& get_arrange_settings(PrintSequence print_seq) { + return (print_seq == PrintSequence::ByObject) ? m_arrange_settings_fff_seq_print + : m_arrange_settings_fff; + } class SequentialPrintClearance { @@ -771,6 +762,7 @@ public: const GCodeViewer::SequentialView& get_gcode_sequential_view() const { return m_gcode_viewer.get_sequential_view(); } void update_gcode_sequential_view_current(unsigned int first, unsigned int last) { m_gcode_viewer.update_sequential_view_current(first, last); } + void toggle_selected_volume_visibility(bool selected_visible); void toggle_sla_auxiliaries_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1); void toggle_model_objects_visibility(bool visible, const ModelObject* mo = nullptr, int instance_idx = -1, const ModelVolume* mv = nullptr); void update_instance_printable_state_for_object(size_t obj_idx); @@ -957,12 +949,16 @@ public: void on_mouse_wheel(wxMouseEvent& evt); void on_timer(wxTimerEvent& evt); void on_render_timer(wxTimerEvent& evt); + void on_set_color_timer(wxTimerEvent& evt); void on_mouse(wxMouseEvent& evt); void on_gesture(wxGestureEvent& evt); void on_paint(wxPaintEvent& evt); void on_set_focus(wxFocusEvent& evt); void force_set_focus(); + bool is_camera_rotate(const wxMouseEvent& evt) const; + bool is_camera_pan(const wxMouseEvent& evt) const; + Size get_canvas_size() const; Vec2d get_local_mouse_position() const; @@ -1062,6 +1058,17 @@ public: void highlight_toolbar_item(const std::string& item_name); void highlight_gizmo(const std::string& gizmo_name); + ArrangeSettings get_arrange_settings() const { + const ArrangeSettings &settings = get_arrange_settings(); + ArrangeSettings ret = settings; + if (&settings == &m_arrange_settings_fff_seq_print) { + ret.distance = std::max(ret.distance, + float(min_object_distance(*m_config))); + } + + return ret; + } + // Timestamp for FPS calculation and notification fade-outs. static int64_t timestamp_now() { #ifdef _WIN32 diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 1894e1d35..cf6d0bfcd 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -149,6 +149,40 @@ namespace GUI { class MainFrame; +void start_ping_test() +{ + 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 +508,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 } }, @@ -993,8 +1029,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(); @@ -1935,7 +1970,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; } @@ -2114,9 +2149,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, @@ -2379,6 +2411,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(); @@ -2555,7 +2591,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 +2599,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 +2651,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"); @@ -3136,7 +3191,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 +3202,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 +3282,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) { @@ -5275,6 +5340,7 @@ void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_ // so we put it into an inner scope PreferencesDialog dlg(mainframe, open_on_tab, highlight_option); dlg.ShowModal(); + this->plater_->get_current_canvas3D()->force_set_focus(); // BBS //app_layout_changed = dlg.settings_layout_changed(); #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER @@ -5933,6 +5999,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. @@ -5951,6 +6026,7 @@ wxString GUI_App::current_language_code_safe() const { "uk", "uk_UA", }, { "zh", "zh_CN", }, { "ru", "ru_RU", }, + { "tr", "tr_TR", }, }; wxString language_code = this->current_language_code().BeforeFirst('_'); auto it = mapping.find(language_code); @@ -6006,6 +6082,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 f7606c8a0..21a38862f 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -587,6 +587,7 @@ private: // BBS int filaments_cnt() const; + PrintSequence global_print_sequence() const; std::vector tabs_list; std::vector model_tabs_list; diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 6102761b1..14fa20763 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}, @@ -897,8 +899,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( @@ -1881,8 +1895,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 +1984,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 +1999,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_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 0f1f753ac..1f3ae959e 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 @@ -3627,7 +3633,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 +3875,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) @@ -5697,6 +5697,9 @@ void ObjectList::on_plate_deleted(int plate_idx) void ObjectList::reload_all_plates(bool notify_partplate) { m_prevent_canvas_selection_update = true; +#ifdef __WXOSX__ + AssociateModel(nullptr); +#endif // Unselect all objects before deleting them, so that no change of selection is emitted during deletion. @@ -5726,6 +5729,9 @@ void ObjectList::reload_all_plates(bool notify_partplate) update_selections(); +#ifdef __WXOSX__ + AssociateModel(m_objects_model); +#endif m_prevent_canvas_selection_update = false; // update scene @@ -5853,6 +5859,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 ff9521b58..09ca8c64a 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -209,36 +209,36 @@ bool ObjectSettings::update_settings_list() ModelObject * parent_object = nullptr; for (auto item : items) { auto type = objects_model->GetItemType(item); - if (type == itPlate) { - is_plate_settings = true; - - int plate_id = objects_model->GetPlateIdByItem(item); - - static ModelConfig cfg; - PartPlateList& ppl = wxGetApp().plater()->get_partplate_list(); - - if (plate_id < 0 || plate_id >= ppl.get_plate_count()) { - plate_id = ppl.get_curr_plate_index(); - } - assert(plate_id >= 0 && plate_id < ppl.get_plate_count()); - - cfg.assign_config(*ppl.get_plate(plate_id)->config()); - plate_configs.emplace(ppl.get_plate(plate_id), &cfg); - } - if (type != itObject && type != itVolume && type != itLayerRoot && type != itLayer) { + if (type != itPlate && type != itObject && type != itVolume && type != itLayerRoot && type != itLayer) { continue; } + int plate_id = objects_model->GetPlateIdByItem(item); + PartPlateList& ppl = wxGetApp().plater()->get_partplate_list(); + if (plate_id < 0 || plate_id >= ppl.get_plate_count()) { + plate_id = ppl.get_curr_plate_index(); + } + assert(plate_id >= 0 && plate_id < ppl.get_plate_count()); + static ModelConfig cfg; + cfg.assign_config(*ppl.get_plate(plate_id)->config()); + if (type == itPlate) { + is_plate_settings = true; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); + break; + } + const int obj_idx = objects_model->GetObjectIdByItem(item); assert(obj_idx >= 0); auto object = wxGetApp().model().objects[obj_idx]; if (type == itObject) { is_object_settings = true; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); object_configs.emplace(object, &object->config); } else if(type == itVolume){ is_volume_settings = true; if (parent_object && parent_object != object) return false; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); parent_object = object; const int vol_idx = objects_model->GetVolumeIdByItem(item); assert(vol_idx >= 0); @@ -249,6 +249,7 @@ bool ObjectSettings::update_settings_list() is_layer_range_settings = true; if (parent_object && parent_object != object) return false; + plate_configs.emplace(ppl.get_plate(plate_id), &cfg); parent_object = object; t_layer_height_range height_range = objects_model->GetLayerRangeByItem(item); @@ -265,38 +266,38 @@ bool ObjectSettings::update_settings_list() auto tab_layer = dynamic_cast(wxGetApp().get_layer_tab()); if (is_plate_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config({}); tab_volume->set_model_config({}); tab_layer->set_model_config({}); - tab_plate->set_model_config(plate_configs); ;// m_tab_active = tab_plate; } else if (is_object_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config(object_configs); tab_volume->set_model_config({}); tab_layer->set_model_config({}); - tab_plate->set_model_config({}); //m_tab_active = tab_object; } else if (is_volume_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config({ {parent_object, &parent_object->config} }); tab_volume->set_model_config(object_configs); tab_layer->set_model_config({}); - tab_plate->set_model_config({}); //m_tab_active = tab_volume; } else if (is_layer_range_settings) { + tab_plate->set_model_config(plate_configs); tab_object->set_model_config({ {parent_object, &parent_object->config} }); tab_volume->set_model_config({}); tab_layer->set_model_config(object_configs); - tab_plate->set_model_config({}); //m_tab_active = tab_layer; } else { + tab_plate->set_model_config({}); tab_object->set_model_config({}); tab_volume->set_model_config({}); tab_layer->set_model_config({}); - tab_plate->set_model_config({}); //m_tab_active = nullptr; } ((ParamsPanel*) tab_object->GetParent())->set_active_tab(nullptr); diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index dd2e90b84..56c1550c4 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 2ce7e67ec..9cb20f657 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 @@ public: void show_sliders(bool show = true); void show_moves_sliders(bool show = true); void show_layers_sliders(bool show = true); + void set_reload_paint_after_background_process_apply(bool flag) { m_reload_paint_after_background_process_apply = flag; } + bool get_reload_paint_after_background_process_apply() { return m_reload_paint_after_background_process_apply; } private: bool init(wxWindow* parent, Bed3D& bed, Model* model); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 81c6e8710..35cc3c770 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 0471d0235..3a57a895d 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 11886c142..bd91482f6 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 e653829be..9df780d72 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 da05fcfab..2644c1009 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -355,10 +355,15 @@ private: ObjectID object_id; int instance_idx{ -1 }; }; - mutable CutContours m_cut_contours; - + mutable std::vector m_cut_contours; + mutable int m_volumes_index = 0; + mutable float m_cursor_z{0}; + mutable double m_height_start_z_in_imgui{0}; + mutable bool m_is_set_height_start_z_by_imgui{false}; + mutable 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 7034b0eb2..271368d9e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -1123,10 +1123,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 a30f87d31..a9d83df5a 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 cc6ca682e..687b8de27 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -85,9 +85,9 @@ public: MeshBoolean, FdmSupports, Seam, + MmuSegmentation, Emboss, Svg, - MmuSegmentation, Measure, Simplify, //SlaSupports, @@ -142,6 +142,10 @@ private: bool m_serializing; std::unique_ptr m_common_gizmos_data; + //When there are more than 9 colors, shortcut key coloring + wxTimer m_timer_set_color; + void on_set_color_timer(wxTimerEvent& evt); + // key MENU_ICON_NAME, value = ImtextureID std::map icon_list; diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index 3584edbea..1aab82865 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/HMSPanel.cpp b/src/slic3r/GUI/HMSPanel.cpp index 9992e37af..88afb2a45 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 f6fe00338..bafa043a6 100644 --- a/src/slic3r/GUI/HMSPanel.hpp +++ b/src/slic3r/GUI/HMSPanel.hpp @@ -16,6 +16,7 @@ class HMSNotifyItem : public wxPanel { HMSItem & m_hms_item; std::string m_url; + std::string long_error_code; wxPanel * m_panel_hms; wxStaticBitmap *m_bitmap_notify; @@ -39,6 +40,7 @@ public: void msw_rescale() {} }; + class HMSPanel : public wxPanel { protected: @@ -50,6 +52,7 @@ protected: void append_hms_panel(HMSItem &item); void delete_hms_panels(); + public: HMSPanel(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL); ~HMSPanel(); @@ -62,9 +65,14 @@ public: void show_status(int status); + void clear_hms_tag(); + MachineObject *obj { nullptr }; + std::map temp_hms_list; }; +wxDECLARE_EVENT(EVT_ALREADY_READ_HMS, wxCommandEvent); + } } diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index b44fcc7f9..f12cf5aab 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1243,7 +1243,7 @@ void IMSlider::render_go_to_layer_dialog() | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse; - if (ImGui::BeginPopupModal((_u8L("Jump to layer")).c_str(), NULL, windows_flag)) + if (ImGui::BeginPopupModal((_u8L("Jump to Layer")).c_str(), NULL, windows_flag)) { imgui.text(_u8L("Please enter the layer number") + " (" + std::to_string(m_min_value + 1) + " - " + std::to_string(m_max_value + 1) + "):"); if (ImGui::IsMouseClicked(0)) { diff --git a/src/slic3r/GUI/IMToolbar.cpp b/src/slic3r/GUI/IMToolbar.cpp index e14cdb2ff..1dbfc9e61 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 681045fdb..add067d83 100644 --- a/src/slic3r/GUI/IMToolbar.hpp +++ b/src/slic3r/GUI/IMToolbar.hpp @@ -49,7 +49,7 @@ public: float icon_height; bool is_display_scrollbar; bool show_stats_item{ false }; - + bool is_render_finish{false}; IMToolbar() { icon_width = DEFAULT_TOOLBAR_BUTTON_WIDTH; icon_height = DEFAULT_TOOLBAR_BUTTON_HEIGHT; @@ -63,7 +63,7 @@ public: float fontScale; bool is_enabled() const { return m_enabled; } - void set_enabled(bool enable) { m_enabled = enable; } + void set_enabled(bool enable); void set_icon_size(float width, float height) { icon_width = width; diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index 770d46ec0..15adf8c8c 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 538ffc4fa..c7a9a016c 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 6b3364236..005d386fe 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/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index efcb55645..d671a70c9 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 8ff354e7c..0e7af93f3 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -281,15 +281,42 @@ void PrintJob::process(Ctl &ctl) } } + params.stl_design_id = 0; if (!wxGetApp().model().stl_design_id.empty()) { - int stl_design_id = 0; - try { - stl_design_id = std::stoi(wxGetApp().model().stl_design_id); + + auto country_code = wxGetApp().app_config->get_country_code(); + bool match_code = false; + + if (wxGetApp().model().stl_design_country == "DEV" && (country_code == "ENV_CN_DEV" || country_code == "NEW_ENV_DEV_HOST")) { + match_code = true; } - catch (const std::exception& e) { - stl_design_id = 0; + + if (wxGetApp().model().stl_design_country == "QA" && (country_code == "ENV_CN_QA" || country_code == "NEW_ENV_QAT_HOST")) { + match_code = true; + } + + if (wxGetApp().model().stl_design_country == "CN_PRE" && (country_code == "ENV_CN_PRE" || country_code == "NEW_ENV_PRE_HOST")) { + match_code = true; + } + + if (wxGetApp().model().stl_design_country == "US_PRE" && country_code == "ENV_US_PRE") { + match_code = true; + } + + if (country_code == wxGetApp().model().stl_design_country) { + match_code = true; + } + + if (match_code) { + int stl_design_id = 0; + try { + stl_design_id = std::stoi(wxGetApp().model().stl_design_id); + } + catch (const std::exception& e) { + stl_design_id = 0; + } + params.stl_design_id = stl_design_id; } - params.stl_design_id = stl_design_id; } if (params.preset_name.empty() && m_print_type == "from_normal") { params.preset_name = wxString::Format("%s_plate_%d", m_project_name, curr_plate_idx).ToStdString(); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 7e06f6e17..9befbb77b 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -589,6 +589,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ { PreferencesDialog dlg(this); dlg.ShowModal(); + plater()->get_current_canvas3D()->force_set_focus(); #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) #else @@ -1080,7 +1081,7 @@ void MainFrame::init_tabpanel() { m_project = new ProjectPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_project->SetBackgroundColour(*wxWHITE); - m_tabpanel->AddPage(m_project, _L("Project"), std::string("tab_auxiliary_avtice"), std::string("tab_auxiliary_avtice"), 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); @@ -2703,6 +2704,7 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent &) { PreferencesDialog dlg(this); dlg.ShowModal(); + plater()->get_current_canvas3D()->force_set_focus(); #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) #else @@ -2729,6 +2731,7 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent &) { PreferencesDialog dlg(this); dlg.ShowModal(); + plater()->get_current_canvas3D()->force_set_focus(); #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) #else diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 3b23ee763..944006f3c 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("#00AE42")); + m_button_refresh->SetTextColorNormal(*wxWHITE); + m_button_refresh->Enable(false); wxBoxSizer *manage_sizer = new wxBoxSizer(wxHORIZONTAL); manage_sizer->AddStretchSpacer(1); manage_sizer->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL)->Show(false); manage_sizer->Add(m_button_delete, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24)->Show(false); + manage_sizer->Add(m_button_refresh, 0, wxALIGN_CENTER_VERTICAL); manage_sizer->Add(m_button_management, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 24); m_manage_panel->SetSizer(manage_sizer); top_sizer->Add(m_manage_panel, 1, wxEXPAND); @@ -171,6 +179,11 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) e.Skip(); SetSelecting(!m_image_grid->IsSelecting()); }); + m_button_refresh->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { + e.Skip(); + if (auto fs = m_image_grid->GetFileSystem()) + fs->ListAllFiles(); + }); m_button_download->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { m_image_grid->DoActionOnSelection(1); SetSelecting(false); @@ -198,9 +211,7 @@ MediaFilePanel::~MediaFilePanel() SetMachineObject(nullptr); } -wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t length = -1); - - void MediaFilePanel::SetMachineObject(MachineObject* obj) +void MediaFilePanel::SetMachineObject(MachineObject* obj) { std::string machine = obj ? obj->dev_id : ""; if (obj) { @@ -208,6 +219,8 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le m_lan_ip = obj->dev_ip; m_lan_passwd = obj->get_access_code(); m_dev_ver = obj->get_ota_version(); + m_device_busy = obj->is_camera_busy_off(); + m_sdcard_exist = obj->has_sdcard(); m_local_support = obj->file_local; m_remote_support = obj->file_remote; m_model_download_support = obj->file_model_download; @@ -216,18 +229,21 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le m_lan_ip.clear(); m_lan_passwd.clear(); m_dev_ver.clear(); + m_sdcard_exist = false; + m_device_busy = false; m_local_support = false; m_remote_support = false; m_model_download_support = false; } - if (machine == m_machine && m_image_grid->GetFileSystem()) { - if (m_waiting_enable && IsEnabled()) { + Enable(obj && obj->is_connected() && obj->m_push_count > 0); + if (machine == m_machine) { + if ((m_waiting_enable && IsEnabled()) || (m_waiting_support && (m_local_support || m_remote_support))) { auto fs = m_image_grid->GetFileSystem(); if (fs) fs->Retry(); } return; } - m_machine = machine; + m_machine.swap(machine); m_last_errors.clear(); auto fs = m_image_grid->GetFileSystem(); if (fs) { @@ -235,12 +251,11 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le fs->Unbind(EVT_MODE_CHANGED, &MediaFilePanel::modeChanged, this); fs->Stop(true); } + m_button_refresh->Enable(false); m_button_management->Enable(false); SetSelecting(false); if (m_machine.empty()) { m_image_grid->SetStatus(m_bmp_failed, _L("No printers.")); - } else if (!m_local_support && !m_remote_support) { - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not supported on the current printer version)!")); } else { boost::shared_ptr fs(new PrinterFileSystem); fs->Attached(); @@ -253,6 +268,7 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le return; m_time_panel->Show(fs->GetFileType() < PrinterFileSystem::F_MODEL); //m_manage_panel->Show(fs->GetFileType() < PrinterFileSystem::F_MODEL); + m_button_refresh->Enable(fs->GetStatus() == PrinterFileSystem::ListReady); m_button_management->Enable(fs->GetCount() > 0); bool download_support = fs->GetFileType() < PrinterFileSystem::F_MODEL || m_model_download_support; m_image_grid->ShowDownload(download_support); @@ -282,27 +298,21 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le case PrinterFileSystem::Connecting: icon = m_bmp_loading; msg = _L("Connecting..."); break; case PrinterFileSystem::Failed: icon = m_bmp_failed; if (extra != 1) msg = _L("Connect failed [%d]!"); break; case PrinterFileSystem::ListSyncing: icon = m_bmp_loading; msg = _L("Loading file list..."); break; - case PrinterFileSystem::ListReady: icon = extra == 0 ? m_bmp_empty : m_bmp_failed; msg = extra == 0 ? _L("No files [%d]") : _L("Load failed [%d]"); break; + case PrinterFileSystem::ListReady: icon = extra == 0 ? m_bmp_empty : m_bmp_failed; msg = extra == 0 ? _L("No files") : _L("Load failed"); break; } - if (!e.GetString().IsEmpty()) msg = e.GetString(); + int err = fs->GetLastError(); + if (!e.GetString().IsEmpty()) + msg = e.GetString(); + if (err != 0) + msg += " [%d]"; if (fs->GetCount() == 0 && !msg.empty()) m_image_grid->SetStatus(icon, msg); if (e.GetInt() == PrinterFileSystem::Initializing) fetchUrl(boost::weak_ptr(fs)); - int err = fs->GetLastError(); + err = fs->GetLastError(); if ((status == PrinterFileSystem::Failed && m_last_errors.find(err) == m_last_errors.end()) || status == PrinterFileSystem::ListReady) { - json j; - j["code"] = err; - j["dev_id"] = m_machine; - j["dev_ip"] = m_lan_ip; - NetworkAgent* agent = wxGetApp().getAgent(); - if (status == PrinterFileSystem::Failed && err != 0) { - j["result"] = "failed"; - } else if (status == PrinterFileSystem::ListReady) { - j["result"] = "success"; - } m_last_errors.insert(fs->GetLastError()); } }); @@ -314,7 +324,9 @@ wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t le int result = e.GetExtraLong(); if (result > 1 && !e.GetString().IsEmpty()) - MessageDialog(this, e.GetString(), _L("Download failed"), wxOK | wxICON_ERROR).ShowModal(); + CallAfter([this, m = e.GetString()] { + MessageDialog(this, m, _L("Download failed"), wxOK | wxICON_ERROR).ShowModal(); + }); NetworkAgent* agent = wxGetApp().getAgent(); if (result > 1 || result == 0) { @@ -373,6 +385,7 @@ void MediaFilePanel::Rescale() m_button_download->Rescale(); m_button_delete->Rescale(); + m_button_refresh->Rescale(); m_button_management->Rescale(); m_image_grid->Rescale(); @@ -386,6 +399,7 @@ void MediaFilePanel::SetSelecting(bool selecting) bool download_support = fs && fs->GetFileType() < PrinterFileSystem::F_MODEL || m_model_download_support; m_manage_panel->GetSizer()->Show(m_button_download, selecting && download_support); m_manage_panel->GetSizer()->Show(m_button_delete, selecting); + m_manage_panel->GetSizer()->Show(m_button_refresh, !selecting); m_manage_panel->Layout(); } @@ -420,31 +434,60 @@ void MediaFilePanel::fetchUrl(boost::weak_ptr wfs) } m_waiting_enable = false; if (!m_local_support && !m_remote_support) { - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not supported on the current printer version)!")); + m_waiting_support = true; + m_image_grid->SetStatus(m_bmp_failed, _L("Browsing file in SD card is not supported in current firmware. Please update the printer firmware.")); fs->SetUrl("0"); return; } + if (!m_sdcard_exist) { + m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Storage unavailable, insert SD card.)!")); + fs->SetUrl("0"); + return; + } + if (m_device_busy) { + m_image_grid->SetStatus(m_bmp_failed, _L("The printer is currently busy downloading. Please try again after it finishes.")); + fs->SetUrl("0"); + return; + } + m_waiting_support = false; + NetworkAgent *agent = wxGetApp().getAgent(); + std::string agent_version = agent ? agent->get_version() : ""; if ((m_lan_mode || !m_remote_support) && m_local_support && !m_lan_ip.empty()) { - std::string url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd + - "&device=" + m_machine + "&dev_ver=" + m_dev_ver; + std::string url = "bambu:///local/" + m_lan_ip + ".?port=6000&user=" + m_lan_user + "&passwd=" + m_lan_passwd; + url += "&device=" + m_machine; + url += "&net_ver=" + agent_version; + url += "&dev_ver=" + m_dev_ver; + url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); + url += "&cli_ver=" + std::string(SLIC3R_VERSION); fs->SetUrl(url); return; } + if (!m_remote_support && m_local_support) { // not support tutk + m_image_grid->SetStatus(m_bmp_failed, _L("Please enter the IP of printer to connect.")); + fs->SetUrl("0"); + fs.reset(); + if (wxGetApp().show_modal_ip_address_enter_dialog(_L("LAN Connection Failed (Failed to view sdcard)"))) { + if (auto fs = wfs.lock()) + fs->Retry(); + } + return; + } if (m_lan_mode) { - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Not accessible in LAN-only mode)!")); + m_image_grid->SetStatus(m_bmp_failed, _L("Browsing file in SD card is not supported in LAN Only Mode.")); fs->SetUrl("0"); return; } - if (!m_remote_support && m_local_support) { // not support tutk - m_image_grid->SetStatus(m_bmp_failed, _L("Initialize failed (Missing LAN ip of printer)!")); - fs->SetUrl("1"); - return; - } - NetworkAgent *agent = wxGetApp().getAgent(); if (agent) { agent->get_camera_url(m_machine, - [this, wfs, m = m_machine, v = m_dev_ver](std::string url) { - BOOST_LOG_TRIVIAL(info) << "MediaFilePanel::fetchUrl: camera_url: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd="}), 9, 20); + [this, wfs, m = m_machine, v = agent->get_version(), dv = m_dev_ver](std::string url) { + if (boost::algorithm::starts_with(url, "bambu:///")) { + url += "&device=" + m; + url += "&net_ver=" + v; + url += "&dev_ver=" + dv; + url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); + url += "&cli_ver=" + std::string(SLIC3R_VERSION); + } + BOOST_LOG_TRIVIAL(info) << "MediaFilePanel::fetchUrl: camera_url: " << hide_passwd(url, {"?uid=", "authkey=", "passwd="}); CallAfter([=] { boost::shared_ptr fs(wfs.lock()); if (!fs || fs != m_image_grid->GetFileSystem()) return; @@ -498,9 +541,11 @@ void MediaFilePanel::doAction(size_t index, int action) if (result == PrinterFileSystem::ERROR_CANCEL) return; if (result != 0) { - MessageDialog(this, - _L("Failed to fetching model infomations from printer."), - _L("Error"), wxOK).ShowModal(); + wxString msg = data.empty() ? _L("Failed to fetch model information from printer.") : + from_u8(data); + CallAfter([this, msg] { + MessageDialog(this, msg, _L("Print"), wxOK).ShowModal(); + }); return; } Slic3r::DynamicPrintConfig config; @@ -511,8 +556,8 @@ void MediaFilePanel::doAction(size_t index, int action) if (!Slic3r::load_gcode_3mf_from_stream(is, &config, &model, &plate_data_list, &file_version) || plate_data_list.empty()) { MessageDialog(this, - _L("Failed to parse model infomations."), - _L("Error"), wxOK).ShowModal(); + _L("Failed to parse model information."), + _L("Print"), wxOK).ShowModal(); return; } diff --git a/src/slic3r/GUI/MediaFilePanel.h b/src/slic3r/GUI/MediaFilePanel.h index 1ae5df791..0b64cdb5d 100644 --- a/src/slic3r/GUI/MediaFilePanel.h +++ b/src/slic3r/GUI/MediaFilePanel.h @@ -69,6 +69,7 @@ private: ::StaticBox *m_manage_panel = nullptr; ::Button * m_button_delete = nullptr; ::Button *m_button_download = nullptr; + ::Button *m_button_refresh = nullptr; ::Button *m_button_management = nullptr; ImageGrid * m_image_grid = nullptr; @@ -81,10 +82,13 @@ private: std::string m_lan_passwd; std::string m_dev_ver; bool m_lan_mode = false; + bool m_sdcard_exist = false; bool m_local_support = false; bool m_remote_support = false; bool m_model_download_support = false; + bool m_device_busy = false; bool m_waiting_enable = false; + bool m_waiting_support = false; int m_last_mode = 0; int m_last_type = 0; diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index b5ab46647..bdc3de924 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:///")) { @@ -484,7 +583,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 +592,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 +655,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 +691,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 +722,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 +744,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 +795,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 79ce3a4b9..c4e088876 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -95,11 +95,13 @@ private: bool m_user_triggered = false; int m_failed_retry = 0; int m_failed_code = 0; + std::vector m_stat; std::set m_last_failed_codes; wxDateTime m_last_user_play; wxDateTime m_next_retry; ::Button *m_button_play; + ::Label * m_label_stat; ::Label * m_label_status; }; diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 8985e0d3a..dfb3ef974 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -121,6 +121,17 @@ 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(); + }); } MonitorPanel::~MonitorPanel() @@ -252,17 +263,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 +284,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 +366,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 +400,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 +409,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 +435,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 +455,7 @@ bool MonitorPanel::Show(bool show) } } } else { + stop_update(); m_refresh_timer->Stop(); } return wxPanel::Show(show); @@ -470,7 +508,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(); diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index cb5615b04..715e3e0c1 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -104,6 +104,7 @@ private: int last_wifi_signal = -1; int last_status; bool m_initialized { false }; + bool update_flag{false}; wxTimer* m_refresh_timer = nullptr; public: @@ -141,6 +142,7 @@ public: //void update_ams(MachineObject* obj); void update_all(); + void update_hms_tag(); bool Show(bool show); void update_side_panel(); @@ -148,6 +150,9 @@ public: MachineObject *obj { nullptr }; std::string last_conn_type = "undedefined"; + + void stop_update() {update_flag = false;}; + void start_update() {update_flag = true;}; }; diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index c8efc1b9e..c5e0881ec 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 ed323417a..daac8b18c 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/BambuStudioTitle.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 Bambu Studio version.")); + wxStaticText * text2 = new wxStaticText(this, wxID_ANY, _L("If you would like to try Bambu Studio 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 Bambu Studio version.")); + wxStaticText *text2 = new wxStaticText(this, wxID_ANY, _L("Update your Bambu Studio 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(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::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 58e113acb..a7acc42de 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 @@ private: wxStaticText *m_msg_text = nullptr; }; +class Newer3mfVersionDialog : public DPIDialog +{ +public: + Newer3mfVersionDialog(wxWindow *parent, const Semver* file_version, const Semver* cloud_version, wxString new_keys); + ~Newer3mfVersionDialog(){}; + virtual void on_dpi_changed(const wxRect &suggested_rect){}; + +private: + wxBoxSizer *get_msg_sizer(); + wxBoxSizer *get_btn_sizer(); + + +private: + const Semver *m_file_version; + const Semver *m_cloud_version; + wxString m_new_keys; + Button * m_update_btn = nullptr; + Button * m_later_btn = nullptr; + wxStaticText *m_msg_text = nullptr; +}; + } } diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index b320ea4f4..fdf4f765b 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); + for (const auto& [model_node, name, tip] : assembly_name_list) { + wxString sub_str = name; + sub_str = sub_str.MakeLower(); - search_found_list.push_back(std::make_pair(pair.first, new_str)); + wxString new_str = ""; + size_t search_text_len = search_text.length(); + size_t curr_str_len = 0; + size_t pos = sub_str.find(search_text); + while (pos != wxString::npos) { + wxString new_search_str = "" + name.Mid(curr_str_len + pos, search_text_len) + ""; + new_str += name.Mid(curr_str_len, pos) + new_search_str; + curr_str_len += search_text_len + pos; + sub_str = sub_str.substr(pos + search_text_len); + pos = sub_str.find(search_text); } + + if (curr_str_len > 0 && curr_str_len < name.length()) { + new_str += name.substr(curr_str_len); + } + if (!new_str.empty()) + search_found_list.push_back(std::tuple(model_node, new_str, tip)); } } } diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 47ac80d3d..83131dc5e 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 @@ public: void assembly_name(ObjectDataViewModelNode* item, wxString name); void assembly_name(); - std::vector> get_assembly_name_list() { return assembly_name_list; } + std::vector> get_assembly_name_list() const { return assembly_name_list; } void search_object(wxString search_text); - std::vector> get_found_list() { return search_found_list; } + std::vector> get_found_list() const { return search_found_list; } void sys_color_changed(); diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index eb25999cc..110d91d9c 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 420a7a334..119e3394e 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,19 @@ 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; + // model usage + for (const auto&item:ps.volumes_per_extruder) + used_extruders_set.emplace(item.first + 1); + // support usage + for (const auto&item:ps.support_volumes_per_extruder) + used_extruders_set.emplace(item.first + 1); + // wipe tower usage + for (const auto&item:ps.wipe_tower_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 +1917,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 +1996,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 +2042,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 +2085,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 +2283,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; @@ -2356,11 +2409,13 @@ void PartPlate::generate_logo_polygon(ExPolygon &logo_polygon) { if (m_shape.size() == 4) { - auto preset_bundle = wxGetApp().preset_bundle; - bool is_bbl_vendor = false; - if (preset_bundle) - is_bbl_vendor = preset_bundle->is_bbl_vendor(); + + if (m_plater) { + if (auto preset_bundle = wxGetApp().preset_bundle; preset_bundle) + is_bbl_vendor = preset_bundle->is_bbl_vendor(); + } + //rectangle case for (int i = 0; i < 4; i++) { @@ -2510,7 +2565,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())); } @@ -2545,8 +2600,8 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Ve ExPolygon logo_poly; generate_logo_polygon(logo_poly); - m_logo_triangles.reset(); - if (!init_model_from_poly(m_logo_triangles, logo_poly, GROUND_Z + 0.02f)) + m_logo_triangles.reset(); + if (!init_model_from_poly(m_logo_triangles, logo_poly, GROUND_Z + 0.02f)) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":Unable to create logo triangles\n"; ExPolygon poly; @@ -2576,8 +2631,10 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, Ve calc_vertex_for_icons(4, m_plate_settings_icon); //calc_vertex_for_number(0, (m_plate_index < 9), m_plate_idx_icon); calc_vertex_for_number(0, false, m_plate_idx_icon); - // calc vertex for plate name - generate_plate_name_texture(); + if (m_plater) { + // calc vertex for plate name + generate_plate_name_texture(); + } } calc_height_limit(); @@ -2885,6 +2942,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) { @@ -2904,8 +2975,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; @@ -3953,7 +4068,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; @@ -4024,6 +4139,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) { @@ -4034,6 +4164,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 b6c5d430f..8a9f9436b 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -22,6 +22,7 @@ #include "GLModel.hpp" #include "3DBed.hpp" #include "MeshUtils.hpp" +#include "libslic3r/ParameterUtils.hpp" class GLUquadric; typedef class GLUquadric GLUquadricObject; @@ -116,6 +117,7 @@ private: friend class PartPlateList; + Pointfs m_raw_shape; Pointfs m_shape; Pointfs m_exclude_area; BoundingBoxf3 m_bounding_box; @@ -291,6 +293,7 @@ public: // BBS Vec2d get_size() const { return Vec2d(m_width, m_depth); } ModelObjectPtrs get_objects() { return m_model->objects; } + ModelObjectPtrs get_objects_on_this_plate(); ModelInstance* get_instance(int obj_id, int instance_id); Vec3d get_origin() { return m_origin; } @@ -335,6 +338,9 @@ public: //update object's index caused by original object deleted void update_object_index(int obj_idx_removed, int obj_idx_max); + // set objects configs when enabling spiral vase mode. + void set_vase_mode_related_object_config(int obj_id = -1); + //whether it is empty bool empty() { return obj_to_instance_set.empty(); } @@ -362,10 +368,18 @@ public: void set_hover_id(int id) { m_hover_id = id; } const BoundingBoxf3& get_bounding_box(bool extended = false) { return extended ? m_extended_bounding_box : m_bounding_box; } const BoundingBox get_bounding_box_crd(); + BoundingBoxf3 get_plate_box() {return get_build_volume();} 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 @@ public: int load_pattern_box_data(std::string filename); std::vector get_first_layer_print_sequence() const; + std::vector get_other_layers_print_sequence() const; void set_first_layer_print_sequence(const std::vector &sorted_filaments); + void set_other_layers_print_sequence(const std::vector& layer_seq_list); void update_first_layer_print_sequence(size_t filament_nums); void print() const; @@ -733,7 +749,7 @@ public: int find_instance_belongs(int obj_id, int instance_id); //notify instance's update, need to refresh the instance in plates - int notify_instance_update(int obj_id, int instance_id); + int notify_instance_update(int obj_id, int instance_id, bool is_new = false); //notify instance is removed int notify_instance_removed(int obj_id, int instance_id); diff --git a/src/slic3r/GUI/PlateSettingsDialog.cpp b/src/slic3r/GUI/PlateSettingsDialog.cpp index d45c93091..88f939177 100644 --- a/src/slic3r/GUI/PlateSettingsDialog.cpp +++ b/src/slic3r/GUI/PlateSettingsDialog.cpp @@ -1,11 +1,368 @@ #include "PlateSettingsDialog.hpp" - +#include "MsgDialog.hpp" namespace Slic3r { namespace GUI { +static constexpr int MIN_LAYER_VALUE = 2; +static constexpr int MAX_LAYER_VALUE = INT_MAX - 1; wxDEFINE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); +wxDEFINE_EVENT(EVT_NEED_RESORT_LAYERS, wxCommandEvent); -PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title, bool only_first_layer_seq, const wxPoint& pos, const wxSize& size, long style) +bool LayerSeqInfo::operator<(const LayerSeqInfo& another) const +{ + if (this->begin_layer_number < MIN_LAYER_VALUE) + return false; + if (another.begin_layer_number < MIN_LAYER_VALUE) + return true; + if (this->begin_layer_number == another.begin_layer_number) { + if (this->end_layer_number < MIN_LAYER_VALUE) + return false; + if (another.end_layer_number < MIN_LAYER_VALUE) + return true; + return this->end_layer_number < another.end_layer_number; + } + return this->begin_layer_number < another.begin_layer_number; +} + +LayerNumberTextInput::LayerNumberTextInput(wxWindow* parent, int layer_number, wxSize size, Type type, ValueType value_type) + :ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, size, 0, NULL) + , m_layer_number(layer_number) + , m_type(type) + , m_value_type(value_type) +{ + GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_DIGITS)); + GetTextCtrl()->SetFont(::Label::Body_14); + Append(_L("End")); + Append(_L("Customize")); + if (m_value_type == ValueType::End) + SetSelection(0); + if (m_value_type == ValueType::Custom) { + SetSelection(1); + update_label(); + } + + Bind(wxEVT_TEXT, [this](auto& evt) { + if (m_value_type == ValueType::End) { + // TextCtrl->SetValue() will generate a wxEVT_TEXT event + GetTextCtrl()->ChangeValue(_L("End")); + return; + } + evt.Skip(); + }); + + auto validate_input_value = [this](int gui_value) { + // value should not be less than MIN_LAYER_VALUE, and should not be greater than MAX_LAYER_VALUE + gui_value = std::clamp(gui_value, MIN_LAYER_VALUE, MAX_LAYER_VALUE); + + int begin_value; + int end_value; + LayerNumberTextInput* end_layer_input = nullptr; + if (this->m_type == Type::Begin) { + begin_value = gui_value; + end_value = m_another_layer_input->get_layer_number(); + end_layer_input = m_another_layer_input; + } + if (this->m_type == Type::End) { + begin_value = m_another_layer_input->get_layer_number(); + end_value = gui_value; + end_layer_input = this; + } + + // end value should not be less than begin value + if (begin_value > end_value) { + // set new value for end_layer_input + if (this->m_type == Type::Begin) { + if (end_layer_input->is_layer_number_valid()) { + end_layer_input->set_layer_number(begin_value); + } + } + if (this->m_type == Type::End) { + if (!this->is_layer_number_valid()) { + this->set_layer_number(begin_value); + wxCommandEvent evt(EVT_NEED_RESORT_LAYERS); + wxPostEvent(m_parent, evt); + } + else { + // do nothing + // reset to the last value for end_layer_input + } + return; + } + } + m_layer_number = gui_value; + wxCommandEvent evt(EVT_NEED_RESORT_LAYERS); + wxPostEvent(m_parent, evt); + }; + auto commit_layer_number_from_gui = [this, validate_input_value]() { + if (m_value_type == ValueType::End) + return; + + auto gui_str = GetTextCtrl()->GetValue().ToStdString(); + if (gui_str.empty()) { + m_layer_number = -1; + wxCommandEvent evt(EVT_NEED_RESORT_LAYERS); + wxPostEvent(m_parent, evt); + } + if (!gui_str.empty()) { + int gui_value = atoi(gui_str.c_str()); + validate_input_value(gui_value); + } + update_label(); + }; + Bind(wxEVT_TEXT_ENTER, [commit_layer_number_from_gui](wxEvent& evt) { + commit_layer_number_from_gui(); + evt.Skip(); + }); + Bind(wxEVT_KILL_FOCUS, [commit_layer_number_from_gui](wxFocusEvent& evt) { + commit_layer_number_from_gui(); + evt.Skip(); + }); + + Bind(wxEVT_COMBOBOX, [this](auto& e) { + if (e.GetSelection() == 0) { + m_value_type = ValueType::End; + } + else if (e.GetSelection() == 1) { + m_value_type = ValueType::Custom; + m_layer_number = -1; + update_label(); + } + e.Skip(); + }); +} + +void LayerNumberTextInput::update_label() +{ + if (m_value_type == ValueType::End) + return; + + if (!is_layer_number_valid()) { + SetLabel(""); + } + else + SetLabel(std::to_string(m_layer_number)); +} + +void LayerNumberTextInput::set_layer_number(int layer_number) +{ + m_layer_number = layer_number; + if (layer_number == MAX_LAYER_VALUE) + m_value_type = ValueType::End; + else + m_value_type = ValueType::Custom; + + if (m_value_type == ValueType::End) + SetSelection(0); + if (m_value_type == ValueType::Custom) { + SetSelection(1); + update_label(); + } +} + +int LayerNumberTextInput::get_layer_number() +{ + return m_value_type == ValueType::End ? MAX_LAYER_VALUE : m_layer_number; +} + +bool LayerNumberTextInput::is_layer_number_valid() +{ + if (m_value_type == ValueType::End) + return true; + return m_layer_number >= MIN_LAYER_VALUE; +} + +OtherLayersSeqPanel::OtherLayersSeqPanel(wxWindow* parent) + :wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) +{ + m_bmp_delete = ScalableBitmap(this, "delete_filament"); + m_bmp_add = ScalableBitmap(this, "add_filament"); + + SetBackgroundColour(*wxWHITE); + + wxBoxSizer* top_sizer = new wxBoxSizer(wxVERTICAL); + + wxBoxSizer* title_sizer = new wxBoxSizer(wxHORIZONTAL); + m_other_layer_print_seq_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240), -1), 0, NULL, wxCB_READONLY); + m_other_layer_print_seq_choice->Append(_L("Auto")); + m_other_layer_print_seq_choice->Append(_L("Customize")); + m_other_layer_print_seq_choice->SetSelection(0); + wxStaticText* other_layer_txt = new wxStaticText(this, wxID_ANY, _L("Other layer filament sequence")); + other_layer_txt->SetFont(Label::Body_14); + title_sizer->Add(other_layer_txt, 0, wxALIGN_CENTER | wxALIGN_LEFT, 0); + title_sizer->AddStretchSpacer(); + title_sizer->Add(m_other_layer_print_seq_choice, 0, wxALIGN_CENTER | wxALIGN_RIGHT, 0); + + wxBoxSizer* buttons_sizer = new wxBoxSizer(wxHORIZONTAL); + ScalableButton* add_layers_btn = new ScalableButton(this, wxID_ANY, m_bmp_add); + add_layers_btn->SetBackgroundColour(GetBackgroundColour()); + ScalableButton* delete_layers_btn = new ScalableButton(this, wxID_ANY, m_bmp_delete); + delete_layers_btn->SetBackgroundColour(GetBackgroundColour()); + buttons_sizer->Add(add_layers_btn, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + buttons_sizer->Add(delete_layers_btn, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + buttons_sizer->Show(false); + + m_layer_input_panel = new wxPanel(this); + wxBoxSizer* layer_panel_sizer = new wxBoxSizer(wxVERTICAL); + m_layer_input_panel->SetSizer(layer_panel_sizer); + m_layer_input_panel->Hide(); + append_layer(); + + top_sizer->Add(title_sizer, 0, wxEXPAND, 0); + top_sizer->Add(buttons_sizer, 0, wxALIGN_CENTER, 0); + top_sizer->Add(m_layer_input_panel, 0, wxEXPAND, 0); + + SetSizer(top_sizer); + Layout(); + top_sizer->Fit(this); + + + m_other_layer_print_seq_choice->Bind(wxEVT_COMBOBOX, [this, buttons_sizer](auto& e) { + if (e.GetSelection() == 0) { + m_layer_input_panel->Show(false); + buttons_sizer->Show(false); + } + else if (e.GetSelection() == 1) { + m_layer_input_panel->Show(true); + buttons_sizer->Show(true); + } + m_parent->Layout(); + m_parent->Fit(); + }); + add_layers_btn->Bind(wxEVT_BUTTON, [this](wxEvent&) { + Freeze(); + append_layer(); + m_parent->Layout(); + m_parent->Fit(); + Thaw(); + }); + delete_layers_btn->Bind(wxEVT_BUTTON, [this](wxEvent&) { + popup_layer(); + m_parent->Layout(); + m_parent->Fit(); + }); + Bind(EVT_NEED_RESORT_LAYERS, [this](auto& evt) { + std::vector result; + for (int i = 0; i < m_layer_input_sizer_list.size(); i++) { + int begin_layer_number = m_begin_layer_input_list[i]->get_layer_number(); + int end_layer_number = m_end_layer_input_list[i]->get_layer_number(); + result.push_back({ begin_layer_number, end_layer_number, m_drag_canvas_list[i]->get_shape_list_order() }); + } + if (!std::is_sorted(result.begin(), result.end())) { + std::sort(result.begin(), result.end()); + sync_layers_print_seq(1, result); + } + result.swap(m_layer_seq_infos); + }); + Bind(EVT_SET_BED_TYPE_CONFIRM, [this](auto& evt) { + std::vector result; + for (int i = 0; i < m_layer_input_sizer_list.size(); i++) { + int begin_layer_number = m_begin_layer_input_list[i]->get_layer_number(); + int end_layer_number = m_end_layer_input_list[i]->get_layer_number(); + + if (!m_begin_layer_input_list[i]->is_layer_number_valid() || !m_end_layer_input_list[i]->is_layer_number_valid()) { + MessageDialog msg_dlg(nullptr, _L("Please input layer value (>= 2)."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + evt.SetString("Invalid"); + return; + } + + result.push_back({ begin_layer_number, end_layer_number, m_drag_canvas_list[i]->get_shape_list_order() }); + } + result.swap(m_layer_seq_infos); + }); +} + +void OtherLayersSeqPanel::append_layer(const LayerSeqInfo* layer_info) +{ + wxBoxSizer* layer_panel_sizer = static_cast(m_layer_input_panel->GetSizer()); + + wxStaticText* choose_layer_head_txt = new wxStaticText(m_layer_input_panel, wxID_ANY, _L("Layer")); + choose_layer_head_txt->SetFont(Label::Body_14); + + LayerNumberTextInput* begin_layer_input = new LayerNumberTextInput(m_layer_input_panel, -1, wxSize(FromDIP(100), -1), LayerNumberTextInput::Type::Begin, LayerNumberTextInput::ValueType::Custom); + + wxStaticText* choose_layer_to_txt = new wxStaticText(m_layer_input_panel, wxID_ANY, _L("to")); + choose_layer_to_txt->SetFont(Label::Body_14); + + LayerNumberTextInput* end_layer_input = new LayerNumberTextInput(m_layer_input_panel, -1, wxSize(FromDIP(100), -1), LayerNumberTextInput::Type::End, LayerNumberTextInput::ValueType::End); + + begin_layer_input->link(end_layer_input); + if (m_begin_layer_input_list.size() == 0) { + begin_layer_input->set_layer_number(MIN_LAYER_VALUE); + end_layer_input->set_layer_number(MAX_LAYER_VALUE); + } + + const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); + std::vector order(extruder_colours.size()); + for (int i = 0; i < order.size(); i++) { + order[i] = i + 1; + } + auto drag_canvas = new DragCanvas(m_layer_input_panel, extruder_colours, order); + + if (layer_info) { + begin_layer_input->set_layer_number(layer_info->begin_layer_number); + end_layer_input->set_layer_number(layer_info->end_layer_number); + drag_canvas->set_shape_list(extruder_colours, layer_info->print_sequence); + } + + wxBoxSizer* single_layer_input_sizer = new wxBoxSizer(wxHORIZONTAL); + single_layer_input_sizer->Add(choose_layer_head_txt, 0, wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + single_layer_input_sizer->Add(begin_layer_input, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + single_layer_input_sizer->Add(choose_layer_to_txt, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, 0); + single_layer_input_sizer->Add(end_layer_input, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); + single_layer_input_sizer->AddStretchSpacer(); + single_layer_input_sizer->Add(drag_canvas, 0, wxLEFT | wxALIGN_CENTER, FromDIP(5)); + layer_panel_sizer->Add(single_layer_input_sizer, 0, wxEXPAND | wxALIGN_CENTER | wxBOTTOM, FromDIP(10)); + m_layer_input_sizer_list.push_back(single_layer_input_sizer); + m_begin_layer_input_list.push_back(begin_layer_input); + m_end_layer_input_list.push_back(end_layer_input); + m_drag_canvas_list.push_back(drag_canvas); +} + +void OtherLayersSeqPanel::popup_layer() +{ + if (m_layer_input_sizer_list.size() > 1) { + m_layer_input_sizer_list.back()->Clear(true); + m_layer_input_sizer_list.pop_back(); + m_begin_layer_input_list.pop_back(); + m_end_layer_input_list.pop_back(); + m_drag_canvas_list.pop_back(); + } +} + +void OtherLayersSeqPanel::clear_all_layers() +{ + for (auto sizer : m_layer_input_sizer_list) { + sizer->Clear(true); + } + m_layer_input_sizer_list.clear(); + m_begin_layer_input_list.clear(); + m_end_layer_input_list.clear(); + m_drag_canvas_list.clear(); +} + +void OtherLayersSeqPanel::sync_layers_print_seq(int selection, const std::vector& seq) +{ + if (m_other_layer_print_seq_choice != nullptr) { + if (selection == 1) { + clear_all_layers(); + Freeze(); + for (int i = 0; i < seq.size(); i++) { + append_layer(&seq[i]); + } + Thaw(); + } + m_other_layer_print_seq_choice->SetSelection(selection); + + wxCommandEvent event(wxEVT_COMBOBOX); + event.SetInt(selection); + event.SetEventObject(m_other_layer_print_seq_choice); + wxPostEvent(m_other_layer_print_seq_choice, event); + } +} + + +PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title, bool only_layer_seq, const wxPoint& pos, const wxSize& size, long style) :DPIDialog(parent, wxID_ANY, title, pos, size, style) { std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); @@ -13,10 +370,9 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title SetBackgroundColour(*wxWHITE); wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), -1)); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(650), -1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); - m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); wxFlexGridSizer* top_sizer = new wxFlexGridSizer(0, 2, FromDIP(5), 0); top_sizer->AddGrowableCol(0,1); @@ -40,10 +396,10 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title wxStaticText* m_bed_type_txt = new wxStaticText(this, wxID_ANY, _L("Bed type")); m_bed_type_txt->SetFont(Label::Body_14); - top_sizer->Add(m_bed_type_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); - top_sizer->Add(m_bed_type_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT |wxALL, FromDIP(5)); + top_sizer->Add(m_bed_type_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_bed_type_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); - wxBoxSizer* m_sizer_selectbox = new wxBoxSizer(wxHORIZONTAL); + // Print Sequence m_print_seq_choice = new ComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240),-1), 0, NULL, wxCB_READONLY ); m_print_seq_choice->Append(_L("Same as Global Print Sequence")); for (auto i = PrintSequence::ByLayer; i < PrintSequence::ByDefault; i = PrintSequence(int(i) + 1)) { @@ -51,9 +407,21 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title } wxStaticText* m_print_seq_txt = new wxStaticText(this, wxID_ANY, _L("Print sequence")); m_print_seq_txt->SetFont(Label::Body_14); - top_sizer->Add(m_print_seq_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT |wxALL, FromDIP(5)); - top_sizer->Add(m_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT |wxALL, FromDIP(5)); + top_sizer->Add(m_print_seq_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); + // Spiral mode + m_spiral_mode_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240), -1), 0, NULL, wxCB_READONLY); + m_spiral_mode_choice->Append(_L("Same as Global")); + m_spiral_mode_choice->Append(_L("Enable")); + m_spiral_mode_choice->Append(_L("Disable")); + m_spiral_mode_choice->SetSelection(0); + wxStaticText* spiral_mode_txt = new wxStaticText(this, wxID_ANY, _L("Spiral vase")); + spiral_mode_txt->SetFont(Label::Body_14); + top_sizer->Add(spiral_mode_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_spiral_mode_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); + + // First layer filament sequence m_first_layer_print_seq_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(240), -1), 0, NULL, wxCB_READONLY); m_first_layer_print_seq_choice->Append(_L("Auto")); m_first_layer_print_seq_choice->Append(_L("Customize")); @@ -70,22 +438,26 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title }); wxStaticText* first_layer_txt = new wxStaticText(this, wxID_ANY, _L("First layer filament sequence")); first_layer_txt->SetFont(Label::Body_14); - top_sizer->Add(first_layer_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); - top_sizer->Add(m_first_layer_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5)); + top_sizer->Add(first_layer_txt, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxTOP | wxBOTTOM, FromDIP(5)); + top_sizer->Add(m_first_layer_print_seq_choice, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxTOP | wxBOTTOM, FromDIP(5)); const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - std::vector order; - if (order.empty()) { - for (int i = 1; i <= extruder_colours.size(); i++) { - order.push_back(i); - } + std::vector order(extruder_colours.size()); + for (int i = 0; i < order.size(); i++) { + order[i] = i + 1; } m_drag_canvas = new DragCanvas(this, extruder_colours, order); m_drag_canvas->Hide(); - top_sizer->Add(0, 0, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); - top_sizer->Add(m_drag_canvas, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); + top_sizer->Add(0, 0, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT, 0); + top_sizer->Add(m_drag_canvas, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxBOTTOM, FromDIP(10)); + + m_sizer_main->Add(top_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(30)); + + // Other layer filament sequence + m_other_layers_seq_panel = new OtherLayersSeqPanel(this); + m_sizer_main->AddSpacer(FromDIP(5)); + m_sizer_main->Add(m_other_layers_seq_panel, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30)); - m_sizer_main->Add(top_sizer, 0, wxEXPAND | wxALL, FromDIP(30)); auto sizer_button = new wxBoxSizer(wxHORIZONTAL); StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), @@ -102,10 +474,12 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); m_button_ok->SetCornerRadius(FromDIP(12)); - m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + m_button_ok->Bind(wxEVT_BUTTON, [this](auto& e) { wxCommandEvent evt(EVT_SET_BED_TYPE_CONFIRM, GetId()); - e.SetEventObject(this); + static_cast(m_other_layers_seq_panel)->ProcessEvent(evt); GetEventHandler()->ProcessEvent(evt); + if (evt.GetString() == "Invalid") + return; if (this->IsModal()) EndModal(wxID_YES); else @@ -119,7 +493,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); m_button_cancel->SetCornerRadius(FromDIP(12)); - m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + m_button_cancel->Bind(wxEVT_BUTTON, [this](auto& e) { if (this->IsModal()) EndModal(wxID_NO); else @@ -131,7 +505,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); sizer_button->Add(FromDIP(30),0, 0, 0); - m_sizer_main->Add(sizer_button, 0, wxEXPAND, FromDIP(20)); + m_sizer_main->Add(sizer_button, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(20)); SetSizer(m_sizer_main); Layout(); @@ -141,7 +515,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title wxGetApp().UpdateDlgDarkUI(this); - if (only_first_layer_seq) { + if (only_layer_seq) { for (auto item : top_sizer->GetChildren()) { if (item->GetWindow()) item->GetWindow()->Show(false); @@ -149,6 +523,7 @@ PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title first_layer_txt->Show(); m_first_layer_print_seq_choice->Show(); m_drag_canvas->Show(); + m_other_layers_seq_panel->Show(); Layout(); Fit(); } @@ -189,6 +564,21 @@ void PlateSettingsDialog::sync_first_layer_print_seq(int selection, const std::v } } +void PlateSettingsDialog::sync_other_layers_print_seq(int selection, const std::vector& seq) { + if (selection == 1) { + std::vector sequences; + sequences.reserve(seq.size()); + for (int i = 0; i < seq.size(); i++) { + LayerSeqInfo info{ seq[i].first.first, seq[i].first.second, seq[i].second }; + sequences.push_back(info); + } + m_other_layers_seq_panel->sync_layers_print_seq(selection, sequences); + } + else { + m_other_layers_seq_panel->sync_layers_print_seq(selection, {}); + } +} + void PlateSettingsDialog::sync_spiral_mode(bool spiral_mode, bool as_global) { if (m_spiral_mode_choice) { @@ -349,4 +739,6 @@ void PlateNameEditDialog::set_plate_name(const wxString &name) { m_ti_plate_name->GetTextCtrl()->SetInsertionPointEnd(); } -}} // namespace Slic3r::GUI \ No newline at end of file + +} +} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/PlateSettingsDialog.hpp b/src/slic3r/GUI/PlateSettingsDialog.hpp index debad2a7f..00dbbe401 100644 --- a/src/slic3r/GUI/PlateSettingsDialog.hpp +++ b/src/slic3r/GUI/PlateSettingsDialog.hpp @@ -7,10 +7,78 @@ #include "Widgets/RadioBox.hpp" #include "Widgets/ComboBox.hpp" #include "DragCanvas.hpp" +#include "libslic3r/ParameterUtils.hpp" namespace Slic3r { namespace GUI { wxDECLARE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); +wxDECLARE_EVENT(EVT_NEED_RESORT_LAYERS, wxCommandEvent); + +struct LayerSeqInfo { + int begin_layer_number; + int end_layer_number; + std::vector print_sequence; + + bool operator<(const LayerSeqInfo& another) const; +}; + +class LayerNumberTextInput : public ComboBox { +public: + enum class Type { + Begin, + End + }; + enum class ValueType { + Custom, + End + }; + LayerNumberTextInput(wxWindow* parent, int layer_number, wxSize size, Type type, ValueType value_type = ValueType::Custom); + void link(LayerNumberTextInput* layer_input) { + if (m_another_layer_input) return; + m_another_layer_input = layer_input; + layer_input->link(this); } + void set_layer_number(int layer_number); + int get_layer_number(); + Type get_input_type() { return m_type; } + ValueType get_value_type() { return m_value_type; } + bool is_layer_number_valid(); + +protected: + void update_label(); + +private: + LayerNumberTextInput* m_another_layer_input{ nullptr }; + int m_layer_number; + Type m_type; + ValueType m_value_type; +}; + +class OtherLayersSeqPanel : public wxPanel { +public: + OtherLayersSeqPanel(wxWindow* parent); + + void sync_layers_print_seq(int selection, const std::vector& seq); + + int get_layers_print_seq_choice() { return m_other_layer_print_seq_choice->GetSelection(); }; + + std::vector get_layers_print_seq_infos() { return m_layer_seq_infos; } + +protected: + void append_layer(const LayerSeqInfo* layer_info = nullptr); + void popup_layer(); + void clear_all_layers(); + +private: + ScalableBitmap m_bmp_delete; + ScalableBitmap m_bmp_add; + ComboBox* m_other_layer_print_seq_choice{ nullptr }; + wxPanel* m_layer_input_panel{ nullptr }; + std::vector m_layer_input_sizer_list; + std::vector m_begin_layer_input_list; + std::vector m_end_layer_input_list; + std::vector m_drag_canvas_list; + std::vector m_layer_seq_infos; +}; class PlateSettingsDialog : public DPIDialog { @@ -23,7 +91,7 @@ public: PlateSettingsDialog( wxWindow* parent, const wxString& title = wxEmptyString, - bool only_first_layer_seq = false, + bool only_layer_seq = false, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLOSE_BOX | wxCAPTION @@ -33,6 +101,7 @@ public: void sync_bed_type(BedType type); void sync_print_seq(int print_seq = 0); void sync_first_layer_print_seq(int selection, const std::vector& seq = std::vector()); + void sync_other_layers_print_seq(int selection, const std::vector& seq); void sync_spiral_mode(bool spiral_mode, bool as_global); wxString to_bed_type_name(BedType bed_type); wxString to_print_sequence_name(PrintSequence print_seq); @@ -62,8 +131,25 @@ public: return choice; }; + int get_other_layers_print_seq_choice() { + if (m_other_layers_seq_panel) + return m_other_layers_seq_panel->get_layers_print_seq_choice(); + return 0; + }; + std::vector get_first_layer_print_seq(); + std::vector get_other_layers_print_seq_infos() { + const std::vector& layer_seq_infos = m_other_layers_seq_panel->get_layers_print_seq_infos(); + std::vector result; + result.reserve(layer_seq_infos.size()); + for (int i = 0; i < layer_seq_infos.size(); i++) { + LayerPrintSequence item = std::make_pair(std::make_pair(layer_seq_infos[i].begin_layer_number, layer_seq_infos[i].end_layer_number), layer_seq_infos[i].print_sequence); + result.push_back(item); + } + return result; + } + int get_spiral_mode_choice() { int choice = 0; if (m_spiral_mode_choice != nullptr) @@ -76,11 +162,16 @@ public: } protected: - DragCanvas* m_drag_canvas; - ComboBox* m_first_layer_print_seq_choice { nullptr }; - ComboBox* m_print_seq_choice { nullptr }; + void add_layers(); + void delete_layers(); + +protected: ComboBox* m_bed_type_choice { nullptr }; + ComboBox* m_print_seq_choice { nullptr }; + ComboBox* m_first_layer_print_seq_choice { nullptr }; ComboBox* m_spiral_mode_choice { nullptr }; + DragCanvas* m_drag_canvas; + OtherLayersSeqPanel* m_other_layers_seq_panel; Button* m_button_ok; Button* m_button_cancel; TextInput *m_ti_plate_name; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 6fd95de59..384c6f0b7 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -491,6 +491,45 @@ void Sidebar::priv::hide_rich_tip(wxButton* btn) } #endif +std::vector get_min_flush_volumes() +{ + std::vectorextra_flush_volumes; + const auto& full_config = wxGetApp().preset_bundle->full_config(); + auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; + + ConfigOption* nozzle_volume_opt = printer_config.option("nozzle_volume"); + int nozzle_volume_val = nozzle_volume_opt ? (int)nozzle_volume_opt->getFloat() : 0; + + int machine_enabled_level = printer_config.option("enable_long_retraction_when_cut")->value; + bool machine_activated = printer_config.option("long_retractions_when_cut")->values[0] == 1; + + auto filament_retraction_distance_when_cut = full_config.option("filament_retraction_distances_when_cut"); + auto printer_retraction_distance_when_cut = full_config.option("retraction_distances_when_cut"); + auto filament_long_retractions_when_cut = full_config.option("filament_long_retractions_when_cut"); + + size_t filament_size = filament_retraction_distance_when_cut->values.size(); + 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->values[0] : 0; + + char filament_activated = filament_long_retractions_when_cut->values[idx]; + double filament_retract_length = filament_retraction_distance_when_cut->values[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->values[idx]; + else + retract_length = printer_retraction_distance_when_cut->values[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 +843,14 @@ 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& extra_flush_volumes = get_min_flush_volumes(); + 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(); @@ -1864,12 +1899,12 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) 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(); + 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 +1931,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 +1959,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; @@ -2592,7 +2626,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", @@ -2855,6 +2890,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(); }); @@ -3349,53 +3394,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 +3500,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; @@ -3881,9 +3944,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ 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; @@ -3910,7 +3975,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ 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; @@ -4056,7 +4121,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ return empty_result; } - model_object->ensure_on_bed(is_project_file); + if (!model_object->instances.empty()) + model_object->ensure_on_bed(is_project_file); } tolal_model_count += model_idx; @@ -4079,10 +4145,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) { @@ -4094,7 +4161,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) { @@ -4212,9 +4279,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(); @@ -4308,6 +4382,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 ///////////////////////////////// @@ -4352,9 +4427,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 @@ -4387,7 +4472,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")) { @@ -4539,7 +4631,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() @@ -4964,6 +5060,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,17 +6020,18 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) }; //BBS: add the 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()) { + this->sidebar->collapse(true); + 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) @@ -6001,6 +6104,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()) { @@ -6079,6 +6194,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; @@ -6259,6 +6388,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__ @@ -6267,6 +6402,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(); @@ -7006,13 +7145,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) @@ -10025,7 +10165,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; @@ -10341,6 +10481,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(); } @@ -10862,12 +11006,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 @@ -10883,8 +11039,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()) { @@ -12615,6 +12770,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) { @@ -12935,7 +13122,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()); @@ -12952,6 +13139,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) { @@ -12970,6 +13164,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)); @@ -13347,13 +13546,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 681db5670..acc896b07 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; @@ -342,6 +343,7 @@ public: //BBS: add no_slice logic void select_view_3D(const std::string& name, bool no_slice = true); + void reload_paint_after_background_process_apply(); bool is_preview_shown() const; bool is_preview_loaded() const; bool is_view3D_shown() const; @@ -536,6 +538,8 @@ public: void split_object(); void split_volume(); void optimize_rotation(); + // find all empty cells on the plate and won't overlap with exclusion areas + static std::vector get_empty_cells(const Vec2f step); //BBS: void fill_color(int extruder_id); @@ -823,6 +827,7 @@ private: bool m_was_scheduled; }; +std::vector get_min_flush_volumes(); } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index d5dd87da1..525686e77 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -866,6 +866,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(...) {} @@ -1019,13 +1021,19 @@ wxWindow* PreferencesDialog::create_general_page() 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); + std::vector CameraNavStyle = {_L("Default"), _L("Touchpad")}; + auto item_camera_navigation_style = create_item_combobox(_L("Camera style"), page, _L("Select camera navigation style.\nDefault: LMB+move for rotation, RMB/MMB+move for panning.\nTouchpad: Alt+move for rotation, Shift+move for panning."), "camera_navigation_style", CameraNavStyle); + auto item_mouse_zoom_settings = create_item_checkbox(_L("Zoom to mouse position"), page, _L("Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center."), 50, "zoom_to_mouse"); auto item_use_free_camera_settings = create_item_checkbox(_L("Use free camera"), page, _L("If enabled, use free camera. If not enabled, use constrained camera."), 50, "use_free_camera"); + auto reverse_mouse_zoom = create_item_checkbox(_L("Reverse mouse zoom"), page, _L("If enabled, reverses the direction of zoom with mouse wheel."), 50, "reverse_mouse_wheel_zoom"); auto item_show_splash_screen = create_item_checkbox(_L("Show splash screen"), page, _L("Show the splash screen during startup."), 50, "show_splash_screen"); 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 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"); @@ -1083,14 +1091,18 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_region, 0, wxTOP, FromDIP(3)); 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_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(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_system_sync, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_remember_printer_config, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_save_presets, 0, wxTOP, FromDIP(3)); sizer_page->Add(title_network, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_check_stable_version_only, 0, wxTOP, FromDIP(3)); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index d037a6239..4b53c0e35 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -625,6 +625,37 @@ bool PresetComboBox::selection_is_changed_according_to_physical_printers() return true; } +void PlaterPresetComboBox::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 (!wxGetApp().app_config->has_section("custom_color_list")) { + std::map data; + set_colors(data,colors); + wxGetApp().app_config->set_section("custom_color_list", data); + } else { + auto data = wxGetApp().app_config->get_section("custom_color_list"); + auto data_modify = const_cast *>(&data); + set_colors(*data_modify, colors); + wxGetApp().app_config->set_section("custom_color_list", *data_modify); + } + } +} + +std::vector PlaterPresetComboBox::get_custom_color_from_config() { + std::vector colors; + if (wxGetApp().app_config->has_section("custom_color_list")) { + auto data = wxGetApp().app_config->get_section("custom_color_list"); + for (auto iter : data) { + colors.push_back(iter.second); + } + } + return colors; +} // --------------------------------- // *** PlaterPresetComboBox *** // --------------------------------- @@ -673,13 +704,35 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset m_clrData.SetColour(clr_picker->GetBackgroundColour()); m_clrData.SetChooseFull(true); m_clrData.SetChooseAlpha(false); - + auto color_to_string = [](const wxColour& color) { + std::string str = std::to_string(color.Red()) + "," + std::to_string(color.Green()) + "," + std::to_string(color.Blue()) + "," + std::to_string(color.Alpha()); + return str; + }; + auto string_to_wxColor = [](const std::string& str) { + wxColour color; + std::vector result; + boost::split(result, str, boost::is_any_of(",")); + if (result.size() == 4) { + color = wxColour(std::stoi(result[0]), std::stoi(result[1]), std::stoi(result[2]), std::stoi(result[3])); + } + return color; + }; + std::vector colors=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(); - + const int custom_color_count = 15; + 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)); + } + 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()); diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp index 954c06862..643135464 100644 --- a/src/slic3r/GUI/PresetComboBoxes.hpp +++ b/src/slic3r/GUI/PresetComboBoxes.hpp @@ -164,6 +164,8 @@ public: PlaterPresetComboBox(wxWindow *parent, Preset::Type preset_type); ~PlaterPresetComboBox(); + void save_custom_color_to_config(const std::vector &colors); + std::vector get_custom_color_from_config(); ScalableButton* edit_btn { nullptr }; // BBS diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp index 67d8f4fd5..42667173c 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.cpp +++ b/src/slic3r/GUI/PrintOptionsDialog.cpp @@ -385,4 +385,185 @@ 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 = 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 21865bda3..ce67b7672 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: diff --git a/src/slic3r/GUI/Printer/BambuTunnel.h b/src/slic3r/GUI/Printer/BambuTunnel.h index bd00bdce9..f578fa0ca 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 886421c65..2da83ed62 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -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 studio/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; } @@ -1223,7 +1228,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul 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,6 +1263,8 @@ 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="})); l.unlock(); @@ -1271,7 +1278,11 @@ 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; @@ -1352,6 +1363,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 539f9c08e..85d1d276e 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -30,6 +30,7 @@ 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_CHECKBOX_CHANGE, wxCommandEvent); wxDEFINE_EVENT(EVT_ENTER_IP_ADDRESS, wxCommandEvent); wxDEFINE_EVENT(EVT_CLOSE_IPADDRESS_DLG, wxCommandEvent); @@ -649,6 +650,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 +689,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 +793,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(); + } @@ -965,16 +995,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 +1095,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(61, 203, 115), StateColor::Pressed), std::pair(wxColour(61, 203, 115), 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 98d42b964..80727df55 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -46,6 +46,7 @@ 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_UPDATE_NOZZLE, wxCommandEvent); class ReleaseNoteDialog : public DPIDialog @@ -116,8 +117,9 @@ public: CONFIRM_AND_CANCEL = 1, CONFIRM_AND_DONE = 2, CONFIRM_AND_RETRY = 3, - DONE_AND_RETRY = 4, - MAX_STYLE_NUM = 5 + CONFIRM_AND_RESUME = 4, + DONE_AND_RETRY = 5, + MAX_STYLE_NUM = 6 }; SecondaryCheckDialog( wxWindow* parent, @@ -150,12 +152,25 @@ public: Button* m_button_retry { nullptr }; Button* m_button_cancel { nullptr }; Button* m_button_fn { nullptr }; + Button* m_button_resume { nullptr }; wxCheckBox* m_show_again_checkbox; ButtonStyle m_button_style; bool not_show_again = false; std::string show_again_config_text = ""; }; + +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 +190,17 @@ public: bool not_show_again_check = false ); void update_text(wxString text); + void update_text(std::vector texts); void on_show(); void on_hide(); void update_btn_label(wxString ok_btn_text, wxString cancel_btn_text); void rescale(); void on_dpi_changed(const wxRect& suggested_rect); - void show_update_nozzle_button(); + void show_update_nozzle_button(bool show = false); + void hide_button_ok(); + void edit_cancel_button_txt(wxString txt); + void disable_button_ok(); + void enable_button_ok(); wxString format_text(wxString str, int warp); ~ConfirmBeforeSendDialog(); diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 6184086dc..5579fb7bc 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 8d20a14e1..31b83b8cf 100644 --- a/src/slic3r/GUI/Search.hpp +++ b/src/slic3r/GUI/Search.hpp @@ -166,7 +166,7 @@ public: SearchObjectDialog* m_search_object_dialog{ nullptr }; GUI::ObjectDataViewModelNode* m_item{ nullptr }; - SearchItem(wxWindow *parent, wxString text, int index, SearchDialog *sdialog = nullptr, SearchObjectDialog* search_dialog = nullptr); + SearchItem(wxWindow *parent, wxString text, int index, SearchDialog *sdialog = nullptr, SearchObjectDialog* search_dialog = nullptr, wxString tooltip = ""); ~SearchItem(){}; wxSize DrawTextString(wxDC &dc, const wxString &text, const wxPoint &pt, bool bold); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 9c9bfb259..62f602c27 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1800,8 +1800,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 +2144,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 +2250,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 +2420,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 +2428,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 +2462,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 +2478,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 +2549,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 +2559,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 +2585,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 +2604,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_dlg.Bind(EVT_UPDATE_NOZZLE, [this, obj_, tag_nozzle_type, nozzle_diameter, &confirm_dlg](wxCommandEvent& e) { + // if (obj_ && !tag_nozzle_type.empty() && !nozzle_diameter.empty()) { + // try + // { + // float diameter = std::stof(nozzle_diameter); + // diameter = round(diameter * 10) / 10; + // obj_->command_set_printer_nozzle(tag_nozzle_type, diameter); + // } + // catch (...) {} + // } + // }); - confirm_text.push_back(_L("Please click the confirm button if you still want to proceed with printing.") + "\n"); + wxString info_msg = wxEmptyString; for (auto i = 0; i < confirm_text.size(); i++) { if (i == 0) { - info_msg += confirm_text[i]; + //info_msg += confirm_text[i]; } else if (i == confirm_text.size() - 1) { - info_msg += confirm_text[i]; + //info_msg += confirm_text[i]; } else { - info_msg += wxString::Format("%d. %s\n",i, confirm_text[i]); + confirm_text[i].text = wxString::Format("%d. %s",i, confirm_text[i].text); } } - confirm_dlg.update_text(info_msg); + confirm_dlg.update_text(confirm_text); confirm_dlg.on_show(); } else { @@ -2882,15 +2931,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 +2964,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 +3223,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 +3348,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 +3477,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 +3835,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 +4128,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 +4238,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 +4552,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) { diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 160c21592..d9ea4cb8f 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: @@ -288,7 +316,7 @@ private: int m_print_plate_idx{0}; int m_print_plate_total{0}; int m_timeout_count{0}; - int m_print_error_code; + int m_print_error_code{0}; bool m_is_in_sending_mode{ false }; bool m_ams_mapping_res{ false }; bool m_ams_mapping_valid{ false }; diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 01f1c0650..4b06c543b 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 c506a1a6f..10954488d 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -212,6 +212,7 @@ public: EMode get_mode() const { return m_mode; } void set_mode(EMode mode) { m_mode = mode; } + int query_real_volume_idx_from_other_view(unsigned int object_idx, unsigned int instance_idx, unsigned int model_volume_idx); void add(unsigned int volume_idx, bool as_single_selection = true, bool check_for_already_contained = false); void remove(unsigned int volume_idx); diff --git a/src/slic3r/GUI/SendToPrinter.hpp b/src/slic3r/GUI/SendToPrinter.hpp index b084a382f..9f477be99 100644 --- a/src/slic3r/GUI/SendToPrinter.hpp +++ b/src/slic3r/GUI/SendToPrinter.hpp @@ -50,7 +50,7 @@ private: int m_print_plate_idx; int m_current_filament_id; - int m_print_error_code; + int m_print_error_code = 0; int timeout_count = 0; bool m_is_in_sending_mode{ false }; bool m_is_rename_mode{ false }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 53394895f..6c55a27b4 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -85,7 +85,6 @@ static std::vector message_containing_retry{ "07FF 8012", "07FF 8013", "12FF 8007" - }; static std::vector message_containing_done{ @@ -93,6 +92,10 @@ static std::vector message_containing_done{ "12FF 8007" }; +static std::vector message_containing_resume{ + "0300 8013" +}; + static wxImage fail_image; @@ -492,7 +495,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 +1096,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 +1120,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 +1778,12 @@ 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); 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 +1816,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 +1931,10 @@ 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(); + } + } } @@ -1925,7 +1943,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 +1974,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 +2042,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 +2099,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); @@ -2144,6 +2165,7 @@ void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::stri 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 == nullptr) { @@ -2158,10 +2180,15 @@ void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::stri } else if (it_retry != message_containing_retry.end()) { m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RETRY, this); - }else { + } + else if (it_resume!= message_containing_resume.end()) { + m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RESUME, this); + } + else { m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); } m_print_error_dlg->update_text(msg); + m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { if (obj) { obj->command_clean_print_error(obj->subtask_id_, obj->print_error); @@ -2500,7 +2527,7 @@ 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); @@ -2508,7 +2535,7 @@ void StatusPanel::update_ams(MachineObject *obj) } 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 +2781,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 +2835,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 +2920,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 +2973,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 +3176,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 +3211,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 +3235,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 +3388,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 +3404,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 +3423,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); } } @@ -3379,7 +3533,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(); @@ -4016,7 +4170,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 +4186,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 +4255,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 +4278,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 +4409,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 399566373..d82c6371b 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 @@ public: void show_error_msg(wxString msg); void reset_printing_value(); void msw_rescale(); - + public: void enable_pause_resume_button(bool enable, std::string type); void enable_abort_button(bool enable); @@ -390,6 +392,7 @@ protected: wxStaticText* m_staticText_calibration_caption; wxStaticText* m_staticText_calibration_caption_top; wxStaticText* m_calibration_text; + Button* m_parts_btn; Button* m_options_btn; Button* m_calibration_btn; StepIndicator* m_calibration_flow; @@ -463,6 +466,7 @@ protected: std::shared_ptr m_camera_popup; std::set rated_model_id; AMSSetting *m_ams_setting_dlg{nullptr}; + PrinterPartsDialog* print_parts_dlg { nullptr }; PrintOptionsDialog* print_options_dlg { nullptr }; CalibrationDialog* calibration_dlg {nullptr}; AMSMaterialsSetting *m_filament_setting_dlg{nullptr}; @@ -504,6 +508,11 @@ protected: std::vector