diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index ea72150189..db95d67040 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -97,12 +97,15 @@ jobs: ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then ver="PR-${{ github.event.number }}" + git_commit_hash="${{ github.event.pull_request.head.sha }}" else ver=V$ver_pure + git_commit_hash="" fi echo "ver=$ver" >> $GITHUB_ENV echo "ver_pure=$ver_pure" >> $GITHUB_ENV echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV + echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV shell: bash - uses: flathub-infra/flatpak-github-actions/flatpak-builder@master with: diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index ac0a1bd96b..29984fab2e 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -22,6 +22,7 @@ jobs: date: ver: ver_pure: + ORCA_UPDATER_SIG_KEY: ${{ secrets.ORCA_UPDATER_SIG_KEY }} steps: - name: Checkout @@ -46,12 +47,15 @@ jobs: ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then ver="PR-${{ github.event.number }}" + git_commit_hash="${{ github.event.pull_request.head.sha }}" else ver=V$ver_pure + git_commit_hash="" fi echo "ver=$ver" >> $GITHUB_ENV echo "ver_pure=$ver_pure" >> $GITHUB_ENV echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV + echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV shell: bash - name: Get the version and date on Windows @@ -64,16 +68,19 @@ jobs: if ($eventName -eq 'pull_request') { $ver = "PR" + $prNumber + $git_commit_hash = "${{ github.event.pull_request.head.sha }}" } else { $versionContent = Get-Content version.inc -Raw if ($versionContent -match 'set\(SoftFever_VERSION "(.*?)"\)') { $ver = $matches[1] } $ver = "V$ver" + $git_commit_hash = "" } echo "ver=$ver" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date=$date" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + echo "git_commit_hash=$git_commit_hash" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date: ${{ env.date }} version: ${{ env.ver }}" shell: pwsh @@ -124,16 +131,20 @@ jobs: codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app fi - # Create main OrcaSlicer DMG - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer/Applications - hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg + # Create main OrcaSlicer DMG without the profile validator helper + mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/* + cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer.app ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/ + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/Applications + hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_Mac_universal_${{ env.ver }}.dmg # Create separate OrcaSlicer_profile_validator DMG if the app exists if [ -f "${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app/Contents/MacOS/OrcaSlicer_profile_validator" ]; then mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/* cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/ - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg fi @@ -153,14 +164,18 @@ jobs: if: github.ref != 'refs/heads/main' && inputs.os == 'macos-14' working-directory: ${{ github.workspace }} run: | - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer/Applications - hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg + mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/* + cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer.app ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/ + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/Applications + hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg # Create separate OrcaSlicer_profile_validator DMG if the app exists if [ -f "${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app/Contents/MacOS/OrcaSlicer_profile_validator" ]; then mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/* cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/ - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg fi @@ -317,7 +332,7 @@ jobs: - name: Install dependencies from build_linux.sh if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' shell: bash - run: sudo ./build_linux.sh -ur + run: sudo env "ORCA_UPDATER_SIG_KEY=$ORCA_UPDATER_SIG_KEY" ./build_linux.sh -ur - name: Fix permissions if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' diff --git a/.github/workflows/orca_bot.yml b/.github/workflows/orca_bot.yml index 05598df749..81664be04e 100644 --- a/.github/workflows/orca_bot.yml +++ b/.github/workflows/orca_bot.yml @@ -17,7 +17,7 @@ jobs: pull-requests: write contents: write # only for delete-branch option steps: - - uses: actions/stale@v9 + - uses: actions/stale@v10 with: # PAT for GitHub API authentication repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/update-translation.yml b/.github/workflows/update-translation.yml index 86c4b86c40..aeae4a37b2 100644 --- a/.github/workflows/update-translation.yml +++ b/.github/workflows/update-translation.yml @@ -13,7 +13,7 @@ jobs: uses: actions/checkout@v5 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.12' diff --git a/.github/workflows/validate-documentation.yml b/.github/workflows/validate-documentation.yml index bd4c1c1f72..8fc7d6926b 100644 --- a/.github/workflows/validate-documentation.yml +++ b/.github/workflows/validate-documentation.yml @@ -23,7 +23,7 @@ jobs: - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v46 + uses: tj-actions/changed-files@v47 with: files: | src/slic3r/GUI/Tab.cpp @@ -318,7 +318,7 @@ jobs: - name: Comment on PR if: failure() && github.event_name == 'pull_request' - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: script: | const validationErrors = process.env.VALIDATION_ERRORS || ''; diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..5446ab270e --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,23 @@ +# Repository Guidelines + +## Project Structure & Module Organization +OrcaSlicer’s C++17 sources live in `src/`, split by feature modules and platform adapters. User assets, icons, and printer presets are in `resources/`; translations stay in `localization/`. Tests sit in `tests/`, grouped by domain (`libslic3r/`, `sla_print/`, etc.) with fixtures under `tests/data/`. CMake helpers reside in `cmake/`, and longer references in `doc/` and `SoftFever_doc/`. Automation scripts belong in `scripts/` and `tools/`. Treat everything in `deps/` and `deps_src/` as vendored snapshots—do not modify without mirroring upstream tags. + +## Build, Test, and Development Commands +Use out-of-source builds: +- `cmake -S . -B build -DCMAKE_BUILD_TYPE=Release` configures dependencies and generates build files. +- `cmake --build build --target OrcaSlicer --config Release` compiles the app; add `--parallel` to speed up. +- `cmake --build build --target tests` then `ctest --test-dir build --output-on-failure` runs automated suites. +Platform helpers such as `build_linux.sh`, `build_release_macos.sh`, and `build_release_vs2022.bat` wrap the same flow with toolchain flags. Use `build_release_macos.sh -sx` when reproducing macOS build issues, and `scripts/DockerBuild.sh` for reproducible container builds. + +## Coding Style & Naming Conventions +`.clang-format` enforces 4-space indents, a 140-column limit, aligned initializers, and brace wrapping for classes and functions. Run `clang-format -i ` before committing; the CMake `clang-format` target is available when LLVM tools are on your PATH. Prefer `CamelCase` for classes, `snake_case` for functions and locals, and `SCREAMING_CASE` for constants, matching conventions in `src/`. Keep headers self-contained and align include order with the IWYU pragmas. + +## Testing Guidelines +Unit tests rely on Catch2 (`tests/catch2/`). Name specs after the component under test—for example `tests/libslic3r/TestPlanarHole.cpp`—and tag long-running cases so `ctest -L fast` remains useful. Cover new algorithms with deterministic fixtures or sample G-code stored in `tests/data/`. Document manual printer validation or regression slicer checks in your PR when automated coverage is insufficient. + +## Commit & Pull Request Guidelines +The history favors concise, sentence-style subject lines with optional issue references, e.g., `Fix grid lines origin for multiple plates (#10724)`. Squash fixups locally before opening a PR. Complete `.github/pull_request_template.md`, include reproduction steps or screenshots for UI changes, and mention impacted presets or translations. Link issues via `Closes #NNNN` when applicable, and call out dependency bumps or profile migrations for maintainer review. + +## Security & Configuration Tips +Follow `SECURITY.md` for vulnerability reporting. Keep API tokens and printer credentials out of tracked configs; use `sandboxes/` for experimental settings. When touching third-party code in `deps_src/`, record the upstream commit or release in your PR description and run the relevant platform build script to confirm integration. diff --git a/CMakeLists.txt b/CMakeLists.txt index f58a5876ed..6bd575188d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,14 +69,27 @@ endif() find_package(Git) if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - # Check current Git commit hash - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --format=%h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + if(DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") + message(STATUS "Specified git commit hash: $ENV{git_commit_hash}") + + # Convert the given hash to short hash + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short "$ENV{git_commit_hash}" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + else() + # Check current Git commit hash + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + endif() endif() if(DEFINED ENV{SLIC3R_STATIC}) diff --git a/build_linux.sh b/build_linux.sh index 5be72253fb..a696177938 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -225,6 +225,9 @@ if [[ -n "${BUILD_ORCA}" ]] ; then if [[ -n "${BUILD_TESTS}" ]] ; then BUILD_ARGS+=(-DBUILD_TESTS=ON) fi + if [[ -n "${ORCA_UPDATER_SIG_KEY}" ]] ; then + BUILD_ARGS+=(-DORCA_UPDATER_SIG_KEY="${ORCA_UPDATER_SIG_KEY}") + fi echo "Configuring OrcaSlicer..." set -x diff --git a/build_release.bat b/build_release.bat index 05d38a52bc..6317e277c9 100644 --- a/build_release.bat +++ b/build_release.bat @@ -24,6 +24,8 @@ cd deps mkdir %build_dir% cd %build_dir% set DEPS=%CD%/OrcaSlicer_dep +set "SIG_FLAG=" +if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" if "%1"=="slicer" ( GOTO :slicer ) @@ -42,7 +44,7 @@ mkdir %build_dir% cd %build_dir% echo cmake .. -G "Visual Studio 16 2019" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -cmake .. -G "Visual Studio 16 2019" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0" +cmake .. -G "Visual Studio 16 2019" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 %SIG_FLAG% -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0" cmake --build . --config %build_type% --target ALL_BUILD -- -m cd .. call scripts/run_gettext.bat diff --git a/build_release_macos.sh b/build_release_macos.sh index 4ef49bbc6e..e336da09c7 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -174,6 +174,7 @@ function build_slicer() { -G "${SLICER_CMAKE_GENERATOR}" \ -DBBL_RELEASE_TO_PUBLIC=1 \ -DORCA_TOOLS=ON \ + ${ORCA_UPDATER_SIG_KEY:+-DORCA_UPDATER_SIG_KEY="$ORCA_UPDATER_SIG_KEY"} \ -DCMAKE_PREFIX_PATH="$DEPS/usr/local" \ -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" \ -DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \ diff --git a/build_release_vs2022.bat b/build_release_vs2022.bat index c7a225a684..b9c377488f 100644 --- a/build_release_vs2022.bat +++ b/build_release_vs2022.bat @@ -38,6 +38,8 @@ cd deps mkdir %build_dir% cd %build_dir% set DEPS=%CD%/OrcaSlicer_dep +set "SIG_FLAG=" +if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" if "%1"=="slicer" ( GOTO :slicer @@ -58,7 +60,7 @@ mkdir %build_dir% cd %build_dir% echo on -cmake .. -G "Visual Studio 17 2022" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DORCA_TOOLS=ON -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="%WindowsSdkDir%Include\%WindowsSDKVersion%\" +cmake .. -G "Visual Studio 17 2022" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="%WindowsSdkDir%Include\%WindowsSDKVersion%\" cmake --build . --config %build_type% --target ALL_BUILD -- -m @echo off cd .. diff --git a/doc/print_settings/others/others_settings_special_mode.md b/doc/print_settings/others/others_settings_special_mode.md index 7945cd819a..753fe4415c 100644 --- a/doc/print_settings/others/others_settings_special_mode.md +++ b/doc/print_settings/others/others_settings_special_mode.md @@ -68,6 +68,9 @@ This creates a smooth, vase-like appearance. When enabled, Smooth Spiral smooths out X and Y moves as well, resulting in no visible seams even on non-vertical walls. This produces the smoothest possible spiral print. +> [!NOTE] +> If you are using absolute e distances, the smoothing may not work as expected. + #### Max XY Smoothing Maximum distance to move points in XY to achieve a smooth spiral. If expressed as a percentage, it is calculated relative to the nozzle diameter. diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 4c92f92054..b618d4ecd6 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: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -5846,6 +5846,17 @@ msgstr "" msgid "Load 3mf" msgstr "" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, possible-c-format, possible-boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8224,10 +8235,10 @@ msgstr "" msgid "Global shortcuts" msgstr "" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 16835a17bd..14f211cea8 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: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -6291,6 +6291,17 @@ msgstr "" msgid "Load 3mf" msgstr "Carregar 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8987,12 +8998,12 @@ msgstr "Mostrar la llista de dreceres de teclat" msgid "Global shortcuts" msgstr "Dreceres Globals" -msgid "Rotate View" -msgstr "Rotar la vista" - msgid "Pan View" msgstr "Vista Panoràmica" +msgid "Rotate View" +msgstr "Rotar la vista" + msgid "Zoom View" msgstr "Vista amb Zoom" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 9e15bf82a9..c60c571d67 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: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2024-11-03 20:59+0100\n" "Last-Translator: René Mošner \n" "Language-Team: \n" @@ -6170,6 +6170,17 @@ msgstr "" msgid "Load 3mf" msgstr "Načíst 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8733,12 +8744,12 @@ msgstr "Zobrazit přehled klávesových zkratek" msgid "Global shortcuts" msgstr "Globální zkratky" -msgid "Rotate View" -msgstr "Otočit pohled" - msgid "Pan View" msgstr "Zobrazení panorama" +msgid "Rotate View" +msgstr "Otočit pohled" + msgid "Zoom View" msgstr "Zvětšit zobrazení" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 87a8a947a1..37cc4b4e07 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -4296,8 +4296,8 @@ msgid "" "Invalid pattern. Use N, N#K, or a comma-separated list with optional #K per " "entry. Examples: 5, 5#2, 1,7,9, 5,9#2,18." msgstr "" -"Ungültiges Muster. Verwenden Sie N, N#K oder eine durch Kommas getrennte Liste " -"mit optionalem #K pro Eintrag. Beispiele: 5, 5#2, 1,7,9, 5,9#2,18." +"Ungültiges Muster. Verwenden Sie N, N#K oder eine durch Kommas getrennte " +"Liste mit optionalem #K pro Eintrag. Beispiele: 5, 5#2, 1,7,9, 5,9#2,18." #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" @@ -6361,6 +6361,23 @@ msgstr "Der 3mf stammt nicht vom OrcaSlicer, lade nur die Geometriedaten." msgid "Load 3mf" msgstr "Lade 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" +"Dieses Projekt wurde mit einem OrcaSlicer 2.3.1-alpha erstellt und verwendet " +"Vorlageneinstellungen für die Infill-Rotation, die möglicherweise nicht " +"richtig mit Ihrem aktuellen Infill-Muster funktionieren. Dies könnte zu " +"schwacher Unterstützung oder Druckqualitätsproblemen führen." + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" +"Möchten Sie, dass OrcaSlicer dies automatisch behebt, indem die " +"Vorlageneinstellungen für die Rotation gelöscht werden?" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -7212,7 +7229,9 @@ msgid "Maximum count of recent files" msgstr "Maximale Anzahl der zuletzt verwendeten Dateien" msgid "Add model files (stl/step) to recent file list." -msgstr "Modell-Dateien (stl/step) zur Liste der zuletzt verwendeten Dateien hinzufügen." +msgstr "" +"Modell-Dateien (stl/step) zur Liste der zuletzt verwendeten Dateien " +"hinzufügen." msgid "Clear my choice on the unsaved projects." msgstr "Meine Auswahl für nicht gespeicherte Projekte löschen." @@ -9110,12 +9129,12 @@ msgstr "Liste der Tastaturkürzel anzeigen" msgid "Global shortcuts" msgstr "Globale Tastaturkürzel" -msgid "Rotate View" -msgstr "Drehen der Ansicht" - msgid "Pan View" msgstr "Pan-Ansicht" +msgid "Rotate View" +msgstr "Drehen der Ansicht" + msgid "Zoom View" msgstr "Ansicht zoomen" @@ -12355,11 +12374,11 @@ msgid "" "'5#' equals '5#1'), or a comma-separated list (e.g. 1,7,9) to insert at " "explicit layers. Layers are 1-based." msgstr "" -"Fügt an bestimmten Schichten massive Füllung ein. Verwenden Sie N, um jede " -"N-te Schicht einzufügen, N#K, um K aufeinanderfolgende massive Schichten alle N " -"Schichten einzufügen (K ist optional, z.B. '5#' entspricht '5#1'), oder eine " -"kommagetrennte Liste (z.B. 1,7,9), um sie in expliziten Schichten einzufügen. " -"Schichten sind 1-basiert." +"Fügt an bestimmten Schichten massive Füllung ein. Verwenden Sie N, um jede N-" +"te Schicht einzufügen, N#K, um K aufeinanderfolgende massive Schichten alle " +"N Schichten einzufügen (K ist optional, z.B. '5#' entspricht '5#1'), oder " +"eine kommagetrennte Liste (z.B. 1,7,9), um sie in expliziten Schichten " +"einzufügen. Schichten sind 1-basiert." msgid "Fill Multiline" msgstr "Mehrzeilige Füllung" @@ -13229,12 +13248,12 @@ msgid "" msgstr "" "Drehen Sie die Richtung der spärlichen Füllung pro Schicht mit einer Vorlage " "von Winkeln. Geben Sie durch Kommas getrennte Grad ein (z.B. '0,30,60,90'). " -"Winkel werden schichtweise in der Reihenfolge angewendet und wiederholt, wenn " -"die Liste endet. Erweiterte Syntax wird unterstützt: '+5' dreht +5° jede " -"Schicht; '+5#5' dreht +5° alle 5 Schichten. Siehe das Wiki für Details. Wenn eine " -"Vorlage festgelegt ist, wird die Standardfüllrichtungseinstellung ignoriert. " -"Beachten Sie: Einige Füllmuster (z.B. Gyroid) steuern die Rotation selbst; " -"verwenden Sie sie mit Vorsicht." +"Winkel werden schichtweise in der Reihenfolge angewendet und wiederholt, " +"wenn die Liste endet. Erweiterte Syntax wird unterstützt: '+5' dreht +5° " +"jede Schicht; '+5#5' dreht +5° alle 5 Schichten. Siehe das Wiki für Details. " +"Wenn eine Vorlage festgelegt ist, wird die Standardfüllrichtungseinstellung " +"ignoriert. Beachten Sie: Einige Füllmuster (z.B. Gyroid) steuern die " +"Rotation selbst; verwenden Sie sie mit Vorsicht." msgid "°" msgstr "°" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 0fa63ef7eb..e08e0a15b3 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-05-18 09:32-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -5938,6 +5938,17 @@ msgstr "The 3mf is not supported by OrcaSlicer, loading geometry data only." msgid "Load 3mf" msgstr "" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8389,10 +8400,10 @@ msgstr "" msgid "Global shortcuts" msgstr "" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index e588073929..eee318dcd4 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -6309,6 +6309,17 @@ msgstr "El 3mf no es de Orca Slicer, cargando sólo datos de geometría." msgid "Load 3mf" msgstr "Cargar 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9004,12 +9015,12 @@ msgstr "Muestra lista de atajos de teclado" msgid "Global shortcuts" msgstr "Atajos globales" -msgid "Rotate View" -msgstr "Rotar Vista" - msgid "Pan View" msgstr "Desplazar vista" +msgid "Rotate View" +msgstr "Rotar Vista" + msgid "Zoom View" msgstr "Hacer Zoom" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index c612f696b3..644babb0e7 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: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -6334,6 +6334,17 @@ msgstr "" msgid "Load 3mf" msgstr "Charger 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9100,12 +9111,12 @@ msgstr "Afficher la liste des raccourcis clavier" msgid "Global shortcuts" msgstr "Raccourcis globaux" -msgid "Rotate View" -msgstr "Rotation de la vue" - msgid "Pan View" msgstr "Déplacement de vue" +msgid "Rotate View" +msgstr "Rotation de la vue" + msgid "Zoom View" msgstr "Vue agrandie" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index fb9631f35b..f0fb387e07 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6082,6 +6082,17 @@ msgstr "" msgid "Load 3mf" msgstr "3mf betöltése" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8629,12 +8640,12 @@ msgstr "Gyorsgombok listájának megjelenítése" msgid "Global shortcuts" msgstr "Globális gyorsbillentyűk" -msgid "Rotate View" -msgstr "Nézet elforgatása" - msgid "Pan View" msgstr "Pásztázó nézet" +msgid "Rotate View" +msgstr "Nézet elforgatása" + msgid "Zoom View" msgstr "Nagyítás nézet" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 6cd23ecd2b..6f0b1aea45 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -6312,6 +6312,17 @@ msgstr "" msgid "Load 3mf" msgstr "Carica 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9030,12 +9041,12 @@ msgstr "Mostra elenco scorciatoie da tastiera" msgid "Global shortcuts" msgstr "Scorciatoie globali" -msgid "Rotate View" -msgstr "Ruota vista" - msgid "Pan View" msgstr "Vista panoramica" +msgid "Rotate View" +msgstr "Ruota vista" + msgid "Zoom View" msgstr "Ingrandimento vista" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index ea13d0c713..1cfd164522 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -5964,6 +5964,17 @@ msgstr "" msgid "Load 3mf" msgstr "3mfを読込み" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8423,12 +8434,12 @@ msgstr "ショートカット一覧を表示" msgid "Global shortcuts" msgstr "ショートカット" -msgid "Rotate View" -msgstr "回転" - msgid "Pan View" msgstr "移動" +msgid "Rotate View" +msgstr "回転" + msgid "Zoom View" msgstr "ズーム" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index db4ca3161f..eabc193bd6 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -6122,6 +6122,17 @@ msgstr "이 3mf는 OrcaSlicer에서 지원되지 않습니다. 형상 데이터 msgid "Load 3mf" msgstr "3mf 불러오기" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8707,12 +8718,12 @@ msgstr "키보드 단축키 목록 보기" msgid "Global shortcuts" msgstr "전역 단축키" -msgid "Rotate View" -msgstr "시점 회전" - msgid "Pan View" msgstr "시점 이동" +msgid "Rotate View" +msgstr "시점 회전" + msgid "Zoom View" msgstr "시점 확대/축소" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 670e2cc0af..c4e2e8ded3 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-21 21:00+0200\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -6256,6 +6256,17 @@ msgstr "3MF nepalaikomas Orca Slicer. Įkeliami tik geometrijos duomenys." msgid "Load 3mf" msgstr "Įkelti 3MF" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8945,12 +8956,12 @@ msgstr "Rodyti sparčiųjų klavišų sąrašą" msgid "Global shortcuts" msgstr "Bendrieji spartieji klavišai" -msgid "Rotate View" -msgstr "Pasukti vaizdą" - msgid "Pan View" msgstr "Judinti vaizdą" +msgid "Rotate View" +msgstr "Pasukti vaizdą" + msgid "Zoom View" msgstr "Padidinti vaizdą" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index b0eab2b19d..4891f995f8 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -6144,6 +6144,17 @@ msgstr "" msgid "Load 3mf" msgstr "Laad 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8772,10 +8783,10 @@ msgstr "Toon lijst met sneltoetsen" msgid "Global shortcuts" msgstr "Globale snelkoppelingen" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index ae27552cc0..a76934bf0a 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -6275,6 +6275,17 @@ msgstr "" msgid "Load 3mf" msgstr "Wczytaj 3MF" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8944,12 +8955,12 @@ msgstr "Pokaż listę skrótów klawiszowych" msgid "Global shortcuts" msgstr "Globalne skróty" -msgid "Rotate View" -msgstr "Obróć widok" - msgid "Pan View" msgstr "Przesuń widok" +msgid "Rotate View" +msgstr "Obróć widok" + msgid "Zoom View" msgstr "Przybliż widok" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 9fea5db9cc..f7add0d510 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-08-13 10:05-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -1568,8 +1568,8 @@ msgid "" "features.\n" "Click Yes to install it now." msgstr "" -"O OrcaSlicer requer o Microsoft WebView2 Runtime para operar " -"determinados recursos.\n" +"O OrcaSlicer requer o Microsoft WebView2 Runtime para operar determinados " +"recursos.\n" "Clique em Sim para instalá-lo agora." msgid "WebView2 Runtime" @@ -4245,8 +4245,8 @@ msgid "" "Invalid pattern. Use N, N#K, or a comma-separated list with optional #K per " "entry. Examples: 5, 5#2, 1,7,9, 5,9#2,18." msgstr "" -"Padrão inválido. Use N, N#K, ou uma lista separa por vírgulas com #K opcional " -"por entrada. Examplos: 5, 5#2, 1,7,9, 5,9#2,18." +"Padrão inválido. Use N, N#K, ou uma lista separa por vírgulas com #K " +"opcional por entrada. Examplos: 5, 5#2, 1,7,9, 5,9#2,18." #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" @@ -6216,8 +6216,8 @@ msgid "" "presets." msgstr "" "Alguns filamentos desconhecidos foram mapeados para a predefinição genérica. " -"Por favor, atualize o OrcaSlicer ou reinicie o OrcaSlicer para verificar " -"se há uma atualização para as predefinições do sistema." +"Por favor, atualize o OrcaSlicer ou reinicie o OrcaSlicer para verificar se " +"há uma atualização para as predefinições do sistema." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -6286,6 +6286,17 @@ msgstr "" msgid "Load 3mf" msgstr "Carregar 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -6985,8 +6996,9 @@ msgid "Orbit speed multiplier" msgstr "Multiplicador de velocidade de órbita" msgid "Multiplies the orbit speed for finer or coarser camera movement." -msgstr "Multiplica a velocidade da órbita para um movimento de câmera " -"mais fino ou mais grosseiro." +msgstr "" +"Multiplica a velocidade da órbita para um movimento de câmera mais fino ou " +"mais grosseiro." msgid "Show splash screen" msgstr "Mostrar tela de abertura" @@ -7869,9 +7881,9 @@ msgid "" "A prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"Uma torre de preparo é necessária para um timelapse suave. Pode haver " -"falhas no modelo sem a torre de preparo. Tem certeza de que deseja " -"desativar a torre de preparo?" +"Uma torre de preparo é necessária para um timelapse suave. Pode haver falhas " +"no modelo sem a torre de preparo. Tem certeza de que deseja desativar a " +"torre de preparo?" msgid "" "Enabling both precise Z height and the prime tower may cause the size of " @@ -7884,9 +7896,8 @@ msgid "" "A prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"Uma torre de preparo é necessária para um timelapse suave. Pode haver " -"falhas no modelo sem a torre de preparo. Deseja ativar a torre de " -"preparo?" +"Uma torre de preparo é necessária para um timelapse suave. Pode haver falhas " +"no modelo sem a torre de preparo. Deseja ativar a torre de preparo?" msgid "Still print by object?" msgstr "Ainda imprimir por objeto?" @@ -9009,12 +9020,12 @@ msgstr "Mostrar lista de atalhos de teclado" msgid "Global shortcuts" msgstr "Atalhos globais" -msgid "Rotate View" -msgstr "Rotacionar vista" - msgid "Pan View" msgstr "Movimentar vista" +msgid "Rotate View" +msgstr "Rotacionar vista" + msgid "Zoom View" msgstr "Aproximar vista" @@ -9280,8 +9291,7 @@ msgstr "Conecte a impressora usando IP e código de acesso" msgid "" "Step 1. Please confirm Orca Slicer and your printer are in the same LAN." -msgstr "" -"Passo 1. Confirme se o OrcaSlicer e sua impressora estão na mesma LAN." +msgstr "Passo 1. Confirme se o OrcaSlicer e sua impressora estão na mesma LAN." msgid "" "Step 2. If the IP and Access Code below are different from the actual values " @@ -9782,8 +9792,8 @@ msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -"A torre de preparo atualmente só é suportada para os G-code do tipo " -"Marlin, RepRap/Sprinter, RepRapFirmware e Repetier." +"A torre de preparo atualmente só é suportada para os G-code do tipo Marlin, " +"RepRap/Sprinter, RepRapFirmware e Repetier." msgid "The prime tower is not supported in \"By object\" print." msgstr "A torre de preparo não é suportada na impressão \"Por objeto\"." @@ -9792,26 +9802,26 @@ msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"A torre de preparo não é suportada quando a altura de camada adaptativa " -"está ativa. Isso requer que todos os objetos tenham a mesma altura de camada." +"A torre de preparo não é suportada quando a altura de camada adaptativa está " +"ativa. Isso requer que todos os objetos tenham a mesma altura de camada." msgid "" "The prime tower requires \"support gap\" to be multiple of layer height." msgstr "" -"A torre de preparo requer que o \"vão de suporte\" seja múltiplo da " -"altura da camada." +"A torre de preparo requer que o \"vão de suporte\" seja múltiplo da altura " +"da camada." msgid "The prime tower requires that all objects have the same layer heights." msgstr "" -"A torre de preparo requer que todos os objetos tenham as mesmas alturas " -"de camada." +"A torre de preparo requer que todos os objetos tenham as mesmas alturas de " +"camada." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers." msgstr "" -"A torre de preparo requer que todos os objetos sejam impressos sobre o " -"mesmo número de camadas da jangada." +"A torre de preparo requer que todos os objetos sejam impressos sobre o mesmo " +"número de camadas da jangada." msgid "" "The prime tower is only supported for multiple objects if they are printed " @@ -9824,15 +9834,15 @@ msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"A torre de preparo requer que todos os objetos sejam fatiados com as " -"mesmas alturas de camada." +"A torre de preparo requer que todos os objetos sejam fatiados com as mesmas " +"alturas de camada." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height." msgstr "" -"A torre de preparo só é suportada se todos os objetos tiverem a mesma " -"altura de camada variável." +"A torre de preparo só é suportada se todos os objetos tiverem a mesma altura " +"de camada variável." msgid "" "One or more object were assigned an extruder that the printer does not have." @@ -10308,7 +10318,8 @@ msgstr "Tipo de placa padrão" msgid "" "Default bed type for the printer (supports both numeric and string format)." -msgstr "Tipo de placa padrão para a impressora (suporta formato numérico ou string)." +msgstr "" +"Tipo de placa padrão para a impressora (suporta formato numérico ou string)." msgid "First layer print sequence" msgstr "Sequência de impressão da primeira camada" @@ -10635,10 +10646,9 @@ msgid "" "layer consistency. NOTE: This option will be ignored for outer-inner or " "inner-outer-inner wall sequences." msgstr "" -"Melhora a precisão da casca ajustando o espaçamento da parede externa. " -"Isso também melhora a consistência da camada. Nota: Esta opção será ignorada " -"se a sequência da parede for externa-interna ou interna-externa-interna." - +"Melhora a precisão da casca ajustando o espaçamento da parede externa. Isso " +"também melhora a consistência da camada. Nota: Esta opção será ignorada se a " +"sequência da parede for externa-interna ou interna-externa-interna." msgid "Only one wall on top surfaces" msgstr "Parede única em superfícies superiores" @@ -12216,8 +12226,8 @@ msgstr "" "Insere preenchimento sólido em camadas específicas. Use N para inserir a " "cada enésima camada, N#K para inserir K camadas sólidas consecutivas a cada " "enésima camada (K é opcional, ou seja, '5#' é igual a '5#1'), ou uma lista " -"separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. Camadas " -"são baseadas em 1." +"separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. " +"Camadas são baseadas em 1." msgid "Fill Multiline" msgstr "Multilinhas de Preenchimento" @@ -13468,10 +13478,10 @@ msgid "" "semicolon, in the following format: \"1.234, 5.678;\"" msgstr "" "Modelo de Compensação de Fluxo, usado para ajustar o fluxo para áreas de " -"preenchimento pequenas. O modelo é expresso como um par de valores " -"separados por vírgula para o comprimento de extrusão e o fator de " -"correção de fluxo. Cada par em uma linha separeada, seguido por " -"ponto-e-vírgula, no seguinte formato: \"1.234, 5.678;\"" +"preenchimento pequenas. O modelo é expresso como um par de valores separados " +"por vírgula para o comprimento de extrusão e o fator de correção de fluxo. " +"Cada par em uma linha separeada, seguido por ponto-e-vírgula, no seguinte " +"formato: \"1.234, 5.678;\"" msgid "Maximum speed X" msgstr "Velocidade máxima X" @@ -15093,8 +15103,7 @@ msgid "" msgstr "" "A camada de suporte usa uma altura de camada independente da camada do " "objeto. Isso é para suportar a personalização do vão-Z e economizar tempo de " -"impressão. Esta opção será inválida quando a torre de preparo estiver " -"ativa." +"impressão. Esta opção será inválida quando a torre de preparo estiver ativa." msgid "Threshold angle" msgstr "Ângulo limiar" @@ -15272,8 +15281,8 @@ msgid "" "the surface." msgstr "" "A quantidade de material a extrudar durante o passar a ferro. Relativo ao " -"fluxo da altura normal da camada de interface. Um valor muito alto resulta em " -"superextrusão na superfície." +"fluxo da altura normal da camada de interface. Um valor muito alto resulta " +"em superextrusão na superfície." msgid "Support Ironing line spacing" msgstr "" @@ -16911,8 +16920,8 @@ msgstr "" "Agora adicionamos a auto-calibração para diferentes filamentos, que é " "totalmente automatizada e o resultado será salvo na impressora para uso " "futuro. Você só precisa fazer a calibração nos seguintes casos limitados:\n" -"1. Se você introduzir um novo filamento de marcas/modelos diferentes ou " -"se o filamento estiver úmido;\n" +"1. Se você introduzir um novo filamento de marcas/modelos diferentes ou se o " +"filamento estiver úmido;\n" "2. Se o bico estiver desgastado ou for substituído por um novo;\n" "3. Se o fluxo volumétrico máximo ou a temperatura de impressão forem " "alteradas na configuração do filamento." @@ -19749,8 +19758,8 @@ msgstr "" #~ msgid "" #~ "Ooze prevention is currently not supported with the prime tower enabled." #~ msgstr "" -#~ "A prevenção de vazamento atualmente não é suportada com a torre de " -#~ "prepao ativa." +#~ "A prevenção de vazamento atualmente não é suportada com a torre de prepao " +#~ "ativa." #~ msgid "" #~ "Interlocking depth of a segmented region. Zero disables this feature." diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 04799758ba..b3b8c231bc 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.3.0 Official Release\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-07-06 21:08+0700\n" "Last-Translator: \n" "Language-Team: Andylg \n" @@ -6350,6 +6350,17 @@ msgstr "" msgid "Load 3mf" msgstr "Загрузка 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9099,12 +9110,12 @@ msgstr "Показать список сочетаний клавиш" msgid "Global shortcuts" msgstr "Глобальные горячие клавиши" -msgid "Rotate View" -msgstr "Вращение камеры" - msgid "Pan View" msgstr "Перемещение камеры" +msgid "Rotate View" +msgstr "Вращение камеры" + msgid "Zoom View" msgstr "Масштабирование вида" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index af38cde9e0..b8a40711c6 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6070,6 +6070,17 @@ msgstr "3mf kommer inte från Orca Slicer, laddar endast geometri data." msgid "Load 3mf" msgstr "Ladda 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8618,12 +8629,12 @@ msgstr "Visa tangentbordets genvägs lista" msgid "Global shortcuts" msgstr "Övergripande genvägar" -msgid "Rotate View" -msgstr "Rotera vy" - msgid "Pan View" msgstr "Panoreringsvy" +msgid "Rotate View" +msgstr "Rotera vy" + msgid "Zoom View" msgstr "Zoomvy" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 77f0b85717..c71b461a70 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-09-14 23:43+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -178,7 +178,7 @@ msgid "Smart fill" msgstr "Akıllı boyama" msgid "Bucket fill" -msgstr "Kova boya aracı" +msgstr "Boya kovası aracı" msgid "Height range" msgstr "Yükseklik aralığı" @@ -336,7 +336,7 @@ msgid "Auto" msgstr "Otomatik" msgid "Manual" -msgstr "Manual" +msgstr "Manuel" msgid "Plug" msgstr "Tak" @@ -369,7 +369,7 @@ msgid "Flip upside down" msgstr "Baş aşağı çevir" msgid "Connectors" -msgstr "Konektörler" +msgstr "Bağlayıcılar" msgid "Type" msgstr "Tür" @@ -566,7 +566,7 @@ msgstr[0] "%1$d bağlayıcı nesnenin dışında" msgstr[1] "%1$d bağlayıcı nesnenin dışında" msgid "Some connectors are overlapped" -msgstr "Bazı konektörler üst üste binmiş" +msgstr "Bazı bağlayıcılar üst üste binmiş" msgid "Select at least one object to keep after cutting." msgstr "Kesimden sonra saklanacak en az bir nesne seçin." @@ -6235,6 +6235,17 @@ msgstr "" msgid "Load 3mf" msgstr "3mf yükle" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8914,12 +8925,12 @@ msgstr "Klavye kısayolları listesini göster" msgid "Global shortcuts" msgstr "Genel kısayollar" -msgid "Rotate View" -msgstr "Görüntüyü döndür" - msgid "Pan View" msgstr "Pan Görünümü" +msgid "Rotate View" +msgstr "Görüntüyü döndür" + msgid "Zoom View" msgstr "Zoom Görünümü" @@ -12475,6 +12486,7 @@ msgstr "İlk katmana pütürlü yüzey uygulanıp uygulanmayacağı." msgid "Fuzzy skin generator mode" msgstr "Pütürlü yüzey oluşturma modu" +#, fuzzy, c-format, boost-format msgid "" "Fuzzy skin generation mode. Works only with Arachne!\n" "Displacement: Сlassic mode when the pattern is formed by shifting the nozzle " diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 31facff165..df839c8b9e 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-07 09:30+0200\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" @@ -6294,6 +6294,17 @@ msgstr "3mf не від Orca Slicer, завантажуйте лише дані msgid "Load 3mf" msgstr "Завантажити 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8972,12 +8983,12 @@ msgstr "Показати список клавіш" msgid "Global shortcuts" msgstr "Глобальні ярлики" -msgid "Rotate View" -msgstr "Повернути вигляд" - msgid "Pan View" msgstr "Панорамний вигляд" +msgid "Rotate View" +msgstr "Повернути вигляд" + msgid "Zoom View" msgstr "Перегляд масштабу" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 15c3e9203c..4e8abfa2d2 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: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2024-07-28 07:12+0000\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -6001,6 +6001,19 @@ msgstr "该3mf文件不是来自Orca Slicer,将只加载几何数据。" msgid "Load 3mf" msgstr "加载3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" +"该项目由 OrcaSlicer 2.3.1-alpha 创建,并使用了填充旋转模板设置,这些设置可能" +"无法与您当前的填充模式正常配合,可能导致支撑不足或打印质量问题。" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "您是否希望 OrcaSlicer 清除旋转模板设置以自动修复此问题?" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8503,12 +8516,12 @@ msgstr "显示键盘快捷键列表" msgid "Global shortcuts" msgstr "全局快捷键" -msgid "Rotate View" -msgstr "旋转视角" - msgid "Pan View" msgstr "移动视角" +msgid "Rotate View" +msgstr "旋转视角" + msgid "Zoom View" msgstr "缩放视角" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index d7165954c4..95f16659b8 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-27 19:32+0800\n" "Last-Translator: 5idereal \n" "Language-Team: \n" @@ -6017,6 +6017,17 @@ msgstr "該 3mf 檔案不是來自 Orca Slicer,將只載入幾何資料。" msgid "Load 3mf" msgstr "載入 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8525,12 +8536,12 @@ msgstr "顯示鍵盤快捷鍵清單" msgid "Global shortcuts" msgstr "全域快捷鍵" -msgid "Rotate View" -msgstr "旋轉視角" - msgid "Pan View" msgstr "移動視角" +msgid "Rotate View" +msgstr "旋轉視角" + msgid "Zoom View" msgstr "縮放視角" diff --git a/resources/profiles/Afinia.json b/resources/profiles/Afinia.json index b25329b0ed..74f204bec5 100644 --- a/resources/profiles/Afinia.json +++ b/resources/profiles/Afinia.json @@ -1,6 +1,6 @@ { "name": "Afinia", - "version": "02.03.01.01", + "version": "02.03.01.10", "force_update": "0", "description": "Afinia configurations", "machine_model_list": [ diff --git a/resources/profiles/Anker.json b/resources/profiles/Anker.json index ff877c5e89..fbc580759a 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index 031d7a70a4..d0e7881a75 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,6 +1,6 @@ { "name": "Anycubic", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Anycubic configurations", "machine_model_list": [ diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json index 248b0be814..33fb9036ee 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json index 21ce7ac534..f34d6a7ef3 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json index 3268312d9b..afe0b5c596 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json index b76c3dd32d..e9ea28c250 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", diff --git a/resources/profiles/Artillery.json b/resources/profiles/Artillery.json index 0c6c56f167..c7c1632678 100644 --- a/resources/profiles/Artillery.json +++ b/resources/profiles/Artillery.json @@ -1,6 +1,6 @@ { "name": "Artillery", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Artillery configurations", "machine_model_list": [ diff --git a/resources/profiles/BIQU.json b/resources/profiles/BIQU.json index cd351581a1..19ed0a5578 100644 --- a/resources/profiles/BIQU.json +++ b/resources/profiles/BIQU.json @@ -1,6 +1,6 @@ { "name": "BIQU", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "BIQU configurations", "machine_model_list": [ diff --git a/resources/profiles/Blocks.json b/resources/profiles/Blocks.json index 18b7e5fecc..a02cc11de7 100644 --- a/resources/profiles/Blocks.json +++ b/resources/profiles/Blocks.json @@ -1,6 +1,6 @@ { "name": "Blocks", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Blocks configurations", "machine_model_list": [ diff --git a/resources/profiles/CONSTRUCT3D.json b/resources/profiles/CONSTRUCT3D.json index c33ea7913d..4b7f40a42f 100644 --- a/resources/profiles/CONSTRUCT3D.json +++ b/resources/profiles/CONSTRUCT3D.json @@ -1,6 +1,6 @@ { "name": "CONSTRUCT3D", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Construct3D configurations", "machine_model_list": [ diff --git a/resources/profiles/Chuanying.json b/resources/profiles/Chuanying.json index 05bcd8cb20..a32b5cdfb6 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -1,7 +1,7 @@ { "name": "Chuanying", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Chuanying configurations", "machine_model_list": [ diff --git a/resources/profiles/Co Print.json b/resources/profiles/Co Print.json index ae33032424..2ae48573ce 100644 --- a/resources/profiles/Co Print.json +++ b/resources/profiles/Co Print.json @@ -1,6 +1,6 @@ { "name": "Co Print", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "CoPrint configurations", "machine_model_list": [ diff --git a/resources/profiles/CoLiDo.json b/resources/profiles/CoLiDo.json index c79dead66b..2e04c82aa4 100644 --- a/resources/profiles/CoLiDo.json +++ b/resources/profiles/CoLiDo.json @@ -1,6 +1,6 @@ { "name": "CoLiDo", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "CoLiDo configurations", "machine_model_list": [ diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index fce85779a4..b97479aa27 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 893f79e010..9433656cfb 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ @@ -1650,10 +1650,22 @@ "name": "Creality Ender-3 V3 0.6 nozzle", "sub_path": "machine/Creality Ender-3 V3 0.6 nozzle.json" }, + { + "name": "Creality Ender-3 V3 KE 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.2 nozzle.json" + }, { "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 KE 0.6 nozzle", "sub_path": "machine/Creality Ender-3 V3 KE 0.6 nozzle.json" }, + { + "name": "Creality Ender-3 V3 KE 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.8 nozzle.json" + }, { "name": "Creality Ender-3 V3 Plus 0.4 nozzle", "sub_path": "machine/Creality Ender-3 V3 Plus 0.4 nozzle.json" diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json index 4384b0c1bd..6b876509ba 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "name": "Creality Ender-3 V3 KE 0.2 nozzle", "inherits": "fdm_creality_common", "from": "system", "setting_id": "GM001", @@ -83,10 +83,10 @@ "0.4" ], "max_layer_height": [ - "0.32" + "0.16" ], "min_layer_height": [ - "0.08" + "0.04" ], "retraction_minimum_travel": [ "2" diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json index e222da5a06..eeff131c02 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "name": "Creality Ender-3 V3 KE 0.6 nozzle", "inherits": "fdm_creality_common", "from": "system", "setting_id": "GM001", @@ -83,10 +83,10 @@ "0.4" ], "max_layer_height": [ - "0.32" + "0.48" ], "min_layer_height": [ - "0.08" + "0.12" ], "retraction_minimum_travel": [ "2" diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json index fe02248253..36cfcffb60 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "name": "Creality Ender-3 V3 KE 0.8 nozzle", "inherits": "fdm_creality_common", "from": "system", "setting_id": "GM001", @@ -83,10 +83,10 @@ "0.4" ], "max_layer_height": [ - "0.32" + "0.64" ], "min_layer_height": [ - "0.08" + "0.16" ], "retraction_minimum_travel": [ "2" 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 3258d94963..2a832e0cad 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json @@ -115,6 +115,8 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 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 2e6ca2df4f..e0ab6808dc 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json @@ -115,6 +115,9 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 nozzle", + "Creality Ender-3 V3 KE 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json index f654684651..bf3811574a 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json @@ -115,6 +115,9 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 nozzle", + "Creality Ender-3 V3 KE 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json index e6b02349d2..10ade575cc 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json @@ -115,6 +115,9 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 nozzle", + "Creality Ender-3 V3 KE 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Cubicon.json b/resources/profiles/Cubicon.json index 5fb70426ec..7f7f0ab195 100644 --- a/resources/profiles/Cubicon.json +++ b/resources/profiles/Cubicon.json @@ -1,6 +1,6 @@ { "name": "Cubicon", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Cubicon configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 7364ebb3c3..dbba652ccb 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/DeltaMaker.json b/resources/profiles/DeltaMaker.json index 539e5ddabe..381bf0b912 100755 --- a/resources/profiles/DeltaMaker.json +++ b/resources/profiles/DeltaMaker.json @@ -1,7 +1,7 @@ { "name": "DeltaMaker", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "DeltaMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Dremel.json b/resources/profiles/Dremel.json index 13c5451f7a..e3a29314e0 100644 --- a/resources/profiles/Dremel.json +++ b/resources/profiles/Dremel.json @@ -1,6 +1,6 @@ { "name": "Dremel", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Dremel configurations", "machine_model_list": [ diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index 67125df3f3..c9335e84ae 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,6 +1,6 @@ { "name": "Elegoo", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Elegoo configurations", "machine_model_list": [ diff --git a/resources/profiles/Eryone.json b/resources/profiles/Eryone.json index 812bc61fe5..00bf725573 100644 --- a/resources/profiles/Eryone.json +++ b/resources/profiles/Eryone.json @@ -1,6 +1,6 @@ { "name": "Thinker X400", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Eryone configurations", "machine_model_list": [ diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 25e55e95e0..7a58bbcdd6 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 5a0a97d171..e346afd7e1 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ diff --git a/resources/profiles/FlyingBear.json b/resources/profiles/FlyingBear.json index ebe1b36210..92779a45b1 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -1,6 +1,6 @@ { "name": "FlyingBear", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "FlyingBear configurations", "machine_model_list": [ @@ -12,6 +12,10 @@ "name": "FlyingBear Reborn3", "sub_path": "machine/FlyingBear Reborn3.json" }, + { + "name": "FlyingBear Ghost7", + "sub_path": "machine/Ghost7/FlyingBear Ghost7.json" + }, { "name": "FlyingBear S1", "sub_path": "machine/S1/FlyingBear S1.json" @@ -26,6 +30,10 @@ "name": "fdm_process_common_S1", "sub_path": "process/S1/fdm_process_common_S1.json" }, + { + "name": "fdm_process_common_Ghost7", + "sub_path": "process/Ghost7/fdm_process_common_Ghost7.json" + }, { "name": "0.08mm Extra Fine @FlyingBear Reborn3", "sub_path": "process/0.08mm Extra Fine @FlyingBear Reborn3.json" @@ -46,6 +54,28 @@ "name": "0.24mm Draft @FlyingBear Reborn3", "sub_path": "process/0.24mm Draft @FlyingBear Reborn3.json" }, + + { + "name": "0.08mm Extra Fine @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json" + }, + { + "name": "0.12mm Fine @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json" + }, + { + "name": "0.16mm Optimal @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json" + }, + { + "name": "0.20mm Standard @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json" + }, + { + "name": "0.24mm Draft @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json" + }, + { "name": "fdm_process_marlin_common", "sub_path": "process/fdm_process_marlin_common.json" @@ -100,6 +130,10 @@ "name": "fdm_filament_common_S1", "sub_path": "filament/S1/fdm_filament_common_S1.json" }, + { + "name": "fdm_filament_common_Ghost7", + "sub_path": "filament/Ghost7/fdm_filament_common_Ghost7.json" + }, { "name": "fdm_filament_abs", "sub_path": "filament/fdm_filament_abs.json" @@ -164,6 +198,10 @@ "name": "fdm_filament_pla @S1", "sub_path": "filament/S1/fdm_filament_pla @S1.json" }, + { + "name": "fdm_filament_pla @Ghost7", + "sub_path": "filament/Ghost7/fdm_filament_pla @Ghost7.json" + }, { "name": "fdm_filament_pla_Hyper @S1", "sub_path": "filament/S1/fdm_filament_pla_Hyper @S1.json" @@ -244,6 +282,10 @@ "name": "Other PETG @S1", "sub_path": "filament/S1/Other PETG @S1.json" }, + { + "name": "FlyingBear PLA @Ghost7", + "sub_path": "filament/Ghost7/FlyingBear PLA @Ghost7.json" + }, { "name": "FlyingBear PLA @S1", "sub_path": "filament/S1/FlyingBear PLA @S1.json" @@ -290,6 +332,10 @@ "name": "FlyingBear Reborn3 0.4 nozzle", "sub_path": "machine/FlyingBear Reborn3 0.4 nozzle.json" }, + { + "name": "FlyingBear Ghost7 0.4 nozzle", + "sub_path": "machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json" + }, { "name": "FlyingBear S1 0.4 nozzle", "sub_path": "machine/S1/FlyingBear S1 0.4 nozzle.json" diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7-bed.stl b/resources/profiles/FlyingBear/FlyingBear Ghost7-bed.stl new file mode 100644 index 0000000000..d3c81370b7 Binary files /dev/null and b/resources/profiles/FlyingBear/FlyingBear Ghost7-bed.stl differ diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7-bed1.stl b/resources/profiles/FlyingBear/FlyingBear Ghost7-bed1.stl new file mode 100644 index 0000000000..5d0df36e67 Binary files /dev/null and b/resources/profiles/FlyingBear/FlyingBear Ghost7-bed1.stl differ diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7-texture.png b/resources/profiles/FlyingBear/FlyingBear Ghost7-texture.png new file mode 100644 index 0000000000..456ba1f935 Binary files /dev/null and b/resources/profiles/FlyingBear/FlyingBear Ghost7-texture.png differ diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7_cover.png b/resources/profiles/FlyingBear/FlyingBear Ghost7_cover.png new file mode 100644 index 0000000000..536bb86c69 Binary files /dev/null and b/resources/profiles/FlyingBear/FlyingBear Ghost7_cover.png differ diff --git a/resources/profiles/FlyingBear/error_hull_show b/resources/profiles/FlyingBear/error_hull_show new file mode 100644 index 0000000000..e69de29bb2 diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA @Ghost7.json new file mode 100644 index 0000000000..46d83cd19e --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA @Ghost7.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "FlyingBear PLA @Ghost7", + "inherits": "fdm_filament_pla @Ghost7", + "from": "system", + "setting_id": "GFSA04", + "filament_id": "GFL99", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "0" + ], + "pressure_advance": [ + "0.032" + ], + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_common_Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_common_Ghost7.json new file mode 100644 index 0000000000..2822e10b25 --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_common_Ghost7.json @@ -0,0 +1,144 @@ +{ + "type": "filament", + "name": "fdm_filament_common_Ghost7", + "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": [ + "0%" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "0" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "bed_type": [ + "Cool Plate" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "full_fan_speed_layer": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_pla @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_pla @Ghost7.json new file mode 100644 index 0000000000..c24daf01cc --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_pla @Ghost7.json @@ -0,0 +1,97 @@ +{ + "type": "filament", + "name": "fdm_filament_pla @Ghost7", + "inherits": "fdm_filament_common_Ghost7", + "from": "system", + "instantiation": "false", + "filament_vendor": [ + "FlyingBear" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "8" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json new file mode 100644 index 0000000000..c261f33111 --- /dev/null +++ b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json @@ -0,0 +1,204 @@ +{ + "type": "machine", + "name": "FlyingBear Ghost7 0.4 nozzle", + "inherits": "fdm_klipper_common", + "from": "system", + "setting_id": "GM001", + "instantiation": "true", + "printer_model": "FlyingBear Ghost7", + "auxiliary_fan": "1", + "bed_exclude_area": [ + "242x0", + "250x0", + "250x30", + "242x30" + ], + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}", + "change_filament_gcode": "", + "cooling_tube_length": "5", + "cooling_tube_retraction": "91.5", + "default_filament_profile": [ + "FlyingBear PLA @Ghost7" + ], + "default_print_profile": "0.20mm Standard @FlyingBear Ghost7", + "deretraction_speed": [ + "30" + ], + "enable_filament_ramming": "1", + "extra_loading_move": "-2", + "extruder_clearance_height_to_lid": "69", + "extruder_clearance_height_to_rod": "69", + "extruder_clearance_radius": "55", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "high_current_on_filament_swap": "0", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nM117 Layer {layer_num+1}/[total_layer_count] : {filament_settings_id[0]}", + "machine_end_gcode": "PRINT_END", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_x": [ + "600", + "200" + ], + "machine_max_speed_y": [ + "600", + "200" + ], + "machine_max_speed_z": [ + "20", + "12" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": ";v1.0.1-20250822;\n;*****************************\nBED_MESH_CLEAR\nM140 S[bed_temperature_initial_layer_single]\nPRINT_START\n;*************PRINT START*************\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 80,print_bed_max[0])} F6000 ;move head to drawing line position\nG1 Z0 F100\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\n;BED_MESH_CLEAR \n;BED_MESH_PROFILE LOAD=default # bedmesh load\nG1 Z2.0 F200 ;Move Z Axis up\n ; ; ; ; ; ; ; ; ; draw line along model\n;G92 E0 ;reset extruder\nG1 E8 F300 ;extrude filament\nG90\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 80,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F1500 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E10\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count] ; display layers begin\n;***********model start************\n", + "machine_unload_filament_time": "0", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ], + "nozzle_hrc": "0", + "nozzle_type": "brass", + "nozzle_volume": "151.32", + "parking_pos_retraction": "92", + "print_host_webui": "", + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "205", + "printer_notes": "", + "printer_settings_id": "FlyingBear Ghost7 0.4 nozzle", + "printer_technology": "FFF", + "printer_variant": "0.4", + "printhost_apikey": "", + "printhost_authorization_type": "key", + "printhost_cafile": "", + "printhost_password": "", + "printhost_port": "", + "printhost_ssl_ignore_revoke": "0", + "printhost_user": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "0" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "249" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.8" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "scan_first_layer": "0", + "silent_mode": "0", + "single_extruder_multi_material": "1", + "template_custom_gcode": "", + "thumbnails": [ + "430x410" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Normal Lift" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json new file mode 100644 index 0000000000..529b03825d --- /dev/null +++ b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "FlyingBear Ghost7", + "model_id": "FlyingBear_Ghost7", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FlyingBearDesign", + "bed_model": "FlyingBear Ghost7-bed.stl", + "bed_texture": "FlyingBear Ghost7-texture.png", + "hotend_model": "", + "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json new file mode 100644 index 0000000000..90e72f336a --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "name": "0.08mm Extra Fine @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "inner_wall_acceleration": "3000", + "bottom_shell_layers": "7", + "overhang_1_4_speed": "30", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "top_shell_layers": "9", + "top_shell_thickness": "0.8", + "tree_support_wall_count": "1", + "brim_width": "5", + "gap_infill_speed": "120", + "outer_wall_speed": "60", + "inner_wall_speed": "120", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "layer_height": "0.08", + "print_settings_id": "0.08mm Extra Fine @FlyingBear Ghost7", + "sparse_infill_speed": "150", + "exclude_object": "1", + "internal_bridge_speed": "50", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json new file mode 100644 index 0000000000..2d3769bc1a --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "name": "0.12mm Fine @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "inner_wall_acceleration": "3000", + "bottom_shell_layers": "5", + "overhang_1_4_speed": "30", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "tree_support_wall_count": "0", + "brim_width": "5", + "gap_infill_speed": "180", + "outer_wall_speed": "80", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "180", + "top_surface_speed": "150", + "layer_height": "0.12", + "print_settings_id": "0.12mm Fine @FlyingBear Ghost7", + "sparse_infill_speed": "180", + "exclude_object": "1", + "internal_bridge_speed": "50", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json new file mode 100644 index 0000000000..c0ef17a3e3 --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json @@ -0,0 +1,39 @@ +{ + "type": "process", + "name": "0.16mm Optimal @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP005", + "instantiation": "true", + "inner_wall_acceleration": "3000", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "top_shell_layers": "6", + "overhang_1_4_speed": "50", + "accel_to_decel_enable": "0", + "bottom_shell_layers": "4", + "bridge_speed": "25", + "brim_object_gap": "0.1", + "exclude_object": "1", + "gap_infill_speed": "250", + "inner_wall_speed": "250", + "outer_wall_speed": "120", + "internal_bridge_speed": "50", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "layer_height": "0.16", + "line_width": "0.42", + "outer_wall_line_width": "0.42", + "overhang_speed_classic": "0", + "precise_outer_wall": "0", + "print_flow_ratio": "0.95", + "seam_gap": "10%", + "skirt_speed": "50", + "sparse_infill_speed": "330", + "support_line_width": "0.42", + "top_shell_thickness": "1", + "top_surface_line_width": "0.42", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json new file mode 100644 index 0000000000..c3c71b666d --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.20mm Standard @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "bottom_shell_layers": "3", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "tree_support_wall_count": "1", + "brim_width": "5", + "gap_infill_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "layer_height": "0.2", + "print_settings_id": "0.20mm Standard @FlyingBear Ghost7", + "sparse_infill_speed": "270", + "exclude_object": "1", + "internal_bridge_speed": "50", + "top_solid_infill_flow_ratio": "0.97", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json new file mode 100644 index 0000000000..5023e69e37 --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "0.24mm Draft @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "bottom_shell_layers": "3", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "tree_support_wall_count": "1", + "brim_width": "3", + "gap_infill_speed": "230", + "inner_wall_speed": "230", + "internal_solid_infill_speed": "230", + "layer_height": "0.24", + "print_settings_id": "0.24mm Draft @FlyingBear Ghost7", + "sparse_infill_speed": "230", + "exclude_object": "1", + "internal_bridge_speed": "50", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json new file mode 100644 index 0000000000..caf2f7d7e2 --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json @@ -0,0 +1,214 @@ +{ + "type": "process", + "name": "fdm_process_common_Ghost7", + "from": "system", + "instantiation": "false", + "accel_to_decel_enable": "0", + "accel_to_decel_factor": "50%", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "25", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "compatible_printers_condition": "", + "default_acceleration": "10000", + "default_jerk": "0", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "enable_overhang_speed": "1", + "enable_prime_tower": "0", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "1", + "extra_perimeters_on_overhangs": "0", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_thickness": "0.3", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "0", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "interface_shells": "0", + "internal_bridge_speed": "50%", + "internal_bridge_support_thickness": "0.8", + "internal_solid_infill_acceleration": "100%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "monotonic", + "ironing_flow": "10%", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_width_top_surface": "100%", + "minimum_sparse_infill_area": "15", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "overhang_4_4_speed": "10", + "overhang_speed_classic": "0", + "post_process": [], + "precise_outer_wall": "0", + "prime_tower_brim_width": "3", + "prime_tower_width": "35", + "prime_volume": "45", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "2", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "seam_gap": "10%", + "seam_position": "aligned", + "single_extruder_multi_material_priming": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "crosshatch", + "spiral_mode": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "30", + "support_top_z_distance": "0.2", + "support_type": "normal(auto)", + "thick_bridges": "0", + "timelapse_type": "0", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "12", + "travel_speed": "500", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "0", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "3", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "0", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_loops": "2", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "0", + "wipe_tower_extra_spacing": "100%", + "wipe_tower_extruder": "0", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0", + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/Folgertech.json b/resources/profiles/Folgertech.json index afaab30751..6dfeb21097 100644 --- a/resources/profiles/Folgertech.json +++ b/resources/profiles/Folgertech.json @@ -1,6 +1,6 @@ { "name": "Folgertech", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Folgertech configurations", "machine_model_list": [ diff --git a/resources/profiles/Geeetech.json b/resources/profiles/Geeetech.json index 7f32204edd..342b7379d8 100644 --- a/resources/profiles/Geeetech.json +++ b/resources/profiles/Geeetech.json @@ -1,6 +1,6 @@ { "name": "Geeetech", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Geeetech configurations", "machine_model_list": [ diff --git a/resources/profiles/Ginger Additive.json b/resources/profiles/Ginger Additive.json index 36bfd1dc45..5ba04ac0be 100644 --- a/resources/profiles/Ginger Additive.json +++ b/resources/profiles/Ginger Additive.json @@ -1,6 +1,6 @@ { "name": "Ginger Additive", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "Ginger configuration", "machine_model_list": [ diff --git a/resources/profiles/InfiMech.json b/resources/profiles/InfiMech.json index 8d71b124dd..4950c00185 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ diff --git a/resources/profiles/Kingroon.json b/resources/profiles/Kingroon.json index d99244403f..87f6b1cade 100644 --- a/resources/profiles/Kingroon.json +++ b/resources/profiles/Kingroon.json @@ -1,7 +1,7 @@ { "name": "Kingroon", "url": "https://kingroon.com/", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "Kingroon configuration files", "machine_model_list": [ diff --git a/resources/profiles/Lulzbot.json b/resources/profiles/Lulzbot.json index 39847f58ef..a304e7b370 100644 --- a/resources/profiles/Lulzbot.json +++ b/resources/profiles/Lulzbot.json @@ -1,7 +1,7 @@ { "name": "Lulzbot", "url": "https://ohai.lulzbot.com/group/taz-6/", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Lulzbot configurations", "machine_model_list": [ diff --git a/resources/profiles/MagicMaker.json b/resources/profiles/MagicMaker.json index 898c73bd26..bdde757811 100644 --- a/resources/profiles/MagicMaker.json +++ b/resources/profiles/MagicMaker.json @@ -1,6 +1,6 @@ { "name": "MagicMaker", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "MagicMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Mellow.json b/resources/profiles/Mellow.json index 759df6cce8..3de321f29c 100644 --- a/resources/profiles/Mellow.json +++ b/resources/profiles/Mellow.json @@ -1,6 +1,6 @@ { "name": "Mellow", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Mellow Printer Profiles", "machine_model_list": [ diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index dedd0cfd6a..2d316ca62c 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index acf755110d..d622ad4771 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Orca Filament Library", "filament_list": [ diff --git a/resources/profiles/Peopoly.json b/resources/profiles/Peopoly.json index e607bfa70c..6ea855d55f 100644 --- a/resources/profiles/Peopoly.json +++ b/resources/profiles/Peopoly.json @@ -1,6 +1,6 @@ { "name": "Peopoly", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Peopoly configurations", "machine_model_list": [ diff --git a/resources/profiles/Phrozen.json b/resources/profiles/Phrozen.json index afc4add52f..f1852f10c0 100644 --- a/resources/profiles/Phrozen.json +++ b/resources/profiles/Phrozen.json @@ -1,6 +1,6 @@ { "name": "Phrozen", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Phrozen configurations", "machine_model_list": [ diff --git a/resources/profiles/Positron3D.json b/resources/profiles/Positron3D.json index 1d98ead28a..266e2780d9 100644 --- a/resources/profiles/Positron3D.json +++ b/resources/profiles/Positron3D.json @@ -1,6 +1,6 @@ { "name": "Positron 3D", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Positron 3D Printer Profile", "machine_model_list": [ diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 5ccf1dd822..afdcf55018 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.03.01.01", + "version": "02.03.01.10", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 8529cb9cf5..3e53cd158f 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Raise3D.json b/resources/profiles/Raise3D.json index 4db23e8ecf..846a4c7c0a 100644 --- a/resources/profiles/Raise3D.json +++ b/resources/profiles/Raise3D.json @@ -1,7 +1,7 @@ { "name": "Raise3D", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Raise3D configurations", "machine_model_list": [ diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index de8a5f87d4..2b007c3e3f 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ diff --git a/resources/profiles/RolohaunDesign.json b/resources/profiles/RolohaunDesign.json index 65c07de54e..e37fc75982 100644 --- a/resources/profiles/RolohaunDesign.json +++ b/resources/profiles/RolohaunDesign.json @@ -1,9 +1,13 @@ { "name": "RolohaunDesign", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "RolohaunDesign Printer Profiles", "machine_model_list": [ + { + "name": "Rolohaun Delta Flyer Refit", + "sub_path": "machine/Rolohaun Delta Flyer Refit.json" + }, { "name": "Rook MK1 LDO", "sub_path": "machine/Rook MK1 LDO.json" @@ -22,18 +26,38 @@ "name": "0.08mm Extra Fine @Rook MK1 LDO", "sub_path": "process/0.08mm Extra Fine @Rook MK1 LDO.json" }, + { + "name": "0.08mm Super Fine @Delta Flyer Refit", + "sub_path": "process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json" + }, + { + "name": "0.10mm Fine @Delta Flyer Refit", + "sub_path": "process/0.10mm Fine @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.12mm Fine @Rook MK1 LDO", "sub_path": "process/0.12mm Fine @Rook MK1 LDO.json" }, + { + "name": "0.16mm Optimal @Delta Flyer Refit", + "sub_path": "process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.16mm Optimal @Rook MK1 LDO", "sub_path": "process/0.16mm Optimal @Rook MK1 LDO.json" }, + { + "name": "0.20mm Standard @Delta Flyer Refit", + "sub_path": "process/0.20mm Standard @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.20mm Standard @Rook MK1 LDO", "sub_path": "process/0.20mm Standard @Rook MK1 LDO.json" }, + { + "name": "0.24mm Draft @Delta Flyer Refit", + "sub_path": "process/0.24mm Draft @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.24mm Draft @Rook MK1 LDO", "sub_path": "process/0.24mm Draft @Rook MK1 LDO.json" @@ -42,6 +66,14 @@ "name": "0.28mm Extra Draft @Rook MK1 LDO", "sub_path": "process/0.28mm Extra Draft @Rook MK1 LDO.json" }, + { + "name": "0.28mm Rough Draft @Delta Flyer Refit", + "sub_path": "process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json" + }, + { + "name": "0.2mm Vase Mode @Delta Flyer Refit", + "sub_path": "process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.32mm Standard @Rook MK1 LDO", "sub_path": "process/0.32mm Extra Draft @Rook MK1 LDO.json" @@ -65,6 +97,10 @@ "name": "fdm_common_Rook MK1 LDO", "sub_path": "machine/fdm_common_Rook MK1 LDO.json" }, + { + "name": "Rolohaun Delta Flyer Refit 0.4 nozzle", + "sub_path": "machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json" + }, { "name": "Rook MK1 LDO 0.2 nozzle", "sub_path": "machine/Rook MK1 LDO 0.2 nozzle.json" diff --git a/resources/profiles/RolohaunDesign/Rolohaun Delta Flyer Refit_cover.png b/resources/profiles/RolohaunDesign/Rolohaun Delta Flyer Refit_cover.png new file mode 100644 index 0000000000..ed8df37ac9 Binary files /dev/null and b/resources/profiles/RolohaunDesign/Rolohaun Delta Flyer Refit_cover.png differ diff --git a/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json new file mode 100644 index 0000000000..3ac283ccba --- /dev/null +++ b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "machine", + "name": "Rolohaun Delta Flyer Refit 0.4 nozzle", + "inherits": "fdm_common_Rook MK1 LDO", + "from": "system", + "instantiation": "true", + "setting_id": "RDFR_01", + "bed_custom_model": "", + "printer_structure": "delta", + "deretraction_speed": [ + "60" + ], + "machine_max_acceleration_extruding": [ + "10000", + "20000" + ], + "machine_max_acceleration_x": [ + "10000", + "20000" + ], + "machine_max_acceleration_y": [ + "10000", + "20000" + ], + "machine_start_gcode": "PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n", + "min_layer_height": [ + "0.04" + ], + "nozzle_type": "brass", + "printable_area": [ + "54.7907x4.79357", + "54.1644x9.55065", + "53.1259x14.235", + "51.6831x18.8111", + "49.8469x23.244", + "47.6314x27.5", + "45.0534x31.5467", + "42.1324x35.3533", + "38.8909x38.8909", + "35.3533x42.1324", + "31.5467x45.0534", + "27.5x47.6314", + "23.244x49.8469", + "18.8111x51.6831", + "14.235x53.1259", + "9.55065x54.1644", + "4.79357x54.7907", + "3.36778e-15x55", + "-4.79357x54.7907", + "-9.55065x54.1644", + "-14.235x53.1259", + "-18.8111x51.6831", + "-23.244x49.8469", + "-27.5x47.6314", + "-31.5467x45.0534", + "-35.3533x42.1324", + "-38.8909x38.8909", + "-42.1324x35.3533", + "-45.0534x31.5467", + "-47.6314x27.5", + "-49.8469x23.244", + "-51.6831x18.8111", + "-53.1259x14.235", + "-54.1644x9.55065", + "-54.7907x4.79357", + "-55x6.73556e-15", + "-54.7907x-4.79357", + "-54.1644x-9.55065", + "-53.1259x-14.235", + "-51.6831x-18.8111", + "-49.8469x-23.244", + "-47.6314x-27.5", + "-45.0534x-31.5467", + "-42.1324x-35.3533", + "-38.8909x-38.8909", + "-35.3533x-42.1324", + "-31.5467x-45.0534", + "-27.5x-47.6314", + "-23.244x-49.8469", + "-18.8111x-51.6831", + "-14.235x-53.1259", + "-9.55065x-54.1644", + "-4.79357x-54.7907", + "-1.01033e-14x-55", + "4.79357x-54.7907", + "9.55065x-54.1644", + "14.235x-53.1259", + "18.8111x-51.6831", + "23.244x-49.8469", + "27.5x-47.6314", + "31.5467x-45.0534", + "35.3533x-42.1324", + "38.8909x-38.8909", + "42.1324x-35.3533", + "45.0534x-31.5467", + "47.6314x-27.5", + "49.8469x-23.244", + "51.6831x-18.8111", + "53.1259x-14.235", + "54.1644x-9.55065", + "54.7907x-4.79357", + "55x-1.34711e-14" + ], + "printer_model": "Rolohaun Delta Flyer Refit", + "printable_height": "115", + "retraction_length": [ + "1.8" + ], + "retraction_speed": [ + "60" + ], + "support_multi_bed_types": "1", + "thumbnails": "48x48/PNG, 300x300/PNG", + "z_hop": [ + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..95c20aed18 --- /dev/null +++ b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Rolohaun Delta Flyer Refit", + "model_id": "RDFR1_1", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "RolohaunDesign", + "bed_model": "", + "bed_texture": "bedtexture-rook-green-120.png", + "hotend_model": "", + "default_materials": "Generic PLA @System;Generic PETG @System" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..f8af4a582e --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.08mm Super Fine @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "4", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.08", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "5%", + "top_shell_layers": "6", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "4" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.10mm Fine @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.10mm Fine @Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..a65b454205 --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.10mm Fine @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.10mm Fine @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "4", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.1", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "5%", + "top_shell_layers": "6", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "4" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..ed75234630 --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "name": "0.16mm Optimal @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.16", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "10%", + "top_shell_layers": "5", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.20mm Standard @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.20mm Standard @Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..57a39e636e --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.20mm Standard @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "0.20mm Standard @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.24mm Draft @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.24mm Draft @Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..6d2970466a --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.24mm Draft @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.24mm Draft @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "2", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.24", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "10%", + "top_shell_layers": "3", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "2" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..14c8236e75 --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.28mm Rough Draft @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "2", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.28", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "10%", + "top_shell_layers": "3", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "2" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json new file mode 100644 index 0000000000..9114024f53 --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "name": "0.2mm Vase Mode @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "4", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "min_skirt_length": "8", + "outer_wall_line_width": "1", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "0%", + "spiral_mode": "1", + "top_shell_layers": "0", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "1" +} \ No newline at end of file diff --git a/resources/profiles/SecKit.json b/resources/profiles/SecKit.json index 5a2672ce0c..a7e75aa6c8 100644 --- a/resources/profiles/SecKit.json +++ b/resources/profiles/SecKit.json @@ -1,6 +1,6 @@ { "name": "SecKit", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "SecKit configurations", "machine_model_list": [ diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index ce3673cc36..e5b3b2b155 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index 1ffbee4d95..1d07318010 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,7 +1,7 @@ { "name": "Sovol", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Sovol configurations", "machine_model_list": [ diff --git a/resources/profiles/Tiertime.json b/resources/profiles/Tiertime.json index c9bf2cccc8..f17069a528 100644 --- a/resources/profiles/Tiertime.json +++ b/resources/profiles/Tiertime.json @@ -1,6 +1,6 @@ { "name": "Tiertime", - "version": "02.03.01.01", + "version": "02.03.01.10", "force_update": "0", "description": "Tiertime configurations", "machine_model_list": [ diff --git a/resources/profiles/Tronxy.json b/resources/profiles/Tronxy.json index 32cdb47775..5493c8a48b 100644 --- a/resources/profiles/Tronxy.json +++ b/resources/profiles/Tronxy.json @@ -1,6 +1,6 @@ { "name": "Tronxy", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Tronxy configurations", "machine_model_list": [ diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index d986a317a2..d610f7726e 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -1,6 +1,6 @@ { "name": "TwoTrees", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "TwoTrees configurations", "machine_model_list": [ diff --git a/resources/profiles/UltiMaker.json b/resources/profiles/UltiMaker.json index 7d8128e14e..1c08c8ce3e 100644 --- a/resources/profiles/UltiMaker.json +++ b/resources/profiles/UltiMaker.json @@ -1,7 +1,7 @@ { "name": "UltiMaker", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "UltiMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Vivedino.json b/resources/profiles/Vivedino.json index 9e680b5fde..4d97b09a7b 100644 --- a/resources/profiles/Vivedino.json +++ b/resources/profiles/Vivedino.json @@ -1,6 +1,6 @@ { "name": "Vivedino", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Vivedino configurations", "machine_model_list": [ diff --git a/resources/profiles/Volumic.json b/resources/profiles/Volumic.json index 79943e255d..d239257943 100644 --- a/resources/profiles/Volumic.json +++ b/resources/profiles/Volumic.json @@ -1,6 +1,6 @@ { "name": "Volumic", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "VOLUMIC configurations", "machine_model_list": [ diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 31c372e1b3..a20bdbb394 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ diff --git a/resources/profiles/Voxelab.json b/resources/profiles/Voxelab.json index b1c0b056b1..45b1dcc94c 100644 --- a/resources/profiles/Voxelab.json +++ b/resources/profiles/Voxelab.json @@ -1,7 +1,7 @@ { "name": "Voxelab", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Voxelab configurations", "machine_model_list": [ diff --git a/resources/profiles/Vzbot.json b/resources/profiles/Vzbot.json index 2e6e0caab7..143f22884f 100644 --- a/resources/profiles/Vzbot.json +++ b/resources/profiles/Vzbot.json @@ -1,6 +1,6 @@ { "name": "Vzbot", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Vzbot configurations", "machine_model_list": [ diff --git a/resources/profiles/Wanhao France.json b/resources/profiles/Wanhao France.json index 369bda7aaf..83e7a9bbd9 100644 --- a/resources/profiles/Wanhao France.json +++ b/resources/profiles/Wanhao France.json @@ -1,6 +1,6 @@ { "name": "Wanhao France", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Wanhao France D12 configurations", "machine_model_list": [ diff --git a/resources/profiles/Wanhao.json b/resources/profiles/Wanhao.json index 76b9c8038b..163c24a965 100644 --- a/resources/profiles/Wanhao.json +++ b/resources/profiles/Wanhao.json @@ -1,6 +1,6 @@ { "name": "Wanhao", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Wanhao configurations", "machine_model_list": [ diff --git a/resources/profiles/WonderMaker.json b/resources/profiles/WonderMaker.json index 2e4aef93cd..e53f6875eb 100755 --- a/resources/profiles/WonderMaker.json +++ b/resources/profiles/WonderMaker.json @@ -1,7 +1,7 @@ { "name": "WonderMaker", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "WonderMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Z-Bolt.json b/resources/profiles/Z-Bolt.json index 89de4d2c70..ace9b0814b 100644 --- a/resources/profiles/Z-Bolt.json +++ b/resources/profiles/Z-Bolt.json @@ -1,7 +1,7 @@ { "name": "Z-Bolt", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Z-Bolt configurations", "machine_model_list": [ diff --git a/resources/profiles/iQ.json b/resources/profiles/iQ.json index 56d5962fae..cd63d72964 100644 --- a/resources/profiles/iQ.json +++ b/resources/profiles/iQ.json @@ -1,6 +1,6 @@ { "name": "innovatiQ", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "innovatiQ configuration", "machine_model_list": [ diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 38cd03a8ac..68eed40e0f 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -37,8 +37,7 @@ using namespace nlohmann; namespace Slic3r { -static const std::string VERSION_CHECK_URL_STABLE = "https://api.github.com/repos/softfever/OrcaSlicer/releases/latest"; -static const std::string VERSION_CHECK_URL = "https://api.github.com/repos/softfever/OrcaSlicer/releases"; +static const std::string VERSION_CHECK_URL = "https://check-version.orcaslicer.com/latest"; static const std::string PROFILE_UPDATE_URL = "https://api.github.com/repos/OrcaSlicer/orcaslicer-profiles/releases/tags"; static const std::string MODELS_STR = "models"; @@ -1383,10 +1382,10 @@ std::string AppConfig::config_path() return path; } -std::string AppConfig::version_check_url(bool stable_only/* = false*/) const +std::string AppConfig::version_check_url() const { auto from_settings = get("version_check_url"); - return from_settings.empty() ? stable_only ? VERSION_CHECK_URL_STABLE : VERSION_CHECK_URL : from_settings; + return from_settings.empty() ? VERSION_CHECK_URL : from_settings; } std::string AppConfig::profile_update_url() const diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 96fca84e23..aef70c06d6 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -294,7 +294,7 @@ public: // Get the Slic3r version check url. // This returns a hardcoded string unless it is overriden by "version_check_url" in the ini file. - std::string version_check_url(bool stable_only = false) const; + std::string version_check_url() const; // Get the Orca profile update url. std::string profile_update_url() const; diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 81d8d616da..6e124b46ad 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -544,6 +544,8 @@ set(SLIC3R_GUI_SOURCES Utils/HexFile.hpp Utils/Http.cpp Utils/Http.hpp + Utils/InstanceID.cpp + Utils/InstanceID.hpp Utils/json_diff.cpp Utils/json_diff.hpp Utils/minilzo_extension.cpp @@ -622,11 +624,28 @@ if (UNIX AND NOT APPLE) ) endif () +set(ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY}") +string(STRIP "${ORCA_UPDATER_SIG_KEY_B64}" ORCA_UPDATER_SIG_KEY_B64) +string(REPLACE "\n" "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") +string(REPLACE "\r" "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") +string(REPLACE "\t" "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") +string(REPLACE " " "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") + +set(ORCA_UPDATER_SIG_KEY_AVAILABLE 0) +if(ORCA_UPDATER_SIG_KEY_B64) + set(ORCA_UPDATER_SIG_KEY_AVAILABLE 1) +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GeneratedConfig.hpp.in + ${CMAKE_CURRENT_BINARY_DIR}/GeneratedConfig.hpp + @ONLY) + add_library(libslic3r_gui STATIC ${SLIC3R_GUI_SOURCES}) -target_include_directories(libslic3r_gui PRIVATE Utils) +target_include_directories(libslic3r_gui PRIVATE Utils ${CMAKE_CURRENT_BINARY_DIR}) if (WIN32) target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../deps/WebView2/include) + target_link_libraries(libslic3r_gui Advapi32) endif() source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) @@ -652,7 +671,7 @@ elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") ${CURL_LIBRARIES} ) elseif (APPLE) - target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY}) + target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY} "-framework Security") endif() if (SLIC3R_STATIC) @@ -677,7 +696,9 @@ endif () # layer and sub-libraries. This forces us to use the include locations and # link these libraries. if (UNIX AND NOT APPLE) + find_package(PkgConfig REQUIRED) find_package(GTK${SLIC3R_GTK} REQUIRED) + pkg_check_modules(LIBSECRET REQUIRED libsecret-1) if (FLATPAK) # I don't know why this is needed, but for whatever reason slic3r isn't # linking to X11 and webkit2gtk. force it. @@ -686,8 +707,8 @@ if (UNIX AND NOT APPLE) pkg_check_modules(webkit2gtk REQUIRED webkit2gtk-4.1) target_link_libraries (libslic3r_gui ${X11_LIBRARIES} ${webkit2gtk_LIBRARIES}) endif() - target_include_directories(libslic3r_gui SYSTEM PRIVATE ${GTK${SLIC3R_GTK}_INCLUDE_DIRS}) - target_link_libraries(libslic3r_gui ${GTK${SLIC3R_GTK}_LIBRARIES} fontconfig) + target_include_directories(libslic3r_gui SYSTEM PRIVATE ${GTK${SLIC3R_GTK}_INCLUDE_DIRS} ${LIBSECRET_INCLUDE_DIRS}) + target_link_libraries(libslic3r_gui ${GTK${SLIC3R_GTK}_LIBRARIES} fontconfig ${LIBSECRET_LIBRARIES}) # We add GStreamer for bambu:/// support. diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index f27d9dbd39..96199a0cb1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,9 @@ #include #include #include +#include +#include +#include #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" @@ -70,12 +74,14 @@ #include "MainFrame.hpp" #include "Plater.hpp" #include "GLCanvas3D.hpp" +#include "GeneratedConfig.hpp" #include "../Utils/PresetUpdater.hpp" #include "../Utils/PrintHost.hpp" #include "../Utils/Process.hpp" #include "../Utils/MacDarkMode.hpp" #include "../Utils/Http.hpp" +#include "../Utils/InstanceID.hpp" #include "../Utils/UndoRedo.hpp" #include "slic3r/Config/Snapshot.hpp" #include "Preferences.hpp" @@ -4381,108 +4387,414 @@ Semver get_version(const std::string& str, const std::regex& regexp) { return Semver::invalid(); } +namespace +{ + +struct UpdaterQuery +{ + std::string iid; + std::string version; + std::string os; + std::string arch; + std::string os_info; +}; + +std::string detect_updater_os() +{ +#if defined(_WIN32) + return "win"; +#elif defined(__APPLE__) + return "macos"; +#elif defined(__linux__) || defined(__LINUX__) + return "linux"; +#else + return "unknown"; +#endif +} + +std::string detect_updater_arch() +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return "arm64"; +#elif defined(__x86_64__) || defined(_M_X64) + return "x86_64"; +#elif defined(__i386__) || defined(_M_IX86) + return "i386"; +#else + std::string arch = wxPlatformInfo::Get().GetArchName().ToStdString(); + boost::algorithm::to_lower(arch); + if (arch.find("aarch64") != std::string::npos || arch.find("arm64") != std::string::npos) + return "arm64"; + if (arch.find("x86_64") != std::string::npos || arch.find("amd64") != std::string::npos) + return "x86_64"; + if (arch.find("i686") != std::string::npos || arch.find("i386") != std::string::npos || arch.find("x86") != std::string::npos) + return "i386"; + return "unknown"; +#endif +} + +std::string detect_updater_os_info() +{ + wxString description = wxPlatformInfo::Get().GetOperatingSystemDescription(); +#if defined(__LINUX__) || defined(__linux__) + wxLinuxDistributionInfo distro = wxGetLinuxDistributionInfo(); + if (!distro.Id.empty()) { + wxString normalized = distro.Id; + if (!distro.Release.empty()) + normalized << " " << distro.Release; + normalized.Trim(true); + normalized.Trim(false); + if (!normalized.empty()) + description = normalized; + } +#endif + if (description.empty()) + description = wxGetOsDescription(); + + //Orca: workaround: wxGetOsVersion can't recognize Windows 11 + // For Windows, use actual version numbers to properly detect Windows 11 + // Windows 11 starts at build 22000 +#if defined(_WIN32) + int major = 0, minor = 0, micro = 0; + wxGetOsVersion(&major, &minor, µ); + if (micro >= 22000) { + // replace Windows 10 with Windows 11 + description.Replace("Windows 10", "Windows 11"); + } +#endif + std::string os_info = description.ToStdString(); + boost::replace_all(os_info, "\r", " "); + boost::replace_all(os_info, "\n", " "); + boost::algorithm::trim(os_info); + if (os_info.size() > 120) + os_info.resize(120); + boost::algorithm::to_lower(os_info); + return os_info; +} + +std::string detect_updater_version() +{ + return SoftFever_VERSION; +} + +std::string detect_updater_iid(AppConfig* config) +{ + if (config == nullptr) + return {}; + return instance_id::ensure(*config); +} + +std::string encode_uri_component(const std::string& value) +{ + static constexpr const char* hex = "0123456789ABCDEF"; + std::string out; + out.reserve(value.size()); + for (unsigned char ch : value) { + if ((ch >= 'A' && ch <= 'Z') || + (ch >= 'a' && ch <= 'z') || + (ch >= '0' && ch <= '9') || + ch == '-' || ch == '_' || ch == '.' || ch == '~' || + ch == '!' || ch == '*' || ch == '(' || ch == ')' || ch == '\'') { + out.push_back(static_cast(ch)); + } else { + out.push_back('%'); + out.push_back(hex[(ch >> 4) & 0xF]); + out.push_back(hex[ch & 0xF]); + } + } + return out; +} + +std::string build_updater_query(const UpdaterQuery& query) +{ + std::vector> params; + + auto add_param = [¶ms](const char* key, const std::string& value) { + if (!value.empty()) + params.emplace_back(key, encode_uri_component(value)); + }; + + add_param("iid", query.iid); + add_param("v", query.version); + add_param("os", query.os); + add_param("arch", query.arch); + add_param("os_info", query.os_info); + + std::sort(params.begin(), params.end(), [](const auto& lhs, const auto& rhs) { + return lhs.first < rhs.first; + }); + + if (params.empty()) + return {}; + + std::string encoded; + for (size_t idx = 0; idx < params.size(); ++idx) { + if (idx > 0) + encoded.push_back('&'); + encoded += params[idx].first; + encoded.push_back('='); + encoded += params[idx].second; + } + return encoded; +} + +std::string base64url_encode(const unsigned char* data, std::size_t length) +{ + std::string encoded; + encoded.resize(boost::beast::detail::base64::encoded_size(length)); + encoded.resize(boost::beast::detail::base64::encode(encoded.data(), data, length)); + std::replace(encoded.begin(), encoded.end(), '+', '-'); + std::replace(encoded.begin(), encoded.end(), '/', '_'); + while (!encoded.empty() && encoded.back() == '=') + encoded.pop_back(); + return encoded; +} + +std::optional> load_signature_key() +{ +#if ORCA_UPDATER_SIG_KEY_AVAILABLE + std::string key = ORCA_UPDATER_SIG_KEY_B64; + boost::algorithm::trim(key); + if (key.empty()) + return std::nullopt; + + key.erase(std::remove_if(key.begin(), key.end(), [](unsigned char ch) { return std::isspace(ch); }), key.end()); + std::replace(key.begin(), key.end(), '-', '+'); + std::replace(key.begin(), key.end(), '_', '/'); + while (key.size() % 4 != 0) + key.push_back('='); + + std::string decoded; + decoded.resize(boost::beast::detail::base64::decoded_size(key.size())); + auto decode_result = boost::beast::detail::base64::decode(decoded.data(), key.data(), key.size()); + if (!decode_result.second) + return std::nullopt; + decoded.resize(decode_result.first); + + return std::vector(decoded.begin(), decoded.end()); +#else + return std::nullopt; +#endif +} + +const std::optional>& get_signature_key() +{ + static std::optional> cached; + static bool loaded = false; + if (!loaded) { + cached = load_signature_key(); + loaded = true; + } + return cached; +} + +std::string extract_path_from_url(const std::string& url) +{ + if (url.empty()) + return "/latest"; + + std::string path; + const auto scheme_pos = url.find("://"); + if (scheme_pos != std::string::npos) { + const auto path_pos = url.find('/', scheme_pos + 3); + if (path_pos != std::string::npos) + path = url.substr(path_pos); + else + path = "/"; + } else { + path = url; + } + + const auto fragment_pos = path.find('#'); + if (fragment_pos != std::string::npos) + path = path.substr(0, fragment_pos); + + const auto query_pos = path.find('?'); + if (query_pos != std::string::npos) + path = path.substr(0, query_pos); + + if (path.empty()) + path = "/"; + return path; +} + +void maybe_attach_updater_signature(Http& http, const std::string& canonical_query, const std::string& request_url) +{ + if (canonical_query.empty()) + return; + + const auto& key = get_signature_key(); + if (!key || key->empty()) + return; + + const auto now = std::chrono::time_point_cast(std::chrono::system_clock::now()); + const std::string timestamp = std::to_string(now.time_since_epoch().count()); + const std::string path = extract_path_from_url(request_url); + + std::string string_to_sign = "GET\n"; + string_to_sign += path; + string_to_sign += "\n"; + string_to_sign += canonical_query; + string_to_sign += "\n"; + string_to_sign += timestamp; + + unsigned int digest_length = 0; + unsigned char digest[EVP_MAX_MD_SIZE] = {}; + if (HMAC(EVP_sha256(), key->data(), static_cast(key->size()), + reinterpret_cast(string_to_sign.data()), + string_to_sign.size(), digest, &digest_length) == nullptr || digest_length == 0) + return; + + const std::string signature = base64url_encode(digest, digest_length); + http.header("X-Orca-Ts", timestamp); + http.header("X-Orca-Sig", "v1:" + signature); +} + +} // namespace + void GUI_App::check_new_version_sf(bool show_tips, int by_user) { AppConfig* app_config = wxGetApp().app_config; bool check_stable_only = app_config->get_bool("check_stable_update_only"); - auto version_check_url = app_config->version_check_url(check_stable_only); - Http::get(version_check_url) + auto version_check_url = app_config->version_check_url(); + + UpdaterQuery query{ + detect_updater_iid(app_config), + detect_updater_version(), + detect_updater_os(), + detect_updater_arch(), + detect_updater_os_info() + }; + + const std::string query_string = build_updater_query(query); + if (!query_string.empty()) { + const bool has_query = version_check_url.find('?') != std::string::npos; + if (!has_query) + version_check_url.push_back('?'); + else if (!version_check_url.empty() && version_check_url.back() != '&' && version_check_url.back() != '?') + version_check_url.push_back('&'); + version_check_url += query_string; + } + + auto http = Http::get(version_check_url); + maybe_attach_updater_signature(http, query_string, version_check_url); + + http.header("accept", "application/vnd.github.v3+json") + .timeout_connect(5) + .timeout_max(10) .on_error([&](std::string body, std::string error, unsigned http_status) { (void)body; BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%", "check_new_version_sf", http_status, error); }) - .timeout_connect(1) - .on_complete([this,by_user, check_stable_only](std::string body, unsigned http_status) { - // Http response OK + .on_complete([this, by_user, check_stable_only](std::string body, unsigned http_status) { if (http_status != 200) return; try { boost::trim(body); - // Orca: parse github release, inspired by SS - boost::property_tree::ptree root; - std::stringstream json_stream(body); - boost::property_tree::read_json(json_stream, root); - - // at least two number, use '.' as separator. can be followed by -Az23 for prereleased and +Az42 for - // metadata - std::regex matcher("[0-9]+\\.[0-9]+(\\.[0-9]+)*(-[A-Za-z0-9]+)?(\\+[A-Za-z0-9]+)?"); - - Semver current_version = get_version(SoftFever_VERSION, matcher); - Semver best_pre(1, 0, 0); - Semver best_release(1, 0, 0); - std::string best_pre_url; - std::string best_release_url; - std::string best_release_content; - std::string best_pre_content; - const std::regex reg_num("([0-9]+)"); - if (check_stable_only) { - std::string tag = root.get("tag_name"); - if (tag[0] == 'v') - tag.erase(0, 1); - for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); it != std::sregex_iterator(); ++it) {} - Semver tag_version = get_version(tag, matcher); - if (root.get("prerelease")) { - if (best_pre < tag_version) { - best_pre = tag_version; - best_pre_url = root.get("html_url"); - best_pre_content = root.get("body"); - } - } else { - if (best_release < tag_version) { - best_release = tag_version; - best_release_url = root.get("html_url"); - best_release_content = root.get("body"); - } - } - } else { - for (auto json_version : root) { - std::string tag = json_version.second.get("tag_name"); - if (tag[0] == 'v') - tag.erase(0, 1); - for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); it != std::sregex_iterator(); - ++it) {} - Semver tag_version = get_version(tag, matcher); - if (json_version.second.get("prerelease")) { - if (best_pre < tag_version) { - best_pre = tag_version; - best_pre_url = json_version.second.get("html_url"); - best_pre_content = json_version.second.get("body"); - } - } else { - if (best_release < tag_version) { - best_release = tag_version; - best_release_url = json_version.second.get("html_url"); - best_release_content = json_version.second.get("body"); - } - } - } - } - - // if release is more recent than beta, use release anyway - if (best_pre < best_release) { - best_pre = best_release; - best_pre_url = best_release_url; - best_pre_content = best_release_content; - } - // if we're the most recent, don't do anything - if ((check_stable_only ? best_release : best_pre) <= current_version) { + if (body.empty()) { if (by_user != 0) this->no_new_version(); return; } - version_info.url = check_stable_only ? best_release_url : best_pre_url; - version_info.version_str = check_stable_only ? best_release.to_string_sf() : best_pre.to_string(); - version_info.description = check_stable_only ? best_release_content : best_pre_content; + boost::property_tree::ptree root; + std::stringstream json_stream(body); + boost::property_tree::read_json(json_stream, root); + + std::regex matcher("[0-9]+\\.[0-9]+(\\.[0-9]+)*(-[A-Za-z0-9]+)?(\\+[A-Za-z0-9]+)?"); + Semver current_version = get_version(SoftFever_VERSION, matcher); + Semver best_pre(0, 0, 0); + Semver best_release(0, 0, 0); + bool best_pre_valid = false; + bool best_release_valid = false; + std::string best_pre_url; + std::string best_release_url; + std::string best_release_content; + std::string best_pre_content; + + auto consider_release = [&](const boost::property_tree::ptree& node) { + auto tag_opt = node.get_optional("tag_name"); + if (!tag_opt) + return; + + std::string tag = *tag_opt; + if (!tag.empty() && tag.front() == 'v') + tag.erase(0, 1); + + Semver tag_version = get_version(tag, matcher); + if (!tag_version.valid()) + return; + + const bool is_prerelease = node.get_optional("prerelease").get_value_or(false); + const std::string html_url = node.get_optional("html_url").get_value_or(std::string()); + const std::string body_copy = node.get_optional("body").get_value_or(std::string()); + + if (is_prerelease) { + if (!best_pre_valid || best_pre < tag_version) { + best_pre = tag_version; + best_pre_url = html_url; + best_pre_content = body_copy; + best_pre_valid = true; + } + } else { + if (!best_release_valid || best_release < tag_version) { + best_release = tag_version; + best_release_url = html_url; + best_release_content = body_copy; + best_release_valid = true; + } + } + }; + + if (root.get_optional("tag_name")) { + consider_release(root); + } else { + for (const auto& child : root) + consider_release(child.second); + } + + if (!best_release_valid && !best_pre_valid) { + if (by_user != 0) + this->no_new_version(); + return; + } + + if (best_pre_valid && best_release_valid && best_pre < best_release) { + best_pre = best_release; + best_pre_url = best_release_url; + best_pre_content = best_release_content; + best_pre_valid = true; + } + + const bool prefer_release = check_stable_only || !best_pre_valid; + const Semver& chosen_version = prefer_release ? best_release : best_pre; + const bool chosen_valid = prefer_release ? best_release_valid : best_pre_valid; + + if (!chosen_valid) { + if (by_user != 0) + this->no_new_version(); + return; + } + + if (current_version.valid() && chosen_version <= current_version) { + if (by_user != 0) + this->no_new_version(); + return; + } + + version_info.url = prefer_release ? best_release_url : best_pre_url; + version_info.version_str = prefer_release ? best_release.to_string_sf() : best_pre.to_string(); + version_info.description = prefer_release ? best_release_content : best_pre_content; version_info.force_upgrade = false; wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); - evt->SetString((check_stable_only ? best_release : best_pre).to_string()); + evt->SetString((prefer_release ? best_release : best_pre).to_string()); GUI::wxGetApp().QueueEvent(evt); } catch (...) {} - }) - .perform(); + }); + + http.perform(); } void GUI_App::process_network_msg(std::string dev_id, std::string msg) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a99f608247..d9c95d6d06 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10258,7 +10258,7 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false)); print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); - print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); @@ -10306,7 +10306,7 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false)); print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); - print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); @@ -10355,7 +10355,7 @@ void Plater::calib_junction_deviation(const Calib_Params& params) print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false)); print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); - print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); diff --git a/src/slic3r/GeneratedConfig.hpp.in b/src/slic3r/GeneratedConfig.hpp.in new file mode 100644 index 0000000000..130f113034 --- /dev/null +++ b/src/slic3r/GeneratedConfig.hpp.in @@ -0,0 +1,5 @@ +#pragma once + +#define ORCA_UPDATER_SIG_KEY_B64 "@ORCA_UPDATER_SIG_KEY_B64@" +#define ORCA_UPDATER_SIG_KEY_AVAILABLE @ORCA_UPDATER_SIG_KEY_AVAILABLE@ + diff --git a/src/slic3r/Utils/InstanceID.cpp b/src/slic3r/Utils/InstanceID.cpp new file mode 100644 index 0000000000..d4a903e276 --- /dev/null +++ b/src/slic3r/Utils/InstanceID.cpp @@ -0,0 +1,209 @@ +#include "InstanceID.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "libslic3r/AppConfig.hpp" +#include "libslic3r/Utils.hpp" + +namespace Slic3r { +namespace instance_id { +namespace { + +constexpr const char* CONFIG_KEY = "updater_iid"; +constexpr const char* LEGACY_KEY = "iid"; + +std::mutex& cache_mutex() +{ + static std::mutex mtx; + return mtx; +} + +std::string& cached_iid() +{ + static std::string value; + return value; +} + +bool& cache_ready() +{ + static bool ready = false; + return ready; +} + +std::optional normalize_uuid(std::string value) +{ + boost::algorithm::trim(value); + boost::algorithm::to_lower(value); + if (value.size() != 36) + return std::nullopt; + try { + const boost::uuids::uuid parsed = boost::uuids::string_generator()(value); + if (parsed.version() != boost::uuids::uuid::version_random_number_based) + return std::nullopt; + return value; + } catch (...) { + return std::nullopt; + } +} + +std::optional read_config_value(AppConfig& config) +{ + const auto read_key = [&](const char* key) -> std::optional { + const std::string raw = config.get(key); + if (raw.empty()) + return std::nullopt; + if (auto normalized = normalize_uuid(raw)) + return normalized; + return std::nullopt; + }; + + if (auto value = read_key(CONFIG_KEY)) + return value; + return read_key(LEGACY_KEY); +} + +void write_config_value(AppConfig& config, const std::string& value) +{ + config.set(CONFIG_KEY, value); + if (config.get(LEGACY_KEY) != value) + config.set(LEGACY_KEY, value); +} + +void prune_config_value(AppConfig& config) +{ + if (config.has(CONFIG_KEY)) + config.erase("app", CONFIG_KEY); + if (config.has(LEGACY_KEY)) + config.erase("app", LEGACY_KEY); +} + +boost::filesystem::path storage_path() +{ + const std::string& base_dir = Slic3r::data_dir(); + if (base_dir.empty()) + return {}; + return boost::filesystem::path(base_dir) / ".orcaslicer_machine_id"; +} + +std::optional read_storage_file() +{ + const auto path = storage_path(); + if (path.empty() || !boost::filesystem::exists(path)) + return std::nullopt; + + boost::nowide::ifstream file(path.string()); + if (!file) + return std::nullopt; + + std::string value; + std::getline(file, value); + file.close(); + + return normalize_uuid(value); +} + +bool write_storage_file(const std::string& value) +{ + if (value.empty()) + return false; + + const auto path = storage_path(); + if (path.empty()) + return false; + + const auto parent = path.parent_path(); + boost::system::error_code ec; + if (!parent.empty() && !boost::filesystem::exists(parent)) + boost::filesystem::create_directories(parent, ec); + + if (ec) + return false; + + boost::nowide::ofstream file(path.string(), std::ios::trunc); + if (!file) + return false; + + file << value; + file.close(); + + return file.good(); +} + +std::optional read_secure() +{ + return read_storage_file(); +} + +bool write_secure(const std::string& value) +{ + return write_storage_file(value); +} + +std::string generate_uuid() +{ + const auto uuid = boost::uuids::random_generator()(); + return boost::uuids::to_string(uuid); +} + +} // namespace + +std::string ensure(AppConfig& config) +{ + std::lock_guard lock(cache_mutex()); + if (cache_ready()) + return cached_iid(); + + if (auto secure = read_secure()) { + cached_iid() = *secure; + cache_ready() = true; + prune_config_value(config); + return cached_iid(); + } + + if (auto from_config = read_config_value(config)) { + cached_iid() = *from_config; + cache_ready() = true; + if (!write_secure(cached_iid())) + write_config_value(config, cached_iid()); + else + prune_config_value(config); + return cached_iid(); + } + + cached_iid() = generate_uuid(); + cache_ready() = true; + + if (!write_secure(cached_iid())) + write_config_value(config, cached_iid()); + else + prune_config_value(config); + + return cached_iid(); +} + +void reset_cache_for_tests() +{ + std::lock_guard lock(cache_mutex()); + cached_iid().clear(); + cache_ready() = false; +} + +} // namespace instance_id +} // namespace Slic3r diff --git a/src/slic3r/Utils/InstanceID.hpp b/src/slic3r/Utils/InstanceID.hpp new file mode 100644 index 0000000000..112e4af2b4 --- /dev/null +++ b/src/slic3r/Utils/InstanceID.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include + +namespace Slic3r { + +class AppConfig; + +namespace instance_id { + +// Returns the canonical IID, generating and storing one when missing. +std::string ensure(AppConfig& config); + +// Clears the cached IID (primarily for tests). +void reset_cache_for_tests(); + +} // namespace instance_id + +} // namespace Slic3r + diff --git a/version.inc b/version.inc index fa0de080fe..0ca14c629e 100644 --- a/version.inc +++ b/version.inc @@ -10,7 +10,7 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "0") endif() -set(SoftFever_VERSION "2.3.1-beta") +set(SoftFever_VERSION "2.3.2-dev") string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" SoftFever_VERSION_MATCH ${SoftFever_VERSION}) set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1}) @@ -18,3 +18,7 @@ set(ORCA_VERSION_MINOR ${CMAKE_MATCH_2}) set(ORCA_VERSION_PATCH ${CMAKE_MATCH_3}) set(SLIC3R_VERSION "01.10.01.50") + +if (NOT DEFINED ORCA_UPDATER_SIG_KEY) + set(ORCA_UPDATER_SIG_KEY "" CACHE STRING "Base64url encoded updater signature key") +endif()