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..b2ce951135 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 @@ -58,6 +58,45 @@ jobs: return $null } + function Get-ImagesFromLine($line) { + $images = @() + $lineForParsing = [regex]::Replace($line, '`[^`]*`', '') + + # Process markdown and HTML images + $imagePatterns = @( + @{ Pattern = "!\[([^\]]*)\]\(([^)]+)\)"; Type = "Markdown"; AltGroup = 1; UrlGroup = 2 } + @{ Pattern = ']*>'; Type = "HTML"; AltGroup = -1; UrlGroup = -1 } + ) + + foreach ($pattern in $imagePatterns) { + foreach ($match in [regex]::Matches($lineForParsing, $pattern.Pattern)) { + $altText = "" + $url = "" + + if ($pattern.Type -eq "Markdown") { + $altText = $match.Groups[$pattern.AltGroup].Value + $url = $match.Groups[$pattern.UrlGroup].Value + } else { + # Extract from HTML + $imgTag = $match.Value + if ($imgTag -match 'alt\s*=\s*[`"'']([^`"'']*)[`"'']') { $altText = $matches[1] } + if ($imgTag -match 'src\s*=\s*[`"'']([^`"'']*)[`"'']') { $url = $matches[1] } + } + + $images += @{ + Match = $match.Value + Type = $pattern.Type + AltText = $altText + Url = $url + StartIndex = $match.Index + Length = $match.Length + } + } + } + + return $images + } + # Initialize $tabFile = Join-Path $PWD "src/slic3r/GUI/Tab.cpp" $docDir = Join-Path $PWD 'doc' @@ -99,8 +138,35 @@ jobs: if ($inCodeFence) { continue } $lineForParsing = [regex]::Replace($line, '`[^`]*`', '') - foreach ($linkMatch in [regex]::Matches($lineForParsing, '(?]*>'; Type = "HTML"; AltGroup = -1; UrlGroup = -1 } - ) - - foreach ($pattern in $imagePatterns) { - foreach ($match in [regex]::Matches($lineForParsing, $pattern.Pattern)) { - $altText = "" - $url = "" - - if ($pattern.Type -eq "Markdown") { - $altText = $match.Groups[$pattern.AltGroup].Value - $url = $match.Groups[$pattern.UrlGroup].Value - } else { - # Extract from HTML - $imgTag = $match.Value - if ($imgTag -match 'alt\s*=\s*[`"'']([^`"'']*)[`"'']') { $altText = $matches[1] } - if ($imgTag -match 'src\s*=\s*[`"'']([^`"'']*)[`"'']') { $url = $matches[1] } - } - - if (-not $altText.Trim() -and $url) { - $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $match.Value "[$($pattern.Type)] Missing alt text for image" "Image" - } elseif ($url -and $altText) { - # Validate URL format and file existence - if ($url -match $expectedUrlPattern) { - $relativePathInUrl = $matches[1] - $fileNameFromUrl = [System.IO.Path]::GetFileNameWithoutExtension($relativePathInUrl) - - if ($altText -ne $fileNameFromUrl) { - $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $match.Value "[$($pattern.Type)] Alt text `"$altText`" ≠ filename `"$fileNameFromUrl`"" "Image" - } - - $expectedImagePath = Join-Path $PWD ($relativePathInUrl -replace "/", "\") - if (-not (Test-Path $expectedImagePath)) { - $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $match.Value "[$($pattern.Type)] Image not found at path: $relativePathInUrl" "Image" - } - } else { - $urlIssues = @() - if (-not $url.StartsWith('https://github.com/SoftFever/OrcaSlicer/blob/main/')) { $urlIssues += "URL must start with expected prefix" } - if (-not $url.EndsWith('?raw=true')) { $urlIssues += "URL must end with '?raw=true'" } - if ($url -match '^https?://(?!github\.com/SoftFever/OrcaSlicer)') { $urlIssues += "External URLs not allowed" } - - $issueText = "[$($pattern.Type)] URL format issues: " + ($urlIssues -join '; ') - $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $match.Value $issueText "Image" + foreach ($image in $imagesInLine) { + $altText = $image.AltText + $url = $image.Url + $imageMatch = $image.Match + $imageType = $image.Type + + if (-not $altText.Trim() -and $url) { + $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $imageMatch "[$imageType] Missing alt text for image" "Image" + } elseif ($url -and $altText) { + # Validate URL format and file existence + if ($url -match $expectedUrlPattern) { + $relativePathInUrl = $matches[1] + $fileNameFromUrl = [System.IO.Path]::GetFileNameWithoutExtension($relativePathInUrl) + + if ($altText -ne $fileNameFromUrl) { + $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $imageMatch "[$imageType] Alt text `"$altText`" ≠ filename `"$fileNameFromUrl`"" "Image" } + + $expectedImagePath = Join-Path $PWD ($relativePathInUrl -replace "/", "\") + if (-not (Test-Path $expectedImagePath)) { + $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $imageMatch "[$imageType] Image not found at path: $relativePathInUrl" "Image" + } + } else { + $urlIssues = @() + if (-not $url.StartsWith('https://github.com/SoftFever/OrcaSlicer/blob/main/')) { $urlIssues += "URL must start with expected prefix" } + if (-not $url.EndsWith('?raw=true')) { $urlIssues += "URL must end with '?raw=true'" } + if ($url -match '^https?://(?!github\.com/SoftFever/OrcaSlicer)') { $urlIssues += "External URLs not allowed" } + + $issueText = "[$imageType] URL format issues: " + ($urlIssues -join '; ') + $brokenReferences += Add-BrokenReference $relPath ($lineNumber + 1) $imageMatch $issueText "Image" } } } @@ -314,22 +365,4 @@ jobs: } else { Write-Host "::notice::All documentation is valid!" exit 0 - } - - - name: Comment on PR - if: failure() && github.event_name == 'pull_request' - uses: actions/github-script@v7 - with: - script: | - const validationErrors = process.env.VALIDATION_ERRORS || ''; - - const body = `❌ **Documentation validation failed** - - ${validationErrors || 'Please check the workflow logs for details about the validation errors.'}`; - - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: body - }) + } \ No newline at end of file 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/README.md b/README.md index ca3666da50..2b9f804853 100644 --- a/README.md +++ b/README.md @@ -29,10 +29,13 @@ Optimize your prints with ultra-fast slicing, intelligent support generation, an
-⚠️ CAUTION:

-There are several clickbait and malicious websites pretending to be Official OrcaSlicer. These sites may redirect you to dangerous downloads or contain misleading information. -

-If you come across any of these in search results, please report them as unsafe or phishing to help keep the community secure. +⚠️ CAUTION:
+Several clickbait and malicious websites, such as orca-slicer[.]com and orcaslicer[.]net, are pretending to be the official OrcaSlicer site. These sites may redirect you to dangerous downloads or contain misleading information.
+Our only official website is www.orcaslicer.com.

+If you come across any of these in search results, please report them as unsafe or phishing to help keep the community secure with:
+ - Google Safe Browsing
+ - Microsoft Security Intelligence
+ - IPThreat
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/calibration/input-shaping-calib.md b/doc/calibration/input-shaping-calib.md index fd0dfcc0b1..b91ee7cb5e 100644 --- a/doc/calibration/input-shaping-calib.md +++ b/doc/calibration/input-shaping-calib.md @@ -2,130 +2,124 @@ During high-speed movements, vibrations can cause a phenomenon called "ringing," where periodic ripples appear on the print surface. Input Shaping provides an effective solution by counteracting these vibrations, improving print quality and reducing wear on components without needing to significantly lower print speeds. -- [Klipper](#klipper) - - [Resonance Compensation](#resonance-compensation) -- [Marlin](#marlin) - - [ZV Input Shaping](#zv-input-shaping) +> [!IMPORTANT] +> RepRap can only set one frequency for both X and Y axes so you will need to select a frequency that works well for both axes. + +- [Types](#types) + - [Default](#default) + - [Version Table](#version-table) +- [Calibration Steps](#calibration-steps) - [Fixed-Time Motion](#fixed-time-motion) - [Credits](#credits) -## Klipper +## Types -### Resonance Compensation +It is usually recommended to use MZV, EI (specially for Delta printers) or ZV as a simple and effective solution. +Not all Input Shaping types are available in all firmware and their performance may vary depending on the firmware implementation and the printer's mechanics. -The Klipper Resonance Compensation is a set of Input Shaping modes that can be used to reduce ringing and improve print quality. -Ussualy the recommended values modes are `MZV` or `EI` for Delta printers. +### Default -1. Pre-requisites: - 1. In OrcaSlicer, set: - 1. Acceleration high enough to trigger ringing (e.g., 2000 mm/s²). - 2. Speed high enough to trigger ringing (e.g., 100 mm/s). +When "Default" is selected, the firmware's default input shaper will be used. +Every firmware and even its version may have a different default type but usually are: -> [!NOTE] -> These settings depend on your printer's motion ability and the filament's max volumetric speed. If you can't reach speeds that cause ringing, try increasing the filament's max volumetric speed (avoid materials below 10 mm³/s). - 3. Jerk [Klipper Square Corner Velocity](https://www.klipper3d.org/Kinematics.html?h=square+corner+velocity#look-ahead) to 5 or a high value (e.g., 20). +- Klipper: MZV +- Marlin: ZV +- RepRap: + - Version >= 3.4: MZV + - Version < 3.4: DAA + - Version < 3.2: DAA (without damping option) - 2. In printer settigs: - 1. Set the Shaper Type to `MZV` or `EI`. - ```gcode - SET_INPUT_SHAPER SHAPER_TYPE=MZV - ``` - 2. Disable [Minimun Cruise Ratio](https://www.klipper3d.org/Kinematics.html#minimum-cruise-ratio) with: - ```gcode - SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0 - ``` - 3. Use an opaque, high-gloss filament to make the ringing more visible. -2. Print the Input Shaping Frequency test with a range of frequencies. +### Version Table - ![IS_freq_menu](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_menu.png?raw=true) +| Type | Name | [Klipper](https://www.klipper3d.org/Resonance_Compensation.html#technical-details) | [RepRap](https://docs.duet3d.com/User_manual/Reference/Gcodes#m593-configure-input-shaping) | [Marlin 2](https://marlinfw.org/docs/features/ft_motion.html#more-complexity-zv-input-shaper) | Marlin Legacy | +|---|---|---|---|---|---| +| MZV | Modified Zero Vibration | >=0.9.0 | >=3.4 | - | - | +| ZV | Zero Vibration | >=0.9.0 | = 3.5 | >2.1.2 | - | +| ZVD | Zero Vibration Derivative | >=0.9.0 | >=3.4 | - | - | +| ZVDD | Zero Vibration Double Derivative | - | >=3.4 | - | - | +| ZVDDD | Zero Vibration Triple Derivative | - | >=3.4 | - | - | +| EI | Extra Insensitive | >=0.9.0 | - | - | - | +| 2HUMP_EI / EI2 | Two-Hump Extra Insensitive | >=0.9.0 | >=3.4 | - | - | +| 3HUMP_EI / EI3 | Three-Hump Extra Insensitive | >=0.9.0 | >=3.4 | - | - | +| [FT_MOTION](https://marlinfw.org/docs/features/ft_motion.html#fixed-time-motion-by-ulendo) | Fixed-Time Motion | - | - | >2.1.3 | - | +| DAA | Damped Anti-Resonance | - | < 3.4 | - | - | - 1. Measure the X and Y heights and read the frequency set at that point in OrcaSlicer. +## Calibration Steps - ![IS_damp_klipper_print_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg?raw=true) - ![IS_freq_klipper_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_klipper_slicer_measure.png?raw=true) - - 2. If not a clear result, you can measure a X and Y min and max acceptable heights and repeat the test with that min and max value. - -> [!WARNING] -> There is a chance you will need to set higher than 60Hz frequencies. Some printers with very rigid frames and excellent mechanics may exhibit frequencies exceeding 100Hz. - -3. Print the Damping test setting your X and Y frequency to the value you found in the previous step. - - ![IS_damp_menu](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_menu.png?raw=true) - - 1. Measure the X and Y heights and read the damping set at that point in OrcaSlicer. - - ![IS_damp_klipper_print_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg?raw=true) - ![IS_damp_klipper_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_klipper_slicer_measure.png?raw=true) +0. Pre-requisites: + 1. Use an opaque, high-gloss filament to make the ringing more visible. + 2. In OrcaSlicer, set: + 1. Acceleration high enough to trigger ringing (e.g., 20000 mm/s²). + 2. Speed high enough to trigger ringing (e.g., 200 mm/s). > [!IMPORTANT] -> Not all Resonance Compensation modes support damping. - -4. Restore your 3D Printer settings to avoid keep using high acceleration and jerk values. -5. Save the settings - 1. You need to go to the printer settings and set the X and Y frequency and damp to the value you found in the previous step. - -## Marlin - -### ZV Input Shaping - -ZV Input Shaping introduces an anti-vibration signal into the stepper motion for the X and Y axes. It works by splitting the step count into two halves: the first at half the frequency and the second as an "echo," delayed by half the ringing interval. This simple approach effectively reduces vibrations, improving print quality and allowing for higher speeds. - -1. Pre-requisites: - 1. In OrcaSlicer, set: - 1. Acceleration high enough to trigger ringing (e.g., 2000 mm/s²). - 2. Speed high enough to trigger ringing (e.g., 100 mm/s). - -> [!NOTE] -> These settings depend on your printer's motion ability and the filament's max volumetric speed. If you can't reach speeds that cause ringing, try increasing the filament's max volumetric speed (avoid materials below 10 mm³/s). - - 3. Jerk - 1. If using [Classic Jerk](https://marlinfw.org/docs/configuration/configuration.html#jerk-) use a high value (e.g., 20). - 2. If using [Junction Deviation](https://marlinfw.org/docs/features/junction_deviation.html) (new Marlin default mode) this test will use 0.25 (high enough to most printers). - 2. Use an opaque, high-gloss filament to make the ringing more visible. -2. Print the Input Shaping Frequency test with a range of frequencies. +> It's recommended to use the fastest [acceleration](speed_settings_acceleration), [speed](speed_settings_other_layers_speed) and [Jerk/Junction Deviation](speed_settings_jerk_xy) your printer can handle without losing steps. +> This test **will set the values to high values** limited by your printer's motion ability and the filament's max volumetric speed (avoid materials below 10 mm³/s). +1. Select the Test Model ´Ringing Tower´ (Recommended) or ´Fast Tower´ (Reduced version useful for printers with high ringing). +2. Select the [Input Shaper Type](#types) you want to test. Each firmware has different types available and each type has different performance. +3. Select a range of frequencies to test. The Default 15hz to 110hz range is usually a good start. +4. Select your damping. Usually, a value between 0.1 and 0.2 is a good start but you can change it to 0 and your printer will use the firmware default value (if available). ![IS_freq_menu](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_menu.png?raw=true) - - 1. Measure the X and Y heights and read the frequency set at that point in OrcaSlicer. - - ![IS_freq_marlin_print_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg?raw=true) - ![IS_freq_marlin_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_marlin_slicer_measure.png?raw=true) - + 1. Measure the X and Y heights and read the frequency set at that point in OrcaSlicer. + ![IS_freq_marlin_print_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg?raw=true) + - Marlin: + ![IS_freq_marlin_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_marlin_slicer_measure.png?raw=true) + - Klipper: + ![IS_freq_klipper_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_freq_klipper_slicer_measure.png?raw=true) 2. If not a clear result, you can measure a X and Y min and max acceptable heights and repeat the test with that min and max value. - -> [!WARNING] -> There is a chance you will need to set higher than 60Hz frequencies. Some printers with very rigid frames and excellent mechanics may exhibit frequencies exceeding 100Hz. - -3. Print the Damping test setting your X and Y frequency to the value you found in the previous step. - +5. Print the Damping test setting your X and Y frequency to the value you found in the previous step. ![IS_damp_menu](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_menu.png?raw=true) + 1. Measure the X and Y heights and read the damping set at that point in OrcaSlicer. + ![IS_damp_marlin_print_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_marlin_print_measure.jpg?raw=true) + - Marlin: + ![IS_damp_marlin_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_marlin_slicer_measure.png?raw=true) + - Klipper: + ![IS_damp_klipper_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_klipper_slicer_measure.png?raw=true) - 1. Measure the X and Y heights and read the damping set at that point in OrcaSlicer. - - ![IS_damp_marlin_print_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_marlin_print_measure.jpg?raw=true) - ![IS_damp_marlin_slicer_measure](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_marlin_slicer_measure.png?raw=true) - -4. Restore your 3D Printer settings to avoid keep using high acceleration and jerk values. - 1. Reboot your printer. - 2. Use the following G-code to restore your printer settings: - ```gcode - M501 - ``` -5. Save the settings - 1. You need to go to the printer settings and set the X and Y frequency and damp to the value you found in the previous step. - 2. Use the following G-code to set the frequency: - ```gcode - M593 X F#Xfrequency D#XDamping - M593 Y F#Yfrequency D#YDamping - M500 - ``` - Example - ```gcode - M593 X F37.25 D0.16 - M593 Y F37.5 D0.06 - M500 - ``` +6. **Restore your 3D Printer settings to avoid keep using high acceleration and jerk values.** +7. Save the settings + - Into your printer firmware settings save the values you found (Type, frequency/cies and damp) + - Save it into Orca's printer profile settings in Printer settings/ Machine G-code/ Machine start G-code using the following G-code: + - Klipper: + - Skeleton + ```gcode + SET_INPUT_SHAPER SHAPER_TYPE=TYPE SHAPER_FREQ_X=#Xfrequency DAMPING_RATIO_X=#XDamping SHAPER_FREQ_Y=#Yfrequency DAMPING_RATIO_Y=#YDamping + ``` + Example + ```gcode + SET_INPUT_SHAPER SHAPER_TYPE=MZV SHAPER_FREQ_X=37.25 DAMPING_RATIO_X=0.16 SHAPER_FREQ_Y=37.5 DAMPING_RATIO_Y=0.06 + ``` + - Marlin: + - Skeleton + ```gcode + M593 X F#Xfrequency D#XDamping + M593 Y F#Yfrequency D#YDamping + M500 + ``` + Example + ```gcode + M593 X F37.25 D0.16 + M593 Y F37.5 D0.06 + M500 + ``` + - RepRap: + - Skeleton for RepRap 3.3 and later + ```gcode + M593 P#Type F#frequency S#Damping + ``` + Example RepRap 3.4 and later + ```gcode + M593 P"ZVD" F37.25 S0.16 + ``` + - Skeleton for RepRap 3.2 and earlier + ```gcode + M593 F#frequency + ``` + Example Legacy (RepRap 3.2 and earlier) + ```gcode + M593 F37.25 + ``` ### Fixed-Time Motion diff --git a/doc/developer-reference/How-to-build.md b/doc/developer-reference/How-to-build.md index 62c451cb19..fcebbf4ee7 100644 --- a/doc/developer-reference/How-to-build.md +++ b/doc/developer-reference/How-to-build.md @@ -84,19 +84,34 @@ How to building with Visual Studio 2022 on Windows 64-bit. ``` > [!NOTE] +> The build process will take a long time depending on your system but even with high-end hardware it can take up to 40 minutes. + +> [!TIP] > If you encounter issues, you can try to uninstall ZLIB from your Vcpkg library. -3. If successful, you will find the VS 2022 solution file in: +3. If successful, you will find the Visual Studio solution file in: ```shell build\OrcaSlicer.sln ``` +4. Open the solution in Visual Studio, set the build configuration to `Release` and run the `Local Windows Debugger`. + ![compile_vs2022_local_debugger](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/compile_vs2022_local_debugger.png?raw=true) +5. Your resulting executable will be located in: + ```shell + \build\src\Release\orca-slicer.exe + ``` + +> [!NOTE] +> The first time you build a branch, it will take a long time. +> Changes to .cpp files are quickly compiled. +> Changes to .hpp files take longer, depending on what you change. +> If you switch back and forth between branches, it also takes a long time to rebuild, even if you haven't made any changes. > [!IMPORTANT] > Make sure that CMake version 3.31.x is actually being used. Run `cmake --version` and verify it returns a **3.31.x** version. > If you see an older version (e.g. 3.29), it's likely due to another copy in your system's PATH (e.g. from Strawberry Perl). > You can run where cmake to check the active paths and rearrange your **System Environment Variables** > PATH, ensuring the correct CMake (e.g. C:\Program Files\CMake\bin) appears before others like C:\Strawberry\c\bin. -> [!NOTE] +> [!TIP] > If the build fails, try deleting the `build/` and `deps/build/` directories to clear any cached build data. Rebuilding after a clean-up is usually sufficient to resolve most issues. ## MacOS 64-bit diff --git a/doc/developer-reference/How-to-create-profiles.md b/doc/developer-reference/How-to-create-profiles.md index cc368bdeba..2c92d40b32 100644 --- a/doc/developer-reference/How-to-create-profiles.md +++ b/doc/developer-reference/How-to-create-profiles.md @@ -139,9 +139,9 @@ The following sample JSON file shows how to create a new generic filament profil > When developing profiles, you may notice that changes aren't reflected in OrcaSlicer after editing profile files. This happens because OrcaSlicer caches profiles in the system folder. > To force OrcaSlicer to load your updated profiles: > 1. **Access the configuration folder**: Go to **Help** → **Show Configuration Folder** -> ![Help menu](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/go-to-configuration-folder.jpeg?raw=true) +> ![go-to-configuration-folder](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/go-to-configuration-folder.png?raw=true) > 2. **Clear the cache**: Delete the `system` folder to remove cached profiles -> ![Delete system folder](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/profile-delete-system-folder.jpeg?raw=true) +> ![profile-delete-system-folder](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/develop/profile-delete-system-folder.png?raw=true) > 3. **Restart OrcaSlicer**: Launch the application to load your updated profiles > This process forces OrcaSlicer to update its profile cache from the source files in the `resources/profiles/` directory. diff --git a/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg b/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg deleted file mode 100644 index a4dc561ec7..0000000000 Binary files a/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg and /dev/null differ diff --git a/doc/images/InputShaping/IS_damp_menu.png b/doc/images/InputShaping/IS_damp_menu.png index bb3674826d..70460f7aef 100644 Binary files a/doc/images/InputShaping/IS_damp_menu.png and b/doc/images/InputShaping/IS_damp_menu.png differ diff --git a/doc/images/InputShaping/IS_freq_klipper_print_measure.jpg b/doc/images/InputShaping/IS_freq_klipper_print_measure.jpg deleted file mode 100644 index 812236d590..0000000000 Binary files a/doc/images/InputShaping/IS_freq_klipper_print_measure.jpg and /dev/null differ diff --git a/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg b/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg index db7080cb3d..00c4a54098 100644 Binary files a/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg and b/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg differ diff --git a/doc/images/InputShaping/IS_freq_menu.png b/doc/images/InputShaping/IS_freq_menu.png index e4764b50bf..3589e1d51a 100644 Binary files a/doc/images/InputShaping/IS_freq_menu.png and b/doc/images/InputShaping/IS_freq_menu.png differ diff --git a/doc/images/develop/compile_vs2022_local_debugger.png b/doc/images/develop/compile_vs2022_local_debugger.png new file mode 100644 index 0000000000..ea5aaee19e Binary files /dev/null and b/doc/images/develop/compile_vs2022_local_debugger.png differ diff --git a/doc/images/develop/go-to-configuration-folder.jpeg b/doc/images/develop/go-to-configuration-folder.jpeg deleted file mode 100644 index 2fb48ca919..0000000000 Binary files a/doc/images/develop/go-to-configuration-folder.jpeg and /dev/null differ diff --git a/doc/images/develop/go-to-configuration-folder.png b/doc/images/develop/go-to-configuration-folder.png new file mode 100644 index 0000000000..c5b9cdcec8 Binary files /dev/null and b/doc/images/develop/go-to-configuration-folder.png differ diff --git a/doc/images/develop/profile-delete-system-folder.jpeg b/doc/images/develop/profile-delete-system-folder.jpeg deleted file mode 100644 index fc9a2a24d4..0000000000 Binary files a/doc/images/develop/profile-delete-system-folder.jpeg and /dev/null differ diff --git a/doc/images/develop/profile-delete-system-folder.png b/doc/images/develop/profile-delete-system-folder.png new file mode 100644 index 0000000000..e89d2cfaad Binary files /dev/null and b/doc/images/develop/profile-delete-system-folder.png differ diff --git a/doc/images/fill/extra-solid-infill.gif b/doc/images/fill/extra-solid-infill.gif index 2ce6b62c01..a5fc712aa3 100644 Binary files a/doc/images/fill/extra-solid-infill.gif and b/doc/images/fill/extra-solid-infill.gif differ diff --git a/doc/images/fill/fill-layer-time-variability.png b/doc/images/fill/fill-layer-time-variability.png new file mode 100644 index 0000000000..7558036dea Binary files /dev/null and b/doc/images/fill/fill-layer-time-variability.png differ 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/doc/print_settings/quality/quality_settings_ironing.md b/doc/print_settings/quality/quality_settings_ironing.md index 5b34cfb31a..c764a9124c 100644 --- a/doc/print_settings/quality/quality_settings_ironing.md +++ b/doc/print_settings/quality/quality_settings_ironing.md @@ -33,7 +33,9 @@ The pattern that will be used when ironing. Usually, the best pattern is the one ## Flow The amount of material to extrude during ironing. -This % is a percentage of the normal flow rate. A lower value will result in a smoother finish but may not cover the surface completely. A higher value may cover the surface better but can lead to over extrusion or rougher finish. +This % is a percentage of the normal flow rate. A lower value will result in a smoother finish but may not cover the surface completely. A higher value may cover the surface better but can lead to over extrusion or rougher finish. + +A lower layer height may require higher flow due to less volumetric extrusion per distance. ## Line spacing @@ -48,10 +50,9 @@ The distance to keep from the edges, which can help prevent over-extrusion at th If this value is set to 0, the ironing toolpath will start directly at the perimeter edges without any inward offset. This means the [ironing pattern](#pattern) will extend all the way to the outer boundaries of the top surface being ironed. -## Angle +## Angle Offset -The angle ironing is done at. -A negative number disables this function and uses the [sparse infill direction](strength_settings_infill#direction). +The angle of ironing lines offset relative to the top surface solid infill direction. Commonly used ironing angle offsets are 0°, 45°, and 90° each producing a [different surface finish](https://github.com/SoftFever/OrcaSlicer/issues/10834#issuecomment-3322628589) which will depend on your printer nozzle. ## Speed diff --git a/doc/print_settings/quality/quality_settings_precision.md b/doc/print_settings/quality/quality_settings_precision.md index 5801688f6b..c5a8682241 100644 --- a/doc/print_settings/quality/quality_settings_precision.md +++ b/doc/print_settings/quality/quality_settings_precision.md @@ -63,7 +63,7 @@ To mitigate this effect, OrcaSlicer allows you to specify a negative distance th ## Precise wall -The 'Precise Wall' is a distinctive feature introduced by OrcaSlicer, aimed at improving the dimensional accuracy of prints and minimizing layer inconsistencies by slightly increasing the spacing between the outer wall and the inner wall. +The 'Precise Wall' is a distinctive feature introduced by OrcaSlicer, aimed at improving the dimensional accuracy of prints and minimizing layer inconsistencies by slightly increasing the spacing between the outer wall and the inner wall when printing in [Inner Outer wall order](quality_settings_wall_and_surfaces#innerouter). ### Technical explanation diff --git a/doc/print_settings/quality/quality_settings_wall_and_surfaces.md b/doc/print_settings/quality/quality_settings_wall_and_surfaces.md index e880d600bc..fce72eff22 100644 --- a/doc/print_settings/quality/quality_settings_wall_and_surfaces.md +++ b/doc/print_settings/quality/quality_settings_wall_and_surfaces.md @@ -60,7 +60,9 @@ Set this to any option other than Auto will force the wall direction regardless ## Surface flow ratio This factor affects the amount of material for [top or bottom solid infill](strength_settings_top_bottom_shells). You can decrease it slightly to have smooth surface finish. -The actual top surface flow used is calculated by multiplying this value with the filament flow ratio, and if set, the object's flow ratio. +The actual top or bottom surface flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio. + +Other flow ratios, such as ratios for the first layer (does not affect brims and skirts), outer and inner walls, overhang perimeters, sparse infill, internal solid infill, gap fill, support, and support interfaces, can also be adjusted after enabling the "Set other flow ratios" option. > [!TIP] > Before using a value other than 1, it is recommended to [calibrate the flow ratio](flow-rate-calib) to ensure that the flow ratio is set correctly for your printer and filament. @@ -92,6 +94,9 @@ Highly recommended for detailed or aesthetic prints. ![avoid-crossing-walls](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Wall-Order/avoid-crossing-walls.png?raw=true) +> [!NOTE] +> This feature is not compatible with Timelapse mode, as it can cause unexpected travel moves. + ### Max detour length Defines the maximum distance the printer is allowed to detour to avoid crossing a wall. diff --git a/doc/print_settings/strength/infill-analysis/infill-analysis.7z b/doc/print_settings/strength/infill-analysis/infill-analysis.7z new file mode 100644 index 0000000000..4d0404eb4f Binary files /dev/null and b/doc/print_settings/strength/infill-analysis/infill-analysis.7z differ diff --git a/doc/print_settings/strength/infill-analysis/infill_desc_calculator.xlsx b/doc/print_settings/strength/infill-analysis/infill_desc_calculator.xlsx new file mode 100644 index 0000000000..8534aa34ec Binary files /dev/null and b/doc/print_settings/strength/infill-analysis/infill_desc_calculator.xlsx differ diff --git a/doc/print_settings/strength/infill_desc_calculator.xlsx b/doc/print_settings/strength/infill_desc_calculator.xlsx deleted file mode 100644 index a76f943a91..0000000000 Binary files a/doc/print_settings/strength/infill_desc_calculator.xlsx and /dev/null differ diff --git a/doc/print_settings/strength/strength_settings_patterns.md b/doc/print_settings/strength/strength_settings_patterns.md index 5c75756a41..94c1a243d3 100644 --- a/doc/print_settings/strength/strength_settings_patterns.md +++ b/doc/print_settings/strength/strength_settings_patterns.md @@ -1,58 +1,95 @@ # Patterns -Patterns determine how material is distributed within a print. Different patterns can affect strength, flexibility and print speed using the same density setting. +Patterns determine how material is distributed within a print. Different patterns can affect strength, flexibility and print speed using the same density setting. +The infill pattern also impacts the uniformity of the layer times, since the patterns may be constant, or present significant variations between adjacent layers. There is no one-size-fits-all solution, as the best pattern depends on the specific print and its requirements. Many patterns may look similar and have similar overall specifications, but they can behave very differently in practice. As most settings in 3D printing, experience is the best way to determine which pattern works best for your specific needs. -## Patterns Quick Reference +## Analysis parameters -| | Pattern | Applies to | X-Y Strength | Z Strength | Material Usage | Print Time | -|---|---|---|---|---|---|---| -| ![param_monotonic](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_monotonic.svg?raw=true) | [Monotonic](#monotonic) | - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** | Normal | Normal | Normal-High | Normal-Low | -| ![param_monotonicline](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_monotonicline.svg?raw=true) | [Monotonic line](#monotonic-line) | - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** | Normal | Normal | Normal | Normal | -| ![param_rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_rectilinear.svg?raw=true) | [Rectilinear](#rectilinear) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** - **[Ironing](quality_settings_ironing)** | Normal-Low | Low | Normal | Normal-Low | -| ![param_alignedrectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_alignedrectilinear.svg?raw=true) | [Aligned Rectilinear](#aligned-rectilinear) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** | Normal-Low | Normal | Normal | Normal-Low | -| ![param_zigzag](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_zigzag.svg?raw=true) | [Zig Zag](#zig-zag) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-Low | Low | Normal | Normal-Low | -| ![param_crosszag](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_crosszag.svg?raw=true) | [Cross Zag](#cross-zag) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal | Low | Normal | Normal-Low | -| ![param_lockedzag](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_lockedzag.svg?raw=true) | [Locked Zag](#locked-zag) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-Low | Normal-Low | Low | Extra-High | -| ![param_line](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_line.svg?raw=true) | [Line](#line) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Low | Low | Normal-High | Normal-Low | -| ![param_grid](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_grid.svg?raw=true) | [Grid](#grid) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | High | Normal-High | Normal-Low | -| ![param_triangles](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_triangles.svg?raw=true) | [Triangles](#triangles) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | Normal | Normal-High | Normal-Low | -| ![param_tri-hexagon](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_tri-hexagon.svg?raw=true) | [Tri-hexagon](#tri-hexagon) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | Normal-High | Normal-High | Normal-Low | -| ![param_cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_cubic.svg?raw=true) | [Cubic](#cubic) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | High | Normal-High | Normal-Low | -| ![param_adaptivecubic](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_adaptivecubic.svg?raw=true) | [Adaptive Cubic](#adaptive-cubic) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-High | Normal-High | Normal | Low | -| ![param_quartercubic](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_quartercubic.svg?raw=true) | [Quarter Cubic](#quarter-cubic) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | High | Normal-High | Normal-Low | -| ![param_supportcubic](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_supportcubic.svg?raw=true) | [Support Cubic](#support-cubic) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Low | Low | Normal | Extra-Low | -| ![param_lightning](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_lightning.svg?raw=true) | [Lightning](#lightning) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Low | Low | Low | Ultra-Low | -| ![param_honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_honeycomb.svg?raw=true) | [Honeycomb](#honeycomb) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | High | Low | Ultra-High | -| ![param_3dhoneycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_3dhoneycomb.svg?raw=true) | [3D Honeycomb](#3d-honeycomb) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-High | Normal-High | Low | High | -| ![param_lateral-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_lateral-honeycomb.svg?raw=true) | [Lateral Honeycomb](#lateral-honeycomb) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-Low | Normal-Low | Normal-High | Normal-Low | -| ![param_lateral-lattice](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_lateral-lattice.svg?raw=true) | [Lateral Lattice](#lateral-lattice) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-Low | Low | Normal-High | Normal-Low | -| ![param_crosshatch](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_crosshatch.svg?raw=true) | [Cross Hatch](#cross-hatch) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-High | Normal-High | Normal-Low | Normal-High | -| ![param_tpmsd](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_tpmsd.svg?raw=true) | [TPMS-D](#tpms-d) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | High | Normal-Low | High | -| ![param_tpmsfk](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_tpmsfk.svg?raw=true) | [TPMS-FK](#tpms-fk) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | Normal-High | Normal-High | Low | High | -| ![param_gyroid](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_gyroid.svg?raw=true) | [Gyroid](#gyroid) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** | High | High | Normal-Low | Normal-High | -| ![param_concentric](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_concentric.svg?raw=true) | [Concentric](#concentric) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** - **[Ironing](quality_settings_ironing)** | Low | Normal | Normal-High | Normal-Low | -| ![param_hilbertcurve](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_hilbertcurve.svg?raw=true) | [Hilbert Curve](#hilbert-curve) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** | Low | Normal | Low | High | -| ![param_archimedeanchords](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_archimedeanchords.svg?raw=true) | [Archimedean Chords](#archimedean-chords) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** | Low | Normal | Normal-High | Normal-Low | -| ![param_octagramspiral](https://github.com/SoftFever/OrcaSlicer/blob/main/resources/images/param_octagramspiral.svg?raw=true) | [Octagram Spiral](#octagram-spiral) | - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** | Low | Normal | Normal-Low | Normal | +### Strength + +- **X-Y Direction**: The strength of the print in the "Horizontal" X-Y plane. Affected by the pattern's connections between walls, contact between layers, and path. +- **Z Direction**: The strength of the print in the "Vertical" Z direction. Affected by contact between layers. + +### Material Usage + +Not all patterns use the same amount of material due to their **Density Calculations** and adjustments to the paths. +This leads to patterns that do not use the specified percentage but rather variations of it. + +### Print Time + +Print time can vary significantly between patterns due to differences in their pathing and infill strategies. +Some patterns may complete faster due to more efficient use of the print head's movement, while others may take longer due to more complex paths. > [!NOTE] -> You can download [infill_desc_calculator.xlsx](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/print_settings/strength/infill_desc_calculator.xlsx?raw=true) used to calculate the values above. +> OrcaSlicer Time estimations are not always accurate, especially with complex patterns. +> This analysis was estimated with [Klipper Estimator](https://github.com/Annex-Engineering/klipper_estimator). + +### Layer Time Variability + +Layer time variability refers to the differences in time it takes to print each layer of a pattern. Some patterns may have consistent layer times, while others may experience significant fluctuations. These variations can potentially impact the outer appearance of the print due to differences in cooling and material flow between layers. + +![fill-layer-time-variability](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/fill-layer-time-variability.png?raw=true) + +## Patterns Quick Reference + +| - | Pattern | Strength | Material Usage | Print Time | Layer time Variability | +|---|---|---|---|---|---| +| param_monotonic | [Monotonic](#monotonic) | X-Y: ⚪️ Normal
Z: ⚪️ Normal | ⚪️ Normal | 🔘 Normal-Low | 🟢 None | +| param_monotonicline | [Monotonic line](#monotonic-line) | X-Y: ⚪️ Normal
Z: ⚪️ Normal | ⚪️ Normal | 🔘 Normal-Low | 🟢 None | +| param_rectilinear | [Rectilinear](#rectilinear) | X-Y: ⚪️ Normal-Low
Z: 🟡 Low | ⚪️ Normal | 🔘 Normal-Low | 🔵 Unnoticeable | +| param_alignedrectilinear | [Aligned Rectilinear](#aligned-rectilinear) | X-Y: ⚪️ Normal-Low
Z: ⚪️ Normal | ⚪️ Normal | 🔘 Normal-Low | 🔵 Unnoticeable | +| param_zigzag | [Zig Zag](#zig-zag) | X-Y: ⚪️ Normal-Low
Z: 🟡 Low | ⚪️ Normal | 🔘 Normal-Low | 🔵 Unnoticeable | +| param_crosszag | [Cross Zag](#cross-zag) | X-Y: ⚪️ Normal
Z: 🟡 Low | ⚪️ Normal | 🔘 Normal-Low | 🔵 Unnoticeable | +| param_lockedzag | [Locked Zag](#locked-zag) | X-Y: ⚪️ Normal-Low
Z: ⚪️ Normal-Low | ⚪️ Normal-High | ⚪️ Normal-High | 🟢 None | +| param_line | [Line](#line) | X-Y: 🟡 Low
Z: 🟡 Low | ⚪️ Normal | 🔘 Normal-Low | 🟢 None | +| param_grid | [Grid](#grid) | X-Y: 🟣 High
Z: 🟣 High | ⚪️ Normal | 🟣 Low | 🟢 None | +| param_triangles | [Triangles](#triangles) | X-Y: 🟣 High
Z: ⚪️ Normal | ⚪️ Normal | 🔘 Normal-Low | 🟢 None | +| param_tri-hexagon | [Tri-hexagon](#tri-hexagon) | X-Y: 🟣 High
Z: 🔘 Normal-High | ⚪️ Normal | 🔘 Normal-Low | 🟢 None | +| param_cubic | [Cubic](#cubic) | X-Y: 🟣 High
Z: 🟣 High | ⚪️ Normal | 🔘 Normal-Low | 🔵 Unnoticeable | +| param_adaptivecubic | [Adaptive Cubic](#adaptive-cubic) | X-Y: 🔘 Normal-High
Z: 🔘 Normal-High | 🟣 Low | 🟣 Low | 🔵 Unnoticeable | +| param_quartercubic | [Quarter Cubic](#quarter-cubic) | X-Y: 🟣 High
Z: 🟣 High | ⚪️ Normal | 🔘 Normal-Low | 🔵 Unnoticeable | +| param_supportcubic | [Support Cubic](#support-cubic) | X-Y: 🟡 Low
Z: 🟡 Low | 🔵 Extra-Low | 🔵 Extra-Low | 🔴 Likely Noticeable | +| param_lightning | [Lightning](#lightning) | X-Y: 🟡 Low
Z: 🟡 Low | 🟢 Ultra-Low | 🟢 Ultra-Low | 🔴 Likely Noticeable | +| param_honeycomb | [Honeycomb](#honeycomb) | X-Y: 🟣 High
Z: 🟣 High | 🟡 High | 🔴 Ultra-High | 🟢 None | +| param_3dhoneycomb | [3D Honeycomb](#3d-honeycomb) | X-Y: 🔘 Normal-High
Z: 🔘 Normal-High | 🔘 Normal-Low | 🟠 Extra-High | 🟡 Possibly Noticeable | +| param_lateral-honeycomb | [Lateral Honeycomb](#lateral-honeycomb) | X-Y: ⚪️ Normal-Low
Z: ⚪️ Normal-Low | ⚪️ Normal | 🔘 Normal-Low | 🟡 Possibly Noticeable | +| param_lateral-lattice | [Lateral Lattice](#lateral-lattice) | X-Y: ⚪️ Normal-Low
Z: 🟡 Low | ⚪️ Normal | 🔘 Normal-Low | 🔵 Unnoticeable | +| param_crosshatch | [Cross Hatch](#cross-hatch) | X-Y: 🔘 Normal-High
Z: 🔘 Normal-High | ⚪️ Normal | 🟡 High | 🔴 Likely Noticeable | +| param_tpmsd | [TPMS-D](#tpms-d) | X-Y: 🟣 High
Z: 🟣 High | ⚪️ Normal | 🟡 High | 🟡 Possibly Noticeable | +| param_tpmsfk | [TPMS-FK](#tpms-fk) | X-Y: 🔘 Normal-High
Z: 🔘 Normal-High | ⚪️ Normal | 🔴 Ultra-High | 🟡 Possibly Noticeable | +| param_gyroid | [Gyroid](#gyroid) | X-Y: 🟣 High
Z: 🟣 High | ⚪️ Normal | 🔴 Ultra-High | 🔵 Unnoticeable | +| param_concentric | [Concentric](#concentric) | X-Y: 🟡 Low
Z: ⚪️ Normal | ⚪️ Normal | 🔘 Normal-Low | 🟢 None | +| param_hilbertcurve | [Hilbert Curve](#hilbert-curve) | X-Y: 🟡 Low
Z: ⚪️ Normal | ⚪️ Normal | 🟠 Extra-High | 🟢 None | +| param_archimedeanchords | [Archimedean Chords](#archimedean-chords) | X-Y: 🟡 Low
Z: ⚪️ Normal | ⚪️ Normal | 🔘 Normal-Low | 🟢 None | +| param_octagramspiral | [Octagram Spiral](#octagram-spiral) | X-Y: 🟡 Low
Z: ⚪️ Normal | ⚪️ Normal | ⚪️ Normal | 🟢 None | + +> [!NOTE] +> This estimations are based in a Cube model to maintain consistency. +> This **WILL NOT** be the same for all models and only serves as a standard guideline. + +> [!TIP] +> You can see how this analysis was made in [infill-analysis](https://github.com/SoftFever/OrcaSlicer/tree/main/doc/print_settings/strength/infill-analysis) folder: +> - [Infill calculator Project](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/print_settings/strength/infill-analysis/infill_calculator.3mf?raw=true) to generate the gcode files and images. +> - [infill_desc_calculator.xlsx](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/print_settings/strength/infill-analysis/infill_desc_calculator.xlsx?raw=true) used to calculate the values above. +> - Time, and material usage where simulated with the same [Klipper Estimator](https://github.com/Annex-Engineering/klipper_estimator) values to maintain consistency. ## Monotonic [Rectilinear](#rectilinear) in a uniform direction for a smoother visual surface. -- **Horizontal Strength (X-Y):** Normal -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** @@ -63,12 +100,14 @@ As most settings in 3D printing, experience is the best way to determine which p [Monotonic](#monotonic) but avoids overlapping with the perimeter, reducing excess material at joints. May introduce visible seams and increase print time. -- **Horizontal Strength (X-Y):** Normal -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal -- **Material/Time (Higher better):** Normal + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** @@ -79,14 +118,17 @@ As most settings in 3D printing, experience is the best way to determine which p Parallel lines spaced according to infill density. Each layer is printed perpendicular to the previous, resulting in low vertical bonding. Consider using new [Zig Zag](#zig-zag) infill instead. -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Low +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal-Low + - **Vertical (Z):** 🟡 Low - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** + - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** + - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** - **[Ironing](quality_settings_ironing)** @@ -97,14 +139,17 @@ Parallel lines spaced according to infill density. Each layer is printed perpend Parallel lines spaced by the infill spacing, each layer printed in the same direction as the previous layer. Good horizontal strength perpendicular to the lines, but terrible in parallel direction. Recommended with layer anchoring to improve not perpendicular strength. -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal-Low + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** + - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** + - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** ![infill-top-aligned-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-aligned-rectilinear.png?raw=true) @@ -113,12 +158,14 @@ Recommended with layer anchoring to improve not perpendicular strength. Similar to [rectilinear](#rectilinear) with consistent pattern between layers. Allows you to add a Symmetric infill Y axis for models with two symmetric parts. -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Low +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal-Low + - **Vertical (Z):** 🟡 Low - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -128,12 +175,14 @@ Similar to [rectilinear](#rectilinear) with consistent pattern between layers. A Similar to [Zig Zag](#zig-zag) but displacing each layer with Infill shift step parameter. -- **Horizontal Strength (X-Y):** Normal -- **Vertical Strength (Z):** Low +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal + - **Vertical (Z):** 🟡 Low - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -141,14 +190,18 @@ Similar to [Zig Zag](#zig-zag) but displacing each layer with Infill shift step ## Locked Zag -Adaptive version of [Zig Zag](#zig-zag) adding an external skin texture to interlock layers and a low material skeleton. +Version of [Zig Zag](#zig-zag) that adds extra skin. +When using this fill, you can individually modify the density of the skeleton and skin, as well as the size of the skin and how much interconnection there is between the skin and the skeleton (a lock depth of 50% of the skin depth is recommended). -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Normal-Low -- **Density Calculation:** Same as [Zig Zag](#zig-zag) but increasing near walls -- **Material Usage:** Normal-High -- **Print Time:** Extra-High -- **Material/Time (Higher better):** Low +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal-Low + - **Vertical (Z):** ⚪️ Normal-Low +- **Density Calculation:** Similar to [Zig Zag](#zig-zag). +Skin density * ( Infill Area - Skin Area + lock depth area) + ( Skin density * Skin area). + - **Material Usage:** ⚪️ Normal-High + - **Print Time:** ⚪️ Normal-High + - **Material/Time (Higher better):** ⚪️ Normal + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -158,12 +211,14 @@ Adaptive version of [Zig Zag](#zig-zag) adding an external skin texture to inter Similar to [rectilinear](#rectilinear), but each line is slightly rotated to improve print speed. -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Low +- **Strength** + - **Horizontal (X-Y):** 🟡 Low + - **Vertical (Z):** 🟡 Low - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -173,12 +228,14 @@ Similar to [rectilinear](#rectilinear), but each line is slightly rotated to imp Two-layer pattern of perpendicular lines, forming a grid. Overlapping points may cause noise or artifacts. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** 🟣 High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🟣 Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -188,12 +245,14 @@ Two-layer pattern of perpendicular lines, forming a grid. Overlapping points may Triangle-based grid, offering strong X-Y strength but with triple overlaps at intersections. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -203,12 +262,14 @@ Triangle-based grid, offering strong X-Y strength but with triple overlaps at in Similar to the [triangles](#triangles) pattern but offset to prevent triple overlaps at intersections. This design combines triangles and hexagons, providing excellent X-Y strength. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** Normal-High +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** 🔘 Normal-High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -218,12 +279,14 @@ Similar to the [triangles](#triangles) pattern but offset to prevent triple over 3D cube pattern with corners facing down, distributing force in all directions. Triangles in the horizontal plane provide good X-Y strength. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** 🟣 High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -233,12 +296,14 @@ Similar to the [triangles](#triangles) pattern but offset to prevent triple over [Cubic](#cubic) pattern with adaptive density: denser near walls, sparser in the center. Saves material and time while maintaining strength, ideal for large prints. -- **Horizontal Strength (X-Y):** Normal-High -- **Vertical Strength (Z):** Normal-High +- **Strength** + - **Horizontal (X-Y):** 🔘 Normal-High + - **Vertical (Z):** 🔘 Normal-High - **Density Calculation:** Same as [Cubic](#cubic) but reduced in the center -- **Material Usage:** Low -- **Print Time:** Low -- **Material/Time (Higher better):** Normal + - **Material Usage:** 🟣 Low + - **Print Time:** 🟣 Low + - **Material/Time (Higher better):** ⚪️ Normal + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -248,12 +313,14 @@ Similar to the [triangles](#triangles) pattern but offset to prevent triple over [Cubic](#cubic) pattern with extra internal divisions, improving X-Y strength. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** 🟣 High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -263,12 +330,14 @@ Similar to the [triangles](#triangles) pattern but offset to prevent triple over Support |Cubic is a variation of the [Cubic](#cubic) infill pattern that is specifically designed for support top layers. Will use more material than Lightning infill but will provide better strength. Nevertheless, it is still a low-density infill pattern. -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Low +- **Strength** + - **Horizontal (X-Y):** 🟡 Low + - **Vertical (Z):** 🟡 Low - **Density Calculation:** % of layer before top shell layers -- **Material Usage:** Extra-Low -- **Print Time:** Extra-Low -- **Material/Time (Higher better):** Normal + - **Material Usage:** 🔵 Extra-Low + - **Print Time:** 🔵 Extra-Low + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🔴 Likely Noticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -278,12 +347,14 @@ Support |Cubic is a variation of the [Cubic](#cubic) infill pattern that is spec Ultra-fast, ultra-low material infill. Designed for speed and efficiency, ideal for quick prints or non-structural prototypes. -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Low +- **Strength** + - **Horizontal (X-Y):** 🟡 Low + - **Vertical (Z):** 🟡 Low - **Density Calculation:** % of layer before top shell layers -- **Material Usage:** Ultra-Low -- **Print Time:** Ultra-Low -- **Material/Time (Higher better):** Low + - **Material Usage:** 🟢 Ultra-Low + - **Print Time:** 🟢 Ultra-Low + - **Material/Time (Higher better):** ⚪️ Normal-Low + - **Layer time Variability:** 🔴 Likely Noticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -293,12 +364,14 @@ Ultra-fast, ultra-low material infill. Designed for speed and efficiency, ideal Hexagonal pattern balancing strength and material use. Double walls in each hexagon increase material consumption. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** 🟣 High - **Density Calculation:** % of total infill volume -- **Material Usage:** High -- **Print Time:** Ultra-High -- **Material/Time (Higher better):** Low + - **Material Usage:** 🟡 High + - **Print Time:** 🔴 Ultra-High + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🟢 None - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -308,12 +381,14 @@ Hexagonal pattern balancing strength and material use. Double walls in each hexa This infill tries to generate a printable honeycomb structure by printing squares and octagons maintaining a vertical angle high enough to maintain contact with the previous layer. -- **Horizontal Strength (X-Y):** Normal-High -- **Vertical Strength (Z):** Normal-High +- **Strength** + - **Horizontal (X-Y):** 🔘 Normal-High + - **Vertical (Z):** 🔘 Normal-High - **Density Calculation:** Unknown -- **Material Usage:** Normal-Low -- **Print Time:** High -- **Material/Time (Higher better):** Low + - **Material Usage:** 🔘 Normal-Low + - **Print Time:** 🟠 Extra-High + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🟡 Possibly Noticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -323,12 +398,14 @@ This infill tries to generate a printable honeycomb structure by printing square Vertical Honeycomb pattern. Acceptable torsional stiffness. Developed for low densities structures like wings. Improve over [Lateral Lattice](#lateral-lattice) offers same performance with lower densities.This infill includes a Overhang angle parameter to improve the point of contact between layers and reduce the risk of delamination. -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Normal-Low +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal-Low + - **Vertical (Z):** ⚪️ Normal-Low - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟡 Possibly Noticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -338,12 +415,14 @@ Vertical Honeycomb pattern. Acceptable torsional stiffness. Developed for low de Low-strength pattern with good flexibility. You can adjust **Angle 1** and **Angle 2** to optimize the infill for your specific model. Each angle adjusts the plane of each layer generated by the pattern. 0° is vertical. -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Low +- **Strength** + - **Horizontal (X-Y):** ⚪️ Normal-Low + - **Vertical (Z):** 🟡 Low - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -354,12 +433,14 @@ Low-strength pattern with good flexibility. You can adjust **Angle 1** and **Ang Similar to [Gyroid](#gyroid) but with linear patterns, creating weak points at internal corners. Easier to slice but consider using [TPMS-D](#tpms-d) or [Gyroid](#gyroid) for better strength and flexibility. -- **Horizontal Strength (X-Y):** Normal-High -- **Vertical Strength (Z):** Normal-High +- **Strength** + - **Horizontal (X-Y):** 🔘 Normal-High + - **Vertical (Z):** 🔘 Normal-High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-High -- **Material/Time (Higher better):** Normal-Low + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🟡 High + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🔴 Likely Noticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -369,12 +450,14 @@ Easier to slice but consider using [TPMS-D](#tpms-d) or [Gyroid](#gyroid) for be Triply Periodic Minimal Surface (Schwarz Diamond). Hybrid between [Cross Hatch](#cross-hatch) and [Gyroid](#gyroid), combining rigidity and smooth transitions. Isotropic and strong in all directions. This geometry is faster to slice than Gyroid, but slower than Cross Hatch. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** 🟣 High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** High -- **Material/Time (Higher better):** Normal-Low + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🟡 High + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🟡 Possibly Noticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -384,12 +467,14 @@ Triply Periodic Minimal Surface (Schwarz Diamond). Hybrid between [Cross Hatch]( Triply Periodic Minimal Surface (Fischer–Koch S) pattern. Its smooth, continuous geometry resembles trabecular bone microstructure, offering a balance between rigidity and energy absorption. Compared to [TPMS-D](#tpms-d), it has more complex curvature, which can improve load distribution and shock absorption in functional parts. -- **Horizontal Strength (X-Y):** Normal-High -- **Vertical Strength (Z):** Normal-High +- **Strength** + - **Horizontal (X-Y):** 🔘 Normal-High + - **Vertical (Z):** 🔘 Normal-High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** High -- **Material/Time (Higher better):** Low + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔴 Ultra-High + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🟡 Possibly Noticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -399,12 +484,14 @@ Triply Periodic Minimal Surface (Fischer–Koch S) pattern. Its smooth, continuo Mathematical, isotropic surface providing equal strength in all directions. Excellent for strong, flexible prints and resin filling due to its interconnected structure. This pattern may require more time to slice because of all the points needed to generate each curve. If your model has complex geometry, consider using a simpler infill pattern like [TPMS-D](#tpms-d) or [Cross Hatch](#cross-hatch). -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High +- **Strength** + - **Horizontal (X-Y):** 🟣 High + - **Vertical (Z):** 🟣 High - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-High -- **Material/Time (Higher better):** Normal-Low + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔴 Ultra-High + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🔵 Unnoticeable - **Applies to:** - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** @@ -414,14 +501,17 @@ Mathematical, isotropic surface providing equal strength in all directions. Exce Fills the area with progressively smaller versions of the outer contour, creating a concentric pattern. Ideal for 100% infill or flexible prints. -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** 🟡 Low + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** + - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** + - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** - **[Ironing](quality_settings_ironing)** @@ -429,17 +519,20 @@ Fills the area with progressively smaller versions of the outer contour, creatin ## Hilbert Curve -Hilbert Curve is a space-filling curve that can be used to create a continuous infill pattern. It is known for its Aesthetic appeal and ability to fill space efficiently. -Print speed is very low due to the complexity of the path, which can lead to longer print times. It is not recommended for structural parts but can be used for Aesthetic purposes. +Hilbert Curve is a space-filling curve that can be used to create a continuous infill pattern. It is known for its aesthetic appeal and ability to fill space efficiently. +Print speed is very low due to the complexity of the path, which can lead to longer print times. It is not recommended for structural parts but can be used for aesthetic purposes. -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** 🟡 Low + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** High -- **Material/Time (Higher better):** Low + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🟠 Extra-High + - **Material/Time (Higher better):** 🟡 Low + - **Layer time Variability:** 🟢 None - **Applies to:** - - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** + - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** + - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** ![infill-top-hilbert-curve](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-hilbert-curve.png?raw=true) @@ -448,14 +541,17 @@ Print speed is very low due to the complexity of the path, which can lead to lon Spiral pattern that fills the area with concentric arcs, creating a smooth and continuous infill. Can be filled with resin thanks to its interconnected hollow structure, which allows the resin to flow through it and cure properly. -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** 🟡 Low + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High + - **Material Usage:** ⚪️ Normal + - **Print Time:** 🔘 Normal-Low + - **Material/Time (Higher better):** 🔘 Normal-High + - **Layer time Variability:** 🟢 None - **Applies to:** - - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** + - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** + - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** ![infill-top-archimedean-chords](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-archimedean-chords.png?raw=true) @@ -464,14 +560,17 @@ Spiral pattern that fills the area with concentric arcs, creating a smooth and c Aesthetic pattern with low strength and high print time. -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Normal +- **Strength** + - **Horizontal (X-Y):** 🟡 Low + - **Vertical (Z):** ⚪️ Normal - **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal -- **Material/Time (Higher better):** Normal-Low + - **Material Usage:** ⚪️ Normal + - **Print Time:** ⚪️ Normal + - **Material/Time (Higher better):** ⚪️ Normal + - **Layer time Variability:** 🟢 None - **Applies to:** - - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** - **[Solid Infill](strength_settings_infill#internal-solid-infill)** + - **[Sparse Infill](strength_settings_infill#sparse-infill-density)** + - **[Solid Infill](strength_settings_infill#internal-solid-infill)** - **[Surface](strength_settings_top_bottom_shells)** ![infill-top-octagram-spiral](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-octagram-spiral.png?raw=true) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 4c92f92054..876a024b51 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 " @@ -6357,10 +6368,10 @@ msgstr "" msgid "Others" msgstr "" -msgid "Login Region" +msgid "Login region" msgstr "" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6368,10 +6379,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6408,7 +6422,7 @@ msgstr "" msgid "Home" msgstr "" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6492,14 +6506,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6570,7 +6587,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6582,16 +6602,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "" msgid "" @@ -6607,10 +6627,13 @@ msgstr "" msgid "Downloads" msgstr "" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "" msgid "Develop mode" @@ -8224,10 +8247,10 @@ msgstr "" msgid "Global shortcuts" msgstr "" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" @@ -15049,6 +15072,9 @@ msgstr "" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 16835a17bd..fb9ad1e93e 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 " @@ -6867,11 +6878,11 @@ msgstr "Nord-America" msgid "Others" msgstr "Altres" -msgid "Login Region" +msgid "Login region" msgstr "Regió d'inici de sessió" -msgid "Stealth Mode" -msgstr "Mode Silenciós" +msgid "Stealth mode" +msgstr "Mode silenciós" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6881,10 +6892,13 @@ msgstr "" "usuaris que no utilitzen màquines BBL o només utilitzen el mode LAN poden " "activar aquesta funció de manera segura." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Habilita el plugin de xarxa" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6928,7 +6942,7 @@ msgstr "" msgid "Home" msgstr "Inici" -msgid "Default Page" +msgid "Default page" msgstr "Pàgina predeterminada" msgid "Set the page opened on startup." @@ -7031,15 +7045,18 @@ msgstr "" "Si està habilitada, l'Orca recordarà i canviarà automàticament la " "configuració del filament/procés per a cada impressora." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestió multidispositiu(Entra en vigor després de reiniciar Studio)." +msgid "Multi device management" +msgstr "Gestió multidispositiu" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7119,8 +7136,11 @@ msgstr "Pregunta sempre" msgid "Load Geometry Only" msgstr "Carregar només geometria" -msgid "Load Behaviour" -msgstr "Carregar Comportament" +msgid "Load behaviour" +msgstr "Carregar comportament" + +msgid "Behaviour" +msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" @@ -7133,16 +7153,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Esborrar la meva elecció sobre els projectes no desats." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "No hi ha avisos en carregar 3MF amb Codis-G modificats" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Còpia de seguretat automàtica" msgid "" @@ -7160,10 +7180,13 @@ msgstr "Freqüència de còpia de seguretat en segons." msgid "Downloads" msgstr "Descàrregues" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Mode fosc" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Habilitar el mode fosc" msgid "Develop mode" @@ -8987,12 +9010,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" @@ -17531,6 +17554,9 @@ msgstr "Esborrar entrada" msgid "Network Test" msgstr "Prova de Xarxa" +msgid "Network test" +msgstr "Prova de Xarxa" + msgid "Start Test Multi-Thread" msgstr "Inicia la prova Multi-Thread" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 9e15bf82a9..87d4bcb599 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 " @@ -6725,21 +6736,24 @@ msgstr "Severní Amerika" msgid "Others" msgstr "Ostatní" -msgid "Login Region" +msgid "Login region" msgstr "Región přihlášení" -msgid "Stealth Mode" -msgstr "Tajný Režim" +msgid "Stealth mode" +msgstr "Tajný režim" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6779,7 +6793,7 @@ msgstr "" msgid "Home" msgstr "Home" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6867,14 +6881,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6952,7 +6969,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6964,16 +6984,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Vymazat moje volby pro neuložené projekty." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatické zálohování" msgid "" @@ -6990,10 +7010,13 @@ msgstr "Doba zálohování v sekundách." msgid "Downloads" msgstr "Stahování" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Tmavý režim" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Povolit tmavý režim" msgid "Develop mode" @@ -8733,12 +8756,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í" @@ -16321,6 +16344,9 @@ msgstr "Smazat vstup" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 87a8a947a1..69271ec307 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 " @@ -6952,11 +6969,11 @@ msgstr "Nordamerika" msgid "Others" msgstr "Sonstiges" -msgid "Login Region" -msgstr "Login-Region" +msgid "Login region" +msgstr "Login region" -msgid "Stealth Mode" -msgstr "Unsichtbarer Modus" +msgid "Stealth mode" +msgstr "Unsichtbarer modus" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6966,13 +6983,14 @@ msgstr "" "Benutzer, die keine BBL-Maschinen verwenden oder nur den LAN-Modus " "verwenden, können diese Funktion sicher aktivieren." +msgid "Network plugin" +msgstr "Netzwerk-Plugin" + msgid "Enable network plugin" msgstr "Netzwerk-Plugin aktivieren" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "" -"Verwenden Sie das alte Netzwerk-Plugin (wirkt sich nach dem Neustart von " -"Orca aus)" +msgid "Use legacy network plugin" +msgstr "Verwenden Sie das alte Netzwerk-Plugin" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -7015,7 +7033,7 @@ msgstr "" msgid "Home" msgstr "Startseite" -msgid "Default Page" +msgid "Default page" msgstr "Standardseite" msgid "Set the page opened on startup." @@ -7110,7 +7128,7 @@ msgstr "" "Wenn aktiviert, merkt sich Orca die Filament-/Prozesskonfiguration für jeden " "Drucker und wechselt automatisch." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "Zeige den Dialog für die Parameter-Einstellungen des Step-Netzes." msgid "" @@ -7118,8 +7136,11 @@ msgid "" msgstr "" "Wenn aktiviert, wird während des Imports von STEP-Dateien ein Dialogfeld " -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Multi-Geräte-Verwaltung (nach Neustart von Studio wirksam)." +msgid "Multi device management" +msgstr "Multi-Geräte-Verwaltung" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7197,9 +7218,12 @@ msgstr "Immer fragen" msgid "Load Geometry Only" msgstr "Nur Geometrie laden" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Ladeverhalten" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "sollen Drucker/Filament/Prozess Einstellungen geladen werden beim Öffnen " @@ -7211,17 +7235,18 @@ msgstr "Maximum zuletzt verwendeter Dateien" 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." +msgid "Add STL/STEP files to recent files list" +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." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Keine Warnungen beim Laden von 3MF mit modifizierten G-Codes" -msgid "Auto-Backup" -msgstr "Automatische Datensicherung" +msgid "Auto backup" +msgstr "Automatische datensicherung" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -7238,11 +7263,14 @@ msgstr "Die Zeitdauer für die Sicherung in Sekunden." msgid "Downloads" msgstr "Downloads" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Dunkler Modus" -msgid "Enable Dark mode" -msgstr "Dunklen Modus aktivieren" +msgid "Enable dark mode" +msgstr "Dunklen modus aktivieren" msgid "Develop mode" msgstr "Entwicklermodus" @@ -9110,12 +9138,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 +12383,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 +13257,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 "°" @@ -17871,6 +17899,9 @@ msgstr "Eingabe löschen" msgid "Network Test" msgstr "Netzwerktest" +msgid "Network test" +msgstr "Netzwerktest" + msgid "Start Test Multi-Thread" msgstr "Starten Sie den Test mit mehreren Threads" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 0fa63ef7eb..87838c91db 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 " @@ -6469,10 +6480,10 @@ msgstr "" msgid "Others" msgstr "" -msgid "Login Region" +msgid "Login region" msgstr "" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6480,10 +6491,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6520,7 +6534,7 @@ msgstr "" msgid "Home" msgstr "" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6604,14 +6618,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6688,7 +6705,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6700,16 +6720,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "" msgid "" @@ -6727,11 +6747,14 @@ msgstr "" msgid "Downloads" msgstr "" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "" -msgid "Enable Dark mode" -msgstr "Enable Dark Mode" +msgid "Enable dark mode" +msgstr "Enable dark Mode" msgid "Develop mode" msgstr "Developer mode" @@ -8389,10 +8412,10 @@ msgstr "" msgid "Global shortcuts" msgstr "" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" @@ -15492,6 +15515,9 @@ msgstr "" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index e588073929..b368bea44c 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 " @@ -6889,10 +6900,10 @@ msgstr "América del Norte" msgid "Others" msgstr "Otros" -msgid "Login Region" +msgid "Login region" msgstr "Región de inicio de sesión" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Modo invisible" msgid "" @@ -6903,10 +6914,13 @@ msgstr "" "Los usuarios que no utilicen máquinas BBL o que solo utilicen el modo LAN " "pueden activar esta función de forma segura." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Activar el plugin de red" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6950,7 +6964,7 @@ msgstr "" msgid "Home" msgstr "Página de Inicio" -msgid "Default Page" +msgid "Default page" msgstr "Página por defecto" msgid "Set the page opened on startup." @@ -7049,15 +7063,18 @@ msgstr "" "Si está activada, Orca recordará y cambiará la configuración de archivos/" "procesos para cada impresora automáticamente." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestión multidispositivo (surte efecto tras reiniciar Orca)." +msgid "Multi device management" +msgstr "Gestión multidispositivo" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7137,7 +7154,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -7149,16 +7169,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Limpiar mi elección de proyectos no guardados." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "No avisar cuando cargue archivos 3MF con G-Codes modificados" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Copia de seguridad automática" msgid "" @@ -7176,11 +7196,14 @@ msgstr "El periodo de copia de seguridad en segundos." msgid "Downloads" msgstr "Descargas" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Modo Oscuro" -msgid "Enable Dark mode" -msgstr "Activar Modo Oscuro" +msgid "Enable dark mode" +msgstr "Activar modo oscuro" msgid "Develop mode" msgstr "Modo de desarrollador" @@ -9004,12 +9027,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" @@ -17394,6 +17417,9 @@ msgstr "Borrar original" msgid "Network Test" msgstr "Prueba de Red" +msgid "Network test" +msgstr "Prueba de red" + msgid "Start Test Multi-Thread" msgstr "Iniciar Pruebas Multitarea" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index c612f696b3..89671e8f50 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 " @@ -6927,10 +6938,10 @@ msgstr "Amérique du Nord" msgid "Others" msgstr "Autre" -msgid "Login Region" +msgid "Login region" msgstr "Région d'origine" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Mode privé" msgid "" @@ -6942,10 +6953,13 @@ msgstr "" "utilisent uniquement le mode LAN peuvent activer cette fonction en toute " "sécurité." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Activer le plug-in réseau" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6989,7 +7003,7 @@ msgstr "" msgid "Home" msgstr "Accueil" -msgid "Default Page" +msgid "Default page" msgstr "Page par défaut" msgid "Set the page opened on startup." @@ -7093,15 +7107,18 @@ msgstr "" "Si cette option est activée, Orca se souviendra de la configuration du " "filament/processus pour chaque imprimante et la modifiera automatiquement." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestion multi-appareils (prend effet après le redémarrage d’Orca)." +msgid "Multi device management" +msgstr "Gestion multi appareils" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7181,9 +7198,12 @@ msgstr "Toujours demander" msgid "Load Geometry Only" msgstr "Charger uniquement la géométrie" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Comportement du chargement" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Les paramètres de l’imprimante/du filament/du processus doivent-ils être " @@ -7195,17 +7215,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Efface mon choix sur les projets non enregistrés." -msgid "No warnings when loading 3MF with modified G-code" -msgstr "" -"Pas d'avertissement lors du chargement de 3MF avec des G-codes modifiés" +msgid "Don't warn when loading 3MF with modified G-code" +msgstr "Pas d'avertissement lors du chargement de 3MF avec des G-codes modifiés" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Sauvegarde automatique" msgid "" @@ -7223,10 +7242,13 @@ msgstr "Période de sauvegarde en secondes." msgid "Downloads" msgstr "Téléchargements" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Mode Sombre" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Activer le mode Sombre" msgid "Develop mode" @@ -9100,12 +9122,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" @@ -17758,6 +17780,9 @@ msgstr "Supprimer l’objet" msgid "Network Test" msgstr "Test du réseau" +msgid "Network test" +msgstr "Test du réseau" + msgid "Start Test Multi-Thread" msgstr "Démarrer le test multithread" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index fb9631f35b..1ef4398de0 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 " @@ -6628,10 +6639,10 @@ msgstr "Észak-Amerika" msgid "Others" msgstr "Egyéb" -msgid "Login Region" +msgid "Login region" msgstr "Régió" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6639,10 +6650,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6683,7 +6697,7 @@ msgstr "" msgid "Home" msgstr "Haza" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6774,14 +6788,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6860,7 +6877,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6872,16 +6892,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatikus biztonsági mentés" msgid "" @@ -6897,10 +6917,13 @@ msgstr "" msgid "Downloads" msgstr "Letöltések" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Sötét mód" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Sötét mód engedélyezése" msgid "Develop mode" @@ -8629,12 +8652,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" @@ -15950,6 +15973,9 @@ msgstr "Bemenet törlése" msgid "Network Test" msgstr "Hálózati teszt" +msgid "Network test" +msgstr "Hálózati teszt" + msgid "Start Test Multi-Thread" msgstr "Teszt indítása több szálon" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 6cd23ecd2b..22b7c5735c 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 " @@ -6888,10 +6899,10 @@ msgstr "Nord America" msgid "Others" msgstr "Altro" -msgid "Login Region" +msgid "Login region" msgstr "Regione di accesso" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Modalità invisibile" msgid "" @@ -6902,10 +6913,13 @@ msgstr "" "utenti che non utilizzano macchine BBL o che utilizzano la modalità Solo LAN " "possono attivare questa funzione in tutta sicurezza." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Abilita modulo di rete" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6948,7 +6962,7 @@ msgstr "" msgid "Home" msgstr "Pagina iniziale" -msgid "Default Page" +msgid "Default page" msgstr "Pagina predefinita" msgid "Set the page opened on startup." @@ -7048,15 +7062,18 @@ msgstr "" "Se abilitato, Orca ricorderà e cambierà automaticamente la configurazione " "del filamento/processo per ciascuna stampante." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestione multi-dispositivo (avrà effetto dopo il riavvio di Orca)." +msgid "Multi device management" +msgstr "Gestione multi-dispositivo" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7135,9 +7152,12 @@ msgstr "Chiedi sempre" msgid "Load Geometry Only" msgstr "Carica solo la geometria" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Comportamento di caricamento" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Quando si apre un file .3mf, è necessario caricare le impostazioni della " @@ -7149,16 +7169,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Cancella la mia scelta sui progetti non salvati." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Nessun avviso durante il caricamento di 3MF con G-code modificati" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Backup automatico" msgid "" @@ -7176,10 +7196,13 @@ msgstr "Periodo di backup in secondi." msgid "Downloads" msgstr "Scaricati" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Modalità scura" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Attiva modalità Scura" msgid "Develop mode" @@ -9030,12 +9053,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" @@ -17665,6 +17688,9 @@ msgstr "Elimina input" msgid "Network Test" msgstr "Test di rete" +msgid "Network test" +msgstr "Test di rete" + msgid "Start Test Multi-Thread" msgstr "Avvia test multi-thread" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index ea13d0c713..11eb2e4553 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 " @@ -6501,10 +6512,10 @@ msgstr "北米" msgid "Others" msgstr "その他" -msgid "Login Region" +msgid "Login region" msgstr "地域" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6512,10 +6523,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6552,7 +6566,7 @@ msgstr "" msgid "Home" msgstr "ホーム" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6640,14 +6654,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6718,7 +6735,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6730,16 +6750,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "自動バックアップ" msgid "" @@ -6755,10 +6775,13 @@ msgstr "" msgid "Downloads" msgstr "ダウンロード" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "ダークモード" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "ダークモードを有効" msgid "Develop mode" @@ -8423,12 +8446,12 @@ msgstr "ショートカット一覧を表示" msgid "Global shortcuts" msgstr "ショートカット" -msgid "Rotate View" -msgstr "回転" - msgid "Pan View" msgstr "移動" +msgid "Rotate View" +msgstr "回転" + msgid "Zoom View" msgstr "ズーム" @@ -15599,6 +15622,9 @@ msgstr "" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index db4ca3161f..314df57fa9 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 " @@ -6673,10 +6684,10 @@ msgstr "북아메리카" msgid "Others" msgstr "기타" -msgid "Login Region" +msgid "Login region" msgstr "로그인 지역" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "스텔스 모드" msgid "" @@ -6686,10 +6697,13 @@ msgstr "" "이 기능은 뱀부의 클라우드 서비스로의 데이터 전송을 중지합니다. BBL 머신을 사" "용하지 않거나 LAN 모드만 사용하는 사용자는 이 기능을 안전하게 켤 수 있습니다." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "네트워크 플러그인 사용" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6731,7 +6745,7 @@ msgstr "" msgid "Home" msgstr "홈" -msgid "Default Page" +msgid "Default page" msgstr "기본 페이지" msgid "Set the page opened on startup." @@ -6824,15 +6838,18 @@ msgstr "" "활성화하면 Orca는 각 프린터의 필라멘트/프로세스 구성을 자동으로 기억하고 전환" "합니다." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "다중 장치 관리 (Orca를 다시 시작한 후 적용됨)." +msgid "Multi device management" +msgstr "다중 장치 관리" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6907,9 +6924,12 @@ msgstr "항상 물어보세요" msgid "Load Geometry Only" msgstr "형상만 로드" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "행동 로드" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr ".3mf를 열 때 프린터/필라멘트/프로세스 설정이 로드되어야 합니까?" @@ -6919,16 +6939,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "저장되지 않은 프로젝트에서 내 선택을 지웁니다." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "수정된 Gcode로 3MF를 로드할 때 경고 없음" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "자동 백업" msgid "" @@ -6944,10 +6964,13 @@ msgstr "백업 기간(초)입니다." msgid "Downloads" msgstr "다운로드" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "다크 모드" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "다크 모드 사용" msgid "Develop mode" @@ -8707,12 +8730,12 @@ msgstr "키보드 단축키 목록 보기" msgid "Global shortcuts" msgstr "전역 단축키" -msgid "Rotate View" -msgstr "시점 회전" - msgid "Pan View" msgstr "시점 이동" +msgid "Rotate View" +msgstr "시점 회전" + msgid "Zoom View" msgstr "시점 확대/축소" @@ -16730,6 +16753,9 @@ msgstr "입력객체 삭제" msgid "Network Test" msgstr "네트워크 테스트" +msgid "Network test" +msgstr "네트워크 테스트" + msgid "Start Test Multi-Thread" msgstr "멀티스레드 테스트 시작" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 670e2cc0af..65f6f0490f 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 " @@ -6818,10 +6829,10 @@ msgstr "Šiaurės Amerika" msgid "Others" msgstr "Kita" -msgid "Login Region" +msgid "Login region" msgstr "Prisijungimo regionas" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Slaptas režimas" msgid "" @@ -6832,10 +6843,13 @@ msgstr "" "paslaugas. Šią funkciją gali drąsiai įjungti naudotojai, kurie nesinaudoja " "„BBL“ įrenginiais arba naudoja tik LAN režimą." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Įjungti tinklo papildinį" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6878,7 +6892,7 @@ msgstr "" msgid "Home" msgstr "Pradžia" -msgid "Default Page" +msgid "Default page" msgstr "Numatytas puslapis" msgid "Set the page opened on startup." @@ -6979,16 +6993,18 @@ msgstr "" "Jei įjungta, Orca Slicer automatiškai prisimins ir perjungs gijos ir proceso " "konfigūracijas kiekvienams spausdintuvui." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "Kelių įrenginių valdymas" + +msgid "(Requires restart)" msgstr "" -"Kelių įrenginių valdymas (įsigalios tik po programos paleidimo iš naujo)." msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7068,9 +7084,12 @@ msgstr "Visada klausti" msgid "Load Geometry Only" msgstr "Įkelti tik geometriją" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Įkelti elgseną" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Ar atidarant .3mf failą reikia įkelti spausdintuvo / gijų / proceso " @@ -7082,16 +7101,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Išvalyti mano pasirinkimus neišsaugotuose projektuose." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Nerodyti perspėjimų įkeliant 3MF su modifikuotais G-kodais" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatinis atsarginis kopijavimas" msgid "" @@ -7109,10 +7128,13 @@ msgstr "Atsarginės kopijos kūrimo laikotarpis sekundėmis." msgid "Downloads" msgstr "Atsisuntimai" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Tamsusis režimas" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Įjungti tamsųjį režimą" msgid "Develop mode" @@ -8945,12 +8967,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ą" @@ -17293,6 +17315,9 @@ msgstr "Ištrinti įvestį" msgid "Network Test" msgstr "Tinklo testas" +msgid "Network test" +msgstr "Tinklo testas" + msgid "Start Test Multi-Thread" msgstr "Pradėti bandymą su keliais srautais" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index b0eab2b19d..086d5d6234 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 " @@ -6703,11 +6714,11 @@ msgstr "Noord-Amerika" msgid "Others" msgstr "Andere" -msgid "Login Region" +msgid "Login region" msgstr "Inlogregio" -msgid "Stealth Mode" -msgstr "Stealth-modus" +msgid "Stealth mode" +msgstr "Stealth modus" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6717,10 +6728,13 @@ msgstr "" "Gebruikers die geen BambuLab-machines gebruiken of alleen de LAN-modus " "gebruiken, kunnen deze functie veilig inschakelen." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Netwerkplug-in inschakelen" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6763,7 +6777,7 @@ msgstr "" msgid "Home" msgstr "Thuis" -msgid "Default Page" +msgid "Default page" msgstr "Startpagina" msgid "Set the page opened on startup." @@ -6868,15 +6882,18 @@ msgstr "" "Als dit is ingeschakeld, onthoudt Orca automatisch de filament-/" "procesconfiguratie voor elke printer en schakelt deze automatisch om." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Beheer van meerdere apparaten (Werkt nadat Orca opnieuw is opgestart)." +msgid "Multi device management" +msgstr "Beheer van meerdere apparaten" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6954,7 +6971,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6966,16 +6986,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Wis keuze voor niet-opgeslagen projecten." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Geen waarschuwingen bij het laden van 3MF met aangepaste G-codes" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatisch een back-up maken" msgid "" @@ -6993,10 +7013,13 @@ msgstr "De periode van de back-up in seconden." msgid "Downloads" msgstr "" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Donkere modus" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Donkere modus inschakelen" msgid "Develop mode" @@ -8772,10 +8795,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" @@ -16186,6 +16209,9 @@ msgstr "Invoer verwijderen" msgid "Network Test" msgstr "Netwerktest" +msgid "Network test" +msgstr "Netwerktest" + msgid "Start Test Multi-Thread" msgstr "Multi-thread test starten" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index ae27552cc0..326758a4ba 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 " @@ -6846,10 +6857,10 @@ msgstr "Ameryka Północna" msgid "Others" msgstr "Inne" -msgid "Login Region" +msgid "Login region" msgstr "Region logowania" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Tryb niewidoczny" msgid "" @@ -6860,10 +6871,13 @@ msgstr "" "korzystają z maszyn BBL lub używają trybu „tylko LAN”, mogą bezpiecznie " "włączyć tę funkcję." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Włączenie wtyczki sieciowej" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6906,7 +6920,7 @@ msgstr "" msgid "Home" msgstr "Strona główna" -msgid "Default Page" +msgid "Default page" msgstr "Domyślna strona" msgid "Set the page opened on startup." @@ -7002,15 +7016,18 @@ msgstr "" "Automatycznie zapamiętuje i przełącza konfigurację filamentu/procesu dla " "każdej drukarki." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Obsługiwanie wielu urządzeń (wymaga ponownego uruchomienia programu)" +msgid "Multi device management" +msgstr "Obsługiwanie wielu urządzeń" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7083,9 +7100,12 @@ msgstr "Pytanie zawsze" msgid "Load Geometry Only" msgstr "Wczytanie tylko geometrii" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Zachowanie przy wczytywaniu" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Określa czy ustawienia drukarki/filamentu/procesu mają być wczytywane " @@ -7097,16 +7117,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Wyczyść wybory na niezapisanych projektach." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Brak ostrzeżeń przy wczytywaniu plików 3MF z zmodyfikowanymi G-code" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatyczne tworzenie kopii zapasowej" msgid "" @@ -7124,10 +7144,13 @@ msgstr "Określa okres kopii zapasowej w sekundach." msgid "Downloads" msgstr "Położenie pobierania" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Tryb ciemny" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Włączenie trybu ciemnego" msgid "Develop mode" @@ -8944,12 +8967,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" @@ -17421,6 +17444,9 @@ msgstr "Usuń wejście" msgid "Network Test" msgstr "Test sieci" +msgid "Network test" +msgstr "Test sieci" + msgid "Start Test Multi-Thread" msgstr "Rozpocznij test wielowątkowy" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 9fea5db9cc..15531b4a42 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 " @@ -6867,11 +6878,11 @@ msgstr "América do Norte" msgid "Others" msgstr "Outros" -msgid "Login Region" -msgstr "Região de Login" +msgid "Login region" +msgstr "Região de login" -msgid "Stealth Mode" -msgstr "Modo Oculto" +msgid "Stealth mode" +msgstr "Modo oculto" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6881,11 +6892,14 @@ msgstr "" "Os usuários que não usam máquinas BBL ou usar modo LAN só podem ativar esta " "função com segurança." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Ativar plugin de rede" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "Usar o plugin de rede legado (entra em vigor após reiniciar o Orca)" +msgid "Use legacy network plugin" +msgstr "Usar o plugin de rede legado" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6929,8 +6943,8 @@ msgstr "" msgid "Home" msgstr "Início" -msgid "Default Page" -msgstr "Página Padrão" +msgid "Default page" +msgstr "Página padrão" msgid "Set the page opened on startup." msgstr "Define a página aberta na inicialização." @@ -6985,8 +6999,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" @@ -7023,17 +7038,18 @@ msgstr "" "Se ativo, Orca vai lembrar e alternar a configuração de filamento/processo " "para cada impressora automaticamente." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "Gerenciamento de multi dispositivos" + +msgid "(Requires restart)" msgstr "" -"Gerenciamento de Multi-dispositivos (Entra em vigor após reiniciar o " -"OrcaSlicer)." msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7111,8 +7127,11 @@ msgstr "Perguntar Sempre" msgid "Load Geometry Only" msgstr "Carregar Apenas Geometria" -msgid "Load Behaviour" -msgstr "Comportamento de Carregamento" +msgid "Load behaviour" +msgstr "Comportamento de carregamento" + +msgid "Behaviour" +msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" @@ -7125,17 +7144,17 @@ msgstr "Máximo de arquivos recentes" msgid "Maximum count of recent files" msgstr "Contagem máxima de arquivos recentes" -msgid "Add model files (stl/step) to recent file list." -msgstr "Adicionar arquivos de modelo (stl/step) à lista de arquivos recentes." +msgid "Add STL/STEP files to recent files list" +msgstr "Adicionar arquivos de modelo STL/STEP à lista de arquivos recentes" msgid "Clear my choice on the unsaved projects." msgstr "Limpar minha escolha nos projetos não salvos." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Sem avisos ao carregar 3MF com G-code modificado" -msgid "Auto-Backup" -msgstr "Backup Automático" +msgid "Auto backup" +msgstr "Backup automático" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -7152,11 +7171,14 @@ msgstr "O período de backup em segundos." msgid "Downloads" msgstr "Transferências" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Modo Escuro" -msgid "Enable Dark mode" -msgstr "Ativar Modo Escuro" +msgid "Enable dark mode" +msgstr "Ativar modo escuro" msgid "Develop mode" msgstr "Modo de Desenvolvimento" @@ -7869,9 +7891,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 +7906,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 +9030,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 +9301,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 +9802,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 +9812,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 +9844,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 +10328,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 +10656,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 +12236,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 +13488,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 +15113,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 +15291,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 +16930,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." @@ -17662,6 +17681,9 @@ msgstr "Excluir entrada" msgid "Network Test" msgstr "Teste de Rede" +msgid "Network test" +msgstr "Teste de Rede" + msgid "Start Test Multi-Thread" msgstr "Iniciar Teste Multi-Thread" @@ -19749,8 +19771,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..641aa2231d 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 " @@ -6926,10 +6937,10 @@ msgstr "Северная Америка" msgid "Others" msgstr "Прочее" -msgid "Login Region" +msgid "Login region" msgstr "Регион входа" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Режим конфиденциальности (отключение телеметрии Bambulab)" msgid "" @@ -6940,10 +6951,13 @@ msgstr "" "которые не используют принтеры BBL или используют режим «Только LAN», могут " "безопасно включить эту функцию." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Включить сетевой плагин" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6988,10 +7002,8 @@ msgstr "" msgid "Home" msgstr "Home" -msgid "Default Page" -msgstr "" -"Страница \n" -"по умолчанию" +msgid "Default page" +msgstr "Страница по умолчанию" msgid "Set the page opened on startup." msgstr "Задание страницы, открываемой при запуске приложения." @@ -7102,7 +7114,7 @@ msgstr "" "с профилем пластиковой нити и процессом печати, выставленными вами в " "последний раз." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "Показывать диалоговое окно настройки сетки при импорте STEP файла" msgid "" @@ -7111,8 +7123,11 @@ msgstr "" "Если включено, во время импорта STEP файла появится диалоговое окно настроек " "параметров импорта." -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Управление несколькими устройствами (требуется перезапуск программы)" +msgid "Multi device management" +msgstr "Управление несколькими устройствами" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7195,10 +7210,11 @@ msgid "Load Geometry Only" msgstr "Загружать только геометрию" # нее влезает Поведение при открытии -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "Поведение при открытии" + +msgid "Behaviour" msgstr "" -"Поведение \n" -"при открытии" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" @@ -7211,7 +7227,7 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" # ??? Сбросить мой выбор действия для проектов, Сбросить запрос о несохранённых изменениях для проекта при закрытии программы @@ -7221,10 +7237,10 @@ msgstr "" "при запросе о несохранённых \n" "изменениях в проекте." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Отключить предупреждения при загрузке 3MF с модифицированным G-кодом" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Автосоздание резервной копии" msgid "" @@ -7242,10 +7258,13 @@ msgstr "Время резервного копирования в секунда msgid "Downloads" msgstr "Загрузки" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Тёмная тема" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Включить тёмную тему" msgid "Develop mode" @@ -9099,12 +9118,12 @@ msgstr "Показать список сочетаний клавиш" msgid "Global shortcuts" msgstr "Глобальные горячие клавиши" -msgid "Rotate View" -msgstr "Вращение камеры" - msgid "Pan View" msgstr "Перемещение камеры" +msgid "Rotate View" +msgstr "Вращение камеры" + msgid "Zoom View" msgstr "Масштабирование вида" @@ -17832,6 +17851,9 @@ msgstr "Удалить исходные" msgid "Network Test" msgstr "Проверка сети" +msgid "Network test" +msgstr "Проверка сети" + msgid "Start Test Multi-Thread" msgstr "Запуск многопоточного теста" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index af38cde9e0..279b00e29d 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 " @@ -6620,10 +6631,10 @@ msgstr "Nordamerika" msgid "Others" msgstr "Andra" -msgid "Login Region" -msgstr "Logga in Region" +msgid "Login region" +msgstr "Logga in region" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6631,10 +6642,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6674,7 +6688,7 @@ msgstr "" msgid "Home" msgstr "" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6763,14 +6777,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6843,7 +6860,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6855,17 +6875,17 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Rensa mitt val för de osparade projekten." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" -msgstr "Auto Säkerhetskopiera" +msgid "Auto backup" +msgstr "Auto säkerhetskopiera" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -6882,10 +6902,13 @@ msgstr "Säkerhetskopieringens varaktighet i sekunder." msgid "Downloads" msgstr "Nedladdningar" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Mörkt Läge" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Aktivera mörkt läge" msgid "Develop mode" @@ -8618,12 +8641,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" @@ -15856,6 +15879,9 @@ msgstr "Ta bort inmatning" msgid "Network Test" msgstr "Nätverkstest" +msgid "Network test" +msgstr "Nätverkstest" + msgid "Start Test Multi-Thread" msgstr "Börja testa flera trådar" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 77f0b85717..1361addb6b 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 " @@ -6801,10 +6812,10 @@ msgstr "Kuzey Amerika" msgid "Others" msgstr "Diğer" -msgid "Login Region" -msgstr "Giriş Bölgesi" +msgid "Login region" +msgstr "Giriş bölgesi" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Gizli mod" msgid "" @@ -6815,12 +6826,14 @@ msgstr "" "kullanmayan veya yalnızca LAN modunu kullanan kullanıcılar bu işlevi güvenle " "açabilir." +msgid "Network plugin" +msgstr "Ağ eklentisi" + msgid "Enable network plugin" msgstr "Ağ eklentisini etkinleştir" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "" -"Eski ağ eklentisini kullan (Orca'yı yeniden başlattıktan sonra etkili olur)" +msgid "Use legacy network plugin" +msgstr "Eski ağ eklentisini kullan" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6865,8 +6878,8 @@ msgstr "" msgid "Home" msgstr "Ana Sayfa" -msgid "Default Page" -msgstr "Varsayılan Sayfa" +msgid "Default page" +msgstr "Varsayılan sayfa" msgid "Set the page opened on startup." msgstr "Açılışta açılacak sayfayı ayarlayın." @@ -6962,8 +6975,8 @@ msgstr "" "Etkinleştirilirse, Orca her yazıcı için filament/işlem yapılandırmasını " "hatırlayacak ve otomatik olarak değiştirecektir." -msgid "Show the step mesh parameter setting dialog." -msgstr "Step ağ parametresi ayar iletişim kutusunu göster." +msgid "Show options when importing STEP file" +msgstr "STEP dosyasını içe aktarırken seçenekleri göster" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." @@ -6971,9 +6984,11 @@ msgstr "" "Etkinleştirilirse, STEP dosyası içe aktarılırken bir parametre ayarları " "iletişim kutusu görüntülenir." -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "" -"Çoklu Cihaz Yönetimi(Studio yeniden başlatıldıktan sonra geçerli olur)." +msgid "Multi device management" +msgstr "Çoklu Cihaz Yönetimi" + +msgid "(Requires restart)" +msgstr "(Yeniden başlatma gerektirir)" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7051,8 +7066,11 @@ msgstr "Her Zaman Sor" msgid "Load Geometry Only" msgstr "Yalnızca Geometriyi Yükle" -msgid "Load Behaviour" -msgstr "Yükleme Davranışı" +msgid "Load behaviour" +msgstr "Yükleme davranışı" + +msgid "Behaviour" +msgstr "Davranış" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "Bir .3mf açılırken yazıcı/filament/işlem ayarları yüklenmeli mi?" @@ -7063,16 +7081,16 @@ msgstr "Son kullanılan dosyaların maksimum sayısı" msgid "Maximum count of recent files" msgstr "Son dosyaların maksimum sayısı" -msgid "Add model files (stl/step) to recent file list." -msgstr "Model dosyalarını (STL/STEP) son dosyalar listesine ekle." +msgid "Add STL/STEP files to recent files list" +msgstr "STL/STEP dosyalarını son dosyalar listesine ekle" msgid "Clear my choice on the unsaved projects." msgstr "Kaydedilmemiş projelerdeki seçimimi temizle." -msgid "No warnings when loading 3MF with modified G-code" -msgstr "Değiştirilmiş G-kodları içeren 3MF dosyalarını yüklerken uyarı verme" +msgid "Don't warn when loading 3MF with modified G-code" +msgstr "Değiştirilmiş G-kodları içeren 3MF dosyalarını yüklerken uyarma" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Otomatik yedekleme" msgid "" @@ -7090,10 +7108,13 @@ msgstr "Saniye cinsinden yedekleme periyodu." msgid "Downloads" msgstr "İndirilenler" +msgid "Downloads folder" +msgstr "İndirilenler klasörü" + msgid "Dark Mode" msgstr "Karanlık Mod" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Karanlık modu etkinleştir" msgid "Develop mode" @@ -8914,12 +8935,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 +12496,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 " @@ -17450,6 +17472,9 @@ msgid "Delete input" msgstr "Girişi sil" msgid "Network Test" +msgstr "Ağ Testi" + +msgid "Network test" msgstr "Ağ testi" msgid "Start Test Multi-Thread" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 31facff165..0b27c7402f 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 " @@ -6859,10 +6870,10 @@ msgstr "Північна Америка" msgid "Others" msgstr "Інші" -msgid "Login Region" +msgid "Login region" msgstr "Регіон входу" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Прихований режим" msgid "" @@ -6873,10 +6884,13 @@ msgstr "" "користуються машинами BBL або використовують лише режим локальної мережі, " "можуть безпечно ввімкнути цю функцію." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Увімкнути мережевий плагін" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6920,7 +6934,7 @@ msgstr "" msgid "Home" msgstr "Домашня" -msgid "Default Page" +msgid "Default page" msgstr "Початкова сторінка" msgid "Set the page opened on startup." @@ -7020,16 +7034,18 @@ msgstr "" "Якщо увімкнено, Orca запам'ятовує та автоматично перемикає конфігурацію " "нитки/процесу для кожного принтера." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "Керування кількома пристроями" + +msgid "(Requires restart)" msgstr "" -"Керування кількома пристроями (набуває чинності після перезапуску Orca)." msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7108,9 +7124,12 @@ msgstr "Запитувати завжди" msgid "Load Geometry Only" msgstr "Завантажити Тільки Геометрію" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Поведінка завантаження" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Чи повинні бути завантажені налаштування принтера/філаменту/процесу при " @@ -7122,16 +7141,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Очистити мій вибір для незбережених проектів." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Немає попереджень при завантаженні файлу 3MF із зміненими G-кодами" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Автобекап" msgid "" @@ -7149,10 +7168,13 @@ msgstr "Період резервного копіювання в секунда msgid "Downloads" msgstr "Завантаження" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Темний режим" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Увімкнути темний режим" msgid "Develop mode" @@ -8972,12 +8994,12 @@ msgstr "Показати список клавіш" msgid "Global shortcuts" msgstr "Глобальні ярлики" -msgid "Rotate View" -msgstr "Повернути вигляд" - msgid "Pan View" msgstr "Панорамний вигляд" +msgid "Rotate View" +msgstr "Повернути вигляд" + msgid "Zoom View" msgstr "Перегляд масштабу" @@ -17381,6 +17403,9 @@ msgstr "Видалити початкові об'єкти" msgid "Network Test" msgstr "Тест мережі" +msgid "Network test" +msgstr "Тест мережі" + msgid "Start Test Multi-Thread" msgstr "Розпочати тестування багатопотоково" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 15c3e9203c..6c7c2782b9 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 " @@ -6532,10 +6545,10 @@ msgstr "北美" msgid "Others" msgstr "其他" -msgid "Login Region" +msgid "Login region" msgstr "登录区域" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "局域网模式" msgid "" @@ -6545,11 +6558,14 @@ msgstr "" "停止向拓竹科技服务器发送数据。如果您不使用Bambu Lab的打印机或仅使用局域网模" "式,则可以安全地启用此功能。" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "启用网络插件" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "使用旧版网络插件(重启Orca后生效)" +msgid "Use legacy network plugin" +msgstr "使用旧版网络插件" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6589,7 +6605,7 @@ msgstr "" msgid "Home" msgstr "首页" -msgid "Default Page" +msgid "Default page" msgstr "起始页" msgid "Set the page opened on startup." @@ -6676,15 +6692,18 @@ msgid "" "each printer automatically." msgstr "如果启用,Orca会自动记录并切换您不同打印机之间的耗材配置与打印参数。" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "显示STEP网格参数设置对话框" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "如果启用,在导入STEP文件时将出现参数设置对话框" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "多设备管理 (重启Orca后生效)" +msgid "Multi device management" +msgstr "多设备管理" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6754,9 +6773,12 @@ msgstr "总是提问" msgid "Load Geometry Only" msgstr "仅加载几何形状" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "加载 交互项" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "printter/filament/process 设置项文件能否以 .3mf后缀方式打开" @@ -6766,16 +6788,16 @@ msgstr "最大最近使用文件数" msgid "Maximum count of recent files" msgstr "最近使用文件的最大数量" -msgid "Add model files (stl/step) to recent file list." -msgstr "添加模型文件(stl/step)到最近文件列表" +msgid "Add STL/STEP files to recent files list" +msgstr "添加模型文件 STL/STEP 到最近文件列表" msgid "Clear my choice on the unsaved projects." msgstr "清除我对未保存的项目的选择。" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "加载具有修改的 G-Code 的 3MF 时不会出现警告" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "自动备份" msgid "" @@ -6791,10 +6813,13 @@ msgstr "备份的周期" msgid "Downloads" msgstr "下载" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "深色模式" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "启用深色模式" msgid "Develop mode" @@ -8503,12 +8528,12 @@ msgstr "显示键盘快捷键列表" msgid "Global shortcuts" msgstr "全局快捷键" -msgid "Rotate View" -msgstr "旋转视角" - msgid "Pan View" msgstr "移动视角" +msgid "Rotate View" +msgstr "旋转视角" + msgid "Zoom View" msgstr "缩放视角" @@ -15963,6 +15988,9 @@ msgstr "删除输入" msgid "Network Test" msgstr "网络测试" +msgid "Network test" +msgstr "网络测试" + msgid "Start Test Multi-Thread" msgstr "多线程开始测试" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index d7165954c4..8639ab3d5b 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 " @@ -6549,10 +6560,10 @@ msgstr "北美" msgid "Others" msgstr "其他" -msgid "Login Region" +msgid "Login region" msgstr "登入區域" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "區域網路模式" msgid "" @@ -6562,11 +6573,14 @@ msgstr "" "這會停止資料傳輸到 Bambu 的雲端服務。使用者如果不使用 Bambu 機台或僅使用區域" "網路模式,可以安全地啟用此功能。" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "啟用網路外掛程式" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "使用舊版網路外掛(重新啟動 Orca 後生效)" +msgid "Use legacy network plugin" +msgstr "使用舊版網路外掛" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6606,7 +6620,7 @@ msgstr "" msgid "Home" msgstr "首頁" -msgid "Default Page" +msgid "Default page" msgstr "預設頁面" msgid "Set the page opened on startup." @@ -6693,15 +6707,18 @@ msgid "" "each printer automatically." msgstr "啟用後,Orca 會記住且自動切換各機臺線材與列印設定。" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "顯示 STEP 網格參數設定視窗。" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "啟用後,匯入 STEP 檔案時會顯示參數設定視窗。" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "多臺設備管理 (需重開 Orca)" +msgid "Multi device management" +msgstr "多臺設備管理" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6771,9 +6788,12 @@ msgstr "總是詢問" msgid "Load Geometry Only" msgstr "僅載入幾何資料" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "載入方式" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "開啟 .3mf 檔案時,是否需要載入印表機、線材和參數設定?" @@ -6783,16 +6803,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "清除我對未儲存專案項目的選擇。" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "載入包含修改過 G-code 的 3MF 時不顯示警告" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "自動備份" msgid "" @@ -6808,10 +6828,13 @@ msgstr "備份的週期。" msgid "Downloads" msgstr "下載" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "深色模式" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "啟用深色模式" msgid "Develop mode" @@ -8525,12 +8548,12 @@ msgstr "顯示鍵盤快捷鍵清單" msgid "Global shortcuts" msgstr "全域快捷鍵" -msgid "Rotate View" -msgstr "旋轉視角" - msgid "Pan View" msgstr "移動視角" +msgid "Rotate View" +msgstr "旋轉視角" + msgid "Zoom View" msgstr "縮放視角" @@ -16133,6 +16156,9 @@ msgstr "刪除輸入" msgid "Network Test" msgstr "網路測試" +msgid "Network test" +msgstr "網路測試" + msgid "Start Test Multi-Thread" msgstr "啟動多執行緒測試" diff --git a/resources/images/loop.svg b/resources/images/loop.svg new file mode 100644 index 0000000000..446d9f305a --- /dev/null +++ b/resources/images/loop.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json index 14e6d07c55..2231465b6a 100644 --- a/resources/profiles/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "200", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json index 3c86bca3cb..429c756708 100644 --- a/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.22", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "120", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json index 3114c07ea1..9171007fe2 100644 --- a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "200", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json index ac729ec122..72040f5d3e 100644 --- a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "240", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", diff --git a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json index 4b30de8de0..91cd4e155a 100644 --- a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json index 4ae781ef7b..077a3af03e 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "130", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json index ba195fdb71..3ee0511436 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "100", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json index 7fd2f802fd..3531b421fc 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "130", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json index ca6c31851d..4a912876df 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "130", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json index a41ebfda03..75df40bb96 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "130", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json index fe300766b9..681061a1ca 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json @@ -90,7 +90,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "250", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", diff --git a/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json index 7a78799c68..ee2e848f26 100644 --- a/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.45", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "200", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json index 29299c1e9c..f5cf2a58a5 100644 --- a/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "120", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", diff --git a/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json index a3f88f28d9..79b1031696 100644 --- a/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "180", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json index f4384a42bb..85b6b0406d 100644 --- a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.62", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json index 3b76c7e3c9..242c46ab1b 100644 --- a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json @@ -91,7 +91,7 @@ "internal_solid_infill_line_width": "0.82", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", 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/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json index 0d34e48320..6782b66043 100644 --- a/resources/profiles/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json @@ -101,7 +101,7 @@ "internal_solid_infill_acceleration": "100%", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "300", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json index b08ec4a36a..2f78eb25c1 100644 --- a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json @@ -93,7 +93,7 @@ "internal_solid_infill_line_width": "0.22", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json index a7edc4d623..f83d5abd27 100644 --- a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json @@ -98,7 +98,7 @@ "internal_bridge_speed": "150%", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_pattern": "monotonic", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json index 4392f735cb..817bb4adfa 100644 --- a/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json @@ -99,7 +99,7 @@ "internal_solid_infill_acceleration": "100%", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "300", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json index d4e859d445..62dc77f66d 100644 --- a/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json @@ -99,7 +99,7 @@ "internal_bridge_speed": "150%", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_pattern": "monotonic", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json index f4d59cc9fa..c5a47dce99 100644 --- a/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json @@ -100,7 +100,7 @@ "internal_bridge_speed": "150%", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_pattern": "monotonic", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json index 20382f1ec6..79729dfa9a 100644 --- a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json @@ -102,7 +102,7 @@ "internal_bridge_speed": "150%", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_pattern": "monotonic", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json index d7fdadf076..e7464ceaac 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json @@ -103,7 +103,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "250", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json index 609e4e0449..095eca39f6 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json @@ -87,7 +87,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json index 03596bb89b..4f2ba17308 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json @@ -87,7 +87,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json index ffc4990277..6cd017a2a2 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json @@ -87,7 +87,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "300", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json index 9d9f9fa94b..205850caa9 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json @@ -87,7 +87,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "300", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json index 7e7511a827..3c82b8e353 100644 --- a/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json @@ -98,7 +98,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "300", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json index cb39c30cfe..b0bbf7da19 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json @@ -96,7 +96,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "300", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json index 76f2a27d95..e2e13de246 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json @@ -93,7 +93,7 @@ "internal_solid_infill_line_width": "0.62", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json index 1f8c58c0c5..73faaa0416 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json @@ -93,7 +93,7 @@ "internal_solid_infill_line_width": "0.82", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "150", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json index 073bf7e5af..82d05cd7f9 100644 --- a/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json @@ -99,7 +99,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "300", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index bac42b664b..49db95105b 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -6,16 +6,12 @@ "description": "the initial version of BBL configurations", "machine_model_list": [ { - "name": "Bambu Lab X1 Carbon", - "sub_path": "machine/Bambu Lab X1 Carbon.json" + "name": "Bambu Lab A1", + "sub_path": "machine/Bambu Lab A1.json" }, { - "name": "Bambu Lab X1", - "sub_path": "machine/Bambu Lab X1.json" - }, - { - "name": "Bambu Lab X1E", - "sub_path": "machine/Bambu Lab X1E.json" + "name": "Bambu Lab A1 mini", + "sub_path": "machine/Bambu Lab A1 mini.json" }, { "name": "Bambu Lab P1P", @@ -26,12 +22,16 @@ "sub_path": "machine/Bambu Lab P1S.json" }, { - "name": "Bambu Lab A1 mini", - "sub_path": "machine/Bambu Lab A1 mini.json" + "name": "Bambu Lab X1", + "sub_path": "machine/Bambu Lab X1.json" }, { - "name": "Bambu Lab A1", - "sub_path": "machine/Bambu Lab A1.json" + "name": "Bambu Lab X1 Carbon", + "sub_path": "machine/Bambu Lab X1 Carbon.json" + }, + { + "name": "Bambu Lab X1E", + "sub_path": "machine/Bambu Lab X1E.json" } ], "process_list": [ @@ -605,10 +605,82 @@ } ], "filament_list": [ + { + "name": "COEX PCTG PRIME @BBL X1C", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL X1C.json" + }, + { + "name": "COEX PCTG PRIME @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX PCTG PRIME @BBL X1C 0.8 nozzle", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL X1C 0.8 nozzle.json" + }, + { + "name": "COEX PETG @BBL X1C", + "sub_path": "filament/COEX/COEX PETG @BBL X1C.json" + }, + { + "name": "COEX PETG @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX PETG @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX PETG @BBL X1C 0.8 nozzle", + "sub_path": "filament/COEX/COEX PETG @BBL X1C 0.8 nozzle.json" + }, + { + "name": "COEX PLA @BBL A1M", + "sub_path": "filament/COEX/COEX PLA @BBL A1M.json" + }, + { + "name": "COEX PLA @BBL P1P", + "sub_path": "filament/COEX/COEX PLA @BBL P1P.json" + }, + { + "name": "COEX PLA @BBL X1C", + "sub_path": "filament/COEX/COEX PLA @BBL X1C.json" + }, { "name": "fdm_filament_common", "sub_path": "filament/fdm_filament_common.json" }, + { + "name": "COEX PCTG PRIME @BBL A1M 0.4 nozzle", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL A1M.json" + }, + { + "name": "COEX PCTG PRIME @BBL A1M 0.2 nozzle", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL A1M 0.2 nozzle.json" + }, + { + "name": "COEX PCTG PRIME @BBL A1M 0.8 nozzle", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL A1M 0.8 nozzle.json" + }, + { + "name": "COEX PETG @BBL A1M 0.4 nozzle", + "sub_path": "filament/COEX/COEX PETG @BBL A1M.json" + }, + { + "name": "COEX PETG @BBL A1M 0.2 nozzle", + "sub_path": "filament/COEX/COEX PETG @BBL A1M 0.2 nozzle.json" + }, + { + "name": "COEX PETG @BBL A1M 0.8 nozzle", + "sub_path": "filament/COEX/COEX PETG @BBL A1M 0.8 nozzle.json" + }, + { + "name": "COEX PLA @BBL A1M 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA @BBL A1M 0.2 nozzle.json" + }, + { + "name": "COEX PLA @BBL P1P 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA @BBL P1P 0.2 nozzle.json" + }, + { + "name": "COEX PLA @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA @BBL X1C 0.2 nozzle.json" + }, { "name": "FusRock ABS-GF @base", "sub_path": "filament/FusRock/FusRock ABS-GF @base.json" @@ -4185,6 +4257,282 @@ "name": "AliZ PLA @P1-X1", "sub_path": "filament/AliZ/AliZ PLA @P1-X1.json" }, + { + "name": "COEX ABS @BBL X1", + "sub_path": "filament/COEX/COEX ABS @BBL X1.json" + }, + { + "name": "COEX ABS @BBL X1 0.2 nozzle", + "sub_path": "filament/COEX/COEX ABS @BBL X1 0.2 nozzle.json" + }, + { + "name": "COEX ABS @BBL X1C", + "sub_path": "filament/COEX/COEX ABS @BBL X1C.json" + }, + { + "name": "COEX ABS @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX ABS @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX ABS PRIME @BBL X1", + "sub_path": "filament/COEX/COEX ABS PRIME @BBL X1.json" + }, + { + "name": "COEX ABS PRIME @BBL X1 0.2 nozzle", + "sub_path": "filament/COEX/COEX ABS PRIME @BBL X1 0.2 nozzle.json" + }, + { + "name": "COEX ABS PRIME @BBL X1C", + "sub_path": "filament/COEX/COEX ABS PRIME @BBL X1C.json" + }, + { + "name": "COEX ABS PRIME @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX ABS PRIME @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX ASA PRIME @BBL X1", + "sub_path": "filament/COEX/COEX ASA PRIME @BBL X1.json" + }, + { + "name": "COEX ASA PRIME @BBL X1 0.2 nozzle", + "sub_path": "filament/COEX/COEX ASA PRIME @BBL X1 0.2 nozzle.json" + }, + { + "name": "COEX ASA PRIME @BBL X1C", + "sub_path": "filament/COEX/COEX ASA PRIME @BBL X1C.json" + }, + { + "name": "COEX ASA PRIME @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX ASA PRIME @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX NYLEX PA6-CF @BBL X1C", + "sub_path": "filament/COEX/COEX NYLEX PA6-CF @BBL X1C.json" + }, + { + "name": "COEX NYLEX UNFILLED @BBL X1C", + "sub_path": "filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json" + }, + { + "name": "COEX PCTG PRIME @BBL A1", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL A1.json" + }, + { + "name": "COEX PCTG PRIME @BBL A1 0.2 nozzle", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL A1 0.2 nozzle.json" + }, + { + "name": "COEX PCTG PRIME @BBL A1 0.8 nozzle", + "sub_path": "filament/COEX/COEX PCTG PRIME @BBL A1 0.8 nozzle.json" + }, + { + "name": "COEX PETG @BBL A1", + "sub_path": "filament/COEX/COEX PETG @BBL A1.json" + }, + { + "name": "COEX PETG @BBL A1 0.2 nozzle", + "sub_path": "filament/COEX/COEX PETG @BBL A1 0.2 nozzle.json" + }, + { + "name": "COEX PETG @BBL A1 0.8 nozzle", + "sub_path": "filament/COEX/COEX PETG @BBL A1 0.8 nozzle.json" + }, + { + "name": "COEX PLA @BBL A1", + "sub_path": "filament/COEX/COEX PLA @BBL A1.json" + }, + { + "name": "COEX PLA @BBL A1 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA @BBL A1 0.2 nozzle.json" + }, + { + "name": "COEX PLA @BBL X1", + "sub_path": "filament/COEX/COEX PLA @BBL X1.json" + }, + { + "name": "COEX PLA PRIME @BBL A1", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL A1.json" + }, + { + "name": "COEX PLA PRIME @BBL A1 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL A1 0.2 nozzle.json" + }, + { + "name": "COEX PLA PRIME @BBL A1M", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL A1M.json" + }, + { + "name": "COEX PLA PRIME @BBL A1M 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL A1M 0.2 nozzle.json" + }, + { + "name": "COEX PLA PRIME @BBL P1P", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL P1P.json" + }, + { + "name": "COEX PLA PRIME @BBL P1P 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL P1P 0.2 nozzle.json" + }, + { + "name": "COEX PLA PRIME @BBL X1", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL X1.json" + }, + { + "name": "COEX PLA PRIME @BBL X1 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL X1 0.2 nozzle.json" + }, + { + "name": "COEX PLA PRIME @BBL X1C", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL X1C.json" + }, + { + "name": "COEX PLA PRIME @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA PRIME @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX PLA+Silk @BBL A1", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL A1.json" + }, + { + "name": "COEX PLA+Silk @BBL A1 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL A1 0.2 nozzle.json" + }, + { + "name": "COEX PLA+Silk @BBL A1M", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL A1M.json" + }, + { + "name": "COEX PLA+Silk @BBL A1M 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL A1M 0.2 nozzle.json" + }, + { + "name": "COEX PLA+Silk @BBL P1P", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL P1P.json" + }, + { + "name": "COEX PLA+Silk @BBL P1P 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL P1P 0.2 nozzle.json" + }, + { + "name": "COEX PLA+Silk @BBL X1", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL X1.json" + }, + { + "name": "COEX PLA+Silk @BBL X1 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL X1 0.2 nozzle.json" + }, + { + "name": "COEX PLA+Silk @BBL X1C", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL X1C.json" + }, + { + "name": "COEX PLA+Silk @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX PLA+Silk @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX TPE 30D @BBL A1", + "sub_path": "filament/COEX/COEX TPE 30D @BBL A1.json" + }, + { + "name": "COEX TPE 30D @BBL A1M", + "sub_path": "filament/COEX/COEX TPE 30D @BBL A1M.json" + }, + { + "name": "COEX TPE 30D @BBL P1P", + "sub_path": "filament/COEX/COEX TPE 30D @BBL P1P.json" + }, + { + "name": "COEX TPE 30D @BBL X1", + "sub_path": "filament/COEX/COEX TPE 30D @BBL X1.json" + }, + { + "name": "COEX TPE 30D @BBL X1C", + "sub_path": "filament/COEX/COEX TPE 30D @BBL X1C.json" + }, + { + "name": "COEX TPE 40D @BBL A1", + "sub_path": "filament/COEX/COEX TPE 40D @BBL A1.json" + }, + { + "name": "COEX TPE 40D @BBL A1 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 40D @BBL A1 0.2 nozzle.json" + }, + { + "name": "COEX TPE 40D @BBL A1M", + "sub_path": "filament/COEX/COEX TPE 40D @BBL A1M.json" + }, + { + "name": "COEX TPE 40D @BBL A1M 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 40D @BBL A1M 0.2 nozzle.json" + }, + { + "name": "COEX TPE 40D @BBL P1P", + "sub_path": "filament/COEX/COEX TPE 40D @BBL P1P.json" + }, + { + "name": "COEX TPE 40D @BBL P1P 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 40D @BBL P1P 0.2 nozzle.json" + }, + { + "name": "COEX TPE 40D @BBL X1", + "sub_path": "filament/COEX/COEX TPE 40D @BBL X1.json" + }, + { + "name": "COEX TPE 40D @BBL X1 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 40D @BBL X1 0.2 nozzle.json" + }, + { + "name": "COEX TPE 40D @BBL X1C", + "sub_path": "filament/COEX/COEX TPE 40D @BBL X1C.json" + }, + { + "name": "COEX TPE 40D @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 40D @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX TPE 60D @BBL A1", + "sub_path": "filament/COEX/COEX TPE 60D @BBL A1.json" + }, + { + "name": "COEX TPE 60D @BBL A1 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 60D @BBL A1 0.2 nozzle.json" + }, + { + "name": "COEX TPE 60D @BBL A1M", + "sub_path": "filament/COEX/COEX TPE 60D @BBL A1M.json" + }, + { + "name": "COEX TPE 60D @BBL A1M 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 60D @BBL A1M 0.2 nozzle.json" + }, + { + "name": "COEX TPE 60D @BBL P1P", + "sub_path": "filament/COEX/COEX TPE 60D @BBL P1P.json" + }, + { + "name": "COEX TPE 60D @BBL P1P 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 60D @BBL P1P 0.2 nozzle.json" + }, + { + "name": "COEX TPE 60D @BBL X1", + "sub_path": "filament/COEX/COEX TPE 60D @BBL X1.json" + }, + { + "name": "COEX TPE 60D @BBL X1 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 60D @BBL X1 0.2 nozzle.json" + }, + { + "name": "COEX TPE 60D @BBL X1C", + "sub_path": "filament/COEX/COEX TPE 60D @BBL X1C.json" + }, + { + "name": "COEX TPE 60D @BBL X1C 0.2 nozzle", + "sub_path": "filament/COEX/COEX TPE 60D @BBL X1C 0.2 nozzle.json" + }, + { + "name": "COEX TPU 60A @BBL X1C", + "sub_path": "filament/COEX/COEX TPU 60A @BBL X1C.json" + }, { "name": "Overture ASA @BBL X1", "sub_path": "filament/Overture/Overture ASA @BBL X1.json" @@ -4452,12 +4800,12 @@ "sub_path": "machine/fdm_bbl_3dp_001_common.json" }, { - "name": "Bambu Lab X1 Carbon 0.4 nozzle", - "sub_path": "machine/Bambu Lab X1 Carbon 0.4 nozzle.json" + "name": "Bambu Lab A1 0.4 nozzle", + "sub_path": "machine/Bambu Lab A1 0.4 nozzle.json" }, { - "name": "Bambu Lab X1 0.4 nozzle", - "sub_path": "machine/Bambu Lab X1 0.4 nozzle.json" + "name": "Bambu Lab A1 mini 0.4 nozzle", + "sub_path": "machine/Bambu Lab A1 mini 0.4 nozzle.json" }, { "name": "Bambu Lab P1P 0.4 nozzle", @@ -4468,40 +4816,40 @@ "sub_path": "machine/Bambu Lab P1S 0.4 nozzle.json" }, { - "name": "Bambu Lab A1 mini 0.4 nozzle", - "sub_path": "machine/Bambu Lab A1 mini 0.4 nozzle.json" + "name": "Bambu Lab X1 0.4 nozzle", + "sub_path": "machine/Bambu Lab X1 0.4 nozzle.json" + }, + { + "name": "Bambu Lab X1 Carbon 0.4 nozzle", + "sub_path": "machine/Bambu Lab X1 Carbon 0.4 nozzle.json" }, { "name": "Bambu Lab X1E 0.4 nozzle", "sub_path": "machine/Bambu Lab X1E 0.4 nozzle.json" }, { - "name": "Bambu Lab A1 0.4 nozzle", - "sub_path": "machine/Bambu Lab A1 0.4 nozzle.json" + "name": "Bambu Lab A1 0.2 nozzle", + "sub_path": "machine/Bambu Lab A1 0.2 nozzle.json" }, { - "name": "Bambu Lab X1 Carbon 0.2 nozzle", - "sub_path": "machine/Bambu Lab X1 Carbon 0.2 nozzle.json" + "name": "Bambu Lab A1 0.6 nozzle", + "sub_path": "machine/Bambu Lab A1 0.6 nozzle.json" }, { - "name": "Bambu Lab X1 Carbon 0.6 nozzle", - "sub_path": "machine/Bambu Lab X1 Carbon 0.6 nozzle.json" + "name": "Bambu Lab A1 0.8 nozzle", + "sub_path": "machine/Bambu Lab A1 0.8 nozzle.json" }, { - "name": "Bambu Lab X1 Carbon 0.8 nozzle", - "sub_path": "machine/Bambu Lab X1 Carbon 0.8 nozzle.json" + "name": "Bambu Lab A1 mini 0.2 nozzle", + "sub_path": "machine/Bambu Lab A1 mini 0.2 nozzle.json" }, { - "name": "Bambu Lab X1 0.2 nozzle", - "sub_path": "machine/Bambu Lab X1 0.2 nozzle.json" + "name": "Bambu Lab A1 mini 0.6 nozzle", + "sub_path": "machine/Bambu Lab A1 mini 0.6 nozzle.json" }, { - "name": "Bambu Lab X1 0.8 nozzle", - "sub_path": "machine/Bambu Lab X1 0.8 nozzle.json" - }, - { - "name": "Bambu Lab X1 0.6 nozzle", - "sub_path": "machine/Bambu Lab X1 0.6 nozzle.json" + "name": "Bambu Lab A1 mini 0.8 nozzle", + "sub_path": "machine/Bambu Lab A1 mini 0.8 nozzle.json" }, { "name": "Bambu Lab P1P 0.2 nozzle", @@ -4528,16 +4876,28 @@ "sub_path": "machine/Bambu Lab P1S 0.8 nozzle.json" }, { - "name": "Bambu Lab A1 mini 0.2 nozzle", - "sub_path": "machine/Bambu Lab A1 mini 0.2 nozzle.json" + "name": "Bambu Lab X1 0.2 nozzle", + "sub_path": "machine/Bambu Lab X1 0.2 nozzle.json" }, { - "name": "Bambu Lab A1 mini 0.6 nozzle", - "sub_path": "machine/Bambu Lab A1 mini 0.6 nozzle.json" + "name": "Bambu Lab X1 0.6 nozzle", + "sub_path": "machine/Bambu Lab X1 0.6 nozzle.json" }, { - "name": "Bambu Lab A1 mini 0.8 nozzle", - "sub_path": "machine/Bambu Lab A1 mini 0.8 nozzle.json" + "name": "Bambu Lab X1 0.8 nozzle", + "sub_path": "machine/Bambu Lab X1 0.8 nozzle.json" + }, + { + "name": "Bambu Lab X1 Carbon 0.2 nozzle", + "sub_path": "machine/Bambu Lab X1 Carbon 0.2 nozzle.json" + }, + { + "name": "Bambu Lab X1 Carbon 0.6 nozzle", + "sub_path": "machine/Bambu Lab X1 Carbon 0.6 nozzle.json" + }, + { + "name": "Bambu Lab X1 Carbon 0.8 nozzle", + "sub_path": "machine/Bambu Lab X1 Carbon 0.8 nozzle.json" }, { "name": "Bambu Lab X1E 0.2 nozzle", @@ -4550,18 +4910,6 @@ { "name": "Bambu Lab X1E 0.8 nozzle", "sub_path": "machine/Bambu Lab X1E 0.8 nozzle.json" - }, - { - "name": "Bambu Lab A1 0.2 nozzle", - "sub_path": "machine/Bambu Lab A1 0.2 nozzle.json" - }, - { - "name": "Bambu Lab A1 0.6 nozzle", - "sub_path": "machine/Bambu Lab A1 0.6 nozzle.json" - }, - { - "name": "Bambu Lab A1 0.8 nozzle", - "sub_path": "machine/Bambu Lab A1 0.8 nozzle.json" } ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..7a2cd8ec80 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX ABS @BBL X1 0.2 nozzle", + "inherits": "COEX ABS @base", + "from": "system", + "setting_id": "CXABSB01_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1.json new file mode 100644 index 0000000000..f3630554a5 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX ABS @BBL X1", + "inherits": "COEX ABS @base", + "from": "system", + "setting_id": "CXABSB01_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..bff2ccf706 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX ABS @BBL X1C 0.2 nozzle", + "inherits": "COEX ABS @base", + "from": "system", + "setting_id": "CXABSB01_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1C.json new file mode 100644 index 0000000000..c26efdf77b --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX ABS @BBL X1C", + "inherits": "COEX ABS @base", + "from": "system", + "setting_id": "CXABSB01_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..4d47460f8c --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX ABS PRIME @BBL X1 0.2 nozzle", + "inherits": "COEX ABS PRIME @base", + "from": "system", + "setting_id": "CXABPB09_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1.json new file mode 100644 index 0000000000..e10a7723af --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX ABS PRIME @BBL X1", + "inherits": "COEX ABS PRIME @base", + "from": "system", + "setting_id": "CXABPB09_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..2179a95859 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX ABS PRIME @BBL X1C 0.2 nozzle", + "inherits": "COEX ABS PRIME @base", + "from": "system", + "setting_id": "CXABPB09_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1C.json new file mode 100644 index 0000000000..6fda1057bf --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ABS PRIME @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX ABS PRIME @BBL X1C", + "inherits": "COEX ABS PRIME @base", + "from": "system", + "setting_id": "CXABPB09_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..43e699d5ac --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX ASA PRIME @BBL X1 0.2 nozzle", + "inherits": "COEX ASA PRIME @base", + "from": "system", + "setting_id": "CXASAB04_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1.json new file mode 100644 index 0000000000..c8c1a1cf26 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX ASA PRIME @BBL X1", + "inherits": "COEX ASA PRIME @base", + "from": "system", + "setting_id": "CXASAB04_02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..84f9362319 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX ASA PRIME @BBL X1C 0.2 nozzle", + "inherits": "COEX ASA PRIME @base", + "from": "system", + "setting_id": "CXASAB04_03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1C.json new file mode 100644 index 0000000000..a2733cdf0d --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX ASA PRIME @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX ASA PRIME @BBL X1C", + "inherits": "COEX ASA PRIME @base", + "from": "system", + "setting_id": "CXASAB04_04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX NYLEX PA6-CF @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX NYLEX PA6-CF @BBL X1C.json new file mode 100644 index 0000000000..72bfabf138 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX NYLEX PA6-CF @BBL X1C.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "COEX NYLEX PA6-CF @BBL X1C", + "inherits": "COEX NYLEX PA6-CF @base", + "from": "system", + "setting_id": "CXPACB23_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json new file mode 100644 index 0000000000..9cb15675ff --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX NYLEX UNFILLED @BBL X1C", + "inherits": "COEX NYLEX UNFILLED @base", + "from": "system", + "setting_id": "CXPAUB21_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..2d981ef5d0 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL A1 0.2 nozzle", + "inherits": "COEX PCTG PRIME @base", + "from": "system", + "setting_id": "CXPCTX09", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1 0.8 nozzle.json new file mode 100644 index 0000000000..a0b0e616db --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1 0.8 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL A1 0.8 nozzle", + "inherits": "COEX PCTG PRIME @base", + "from": "system", + "setting_id": "CXPCTX08", + "instantiation": "true", + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Bambu Lab A1 0.8 nozzle", + "Bambu Lab A1 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1.json new file mode 100644 index 0000000000..6497cc2ef0 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL A1", + "inherits": "COEX PCTG PRIME @base", + "from": "system", + "setting_id": "CXPCTX07", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..16bcc0ed91 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL A1M 0.2 nozzle", + "inherits": "COEX PCTG PRIME @BBL X1C 0.2 nozzle", + "from": "system", + "setting_id": "CXPCTX06", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M 0.8 nozzle.json new file mode 100644 index 0000000000..a5e3155887 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M 0.8 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL A1M 0.8 nozzle", + "inherits": "COEX PCTG PRIME @BBL X1C 0.8 nozzle", + "from": "system", + "setting_id": "CXPCTX05", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M.json new file mode 100644 index 0000000000..d30f5452f6 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL A1M.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL A1M 0.4 nozzle", + "inherits": "COEX PCTG PRIME @BBL X1C", + "from": "system", + "setting_id": "CXPCTX04", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..504589c4fd --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C 0.2 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL X1C 0.2 nozzle", + "inherits": "COEX PCTG PRIME @base", + "from": "system", + "setting_id": "CXPCTX03", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "6" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1P 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..e4f2fc56f3 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C 0.8 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL X1C 0.8 nozzle", + "inherits": "COEX PCTG PRIME @base", + "from": "system", + "setting_id": "CXPCTX02", + "instantiation": "true", + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C.json new file mode 100644 index 0000000000..6b8ac5bcf0 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PCTG PRIME @BBL X1C.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @BBL X1C", + "inherits": "COEX PCTG PRIME @base", + "from": "system", + "setting_id": "CXPCTX01", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "14" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab X1E 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..cf05338966 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL A1 0.2 nozzle", + "inherits": "COEX PETG @base", + "from": "system", + "setting_id": "CXPETX09", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1 0.8 nozzle.json new file mode 100644 index 0000000000..afae7e13e1 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1 0.8 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL A1 0.8 nozzle", + "inherits": "COEX PETG @base", + "from": "system", + "setting_id": "CXPETX08", + "instantiation": "true", + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Bambu Lab A1 0.8 nozzle", + "Bambu Lab A1 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1.json new file mode 100644 index 0000000000..6a3ad57687 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL A1", + "inherits": "COEX PETG @base", + "from": "system", + "setting_id": "CXPETX07", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..a1bdb2433b --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL A1M 0.2 nozzle", + "inherits": "COEX PETG @BBL X1C 0.2 nozzle", + "from": "system", + "setting_id": "CXPETX06", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M 0.8 nozzle.json new file mode 100644 index 0000000000..9404604e84 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M 0.8 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL A1M 0.8 nozzle", + "inherits": "COEX PETG @BBL X1C 0.8 nozzle", + "from": "system", + "setting_id": "CXPETX05", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M.json new file mode 100644 index 0000000000..427f3219ab --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL A1M.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL A1M 0.4 nozzle", + "inherits": "COEX PETG @BBL X1C", + "from": "system", + "setting_id": "CXPETX04", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..8db961ca4b --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C 0.2 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL X1C 0.2 nozzle", + "inherits": "COEX PETG @base", + "from": "system", + "setting_id": "CXPETX03", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "6" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1P 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..8bbbc276b5 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C 0.8 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL X1C 0.8 nozzle", + "inherits": "COEX PETG @base", + "from": "system", + "setting_id": "CXPETX02", + "instantiation": "true", + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C.json new file mode 100644 index 0000000000..7e40b9c0c2 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PETG @BBL X1C.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "COEX PETG @BBL X1C", + "inherits": "COEX PETG @base", + "from": "system", + "setting_id": "CXPETX01", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "14" + ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab X1E 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..a2a404c8c2 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL A1 0.2 nozzle", + "inherits": "COEX PLA @base", + "from": "system", + "setting_id": "CXPLAX09", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1.json new file mode 100644 index 0000000000..754ac88b00 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL A1", + "inherits": "COEX PLA @base", + "from": "system", + "setting_id": "CXPLAX08", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..3c3bf12b8e --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1M 0.2 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL A1M 0.2 nozzle", + "inherits": "COEX PLA @BBL A1M", + "from": "system", + "setting_id": "CXPLAX07", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "6" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1M.json new file mode 100644 index 0000000000..00f2e2b575 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL A1M.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL A1M", + "inherits": "COEX PLA @base", + "from": "system", + "setting_id": "CXPLAX06", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..cd187310c8 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL P1P 0.2 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL P1P 0.2 nozzle", + "inherits": "COEX PLA @BBL P1P", + "from": "system", + "setting_id": "CXPLAX05", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "6" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL P1P.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL P1P.json new file mode 100644 index 0000000000..8940e8b0fa --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL P1P.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL P1P", + "inherits": "COEX PLA @base", + "from": "system", + "setting_id": "CXPLAX04", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "slow_down_layer_time": [ + "10" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1.json new file mode 100644 index 0000000000..cc38486eba --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL X1", + "inherits": "COEX PLA @base", + "from": "system", + "setting_id": "CXPLAX03", + "instantiation": "true", + "slow_down_layer_time": [ + "10" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..3013c1aba2 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1C 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL X1C 0.2 nozzle", + "inherits": "COEX PLA @BBL X1C", + "from": "system", + "setting_id": "CXPLAX02", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1.6" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1C.json new file mode 100644 index 0000000000..66ff1cfc20 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA @BBL X1C.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "COEX PLA @BBL X1C", + "inherits": "COEX PLA @base", + "from": "system", + "setting_id": "CXPLAX01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..3cff9ebf78 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL A1 0.2 nozzle", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX10", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1.json new file mode 100644 index 0000000000..1ca05b8adf --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL A1", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..c78360e7be --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL A1M 0.2 nozzle", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1M.json new file mode 100644 index 0000000000..59c57ee990 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL A1M", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..bd2fb7ffb6 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL P1P 0.2 nozzle", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL P1P.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL P1P.json new file mode 100644 index 0000000000..79c05c455d --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL P1P.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL P1P", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..9c47f8f8db --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL X1 0.2 nozzle", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1.json new file mode 100644 index 0000000000..6baa7d45b6 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL X1", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..599da36977 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL X1C 0.2 nozzle", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1C.json new file mode 100644 index 0000000000..3294686fa8 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA PRIME @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @BBL X1C", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "CXPLPX01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..153398166e --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL A1 0.2 nozzle", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX10", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1.json new file mode 100644 index 0000000000..cc8d27dadf --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL A1", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..13cd25c923 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1M 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL A1M 0.2 nozzle", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1M.json new file mode 100644 index 0000000000..8a374cf92a --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL A1M.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL A1M", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..8f484e587c --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL P1P 0.2 nozzle", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL P1P.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL P1P.json new file mode 100644 index 0000000000..d87d50bb02 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL P1P.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL P1P", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..6ec6712024 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL X1 0.2 nozzle", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1.json new file mode 100644 index 0000000000..f6e4539742 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL X1", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..ee1554fee3 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL X1C 0.2 nozzle", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1C.json new file mode 100644 index 0000000000..d6d1871a79 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX PLA+Silk @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @BBL X1C", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "CXPLSX01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL A1.json new file mode 100644 index 0000000000..ec7e351e31 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL A1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 30D @BBL A1", + "inherits": "COEX TPE 30D @base", + "from": "system", + "setting_id": "CX30DX09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "3.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL A1M.json new file mode 100644 index 0000000000..0d5b01e672 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL A1M.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 30D @BBL A1M", + "inherits": "COEX TPE 30D @base", + "from": "system", + "setting_id": "CX30DX07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "3.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL P1P.json b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL P1P.json new file mode 100644 index 0000000000..32c3432787 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL P1P.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 30D @BBL P1P", + "inherits": "COEX TPE 30D @base", + "from": "system", + "setting_id": "CX30DX05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "3.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL X1.json new file mode 100644 index 0000000000..630494d495 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 30D @BBL X1", + "inherits": "COEX TPE 30D @base", + "from": "system", + "setting_id": "CX30DX03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "3.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL X1C.json new file mode 100644 index 0000000000..86dd80e52b --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 30D @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX TPE 30D @BBL X1C", + "inherits": "COEX TPE 30D @base", + "from": "system", + "setting_id": "CX30DX01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "3.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..5ef630723a --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL A1 0.2 nozzle", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX10", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1.json new file mode 100644 index 0000000000..107033c178 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL A1", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "5.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..08fd5586c1 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1M 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL A1M 0.2 nozzle", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1M.json new file mode 100644 index 0000000000..7763421e7d --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL A1M.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL A1M", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "5.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..3a53a92b3a --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL P1P 0.2 nozzle", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL P1P.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL P1P.json new file mode 100644 index 0000000000..ac1878d459 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL P1P.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL P1P", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "5.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..d49982580c --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL X1 0.2 nozzle", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1.json new file mode 100644 index 0000000000..386f018736 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL X1", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "5.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..f84abd4d2b --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL X1C 0.2 nozzle", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1C.json new file mode 100644 index 0000000000..01a29a6d7c --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 40D @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @BBL X1C", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "CX40DX01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "5.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1 0.2 nozzle.json new file mode 100644 index 0000000000..7d5429d87f --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL A1 0.2 nozzle", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX10", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1.json new file mode 100644 index 0000000000..396ead6df6 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL A1", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX09", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1M 0.2 nozzle.json new file mode 100644 index 0000000000..dd620bde75 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1M 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL A1M 0.2 nozzle", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX08", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1M.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1M.json new file mode 100644 index 0000000000..b428c5cd99 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL A1M.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL A1M", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX07", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle", + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..19d7620b03 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL P1P 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL P1P 0.2 nozzle", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX06", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL P1P.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL P1P.json new file mode 100644 index 0000000000..67669f79e8 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL P1P.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL P1P", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX05", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1 0.2 nozzle.json new file mode 100644 index 0000000000..6b17d00ed3 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL X1 0.2 nozzle", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX04", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1.json new file mode 100644 index 0000000000..016717aa29 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL X1", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX03", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..018692bb63 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1C 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL X1C 0.2 nozzle", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX02", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1C.json new file mode 100644 index 0000000000..7b0937e6e1 --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPE 60D @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @BBL X1C", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "CX60DX01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/COEX/COEX TPU 60A @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX TPU 60A @BBL X1C.json new file mode 100644 index 0000000000..746558f86a --- /dev/null +++ b/resources/profiles/BBL/filament/COEX/COEX TPU 60A @BBL X1C.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "COEX TPU 60A @BBL X1C", + "inherits": "COEX TPU 60A @base", + "from": "system", + "setting_id": "CX60AX01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "1" + ] +} \ No newline at end of file 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/CoLiDo/process/fdm_process_colidodiy40_common.json b/resources/profiles/CoLiDo/process/fdm_process_colidodiy40_common.json index 42140b6af0..746335aaf5 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_colidodiy40_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_colidodiy40_common.json @@ -87,7 +87,7 @@ "internal_solid_infill_line_width": "0.4", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "250", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", diff --git a/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json b/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json index 4ee6991395..5966d9c818 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json @@ -94,7 +94,7 @@ "internal_solid_infill_line_width": "0.4", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "90", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", 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/Comgrow/process/fdm_process_comgrow_common.json b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json index f05c33ad01..65a123843d 100644 --- a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json +++ b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json @@ -76,7 +76,7 @@ "internal_solid_infill_line_width": "0", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "200", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.25", 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 Ender-5 Max 0.4mm nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-5 Max 0.4mm nozzle.json index 011735e4a5..c0beaa6fbd 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-5 Max 0.4mm nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-5 Max 0.4mm nozzle.json @@ -89,7 +89,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "500", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", 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.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json b/resources/profiles/Creality/process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json index 36f5a44408..3a4c005dc6 100644 --- a/resources/profiles/Creality/process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json @@ -89,7 +89,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "500", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", 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/Cubicon/process/process template @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/process/process template @Cubicon xCeler-I 0.4 nozzle.json index 4478100260..5046b8b8f4 100644 --- a/resources/profiles/Cubicon/process/process template @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/process/process template @Cubicon xCeler-I 0.4 nozzle.json @@ -104,7 +104,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "zig-zag", "internal_solid_infill_speed": "250", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_inset": "0", "ironing_pattern": "zig-zag", 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/Eryone/process/0.20mm Standard @Thinker X400.json b/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json index 05e8ac0755..bdd93a714c 100644 --- a/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json +++ b/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json @@ -80,7 +80,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "250", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", 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/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json index e6412eaaf6..b9c8cc8c02 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json @@ -83,7 +83,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "250", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "15%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", 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/Ginger Additive/process/fdm_process_common.json b/resources/profiles/Ginger Additive/process/fdm_process_common.json index ec7d5e4646..f517188d37 100644 --- a/resources/profiles/Ginger Additive/process/fdm_process_common.json +++ b/resources/profiles/Ginger Additive/process/fdm_process_common.json @@ -84,7 +84,7 @@ "internal_solid_infill_line_width": "3", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "100", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.1", 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..2d3bb9a9d3 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": [ @@ -100,6 +100,14 @@ "name": "Bambu Support for ABS @base", "sub_path": "filament/Bambu/Bambu Support for ABS @base.json" }, + { + "name": "COEX ABS @base", + "sub_path": "filament/COEX/COEX ABS @base.json" + }, + { + "name": "COEX ABS PRIME @base", + "sub_path": "filament/COEX/COEX ABS PRIME @base.json" + }, { "name": "FDplast ABS @base", "sub_path": "filament/FDplast/FDplast ABS @base.json" @@ -132,6 +140,10 @@ "name": "Bambu ASA-CF @base", "sub_path": "filament/Bambu/Bambu ASA-CF @base.json" }, + { + "name": "COEX ASA PRIME @base", + "sub_path": "filament/COEX/COEX ASA PRIME @base.json" + }, { "name": "Generic ASA @System", "sub_path": "filament/Generic ASA @System.json" @@ -188,6 +200,14 @@ "name": "Bambu Support G @base", "sub_path": "filament/Bambu/Bambu Support G @base.json" }, + { + "name": "COEX NYLEX PA6-CF @base", + "sub_path": "filament/COEX/COEX NYLEX PA6-CF @base.json" + }, + { + "name": "COEX NYLEX UNFILLED @base", + "sub_path": "filament/COEX/COEX NYLEX UNFILLED @base.json" + }, { "name": "Fiberon PA12-CF @base", "sub_path": "filament/Polymaker/Fiberon PA12-CF @base.json" @@ -224,6 +244,10 @@ "name": "Generic PC @System", "sub_path": "filament/Generic PC @System.json" }, + { + "name": "COEX PCTG PRIME @base", + "sub_path": "filament/COEX/COEX PCTG PRIME @base.json" + }, { "name": "Generic PCTG @System", "sub_path": "filament/Generic PCTG @System.json" @@ -260,6 +284,10 @@ "name": "Bambu PETG-CF @base", "sub_path": "filament/Bambu/Bambu PETG-CF @base.json" }, + { + "name": "COEX PETG @base", + "sub_path": "filament/COEX/COEX PETG @base.json" + }, { "name": "FDplast PETG @base", "sub_path": "filament/FDplast/FDplast PETG @base.json" @@ -384,6 +412,14 @@ "name": "Bambu Support W @base", "sub_path": "filament/Bambu/Bambu Support W @base.json" }, + { + "name": "COEX PLA @base", + "sub_path": "filament/COEX/COEX PLA @base.json" + }, + { + "name": "COEX PLA PRIME @base", + "sub_path": "filament/COEX/COEX PLA PRIME @base.json" + }, { "name": "FDplast PLA @base", "sub_path": "filament/FDplast/FDplast PLA @base.json" @@ -628,6 +664,22 @@ "name": "Bambu TPU 95A HF @base", "sub_path": "filament/Bambu/Bambu TPU 95A HF @base.json" }, + { + "name": "COEX TPE 30D @base", + "sub_path": "filament/COEX/COEX TPE 30D @base.json" + }, + { + "name": "COEX TPE 40D @base", + "sub_path": "filament/COEX/COEX TPE 40D @base.json" + }, + { + "name": "COEX TPE 60D @base", + "sub_path": "filament/COEX/COEX TPE 60D @base.json" + }, + { + "name": "COEX TPU 60A @base", + "sub_path": "filament/COEX/COEX TPU 60A @base.json" + }, { "name": "FDplast TPU @base", "sub_path": "filament/FDplast/FDplast TPU @base.json" @@ -652,6 +704,14 @@ "name": "Bambu Support for ABS @System", "sub_path": "filament/Bambu/Bambu Support for ABS @System.json" }, + { + "name": "COEX ABS @System", + "sub_path": "filament/COEX/COEX ABS @System.json" + }, + { + "name": "COEX ABS PRIME @System", + "sub_path": "filament/COEX/COEX ABS PRIME @System.json" + }, { "name": "FDplast ABS @System", "sub_path": "filament/FDplast/FDplast ABS @System.json" @@ -680,6 +740,10 @@ "name": "Bambu ASA-CF @System", "sub_path": "filament/Bambu/Bambu ASA-CF @System.json" }, + { + "name": "COEX ASA PRIME @System", + "sub_path": "filament/COEX/COEX ASA PRIME @System.json" + }, { "name": "Overture ASA @System", "sub_path": "filament/Overture/Overture ASA @System.json" @@ -720,6 +784,10 @@ "name": "Bambu Support G @System", "sub_path": "filament/Bambu/Bambu Support G @System.json" }, + { + "name": "COEX NYLEX PA6-CF @System", + "sub_path": "filament/COEX/COEX NYLEX PA6-CF @System.json" + }, { "name": "Fiberon PA12-CF @System", "sub_path": "filament/Polymaker/Fiberon PA12-CF @System.json" @@ -744,6 +812,10 @@ "name": "Bambu PC FR @System", "sub_path": "filament/Bambu/Bambu PC FR @System.json" }, + { + "name": "COEX PCTG PRIME @System", + "sub_path": "filament/COEX/COEX PCTG PRIME @System.json" + }, { "name": "AliZ PETG @System", "sub_path": "filament/AliZ/AliZ PETG @System.json" @@ -776,6 +848,10 @@ "name": "Bambu PETG-CF @System", "sub_path": "filament/Bambu/Bambu PETG-CF @System.json" }, + { + "name": "COEX PETG @System", + "sub_path": "filament/COEX/COEX PETG @System.json" + }, { "name": "FDplast PETG @System", "sub_path": "filament/FDplast/FDplast PETG @System.json" @@ -884,6 +960,14 @@ "name": "Bambu Support W @System", "sub_path": "filament/Bambu/Bambu Support W @System.json" }, + { + "name": "COEX PLA @System", + "sub_path": "filament/COEX/COEX PLA @System.json" + }, + { + "name": "COEX PLA PRIME @System", + "sub_path": "filament/COEX/COEX PLA PRIME @System.json" + }, { "name": "FDplast PLA @System", "sub_path": "filament/FDplast/FDplast PLA @System.json" @@ -1060,6 +1144,10 @@ "name": "eSUN PLA+ @System", "sub_path": "filament/eSUN/eSUN PLA+ @System.json" }, + { + "name": "COEX PLA+Silk @base", + "sub_path": "filament/COEX/COEX PLA+Silk @base.json" + }, { "name": "Generic PLA Silk @System", "sub_path": "filament/Generic PLA Silk @System.json" @@ -1084,6 +1172,22 @@ "name": "Bambu TPU 95A HF @System", "sub_path": "filament/Bambu/Bambu TPU 95A HF @System.json" }, + { + "name": "COEX TPE 30D @System", + "sub_path": "filament/COEX/COEX TPE 30D @System.json" + }, + { + "name": "COEX TPE 40D @System", + "sub_path": "filament/COEX/COEX TPE 40D @System.json" + }, + { + "name": "COEX TPE 60D @System", + "sub_path": "filament/COEX/COEX TPE 60D @System.json" + }, + { + "name": "COEX TPU 60A @System", + "sub_path": "filament/COEX/COEX TPU 60A @System.json" + }, { "name": "FDplast TPU @System", "sub_path": "filament/FDplast/FDplast TPU @System.json" @@ -1099,6 +1203,10 @@ { "name": "AliZ PETG-Metal @System", "sub_path": "filament/AliZ/AliZ PETG-Metal @System.json" + }, + { + "name": "COEX PLA+Silk @System", + "sub_path": "filament/COEX/COEX PLA+Silk @System.json" } ], "process_list": [], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @System.json new file mode 100644 index 0000000000..5844e48946 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX ABS @System", + "inherits": "COEX ABS @base", + "from": "system", + "setting_id": "COXABS01", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json new file mode 100644 index 0000000000..3be8f36b13 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json @@ -0,0 +1,96 @@ +{ + "type": "filament", + "name": "COEX ABS @base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "CXABSB01", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "30.00" + ], + "filament_density": [ + "1.04" + ], + "filament_type": [ + "ABS" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "bed_temperature": [ + "100" + ], + "bed_temperature_initial_layer": [ + "100" + ], + "temperature_vitrification": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "2.5" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "disable_fan_first_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @System.json new file mode 100644 index 0000000000..39a681e2ce --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX ABS PRIME @System", + "inherits": "COEX ABS PRIME @base", + "from": "system", + "setting_id": "CXABSP09", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json new file mode 100644 index 0000000000..e6fefd3022 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json @@ -0,0 +1,96 @@ +{ + "type": "filament", + "name": "COEX ABS PRIME @base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "CXABPB09", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "39.00" + ], + "filament_density": [ + "1.04" + ], + "filament_type": [ + "ABS" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "bed_temperature": [ + "100" + ], + "bed_temperature_initial_layer": [ + "100" + ], + "temperature_vitrification": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "2.5" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "disable_fan_first_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @System.json new file mode 100644 index 0000000000..17c0aa0953 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX ASA PRIME @System", + "inherits": "COEX ASA PRIME @base", + "from": "system", + "setting_id": "CXASAP04", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json new file mode 100644 index 0000000000..d8672e485a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json @@ -0,0 +1,97 @@ +{ + "type": "filament", + "name": "COEX ASA PRIME @base", + "inherits": "fdm_filament_asa", + "from": "system", + "filament_id": "CXASAB04", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "34.00" + ], + "filament_density": [ + "1.07" + ], + "filament_type": [ + "ASA" + ], + "filament_notes": "UV and weather resistant - requires good ventilation", + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "bed_temperature": [ + "100" + ], + "bed_temperature_initial_layer": [ + "100" + ], + "temperature_vitrification": [ + "95" + ], + "chamber_temperature": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "2.5" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "disable_fan_first_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @System.json new file mode 100644 index 0000000000..1c4a20af0c --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX NYLEX PA6-CF @System", + "inherits": "COEX NYLEX PA6-CF @base", + "from": "system", + "setting_id": "CXPACF23", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "11" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json new file mode 100644 index 0000000000..a2f320d1b5 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json @@ -0,0 +1,96 @@ +{ + "type": "filament", + "name": "COEX NYLEX PA6-CF @base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "CXPACB23", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "85.00" + ], + "filament_density": [ + "1.24" + ], + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature": [ + "285" + ], + "nozzle_temperature_initial_layer": [ + "285" + ], + "bed_temperature": [ + "100" + ], + "bed_temperature_initial_layer": [ + "100" + ], + "temperature_vitrification": [ + "170" + ], + "chamber_temperature": [ + "60" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "2.5" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "disable_fan_first_layers": [ + "4" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @System.json new file mode 100644 index 0000000000..115d535d05 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX NYLEX PA6-CF @System", + "inherits": "COEX NYLEX PA6-CF @base", + "from": "system", + "setting_id": "CXPAUN21", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "11" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json new file mode 100644 index 0000000000..f8ed8ca316 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json @@ -0,0 +1,96 @@ +{ + "type": "filament", + "name": "COEX NYLEX UNFILLED @base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "CXPAUB21", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "85.00" + ], + "filament_density": [ + "1.08" + ], + "filament_type": [ + "PA" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "bed_temperature": [ + "100" + ], + "bed_temperature_initial_layer": [ + "100" + ], + "temperature_vitrification": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "2.5" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "disable_fan_first_layers": [ + "4" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @System.json new file mode 100644 index 0000000000..ecb97a4d38 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @System", + "inherits": "COEX PCTG PRIME @base", + "from": "system", + "setting_id": "CXPCTG15", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json new file mode 100644 index 0000000000..82640f876a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json @@ -0,0 +1,97 @@ +{ + "type": "filament", + "name": "COEX PCTG PRIME @base", + "inherits": "fdm_filament_pctg", + "from": "system", + "filament_id": "CXPCTB15", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "38.00" + ], + "filament_density": [ + "1.27" + ], + "filament_type": [ + "PCTG" + ], + "filament_notes": "High clarity and chemical resistance copolyester", + "nozzle_temperature": [ + "275" + ], + "nozzle_temperature_initial_layer": [ + "275" + ], + "bed_temperature": [ + "80" + ], + "bed_temperature_initial_layer": [ + "85" + ], + "temperature_vitrification": [ + "80" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "3.5" + ], + "filament_retraction_speed": [ + "35" + ], + "filament_deretraction_speed": [ + "35" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "disable_fan_first_layers": [ + "2" + ], + "full_fan_speed_layer": [ + "4" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @System.json new file mode 100644 index 0000000000..943da78ffb --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX PETG @System", + "inherits": "COEX PETG @base", + "from": "system", + "setting_id": "CXPETG13", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json new file mode 100644 index 0000000000..1dc1762cfb --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json @@ -0,0 +1,97 @@ +{ + "type": "filament", + "name": "COEX PETG @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "CXPETB13", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "33.00" + ], + "filament_density": [ + "1.27" + ], + "filament_type": [ + "PETG" + ], + "filament_notes": "IMPORTANT: Set travel speed to maximum your machine allows (200-500mm/s) to reduce stringing", + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "bed_temperature": [ + "80" + ], + "bed_temperature_initial_layer": [ + "85" + ], + "temperature_vitrification": [ + "70" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "4" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "disable_fan_first_layers": [ + "2" + ], + "full_fan_speed_layer": [ + "4" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @System.json new file mode 100644 index 0000000000..1c08d3a6f7 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX PLA @System", + "inherits": "COEX PLA @base", + "from": "system", + "setting_id": "C0XPLA02", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json new file mode 100644 index 0000000000..8fdf278953 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json @@ -0,0 +1,87 @@ +{ + "type": "filament", + "name": "COEX PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "CXPLAB02", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "24.00" + ], + "filament_density": [ + "1.24" + ], + "filament_type": [ + "PLA" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "bed_temperature": [ + "60" + ], + "bed_temperature_initial_layer": [ + "60" + ], + "temperature_vitrification": [ + "55" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "disable_fan_first_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @System.json new file mode 100644 index 0000000000..3647362a91 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @System", + "inherits": "COEX PLA PRIME @base", + "from": "system", + "setting_id": "C0XPLA08", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "15" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json new file mode 100644 index 0000000000..95b19d7245 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "COEX PLA PRIME @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "CXPLAB08", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "32.00" + ], + "filament_density": [ + "1.24" + ], + "filament_type": [ + "PLA" + ], + "filament_notes": "Made with NatureWorks Ingeo 3D850 - improved heat resistance and toughness", + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "bed_temperature": [ + "60" + ], + "bed_temperature_initial_layer": [ + "60" + ], + "temperature_vitrification": [ + "60" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_speed": [ + "50" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "disable_fan_first_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @System.json new file mode 100644 index 0000000000..d00ab18c19 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @System", + "inherits": "COEX PLA+Silk @base", + "from": "system", + "setting_id": "C0XPLS03", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "15" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json new file mode 100644 index 0000000000..a2e6059eaf --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "COEX PLA+Silk @base", + "inherits": "fdm_filament_pla_silk", + "from": "system", + "filament_id": "CXPLSB03", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "30.00" + ], + "filament_density": [ + "1.24" + ], + "filament_type": [ + "PLA" + ], + "filament_notes": "Silk finish for aesthetic prints - slightly higher temperature than regular PLA", + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "bed_temperature": [ + "60" + ], + "bed_temperature_initial_layer": [ + "60" + ], + "temperature_vitrification": [ + "55" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_layer_change": [ + "1" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "fan_min_speed": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "disable_fan_first_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "external_perimeter_speed": [ + "50%" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @System.json new file mode 100644 index 0000000000..ca331e918d --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @System.json @@ -0,0 +1,12 @@ +{ + "type": "filament", + "name": "COEX TPE 30D @System", + "inherits": "COEX TPE 30D @base", + "from": "system", + "setting_id": "C0X30D20", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.5" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json new file mode 100644 index 0000000000..c5f149a55e --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json @@ -0,0 +1,109 @@ +{ + "type": "filament", + "name": "COEX TPE 30D @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "CX30DB20", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "80.00" + ], + "filament_density": [ + "1.15" + ], + "filament_type": [ + "TPU" + ], + "filament_notes": "Flexible filament - print slowly with minimal retraction", + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "bed_temperature": [ + "30" + ], + "bed_temperature_initial_layer": [ + "35" + ], + "temperature_vitrification": [ + "60" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_layer_change": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_speed": [ + "20" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "0" + ], + "fan_min_speed": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "disable_fan_first_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "2" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "5" + ], + "initial_layer_print_speed": [ + "15" + ], + "outer_wall_speed": [ + "25" + ], + "inner_wall_speed": [ + "30" + ], + "infill_speed": [ + "30" + ], + "top_surface_speed": [ + "25" + ], + "travel_speed": [ + "150" + ], + "enable_pressure_advance": [ + "0" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @System.json new file mode 100644 index 0000000000..aaa3af6c76 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @System", + "inherits": "COEX TPE 40D @base", + "from": "system", + "setting_id": "C0X40D18", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "5.5" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json new file mode 100644 index 0000000000..61387aff47 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json @@ -0,0 +1,109 @@ +{ + "type": "filament", + "name": "COEX TPE 40D @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "CX40DB20", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "80.00" + ], + "filament_density": [ + "1.18" + ], + "filament_type": [ + "TPU" + ], + "filament_notes": "Flexible filament - print slowly with minimal retraction", + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "bed_temperature": [ + "30" + ], + "bed_temperature_initial_layer": [ + "35" + ], + "temperature_vitrification": [ + "60" + ], + "filament_max_volumetric_speed": [ + "5.5" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_layer_change": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_speed": [ + "20" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "0" + ], + "fan_min_speed": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "disable_fan_first_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "2" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "5" + ], + "initial_layer_print_speed": [ + "15" + ], + "outer_wall_speed": [ + "25" + ], + "inner_wall_speed": [ + "30" + ], + "infill_speed": [ + "30" + ], + "top_surface_speed": [ + "25" + ], + "travel_speed": [ + "150" + ], + "enable_pressure_advance": [ + "0" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @System.json new file mode 100644 index 0000000000..ea42613f7c --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @System", + "inherits": "COEX TPE 60D @base", + "from": "system", + "setting_id": "C0X60D19", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "6.5" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json new file mode 100644 index 0000000000..7d99b714ff --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json @@ -0,0 +1,109 @@ +{ + "type": "filament", + "name": "COEX TPE 60D @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "CX60DB19", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "80.00" + ], + "filament_density": [ + "1.20" + ], + "filament_type": [ + "TPU" + ], + "filament_notes": "Flexible filament - print slowly with minimal retraction", + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "bed_temperature": [ + "30" + ], + "bed_temperature_initial_layer": [ + "35" + ], + "temperature_vitrification": [ + "60" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_layer_change": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_speed": [ + "20" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "0" + ], + "fan_min_speed": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "disable_fan_first_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "2" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "5" + ], + "initial_layer_print_speed": [ + "15" + ], + "outer_wall_speed": [ + "25" + ], + "inner_wall_speed": [ + "30" + ], + "infill_speed": [ + "30" + ], + "top_surface_speed": [ + "25" + ], + "travel_speed": [ + "150" + ], + "enable_pressure_advance": [ + "0" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @System.json new file mode 100644 index 0000000000..6f382275ad --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @System.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "COEX TPU 60A @System", + "inherits": "COEX TPU 60A @base", + "from": "system", + "setting_id": "C0X60A17", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json new file mode 100644 index 0000000000..d9a2d08a70 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json @@ -0,0 +1,109 @@ +{ + "type": "filament", + "name": "COEX TPU 60A @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "CX60AB17", + "instantiation": "false", + "filament_vendor": [ + "COEX 3D" + ], + "filament_cost": [ + "95.00" + ], + "filament_density": [ + "1.14" + ], + "filament_type": [ + "TPU" + ], + "filament_notes": "Flexible filament - print slowly with minimal retraction", + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "bed_temperature": [ + "0" + ], + "bed_temperature_initial_layer": [ + "0" + ], + "temperature_vitrification": [ + "60" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_layer_change": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0" + ], + "filament_retraction_speed": [ + "20" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "0" + ], + "fan_min_speed": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "disable_fan_first_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "2" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "5" + ], + "initial_layer_print_speed": [ + "15" + ], + "outer_wall_speed": [ + "25" + ], + "inner_wall_speed": [ + "30" + ], + "infill_speed": [ + "30" + ], + "top_surface_speed": [ + "25" + ], + "travel_speed": [ + "150" + ], + "enable_pressure_advance": [ + "0" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "" +} \ No newline at end of file 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/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json index ac76e85ada..c341766281 100644 --- a/resources/profiles/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json +++ b/resources/profiles/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json @@ -90,7 +90,7 @@ "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", "internal_solid_infill_speed": "250", - "ironing_angle": "-1", + "ironing_angle": "0", "ironing_flow": "10%", "ironing_pattern": "zig-zag", "ironing_spacing": "0.15", 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/Prusa/process/0.05mm Detail @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 0.25.json index b8edf932b1..43fbc5a909 100644 --- a/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 0.25.json +++ b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "25", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "1500", "outer_wall_acceleration": "800", "inner_wall_acceleration": "1200", diff --git a/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 5T 0.25.json index a6db18bf93..f80ca769a8 100644 --- a/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 5T 0.25.json +++ b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 5T 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "25", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "1500", "outer_wall_acceleration": "800", "inner_wall_acceleration": "1200", diff --git a/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 0.25.json index c47c246347..81badec8d2 100644 --- a/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 0.25.json +++ b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "1500", "outer_wall_acceleration": "800", "inner_wall_acceleration": "1200", diff --git a/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 5T 0.25.json index b0551173a1..64dedcd795 100644 --- a/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 5T 0.25.json +++ b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 5T 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "1500", "outer_wall_acceleration": "800", "inner_wall_acceleration": "1200", diff --git a/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 0.4.json index 97c51b1534..386f5d17fb 100644 --- a/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 0.4.json +++ b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "40", "gap_infill_speed": "120", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2000", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 5T 0.4.json index 12f267ef99..d3509345b5 100644 --- a/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 5T 0.4.json +++ b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 5T 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "40", "gap_infill_speed": "120", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2000", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 0.5.json index 49003c3c9b..8d89eeb5da 100644 --- a/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 0.5.json +++ b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 5T 0.5.json index 8757c36731..1025b3f7c1 100644 --- a/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 5T 0.5.json +++ b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 5T 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 0.25.json index 45aef92347..bbdc48232e 100644 --- a/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 0.25.json +++ b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 5T 0.25.json index 8b035542c2..01f227b125 100644 --- a/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 5T 0.25.json +++ b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 5T 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.25.json index b3cad13a37..ccf78c2674 100644 --- a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.25.json +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1000", "inner_wall_acceleration": "1500", diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.3.json index 4c72d786cb..0df3883e1f 100644 --- a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.3.json +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "1500", "outer_wall_acceleration": "1200", "inner_wall_acceleration": "1500", diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.25.json index f8c787b973..525ff7e27d 100644 --- a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.25.json +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1000", "inner_wall_acceleration": "1500", diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.3.json index 485deb8814..a759ef438a 100644 --- a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.3.json +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "1500", "outer_wall_acceleration": "1200", "inner_wall_acceleration": "1500", diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.25.json index da0b2ad4bf..a7ccc3a898 100644 --- a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.25.json +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.4.json index b52fc6387d..653d62c984 100644 --- a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.4.json +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "45", "gap_infill_speed": "120", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.25.json index 639aff4228..be0c9243a3 100644 --- a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.25.json +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.4.json index ccff050ef8..568de11031 100644 --- a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.4.json +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "45", "gap_infill_speed": "120", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.25.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.25.json index 8de6148a6d..806cc9eb5e 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.25.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1000", "inner_wall_acceleration": "1500", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.4.json index a9ba582754..5352ded323 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.4.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "45", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.5.json index 289008b592..0c74aac0b8 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.5.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.6.json index d1cdfea181..20f32066ac 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.6.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "75", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.25.json index a7297d8090..13babc7da4 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.25.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.25.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1000", "inner_wall_acceleration": "1500", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.4.json index d2aec48076..1404a9b77c 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.4.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "45", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.5.json index 915549bf89..18eb761e36 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.5.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.6.json index a2ae255f1d..7673fe74aa 100644 --- a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.6.json +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "75", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 0.3.json index f9c8b52957..23487390f7 100644 --- a/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 0.3.json +++ b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "45%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 5T 0.3.json index 3e7b6be7a3..8d4a516242 100644 --- a/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 5T 0.3.json +++ b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 5T 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "45%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 0.3.json index 73cd19972a..abb1bf26a2 100644 --- a/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 0.3.json +++ b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 5T 0.3.json index 1edc261538..66373f4d58 100644 --- a/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 5T 0.3.json +++ b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 5T 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "75%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.3.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.3.json index ae558c807c..a6552a771b 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.3.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "45%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.4.json index 71544dcec8..8acf3e0afa 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.4.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50%", "bridge_speed": "50", "gap_infill_speed": "120", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.5.json index 0fbd778dfb..0ecdb787cd 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.5.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.6.json index de236e4fe2..58b8565b34 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.6.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "75", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "50", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.3.json index 7cf7feef69..59e45a4981 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.3.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.3.json @@ -37,10 +37,10 @@ "support_interface_speed": "45%", "bridge_speed": "30", "gap_infill_speed": "50", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.4.json index 0a7f6a1bff..b5f4e95882 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.4.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50%", "bridge_speed": "50", "gap_infill_speed": "120", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.5.json index e194d1fca1..3e0339d62e 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.5.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.6.json index f2c687646d..b22e0d31ca 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.6.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "75", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "50", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.4.json index ffe32a146b..8fe3008302 100644 --- a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.4.json +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "50", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.5.json index 7fb8fe10e1..7f46ecba44 100644 --- a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.5.json +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.6.json index 5bf4600fe0..c6fdb68e16 100644 --- a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.6.json +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "75", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.4.json index 8eea2dce7b..bc43ba108a 100644 --- a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.4.json +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "50", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.5.json index c0f09f98dc..2cb4aea022 100644 --- a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.5.json +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.6.json index db0d030cfe..3822bdf588 100644 --- a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.6.json +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "75", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.5.json index f3c7a8a1f8..e00c9a0a80 100644 --- a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.5.json +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.6.json index 1d9b56bdb5..f6a3104daa 100644 --- a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.6.json +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "50", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.5.json index e0fbe8c044..6f9717f1be 100644 --- a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.5.json +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.6.json index 0e093066ad..cece14b503 100644 --- a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.6.json +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "50", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.4.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.4.json index 0fb224dd2b..386938adbf 100644 --- a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.4.json +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "50", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.5.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.5.json index d99e79f197..e3aacb0b38 100644 --- a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.5.json +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.6.json index 800ae7ac7f..cac6f4d2b4 100644 --- a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.6.json +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.4.json index fae3bb027f..e25ec658eb 100644 --- a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.4.json +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.4.json @@ -37,10 +37,10 @@ "support_interface_speed": "50", "bridge_speed": "50", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.5.json index dbebc937c7..75f89d52c6 100644 --- a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.5.json +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.5.json @@ -38,10 +38,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "25", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.6.json index 1f8cdbe903..779dd0b9e1 100644 --- a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.6.json +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 0.8.json b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 0.8.json index 465fe7bab5..313112445f 100644 --- a/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 0.8.json +++ b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 0.8.json @@ -41,10 +41,10 @@ "support_interface_speed": "85%", "bridge_speed": "22", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 5T 0.8.json b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 5T 0.8.json index 02b71942ef..2ec4f48d27 100644 --- a/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 5T 0.8.json +++ b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 5T 0.8.json @@ -41,10 +41,10 @@ "support_interface_speed": "85%", "bridge_speed": "22", "gap_infill_speed": "40", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 0.6.json index 0eae23a790..85ed392397 100644 --- a/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 0.6.json +++ b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "50", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 5T 0.6.json index c4f74614b1..fbeb27a27d 100644 --- a/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 5T 0.6.json +++ b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 5T 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "65", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "50", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "2500", "inner_wall_acceleration": "3000", diff --git a/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 0.6.json b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 0.6.json index 1590ee3902..bf9e7751c2 100644 --- a/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 0.6.json +++ b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 5T 0.6.json index 4c20e1b3a4..1c3fac6290 100644 --- a/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 5T 0.6.json +++ b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 5T 0.6.json @@ -39,10 +39,10 @@ "support_interface_speed": "75%", "bridge_speed": "40", "gap_infill_speed": "70", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "90%", + "overhang_1_4_speed": "90%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2500", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2500", diff --git a/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 0.8.json b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 0.8.json index e293dd0381..39e1eec415 100644 --- a/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 0.8.json +++ b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 0.8.json @@ -41,10 +41,10 @@ "support_interface_speed": "85%", "bridge_speed": "22", "gap_infill_speed": "35", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 5T 0.8.json b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 5T 0.8.json index 93555af030..5b9e1f00f6 100644 --- a/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 5T 0.8.json +++ b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 5T 0.8.json @@ -41,10 +41,10 @@ "support_interface_speed": "85%", "bridge_speed": "22", "gap_infill_speed": "35", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 0.8.json b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 0.8.json index 43cc1db96b..8e94971bd9 100644 --- a/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 0.8.json +++ b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 0.8.json @@ -41,10 +41,10 @@ "support_interface_speed": "85%", "bridge_speed": "22", "gap_infill_speed": "30", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 5T 0.8.json b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 5T 0.8.json index 0503239052..48c71eab6c 100644 --- a/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 5T 0.8.json +++ b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 5T 0.8.json @@ -41,10 +41,10 @@ "support_interface_speed": "85%", "bridge_speed": "22", "gap_infill_speed": "30", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "80%", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", "default_acceleration": "2000", "outer_wall_acceleration": "1500", "inner_wall_acceleration": "2000", diff --git a/resources/profiles/Prusa/process/process_common_xl.json b/resources/profiles/Prusa/process/process_common_xl.json index 4842bea93d..37abcc853b 100644 --- a/resources/profiles/Prusa/process/process_common_xl.json +++ b/resources/profiles/Prusa/process/process_common_xl.json @@ -58,10 +58,10 @@ "ironing_flow": "15%", "ironing_spacing": "0.1", "enable_overhang_speed": "1", - "overhang_1_4_speed": "15", - "overhang_2_4_speed": "15", - "overhang_3_4_speed": "20", - "overhang_4_4_speed": "25", + "overhang_1_4_speed": "25", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "15", "travel_speed": "400", "default_acceleration": "1250", "outer_wall_acceleration": "1000", 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/resources/web/guide/1/1.css b/resources/web/guide/1/1.css index 2529f47934..941ab77b2b 100644 --- a/resources/web/guide/1/1.css +++ b/resources/web/guide/1/1.css @@ -7,6 +7,7 @@ body { text-align:center; padding-top: 10%; + overflow: auto; } #SlicerIcon @@ -37,4 +38,4 @@ body { display: inline-block; text-decoration:none; -} \ No newline at end of file +} diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 731f109766..05ec346945 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"; @@ -1395,10 +1394,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/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index e865efc781..cd75d3f31a 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -7,6 +7,7 @@ #include "ShortestPath.hpp" #include "libslic3r.h" #include "PrintConfig.hpp" +#include "MaterialType.hpp" #include "Model.hpp" #include #include @@ -590,13 +591,10 @@ double getadhesionCoeff(const PrintObject* printObject) for (auto iter = extrudersFirstLayer.begin(); iter != extrudersFirstLayer.end(); iter++) { if (modelVolume->extruder_id() == *iter) { if (Model::extruderParamsMap.find(modelVolume->extruder_id()) != Model::extruderParamsMap.end()) { - if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG" || - Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PCTG") { - adhesionCoeff = 2; - } - else if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "TPU") { - adhesionCoeff = 0.5; - } + std::string filament_type = Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName; + double adhesion_coefficient = 1.0; // Default value + MaterialType::get_adhesion_coefficient(filament_type, adhesion_coefficient); + adhesionCoeff = adhesion_coefficient; } } } diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index d85c65fd51..747fdcdb67 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -340,6 +340,8 @@ set(lisbslic3r_sources PrintApply.cpp PrintBase.cpp PrintBase.hpp + MaterialType.cpp + MaterialType.hpp PrintConfig.cpp PrintConfig.hpp Print.cpp diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index e8294ea673..3ae8446190 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -1461,43 +1461,31 @@ void Layer::make_ironing() double height; double speed; double angle; + bool is_using_template_angle; double inset; bool operator<(const IroningParams &rhs) const { - if (this->extruder < rhs.extruder) - return true; - if (this->extruder > rhs.extruder) - return false; - if (int(this->just_infill) < int(rhs.just_infill)) - return true; - if (int(this->just_infill) > int(rhs.just_infill)) - return false; - if (this->line_spacing < rhs.line_spacing) - return true; - if (this->line_spacing > rhs.line_spacing) - return false; - if (this->height < rhs.height) - return true; - if (this->height > rhs.height) - return false; - if (this->speed < rhs.speed) - return true; - if (this->speed > rhs.speed) - return false; - if (this->angle < rhs.angle) - return true; - if (this->angle > rhs.angle) - return false; - if (this->inset < rhs.inset) - return true; - if (this->inset > rhs.inset) - return false; + RETURN_COMPARE_NON_EQUAL(extruder); + RETURN_COMPARE_NON_EQUAL(just_infill); + RETURN_COMPARE_NON_EQUAL(line_spacing); + RETURN_COMPARE_NON_EQUAL(height); + RETURN_COMPARE_NON_EQUAL(speed); + RETURN_COMPARE_NON_EQUAL(angle); + RETURN_COMPARE_NON_EQUAL(is_using_template_angle); + RETURN_COMPARE_NON_EQUAL(inset); return false; } bool operator==(const IroningParams &rhs) const { - return this->extruder == rhs.extruder && this->just_infill == rhs.just_infill && - this->line_spacing == rhs.line_spacing && this->height == rhs.height && this->speed == rhs.speed && this->angle == rhs.angle && this->pattern == rhs.pattern && this->inset == rhs.inset; + return this->extruder == rhs.extruder && + this->just_infill == rhs.just_infill && + this->line_spacing == rhs.line_spacing && + this->height == rhs.height && + this->speed == rhs.speed && + this->angle == rhs.angle && + this->is_using_template_angle == rhs.is_using_template_angle && + this->pattern == rhs.pattern && + this->inset == rhs.inset; } LayerRegion *layerm = nullptr; @@ -1544,7 +1532,8 @@ void Layer::make_ironing() ironing_params.inset = config.ironing_inset; ironing_params.height = default_layer_height * 0.01 * config.ironing_flow; ironing_params.speed = config.ironing_speed; - ironing_params.angle = (config.ironing_angle >= 0 ? config.ironing_angle : config.infill_direction) * M_PI / 180.; + ironing_params.angle = calculate_infill_rotation_angle(this->object(), this->id(), config.solid_infill_direction.value, config.solid_infill_rotate_template.value) + config.ironing_angle * M_PI / 180.; + ironing_params.is_using_template_angle = !config.solid_infill_rotate_template.value.empty(); ironing_params.pattern = config.ironing_pattern; ironing_params.layerm = layerm; by_extruder.emplace_back(ironing_params); @@ -1640,6 +1629,7 @@ void Layer::make_ironing() // Create the filler object. f->spacing = ironing_params.line_spacing; f->angle = float(ironing_params.angle); + f->is_using_template_angle = ironing_params.is_using_template_angle; f->link_max_length = (coord_t) scale_(3. * f->spacing); double extrusion_height = ironing_params.height * f->spacing / nozzle_dmr; float extrusion_width = Flow::rounded_rectangle_extrusion_width_from_spacing(float(nozzle_dmr), float(extrusion_height)); diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp index 3973ab27af..5796c108e5 100644 --- a/src/libslic3r/Format/SL1.cpp +++ b/src/libslic3r/Format/SL1.cpp @@ -305,8 +305,8 @@ ConfigSubstitutions import_sla_archive( std::function progr) { // Ensure minimum window size for marching squares - windowsize.x() = std::max(2, windowsize.x()); - windowsize.y() = std::max(2, windowsize.y()); + windowsize.x() = std::max(1, windowsize.x()); + windowsize.y() = std::max(1, windowsize.y()); std::string exclude_entries{"thumbnail"}; ArchiveData arch = extract_sla_archive(zipfname, exclude_entries); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index c7372fb1a1..d5bd075f79 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3800,23 +3800,31 @@ LayerResult GCode::process_layer( } case CalibMode::Calib_Input_shaping_freq: { if (m_layer_index == 1){ - gcode += writer().set_input_shaping('A', print.calib_params().start, 0.f); + gcode += writer().set_input_shaping('A', print.calib_params().start, 0.f, print.calib_params().shaper_type); + if (m_writer.get_gcode_flavor() == gcfKlipper) { + // Disable minimum cruise ratio to ensure consistent motion for calibration + gcode += "SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0\n"; + } } else { if (print.calib_params().freqStartX == print.calib_params().freqStartY && print.calib_params().freqEndX == print.calib_params().freqEndY) { - gcode += writer().set_input_shaping('A', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3)); + gcode += writer().set_input_shaping('A', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3), ""); } else { - gcode += writer().set_input_shaping('X', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3)); - gcode += writer().set_input_shaping('Y', 0.f, (print.calib_params().freqStartY) + ((print.calib_params().freqEndY)-(print.calib_params().freqStartY)) * (m_layer_index - 2) / (m_layer_count - 3)); + gcode += writer().set_input_shaping('X', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3), ""); + gcode += writer().set_input_shaping('Y', 0.f, (print.calib_params().freqStartY) + ((print.calib_params().freqEndY)-(print.calib_params().freqStartY)) * (m_layer_index - 2) / (m_layer_count - 3), ""); } } break; } case CalibMode::Calib_Input_shaping_damp: { if (m_layer_index == 1){ - gcode += writer().set_input_shaping('X', 0.f, print.calib_params().freqStartX); - gcode += writer().set_input_shaping('Y', 0.f, print.calib_params().freqStartY); + if (m_writer.get_gcode_flavor() == gcfKlipper) { + // Disable minimum cruise ratio to ensure consistent motion for calibration + gcode += "SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0\n"; + } + gcode += writer().set_input_shaping('X', 0.f, print.calib_params().freqStartX, print.calib_params().shaper_type); + gcode += writer().set_input_shaping('Y', 0.f, print.calib_params().freqStartY, print.calib_params().shaper_type); } else { - gcode += writer().set_input_shaping('A', print.calib_params().start + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index) / (m_layer_count), 0.f); + gcode += writer().set_input_shaping('A', print.calib_params().start + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index) / (m_layer_count), 0.f, ""); } break; } @@ -5234,9 +5242,9 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, sloped == nullptr ? DBL_MAX : get_sloped_z(sloped->slope_begin.z_ratio) ); m_need_change_layer_lift_z = false; - // Orca: force restore Z after unknown last pos + // Orca: ensure Z matches planned layer height if (_last_pos_undefined && !slope_need_z_travel) { - gcode += this->writer().travel_to_z(m_last_layer_z, "force restore Z after unknown last pos", true); + gcode += this->writer().travel_to_z(m_nominal_z, "ensure Z matches planned layer height", true); } } @@ -5310,21 +5318,47 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, // We set _mm3_per_mm to effectove flow = Geometric volume * print flow ratio * filament flow ratio * role-based-flow-ratios auto _mm3_per_mm = path.mm3_per_mm * this->config().print_flow_ratio; _mm3_per_mm *= filament_flow_ratio; - if (path.role() == erTopSolidInfill) + + if (path.role() == erTopSolidInfill) { _mm3_per_mm *= m_config.top_solid_infill_flow_ratio; - else if (path.role() == erBottomSurface) + } else if (path.role() == erBottomSurface) { _mm3_per_mm *= m_config.bottom_solid_infill_flow_ratio; - else if (path.role() == erInternalBridgeInfill) + } else if (path.role() == erInternalBridgeInfill) { _mm3_per_mm *= m_config.internal_bridge_flow; - else if(sloped) + } else if (sloped) { _mm3_per_mm *= m_config.scarf_joint_flow_ratio; + } + + if (m_config.set_other_flow_ratios) { + if (path.role() == erExternalPerimeter) { + _mm3_per_mm *= m_config.outer_wall_flow_ratio; + } else if (path.role() == erPerimeter) { + _mm3_per_mm *= m_config.inner_wall_flow_ratio; + } else if (path.role() == erOverhangPerimeter) { + _mm3_per_mm *= m_config.overhang_flow_ratio; + } else if (path.role() == erInternalInfill) { + _mm3_per_mm *= m_config.sparse_infill_flow_ratio; + } else if (path.role() == erSolidInfill) { + _mm3_per_mm *= m_config.internal_solid_infill_flow_ratio; + } else if (path.role() == erGapFill) { + _mm3_per_mm *= m_config.gap_fill_flow_ratio; + } else if (path.role() == erSupportMaterial) { // Should this condition also cover erSupportTransition? + _mm3_per_mm *= m_config.support_flow_ratio; + } else if (path.role() == erSupportMaterialInterface) { + _mm3_per_mm *= m_config.support_interface_flow_ratio; + } + + // Additionally, adjust the value if we are on the first layer (except for brims and skirts) + if (this->on_first_layer() && (path.role() != erBrim && path.role() != erSkirt)) { + _mm3_per_mm *= m_config.first_layer_flow_ratio; + } + } + // Effective extrusion length per distance unit = (filament_flow_ratio/cross_section) * mm3_per_mm / print flow ratio // m_writer.extruder()->e_per_mm3() below is (filament flow ratio / cross-sectional area) double e_per_mm = m_writer.extruder()->e_per_mm3() * _mm3_per_mm; e_per_mm /= filament_flow_ratio; - - // set speed if (speed == -1) { if (path.role() == erPerimeter) { diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index e412cf3e67..0afb68f086 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -1019,7 +1019,7 @@ static ExPolygons inner_offset(const ExPolygons &ex_polygons, double offset_dis) // remove too small holes from the ex_poly for (ExPolygon &ex_poly : ex_poly_result) { for (auto iter = ex_poly.holes.begin(); iter != ex_poly.holes.end();) { - auto out_offset_holes = offset(*iter, scale_(1.0f)); + auto out_offset_holes = offset(*iter, scale_(0.1f)); if (out_offset_holes.empty()) { iter = ex_poly.holes.erase(iter); } else { diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index 9541d68034..f851f404aa 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -153,7 +153,8 @@ struct PerExtruderAdjustments assert(line.time_max >= 0.f && line.time_max < FLT_MAX); line.slowdown = true; line.time = line.time_max; - line.feedrate = line.length / line.time; + if (line.time > 0.f) + line.feedrate = line.length / line.time; } time_total += line.time; } @@ -169,7 +170,8 @@ struct PerExtruderAdjustments if (line.adjustable(slowdown_external_perimeters)) { line.slowdown = true; line.time = std::min(line.time_max, line.time * factor); - line.feedrate = line.length / line.time; + if (line.time > 0.f) + line.feedrate = line.length / line.time; } time_total += line.time; } diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index ba36c2b6d4..7376c66a42 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -352,8 +352,10 @@ std::string GCodeWriter::set_pressure_advance(double pa) const return gcode.str(); } -std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq) const +std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq, std::string type) const { + if (FLAVOR_IS(gcfMarlinLegacy)) + throw std::runtime_error("Input shaping is not supported by Marlin < 2.1.2.\nCheck your firmware version and update your G-code flavor to ´Marlin 2´"); if (freq < 0.0f || damp < 0.f || damp > 1.0f || (axis != 'X' && axis != 'Y' && axis != 'Z' && axis != 'A'))// A = all axis { throw std::runtime_error("Invalid input shaping parameters: freq=" + std::to_string(freq) + ", damp=" + std::to_string(damp)); @@ -361,14 +363,17 @@ std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq) co std::ostringstream gcode; if (FLAVOR_IS(gcfKlipper)) { gcode << "SET_INPUT_SHAPER"; + if (!type.empty() && type != "Default") { + gcode << " SHAPER_TYPE=" << type; + } if (axis != 'A') { if (freq > 0.0f) { gcode << " SHAPER_FREQ_" << axis << "=" << std::fixed << std::setprecision(2) << freq; } if (damp > 0.0f){ - gcode << " DAMPING_RATIO_" << axis << "=" << damp; - } + gcode << " DAMPING_RATIO_" << axis << "=" << std::fixed << std::setprecision(3) << damp; + } } else { if (freq > 0.0f) { gcode << " SHAPER_FREQ_X=" << std::fixed << std::setprecision(2) << freq << " SHAPER_FREQ_Y=" << std::fixed << std::setprecision(2) << freq; @@ -377,7 +382,18 @@ std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq) co gcode << " DAMPING_RATIO_X=" << std::fixed << std::setprecision(3) << damp << " DAMPING_RATIO_Y=" << std::fixed << std::setprecision(3) << damp; } } - } else { + } else if (FLAVOR_IS(gcfRepRapFirmware)) { + gcode << "M593"; + if (!type.empty() && type != "Default" && type != "DAA") { + gcode << " P\"" << type << "\""; + } + if (freq > 0.0f) { + gcode << " F" << std::fixed << std::setprecision(2) << freq; + } + if (damp > 0.0f){ + gcode << " S" << std::fixed << std::setprecision(3) << damp; + } + } else if (FLAVOR_IS(gcfMarlinFirmware)) { gcode << "M593"; if (axis != 'A') { @@ -391,6 +407,8 @@ std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq) co { gcode << " D" << std::fixed << std::setprecision(3) << damp; } + } else { + throw std::runtime_error("Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2"); } if (GCodeWriter::full_gcode_comment){ gcode << " ; Override input shaping"; diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index 103bfb27c2..dade4a68e9 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -55,7 +55,7 @@ public: std::string set_accel_and_jerk(unsigned int acceleration, double jerk); std::string set_junction_deviation(double junction_deviation); std::string set_pressure_advance(double pa) const; - std::string set_input_shaping(char axis, float damp, float freq) const; + std::string set_input_shaping(char axis, float damp, float freq, std::string type) const; std::string reset_e(bool force = false); std::string update_progress(unsigned int num, unsigned int tot, bool allow_100 = false) const; // return false if this extruder was already selected diff --git a/src/libslic3r/MarchingSquares.hpp b/src/libslic3r/MarchingSquares.hpp index 8370c8cef9..7eb0b25806 100644 --- a/src/libslic3r/MarchingSquares.hpp +++ b/src/libslic3r/MarchingSquares.hpp @@ -1,49 +1,160 @@ #ifndef MARCHINGSQUARES_HPP #define MARCHINGSQUARES_HPP +#include "Execution/ExecutionTBB.hpp" #include #include #include #include #include +// Marching squares +// +// This algorithm generates 2D contour rings for a 2D scalar field (height +// map). See https://en.wikipedia.org/wiki/Marching_squares for details. +// +// This algorithm uses square cells (tiles) with corner tags that are set +// depending on which vertices are inside an ROI (higher than the selected +// isovalue threshold). We label the vertices counter-clockwise, and for ease +// of extraction from the m_tags bitmap we put them into a four bit bitmap in +// little-endian row-column order ; +// +// ^ u (up) ----> column "c" direction +// | +// a ----- d +// | | | +// l <--| |--> r | increasing row "r" direction +// (left) | | (right) \/ +// b ----- c +// | +// \/ d (down) +// +// The m_tags bitmap has the top-left "a" corner of each cell packed +// into uint32_t values stored in little-endian order, with the "a" tag for +// the first cell (r=0,c=0) in the LSB bit0 of the first 32bit word of the +// first row. The grid has a one cell border round the raster area that is +// always clear so lines never extend out of the grid. +// +// From this grid of points we can get the tags bitmap for the four +// corners of each cell with "a" in the LSB bit0 and "c" in bit3. Note the +// bits b,c,d are also the "a" bits of the cell's next-colum/row neighbour +// cells. Cells in the right-most column get their cleared right-side border +// tags by wrapping around the grid and getting the cleared values +// from the left-side border. Note the grid bitmap always includes at least +// one extra cleared boarder bit for the wrap-around of the last tag in the +// last cell. Cells in the bottom row get their cleared bottom-side border +// tags by leaving them clear because their grid index exceeds the +// grid size. +// +// These tag bits are then translated into up/down/left/right cell-exit +// directions indicating the cell edge(s) that any lines will cross and exit +// the cell. As you walk counter-clock-wise around the cell corners in the +// order a->b->c->d, any edge from a unset-corner-tag to an set-corner-tag is +// where a line will cross, exiting the cell into the next cell. +// +// Note any set-to-unset-transition edge is where a line will enter a cell, +// but for marching the lines through the cells we only need to keep the next +// cell exit directions. The exit directions are stored as 4bit +// left/down/right/up flags packed into uint32_t values in m_dirs, in +// counter-clockwise little-endian order. +// +// To build the line-rings we scan through the m_dirs directions for the +// cells until we find one with a set-edge. We then start a line and "march" +// it through the cells following the directions in each cell, recording each +// edge the line crosses that will become a point in the ring. +// +// Note that the outside-edge of the grid extends one cell past the raster +// grid, and this outer edge is always cleared. This means no line will cross +// out of the grid, and they will all eventually connect back to their +// starting cell to become a ring around an island of set tag bits, possibly +// containing rings around lakes of unset tag bits within them. +// +// As we march through the cells and build the lines, we clear the direction +// bits to indicate the edge-transition has been processed. After completing +// a ring we return to scanning for the next non-zeroed starting cell for the +// next ring. Eventually all rings will be found and completed, and the +// m_dirs map will be completely cleared. +// +// Note there are two ambigous cases when the diagonally opposite corner tags +// are set. In these cases two lines will enter and exit the cell. To avoid +// messy lines, we consistently choose the exit direction based on what edge +// the line entered the cell from. This also means when we start scanning for +// the next ring we should start checking at the same cell the last ring +// started from, because it could have a second ring passing through it. +// namespace marchsq { -// Marks a square in the grid -struct Coord { +// Marks a square or point in grid or raster coordintes. +struct Coord +{ long r = 0, c = 0; - + Coord() = default; explicit Coord(long s) : r(s), c(s) {} - Coord(long _r, long _c): r(_r), c(_c) {} - - size_t seq(const Coord &res) const { return r * res.c + c; } - Coord& operator+=(const Coord& b) { r += b.r; c += b.c; return *this; } - Coord operator+(const Coord& b) const { Coord a = *this; a += b; return a; } + Coord(long _r, long _c) : r(_r), c(_c) {} + + size_t seq(const Coord& res) const { return r * res.c + c; } + Coord& operator+=(const Coord& b) + { + r += b.r; + c += b.c; + return *this; + } + Coord operator+(const Coord& b) const + { + Coord a = *this; + a += b; + return a; + } + bool operator==(const Coord& o) const { return (r == o.r) && (c == o.c); } + bool operator!=(const Coord& o) const { return !(*this == o); } }; +inline std::ostream& operator<<(std::ostream& os, const Coord& o) { return os << "(r=" << o.r << ",c=" << o.c << ")"; } + // Closed ring of cell coordinates using Ring = std::vector; -// Specialize this struct to register a raster type for the Marching squares alg -template struct _RasterTraits { - +inline std::ostream& operator<<(std::ostream& os, const Ring& r) +{ + os << "[" << r.size() << "]:"; + for (Coord c : r) + os << " " << c; + return os << "\n"; +} + +// Specialize this struct to register a raster type for MarchingSquares. +template struct _RasterTraits +{ // The type of pixel cell in the raster using ValueType = typename T::ValueType; - + // Value at a given position - static ValueType get(const T &raster, size_t row, size_t col); - + static ValueType get(const T& raster, size_t row, size_t col); + // Number of rows and cols of the raster - static size_t rows(const T &raster); - static size_t cols(const T &raster); + static size_t rows(const T& raster); + static size_t cols(const T& raster); }; // Specialize this to use parellel loops within the algorithm -template struct _Loop { - template static void for_each(It from, It to, Fn &&fn) +template struct _Loop +{ + template static void for_each_idx(It from, It to, Fn&& fn) { - for (auto it = from; it < to; ++it) fn(*it, size_t(it - from)); + for (auto it = from; it < to; ++it) + fn(*it, size_t(it - from)); + } +}; + +// Add Specialization for using ExecutionTBB for parallel loops. +using namespace Slic3r; +template<> struct _Loop +{ + template static void for_each_idx(It from, It to, Fn&& fn) + { + execution::for_each( + ex_tbb, size_t(0), size_t(to - from), [&from, &fn](size_t i) { fn(from[i], i); }, execution::max_concurrency(ex_tbb)); } }; @@ -52,388 +163,481 @@ namespace __impl { template using RasterTraits = _RasterTraits>; template using TRasterValue = typename RasterTraits::ValueType; -template size_t rows(const T &raster) +template size_t rows(const T& raster) { return RasterTraits::rows(raster); } + +template size_t cols(const T& raster) { return RasterTraits::cols(raster); } + +template TRasterValue isoval(const T& rst, const Coord& crd) { return RasterTraits::get(rst, crd.r, crd.c); } + +template void for_each_idx(ExecutionPolicy&& policy, It from, It to, Fn&& fn) { - return RasterTraits::rows(raster); + _Loop::for_each_idx(from, to, fn); } -template size_t cols(const T &raster) -{ - return RasterTraits::cols(raster); -} +template constexpr std::underlying_type_t _t(E e) noexcept { return static_cast>(e); } -template TRasterValue isoval(const T &rst, const Coord &crd) -{ - return RasterTraits::get(rst, crd.r, crd.c); -} - -template -void for_each(ExecutionPolicy&& policy, It from, It to, Fn &&fn) -{ - _Loop::for_each(from, to, fn); -} - -// Type of squares (tiles) depending on which vertices are inside an ROI -// The vertices would be marked a, b, c, d in counter clockwise order from the -// bottom left vertex of a square. -// d --- c -// | | -// | | -// a --- b -enum class SquareTag : uint8_t { -// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - none, a, b, ab, c, ac, bc, abc, d, ad, bd, abd, cd, acd, bcd, full +// A set of next direction flags for a cell to indicate what sides(s) +// any yet-to-be-marched line(s) will cross to leave the cell. +enum class Dir : uint8_t { + none = 0b0000, + left = 0b0001, /* exit through a-b edge */ + down = 0b0010, /* exit through b-c edge */ + right = 0b0100, /* exit through c-d edge */ + leftright = left | right, + up = 0b1000, /* exit through d-a edge */ + updown = up | down, + all = 0b1111 }; -template constexpr std::underlying_type_t _t(E e) noexcept +inline std::ostream& operator<<(std::ostream& os, const Dir& d) { return os << ".x##^#X#####"[_t(d)]; } + +// This maps square tag column/row order bitmaps to the next +// direction(s) a line will exit the cell. The directions ensure the +// line-rings circle counter-clock-wise around the clusters of set tags. +static const constexpr std::array NEXT_CCW = [] { + auto map = decltype(NEXT_CCW){}; + for (uint32_t cbda = 0; cbda < 16; cbda++) { + const uint32_t dcba = (cbda & 0b0001) | ((cbda >> 1) & 0b0110) | ((cbda << 2) & 0b1000); + const uint32_t adcb = (dcba >> 1) | ((dcba << 3) & 0b1000); + map[cbda] = ~dcba & adcb; + } + return map; +}(); + +// Step a point in a direction, optionally by n steps. +inline void step(Coord& crd, const Dir d, const long n = 1) { - return static_cast>(e); + switch (d) { + case Dir::left: crd.c -= n; break; + case Dir::down: crd.r += n; break; + case Dir::right: crd.c += n; break; + case Dir::up: crd.r -= n; break; + } } -enum class Dir: uint8_t { left, down, right, up, none}; - -static const constexpr Dir NEXT_CCW[] = { - /* 00 */ Dir::none, // SquareTag::none (empty square, nowhere to go) - /* 01 */ Dir::left, // SquareTag::a - /* 02 */ Dir::down, // SquareTag::b - /* 03 */ Dir::left, // SquareTag::ab - /* 04 */ Dir::right, // SquareTag::c - /* 05 */ Dir::none, // SquareTag::ac (ambiguous case) - /* 06 */ Dir::down, // SquareTag::bc - /* 07 */ Dir::left, // SquareTag::abc - /* 08 */ Dir::up, // SquareTag::d - /* 09 */ Dir::up, // SquareTag::ad - /* 10 */ Dir::none, // SquareTag::bd (ambiguous case) - /* 11 */ Dir::up, // SquareTag::abd - /* 12 */ Dir::right, // SquareTag::cd - /* 13 */ Dir::right, // SquareTag::acd - /* 14 */ Dir::down, // SquareTag::bcd - /* 15 */ Dir::none // SquareTag::full (full covered, nowhere to go) -}; - -static const constexpr uint8_t PREV_CCW[] = { - /* 00 */ 1 << _t(Dir::none), - /* 01 */ 1 << _t(Dir::up), - /* 02 */ 1 << _t(Dir::left), - /* 03 */ 1 << _t(Dir::left), - /* 04 */ 1 << _t(Dir::down), - /* 05 */ 1 << _t(Dir::up) | 1 << _t(Dir::down), - /* 06 */ 1 << _t(Dir::down), - /* 07 */ 1 << _t(Dir::down), - /* 08 */ 1 << _t(Dir::right), - /* 09 */ 1 << _t(Dir::up), - /* 10 */ 1 << _t(Dir::left) | 1 << _t(Dir::right), - /* 11 */ 1 << _t(Dir::left), - /* 12 */ 1 << _t(Dir::right), - /* 13 */ 1 << _t(Dir::up), - /* 14 */ 1 << _t(Dir::right), - /* 15 */ 1 << _t(Dir::none) -}; - -const constexpr uint8_t DIRMASKS[] = { - /*left: */ 0x01, /*down*/ 0x12, /*right */0x21, /*up*/ 0x10, /*none*/ 0x00 -}; - -inline Coord step(const Coord &crd, Dir d) +template class Grid { - uint8_t dd = DIRMASKS[uint8_t(d)]; - return {crd.r - 1 + (dd & 0x0f), crd.c - 1 + (dd >> 4)}; -} + const Rst* m_rst = nullptr; + Coord m_window, m_rastsize, m_gridsize; + size_t m_gridlen; // The number of cells in the grid. + std::vector m_tags; // bit-packed squaretags for each corner. + std::vector m_dirs; // bit-packed next directions for each cell. -template class Grid { - const Rst * m_rst = nullptr; - Coord m_cellsize, m_res_1, m_window, m_gridsize, m_grid_1; - std::vector m_tags; // Assign tags to each square - - Coord rastercoord(const Coord &crd) const + // Convert a grid coordinate point into raster coordinates. + inline Coord rastercoord(const Coord& crd) const { + // Note the -1 offset for the grid border around the raster area. return {(crd.r - 1) * m_window.r, (crd.c - 1) * m_window.c}; } - Coord bl(const Coord &crd) const { return tl(crd) + Coord{m_res_1.r, 0}; } - Coord br(const Coord &crd) const { return tl(crd) + Coord{m_res_1.r, m_res_1.c}; } - Coord tr(const Coord &crd) const { return tl(crd) + Coord{0, m_res_1.c}; } - Coord tl(const Coord &crd) const { return rastercoord(crd); } - - bool is_within(const Coord &crd) - { - long R = rows(*m_rst), C = cols(*m_rst); - return crd.r >= 0 && crd.r < R && crd.c >= 0 && crd.c < C; - }; + // Get the 4 corners of a grid coordinate cell in raster coordinates. + Coord bl(const Coord& crd) const { return tl(crd) + Coord{m_window.r, 0}; } + Coord br(const Coord& crd) const { return tl(crd) + Coord{m_window.r, m_window.c}; } + Coord tr(const Coord& crd) const { return tl(crd) + Coord{0, m_window.c}; } + Coord tl(const Coord& crd) const { return rastercoord(crd); } - // Calculate the tag for a cell (or square). The cell coordinates mark the - // top left vertex of a square in the raster. v is the isovalue - uint8_t get_tag_for_cell(const Coord &cell, TRasterValue v) - { - Coord sqr[] = {bl(cell), br(cell), tr(cell), tl(cell)}; - - uint8_t t = ((is_within(sqr[0]) && isoval(*m_rst, sqr[0]) >= v)) + - ((is_within(sqr[1]) && isoval(*m_rst, sqr[1]) >= v) << 1) + - ((is_within(sqr[2]) && isoval(*m_rst, sqr[2]) >= v) << 2) + - ((is_within(sqr[3]) && isoval(*m_rst, sqr[3]) >= v) << 3); - - assert(t < 16); - return t; - } - - // Get a cell coordinate from a sequential index - Coord coord(size_t i) const - { - return {long(i) / m_gridsize.c, long(i) % m_gridsize.c}; - } + // Test if a raster coordinate point is within the raster area. + inline bool is_within(const Coord& crd) const { return crd.r >= 0 && crd.r < m_rastsize.r && crd.c >= 0 && crd.c < m_rastsize.c; } - size_t seq(const Coord &crd) const { return crd.seq(m_gridsize); } - - bool is_visited(size_t idx, Dir d = Dir::none) const + // Get a block of 32 tags for a block index from the raster isovals. + uint32_t get_tags_block32(const size_t bidx, const TRasterValue v) const { - SquareTag t = get_tag(idx); - uint8_t ref = d == Dir::none ? PREV_CCW[_t(t)] : uint8_t(1 << _t(d)); - return t == SquareTag::full || t == SquareTag::none || - ((m_tags[idx] & 0xf0) >> 4) == ref; - } - - void set_visited(size_t idx, Dir d = Dir::none) - { - m_tags[idx] |= (1 << (_t(d)) << 4); - } - - bool is_ambiguous(size_t idx) const - { - SquareTag t = get_tag(idx); - return t == SquareTag::ac || t == SquareTag::bd; - } - - // Search for a new starting square - size_t search_start_cell(size_t i = 0) const - { - // Skip ambiguous tags as starting tags due to unknown previous - // direction. - while ((i < m_tags.size()) && (is_visited(i) || is_ambiguous(i))) ++i; - - return i; - } - - SquareTag get_tag(size_t idx) const { return SquareTag(m_tags[idx] & 0x0f); } - - Dir next_dir(Dir prev, SquareTag tag) const - { - // Treat ambiguous cases as two separate regions in one square. - switch (tag) { - case SquareTag::ac: - switch (prev) { - case Dir::down: return Dir::right; - case Dir::up: return Dir::left; - default: assert(false); return Dir::none; + Coord gcrd = coord(bidx * 32); // position in grid coordinates of the block. + Coord rcrd = rastercoord(gcrd); // position in raster coordinates. + uint32_t tags = 0; + // Set a bit for each corner that has osoval > v. + for (uint32_t b = 1; b; b <<= 1) { + if (is_within(rcrd) && isoval(*m_rst, rcrd) > v) + tags |= b; + gcrd.c += 1; + rcrd.c += m_window.c; + // If we hit the end of the row, start on the next row. + if (gcrd.c >= m_gridsize.c) { + gcrd = Coord(gcrd.r + 1, 0); + rcrd = rastercoord(gcrd); } - case SquareTag::bd: - switch (prev) { - case Dir::right: return Dir::up; - case Dir::left: return Dir::down; - default: assert(false); return Dir::none; - } - default: - return NEXT_CCW[uint8_t(tag)]; } - - return Dir::none; + return tags; } - - struct CellIt { - Coord crd; Dir dir= Dir::none; const Rst *grid = nullptr; - - TRasterValue operator*() const { return isoval(*grid, crd); } - CellIt& operator++() { crd = step(crd, dir); return *this; } - CellIt operator++(int) { CellIt it = *this; ++(*this); return it; } - bool operator!=(const CellIt &it) { return crd.r != it.crd.r || crd.c != it.crd.c; } - + + // Get a block of 8 directions for a block index from the tags. + uint32_t get_dirs_block8(const size_t bidx) const + { + size_t gidx = bidx * 8; + uint32_t dirs = 0; + + // Get the next 9 top-row tags at this grid index into the bottom 16 + // bits, and the 9 bottom-row tags into the top 16 bits. + uint32_t tags9 = get_tags9(gidx) | (get_tags9(gidx + m_gridsize.c) << 16); + // Skip generating dirs if the tags are all 1's or all 0's. + if ((tags9 != 0) && (tags9 != 0x01ff01ff)) { + for (auto s = 0; s < 32; s += 4) { + uint8_t tags = (tags9 & 0b11) | ((tags9 >> 14) & 0b1100); + dirs |= NEXT_CCW[tags] << s; + tags9 >>= 1; + } + } + return dirs; + } + + // Get the next 9 corner tags on a row for building a dirs block at a grid index. + uint32_t get_tags9(size_t gidx) const + { + uint32_t tags = 0; // the tags value. + size_t i = gidx / 32; // the tags block index + int o = gidx % 32; // the tags block offset + + if (gidx < m_gridlen) { + // get the next 9 tags in the row. + tags = (m_tags[i] >> o) & 0x1ff; + // Some of the tags are in the next tags block. + if ((o > (32 - 9)) && ((i + 1) < m_tags.size())) { + tags |= (m_tags[i + 1] << (32 - o)) & 0x1ff; + } + } + return tags; + } + + // Clear directions in a cell's dirs for a grid index. + void clr_dirs(const size_t gidx, const Dir d) + { + assert(gidx < m_gridlen); + size_t i = gidx / 8; // the dirs block index + int o = (gidx % 8); // the dirs block offset + + m_dirs[i] &= ~(static_cast(d) << (o * 4)); + } + + // Get directions in a cell's dirs from the m_dirs store. + Dir get_dirs(const size_t gidx) const + { + assert(gidx < m_gridlen); + size_t i = gidx / 8; // the dirs block index + int o = (gidx % 8); // the dirs block offset + + return Dir((m_dirs[i] >> (o * 4)) & 0b1111); + } + + // Get a cell coordinate from a sequential grid index. + Coord coord(size_t i) const { return {long(i) / m_gridsize.c, long(i) % m_gridsize.c}; } + + // Get a sequential index from a cell coordinate. + size_t seq(const Coord& crd) const { return crd.seq(m_gridsize); } + + // Step a sequential grid index in a direction. + size_t stepidx(const size_t idx, const Dir d) const + { + assert(idx < m_gridlen); + switch (d) { + case Dir::left: return idx - 1; + case Dir::down: return idx + m_gridsize.c; + case Dir::right: return idx + 1; + case Dir::up: return idx - m_gridsize.c; + default: return idx; + } + } + + // Search for a new starting square. + size_t search_start_cell(size_t gidx = 0) const + { + size_t i = gidx / 8; // The dirs block index. + int o = gidx % 8; // The dirs block offset. + + // Skip cells without any unvisited edges. + while (i < m_dirs.size()) { + if (!m_dirs[i]) { + // Whole block is clear, advance to the next block; + i++; + o = 0; + } else { + // Block not clear, find the next non-zero tags in the block. Note + // all dirs before gidx are cleared, so any set bits must be in + // block offsets >= o, not before. + for (uint32_t m = 0b1111 << (o * 4); !(m_dirs[i] & m); m <<= 4) + o++; + break; + } + } + return i * 8 + o; + } + + // Get the next direction for a cell index after the prev direction. + Dir next_dir(size_t idx, Dir prev = Dir::all) const + { + Dir next = get_dirs(idx); + + // Treat ambiguous cases as two separate regions in one square. If + // there are two possible next directions, pick based on the prev + // direction. If prev=all we are starting a new line so pick the one + // that leads "forwards" (right or down) in the search. + switch (next) { + case Dir::leftright: + // We must be coming from up, down, or starting a new line. + assert(prev == Dir::up || prev == Dir::down || prev == Dir::all); + return (prev == Dir::up) ? Dir::left : Dir::right; + case Dir::updown: + // We must be coming from left, right, or starting a new line. + assert(prev == Dir::left || prev == Dir::right || prev == Dir::all); + return (prev == Dir::right) ? Dir::up : Dir::down; + default: + // Next must be a single direction or none to stop. + assert(next == Dir::none || next == Dir::left || next == Dir::down || next == Dir::right || next == Dir::up); + return next; + } + } + + struct CellIt + { + using iterator_category = std::random_access_iterator_tag; using value_type = TRasterValue; - using pointer = TRasterValue *; - using reference = TRasterValue &; + using pointer = TRasterValue*; + using reference = TRasterValue&; using difference_type = long; - using iterator_category = std::forward_iterator_tag; + + Coord crd; + Dir dir = Dir::none; + const Rst* grid = nullptr; + + inline TRasterValue operator*() const { return isoval(*grid, crd); } + inline TRasterValue& operator[](long n) const { return *((*this) + n); } + inline CellIt& operator++() + { + step(crd, dir); + return *this; + } + inline CellIt operator++(int) + { + CellIt o = *this; + ++(*this); + return o; + } + inline CellIt& operator--() + { + step(crd, dir, -1); + return *this; + } + inline CellIt operator--(int) + { + CellIt o = *this; + --(*this); + return o; + } + inline CellIt& operator+=(long n) + { + step(crd, dir, n); + return *this; + } + inline CellIt& operator-=(long n) + { + step(crd, dir, -n); + return *this; + } + inline CellIt operator+(long n) const + { + CellIt o = *this; + o += n; + return o; + } + inline CellIt operator-(long n) const + { + CellIt o = *this; + o -= n; + return o; + } + inline long operator-(const CellIt& o) const + { + switch (dir) { + case Dir::left: return o.crd.c - crd.c; + case Dir::down: return crd.r - o.crd.r; + case Dir::right: return crd.c - o.crd.c; + case Dir::up: return o.crd.r - crd.r; + default: return 0; + } + } + inline bool operator==(const CellIt& o) const { return crd == o.crd; } + inline bool operator!=(const CellIt& o) const { return crd != o.crd; } + inline bool operator<(const CellIt& o) const { return (*this - o) < 0; } + inline bool operator>(const CellIt& o) const { return (*this - o) > 0; } + inline bool operator<=(const CellIt& o) const { return (*this - o) <= 0; } + inline bool operator>=(const CellIt& o) const { return (*this - o) >= 0; } }; - + // Two cell iterators representing an edge of a square. This is then // used for binary search for the first active pixel on the edge. - struct Edge { CellIt from, to; }; - - Edge _edge(const Coord &ringvertex) const + struct Edge { - size_t idx = ringvertex.r; - Coord cell = coord(idx); - uint8_t tg = m_tags[ringvertex.r]; - SquareTag t = SquareTag(tg & 0x0f); - - switch (t) { - case SquareTag::a: - case SquareTag::ab: - case SquareTag::abc: - return {{tl(cell), Dir::down, m_rst}, {bl(cell)}}; - case SquareTag::b: - case SquareTag::bc: - case SquareTag::bcd: - return {{bl(cell), Dir::right, m_rst}, {br(cell)}}; - case SquareTag::c: - return {{br(cell), Dir::up, m_rst}, {tr(cell)}}; - case SquareTag::ac: - switch (Dir(ringvertex.c)) { - case Dir::left: return {{tl(cell), Dir::down, m_rst}, {bl(cell)}}; - case Dir::right: return {{br(cell), Dir::up, m_rst}, {tr(cell)}}; - default: assert(false); - } - case SquareTag::d: - case SquareTag::ad: - case SquareTag::abd: - return {{tr(cell), Dir::left, m_rst}, {tl(cell)}}; - case SquareTag::bd: - switch (Dir(ringvertex.c)) { - case Dir::down: return {{bl(cell), Dir::right, m_rst}, {br(cell)}}; - case Dir::up: return {{tr(cell), Dir::left, m_rst}, {tl(cell)}}; - default: assert(false); - } - case SquareTag::cd: - case SquareTag::acd: - return {{br(cell), Dir::up, m_rst}, {tr(cell)}}; - case SquareTag::full: - case SquareTag::none: { - Coord crd{tl(cell) + Coord{m_cellsize.r / 2, m_cellsize.c / 2}}; - return {{crd, Dir::none, m_rst}, {crd}}; + CellIt from, to; + }; + + Edge _edge(const Coord& ringvertex) const + { + size_t idx = ringvertex.r; + Coord cell = coord(idx); + Dir d = Dir(ringvertex.c); + + switch (d) { + case Dir::left: return {{tl(cell), Dir::down, m_rst}, {bl(cell)}}; + case Dir::down: return {{bl(cell), Dir::right, m_rst}, {br(cell)}}; + case Dir::right: return {{br(cell), Dir::up, m_rst}, {tr(cell)}}; + case Dir::up: return {{tr(cell), Dir::left, m_rst}, {tl(cell)}}; + default: assert(false); } - } - - return {}; + return {}; } - - Edge edge(const Coord &ringvertex) const + + Edge edge(const Coord& ringvertex) const { - const long R = rows(*m_rst), C = cols(*m_rst); - const long R_1 = R - 1, C_1 = C - 1; - - Edge e = _edge(ringvertex); + Edge e = _edge(ringvertex); e.to.dir = e.from.dir; ++e.to; - - e.from.crd.r = std::min(e.from.crd.r, R_1); - e.from.crd.r = std::max(e.from.crd.r, 0l); - e.from.crd.c = std::min(e.from.crd.c, C_1); - e.from.crd.c = std::max(e.from.crd.c, 0l); - - e.to.crd.r = std::min(e.to.crd.r, R); - e.to.crd.r = std::max(e.to.crd.r, 0l); - e.to.crd.c = std::min(e.to.crd.c, C); - e.to.crd.c = std::max(e.to.crd.c, 0l); - + + e.from.crd.r = std::clamp(e.from.crd.r, 0l, m_rastsize.r - 1); + e.from.crd.c = std::clamp(e.from.crd.c, 0l, m_rastsize.c - 1); + e.to.crd.r = std::clamp(e.to.crd.r, 0l, m_rastsize.r); + e.to.crd.c = std::clamp(e.to.crd.c, 0l, m_rastsize.c); return e; } - -public: - explicit Grid(const Rst &rst, const Coord &cellsz, const Coord &overlap) - : m_rst{&rst} - , m_cellsize{cellsz} - , m_res_1{m_cellsize.r - 1, m_cellsize.c - 1} - , m_window{overlap.r < cellsz.r ? cellsz.r - overlap.r : cellsz.r, - overlap.c < cellsz.c ? cellsz.c - overlap.c : cellsz.c} - , m_gridsize{2 + (long(rows(rst)) - overlap.r) / m_window.r, - 2 + (long(cols(rst)) - overlap.c) / m_window.c} - , m_tags(m_gridsize.r * m_gridsize.c, 0) - {} - - // Go through the cells and mark them with the appropriate tag. - template - void tag_grid(ExecutionPolicy &&policy, TRasterValue isoval) - { - // parallel for r - for_each (std::forward(policy), - m_tags.begin(), m_tags.end(), - [this, isoval](uint8_t& tag, size_t idx) { - tag = get_tag_for_cell(coord(idx), isoval); - }); + + void interpolate_edge(Coord& ecrd, TRasterValue isoval) const + { + // The ecrd must have a grid index in r and a direction in c. + assert((0 <= ecrd.r) && (ecrd.r < m_gridlen)); + assert((ecrd.c == long(Dir::left)) || (ecrd.c == long(Dir::down)) || (ecrd.c == long(Dir::right)) || (ecrd.c == long(Dir::up))); + Edge e = edge(ecrd); + ecrd = std::lower_bound(e.from, e.to, isoval).crd; + // Shift bottom and right side points "out" by one to account for + // raster pixel width. Note "dir" is the direction of interpolation + // along the cell edge, not the next move direction. + if (e.from.dir == Dir::up) + ecrd.r += 1; + else if (e.from.dir == Dir::left) + ecrd.c += 1; } - - // Scan for the rings on the tagged grid. Each ring vertex stores the - // sequential index of the cell and the next direction (Dir). - // This info can be used later to calculate the exact raster coordinate. + +public: + explicit Grid(const Rst& rst, const Coord& window) + : m_rst{&rst} + , m_window{window} + , m_rastsize{static_cast(rows(rst)), static_cast(cols(rst))} + , m_gridsize{2 + m_rastsize.r / m_window.r, 2 + m_rastsize.c / m_window.c} + , m_gridlen{static_cast(m_gridsize.r * m_gridsize.c)} + , m_tags(m_gridlen / 32 + 1, 0) // 1 bit per tag means 32 per uint32_t. + , m_dirs(m_gridlen / 8 + 1, 0) // 4 bits per cell means 32/4=8 per uint32_t. + {} + + // Go through the cells getting their tags and dirs. + template void tag_grid(ExecutionPolicy&& policy, TRasterValue isoval) + { + // Get all the tags. parallel? + for_each_idx(std::forward(policy), m_tags.begin(), m_tags.end(), + [this, isoval](uint32_t& tag_block, size_t bidx) { tag_block = get_tags_block32(bidx, isoval); }); + // streamtags(std::cerr); + // Get all the dirs. parallel? + for_each_idx(std::forward(policy), m_dirs.begin(), m_dirs.end(), + [this](uint32_t& dirs_block, size_t bidx) { dirs_block = get_dirs_block8(bidx); }); + // streamdirs(std::cerr); + } + + // Scan for the rings on the tagged grid. Each ring vertex uses the Coord + // to store the sequential cell index (idx in r) and next direction (Dir + // in c) for the next point of the ring. This info can be used later to + // calculate the exact raster coordinate of the point. std::vector scan_rings() { std::vector rings; - size_t startidx = 0; - while ((startidx = search_start_cell(startidx)) < m_tags.size()) { + size_t startidx = 0; + while ((startidx = search_start_cell(startidx)) < m_gridlen) { Ring ring; - - size_t idx = startidx; - Dir prev = Dir::none, next = next_dir(prev, get_tag(idx)); - - while (next != Dir::none && !is_visited(idx, prev)) { + + size_t idx = startidx; + Dir next = next_dir(idx); + do { + // We should never touch a cell with no remaining directions + // until we get back to the start cell. + assert(next != Dir::none); Coord ringvertex{long(idx), long(next)}; ring.emplace_back(ringvertex); - set_visited(idx, prev); - - idx = seq(step(coord(idx), next)); - prev = next; - next = next_dir(next, get_tag(idx)); - } - - // To prevent infinite loops in case of degenerate input - if (next == Dir::none) m_tags[startidx] = _t(SquareTag::none); - - if (ring.size() > 1) { - ring.pop_back(); + clr_dirs(idx, next); + idx = stepidx(idx, next); + next = next_dir(idx, next); + assert(idx < m_gridlen); + } while (idx != startidx); + // The start cell on returning should either have its directions + // cleared or have the second ambiguous direction. + assert(next == Dir::none || next == Dir::left || next == Dir::up); + if (ring.size() > 1) rings.emplace_back(ring); - } } - return rings; } - + // Calculate the exact raster position from the cells which store the - // sequantial index of the square and the next direction - template - void interpolate_rings(ExecutionPolicy && policy, - std::vector &rings, - TRasterValue isov) + // sequential index of the square and the next direction + template void interpolate_rings(ExecutionPolicy&& policy, std::vector& rings, TRasterValue isov) { - for_each(std::forward(policy), - rings.begin(), rings.end(), [this, isov] (Ring &ring, size_t) - { - for (Coord &ringvertex : ring) { - Edge e = edge(ringvertex); - - CellIt found = std::lower_bound(e.from, e.to, isov); - ringvertex = found.crd; - } + for_each_idx(std::forward(policy), rings.begin(), rings.end(), [this, isov](Ring& ring, size_t) { + for (Coord& e : ring) + interpolate_edge(e, isov); }); } + + std::ostream& streamtags(std::ostream& os) + { + os << " :"; + for (auto c = 0; c < m_gridsize.c; c++) + os << (c % 10); + os << "\n"; + for (auto r = 0; r < m_gridsize.r; r++) { + os << std::setw(3) << r << ":"; + for (auto c = 0; c < m_gridsize.c; c++) + os << ((get_tags9(seq(Coord(r, c))) & 1) ? "H" : "."); + os << "\n"; + } + return os; + } + + std::ostream& streamdirs(std::ostream& os) + { + os << " :"; + for (auto c = 0; c < m_gridsize.c; c++) + os << (c % 10); + os << "\n"; + for (auto r = 0; r < m_gridsize.r; r++) { + os << std::setw(3) << r << ":"; + for (auto c = 0; c < m_gridsize.c; c++) + os << get_dirs(seq(Coord(r, c))); + os << std::endl; + } + return os; + } }; template -std::vector execute_with_policy(ExecutionPolicy && policy, - const Raster & raster, +std::vector execute_with_policy(ExecutionPolicy&& policy, + const Raster& raster, TRasterValue isoval, - Coord windowsize = {}) + Coord windowsize = {}) { - if (!rows(raster) || !cols(raster)) return {}; - + if (!rows(raster) || !cols(raster)) + return {}; + size_t ratio = cols(raster) / rows(raster); - - if (!windowsize.r) windowsize.r = 2; + + if (!windowsize.r) + windowsize.r = 2; if (!windowsize.c) windowsize.c = std::max(2l, long(windowsize.r * ratio)); - - Coord overlap{1}; - - Grid grid{raster, windowsize, overlap}; - + + Grid grid{raster, windowsize}; + grid.tag_grid(std::forward(policy), isoval); std::vector rings = grid.scan_rings(); grid.interpolate_rings(std::forward(policy), rings, isoval); - + return rings; } -template -std::vector execute(const Raster &raster, - TRasterValue isoval, - Coord windowsize = {}) +template std::vector execute(const Raster& raster, TRasterValue isoval, Coord windowsize = {}) { return execute_with_policy(nullptr, raster, isoval, windowsize); } diff --git a/src/libslic3r/MaterialType.cpp b/src/libslic3r/MaterialType.cpp new file mode 100644 index 0000000000..8307b0e2dd --- /dev/null +++ b/src/libslic3r/MaterialType.cpp @@ -0,0 +1,169 @@ +#include "MaterialType.hpp" + +#include + +namespace Slic3r { +namespace { +constexpr int DEFAULT_MIN_TEMP = 190; +constexpr int DEFAULT_MAX_TEMP = 300; +constexpr int DEFAULT_CHAMBER_MIN_TEMP = 0; +constexpr int DEFAULT_CHAMBER_MAX_TEMP = 100; +constexpr double DEFAULT_ADHESION_COEFFICIENT = 1.0; +constexpr double DEFAULT_YIELD_STRENGTH = 0.02; +constexpr double DEFAULT_THERMAL_LENGTH = 200.0; +} // namespace + +const std::vector& MaterialType::all() +{ + static const std::vector material_types = { + {"ABS", 190, 300, 50, 65, 1, 0.1 , 100}, + {"ABS-CF", 220, 300, 50, 65, 1, 0.1 , 100}, + {"ABS-GF", 240, 280, 50, 65, 1, 0.1 , 100}, + {"ASA", 220, 300, 50, 65, 1, 0.1 , 100}, + {"ASA-CF", 230, 300, 50, 65, 1, 0.1 , 100}, + {"ASA-GF", 240, 300, 50, 65, 1, 0.1 , 100}, + {"ASA-Aero", 240, 280, 50, 65, 1, 0.1 , 100}, + {"BVOH", 190, 240, 0, 70, 1, 0.02, 200}, + {"EVA", 175, 220, 0, 50, 1, 0.02, 200}, + {"FLEX", 210, 230, 0, 50, 0.5, 0.02, 1000}, + {"HIPS", 220, 270, 50, 60, 1, 0.02, 200}, + {"PA", 235, 280, 50, 60, 1, 0.02, 100}, + {"PA-CF", 240, 315, 50, 60, 1, 0.02, 100}, + {"PA-GF", 240, 290, 50, 60, 1, 0.02, 100}, + {"PA6", 260, 300, 50, 60, 1, 0.02, 100}, + {"PA6-CF", 230, 300, 50, 60, 1, 0.02, 100}, + {"PA6-GF", 260, 300, 50, 60, 1, 0.02, 100}, + {"PA11", 275, 295, 50, 60, 1, 0.02, 100}, + {"PA11-CF", 275, 295, 50, 60, 1, 0.02, 100}, + {"PA11-GF", 275, 295, 50, 60, 1, 0.02, 100}, + {"PA12", 250, 270, 50, 60, 1, 0.02, 100}, + {"PA12-CF", 250, 300, 50, 60, 1, 0.02, 100}, + {"PA12-GF", 255, 270, 50, 60, 1, 0.02, 100}, + {"PAHT", 260, 310, 55, 65, 1, 0.02, 200}, + {"PAHT-CF", 270, 310, 55, 65, 1, 0.02, 200}, + {"PAHT-GF", 270, 310, 55, 65, 1, 0.02, 200}, + {"PC", 240, 300, 60, 70, 1, 0.02, 40}, + {"PC-ABS", 230, 270, 60, 70, 1, 0.02, 80}, + {"PC-CF", 270, 295, 60, 70, 1, 0.02, 80}, + {"PC-PBT", 260, 300, 60, 70, 1, 0.02, 40}, + {"PCL", 130, 170, 0, 45, 1, 0.02, 200}, + {"PCTG", 220, 300, 0, 55, 2, 0.02, 200}, + {"PE", 175, 260, 45, 60, 1, 0.02, 200}, + {"PE-CF", 175, 260, 45, 60, 1, 0.02, 200}, + {"PE-GF", 230, 270, 45, 60, 1, 0.02, 200}, + {"PEI-1010", 370, 430, 80, 100, 1, 0.02, 200}, + {"PEI-1010-CF", 380, 430, 80, 100, 1, 0.02, 200}, + {"PEI-1010-GF", 380, 430, 80, 100, 1, 0.02, 200}, + {"PEI-9085", 350, 390, 80, 100, 1, 0.02, 200}, + {"PEI-9085-CF", 365, 390, 80, 100, 1, 0.02, 200}, + {"PEI-9085-GF", 370, 390, 80, 100, 1, 0.02, 200}, + {"PEEK", 350, 460, 80, 100, 1, 0.02, 200}, + {"PEEK-CF", 380, 410, 80, 100, 1, 0.02, 200}, + {"PEEK-GF", 375, 410, 80, 100, 1, 0.02, 200}, + {"PEKK", 325, 400, 80, 100, 1, 0.02, 200}, + {"PEKK-CF", 360, 400, 80, 100, 1, 0.02, 200}, + {"PES", 340, 390, 80, 100, 1, 0.02, 200}, + {"PET", 200, 290, 0, 55, 2, 0.3 , 100}, + {"PET-CF", 240, 320, 0, 55, 2, 0.3 , 100}, + {"PET-GF", 280, 320, 0, 55, 2, 0.3 , 100}, + {"PETG", 190, 260, 0, 55, 2, 0.3 , 100}, + {"PETG-CF", 230, 290, 0, 55, 1, 0.3 , 100}, + {"PETG-GF", 210, 270, 0, 55, 1, 0.3 , 100}, + {"PHA", 190, 250, 0, 55, 1, 0.02, 200}, + {"PI", 390, 410, 90, 100, 1, 0.02, 200}, + {"PLA", 180, 240, 0, 45, 1, 0.02, 200}, + {"PLA-AERO", 220, 270, 0, 55, 1, 0.02, 200}, + {"PLA-CF", 190, 250, 0, 50, 1, 0.02, 200}, + {"POM", 210, 250, 50, 65, 1, 0.02, 200}, + {"PP", 200, 240, 45, 60, 1, 0.02, 200}, + {"PP-CF", 210, 250, 45, 60, 1, 0.02, 200}, + {"PP-GF", 220, 260, 45, 60, 1, 0.02, 200}, + {"PPA-CF", 260, 300, 55, 70, 1, 0.02, 200}, + {"PPA-GF", 260, 290, 55, 70, 1, 0.02, 200}, + {"PPS", 300, 345, 90, 100, 1, 0.02, 200}, + {"PPS-CF", 295, 350, 90, 100, 1, 0.02, 200}, + {"PPSU", 360, 420, 90, 100, 1, 0.02, 200}, + {"PSU", 350, 380, 90, 100, 1, 0.02, 200}, + {"PVA", 185, 250, 0, 60, 1, 0.02, 200}, + {"PVB", 190, 250, 0, 55, 1, 0.02, 200}, + {"PVDF", 245, 265, 40, 60, 1, 0.02, 200}, + {"SBS", 195, 250, 0, 55, 1, 0.02, 200}, + {"TPI", 420, 445, 90, 100, 1, 0.02, 200}, + {"TPU", 175, 260, 0, 50, 0.5, 0.02, 1000} + }; + + return material_types; +} + +const MaterialTypeInfo* MaterialType::find(const std::string& name) +{ + const auto& types = all(); + const auto it = std::find_if(types.begin(), types.end(), [&name](const MaterialTypeInfo& info) { return info.name == name; }); + return it != types.end() ? &(*it) : nullptr; +} + +bool MaterialType::get_temperature_range(const std::string& type, int& min_temp, int& max_temp) +{ + min_temp = DEFAULT_MIN_TEMP; + max_temp = DEFAULT_MAX_TEMP; + + if (const auto* info = find(type)) { + min_temp = info->min_temp; + max_temp = info->max_temp; + return true; + } + + return false; +} + +bool MaterialType::get_chamber_temperature_range(const std::string& type, int& chamber_min_temp, int& chamber_max_temp) +{ + chamber_min_temp = DEFAULT_CHAMBER_MIN_TEMP; + chamber_max_temp = DEFAULT_CHAMBER_MAX_TEMP; + + if (const auto* info = find(type)) { + chamber_min_temp = info->chamber_min_temp; + chamber_max_temp = info->chamber_max_temp; + return true; + } + + return false; +} + +bool MaterialType::get_adhesion_coefficient(const std::string& type, double& adhesion_coefficient) +{ + adhesion_coefficient = DEFAULT_ADHESION_COEFFICIENT; + + if (const auto* info = find(type)) { + adhesion_coefficient = info->adhesion_coefficient; + return true; + } + + return false; +} + +bool MaterialType::get_yield_strength(const std::string& type, double& yield_strength) +{ + yield_strength = DEFAULT_YIELD_STRENGTH; + + if (const auto* info = find(type)) { + yield_strength = info->yield_strength; + return true; + } + + return false; +} + +bool MaterialType::get_thermal_length(const std::string& type, double& thermal_length) +{ + thermal_length = DEFAULT_THERMAL_LENGTH; + + if (const auto* info = find(type)) { + thermal_length = info->thermal_length; + return true; + } + + return false; +} + +} // namespace Slic3r diff --git a/src/libslic3r/MaterialType.hpp b/src/libslic3r/MaterialType.hpp new file mode 100644 index 0000000000..8b06d80c07 --- /dev/null +++ b/src/libslic3r/MaterialType.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include +#include + +namespace Slic3r { + +struct MaterialTypeInfo { + std::string name; + int min_temp; + int max_temp; + int chamber_min_temp; + int chamber_max_temp; + double adhesion_coefficient; + double yield_strength; + double thermal_length; +}; + +class MaterialType { +public: + static const std::vector& all(); + + static const MaterialTypeInfo* find(const std::string& name); + + static bool get_temperature_range(const std::string& type, int& min_temp, int& max_temp); + static bool get_chamber_temperature_range(const std::string& type, int& chamber_min_temp, int& chamber_max_temp); + static bool get_adhesion_coefficient(const std::string& type, double& adhesion_coefficient); + static bool get_yield_strength(const std::string& type, double& yield_strength); + static bool get_thermal_length(const std::string& type, double& thermal_length); +}; + +} // namespace Slic3r diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 4edec076af..ba8350f065 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -9,6 +9,7 @@ #include "MTUtils.hpp" #include "TriangleMeshSlicer.hpp" #include "TriangleSelector.hpp" +#include "MaterialType.hpp" #include "Format/AMF.hpp" #include "Format/svg.hpp" @@ -3138,18 +3139,10 @@ double Model::getThermalLength(const ModelVolume* modelVolumePtr) { double thermalLength = 200.; auto aa = modelVolumePtr->extruder_id(); if (Model::extruderParamsMap.find(aa) != Model::extruderParamsMap.end()) { - if (Model::extruderParamsMap.at(aa).materialName == "ABS" || - Model::extruderParamsMap.at(aa).materialName == "PA-CF" || - Model::extruderParamsMap.at(aa).materialName == "PET-CF") { - thermalLength = 100; + double thermal_length = 200.0; + if (MaterialType::get_thermal_length(Model::extruderParamsMap.at(aa).materialName, thermal_length)) { + return thermal_length; } - if (Model::extruderParamsMap.at(aa).materialName == "PC") { - thermalLength = 40; - } - if (Model::extruderParamsMap.at(aa).materialName == "TPU") { - thermalLength = 1000; - } - } return thermalLength; } @@ -3212,16 +3205,10 @@ void ModelInstance::invalidate_convex_hull_2d() //BBS adhesion coefficients from model object class double getadhesionCoeff(const ModelVolumePtrs objectVolumes) { - double adhesionCoeff = 1; + double adhesionCoeff = 1.0; for (const ModelVolume* modelVolume : objectVolumes) { if (Model::extruderParamsMap.find(modelVolume->extruder_id()) != Model::extruderParamsMap.end()) { - if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PETG" || - Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "PCTG") { - adhesionCoeff = 2; - } - else if (Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName == "TPU") { - adhesionCoeff = 0.5; - } + MaterialType::get_adhesion_coefficient(Model::extruderParamsMap.at(modelVolume->extruder_id()).materialName, adhesionCoeff); } } return adhesionCoeff; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index b9f657d6c6..0362d04217 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -834,6 +834,7 @@ static std::vector s_Preset_print_options { "small_perimeter_speed", "small_perimeter_threshold","bridge_angle","internal_bridge_angle", "filter_out_gap_fill", "travel_acceleration","inner_wall_acceleration", "min_width_top_surface", "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk","default_junction_deviation", "top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer", "print_flow_ratio", "seam_gap", + "set_other_flow_ratios", "first_layer_flow_ratio", "outer_wall_flow_ratio", "inner_wall_flow_ratio", "overhang_flow_ratio", "sparse_infill_flow_ratio", "internal_solid_infill_flow_ratio", "gap_fill_flow_ratio", "support_flow_ratio", "support_interface_flow_ratio", "role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", "wipe_before_external_loop", "bridge_density","internal_bridge_density", "precise_outer_wall", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_adaptive_layer_height", "tree_support_auto_brim", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index d821b3667a..cabefb7899 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -16,6 +16,7 @@ #include "GCode/WipeTower2.hpp" #include "Utils.hpp" #include "PrintConfig.hpp" +#include "MaterialType.hpp" #include "Model.hpp" #include "format.hpp" #include @@ -57,6 +58,13 @@ PrintRegion::PrintRegion(PrintRegionConfig &&config) : PrintRegion(std::move(con // ORCA: Now this is a parameter //float Print::min_skirt_length = 0; +struct FilamentType { + std::string name; + int min_temp; + int max_temp; + std::string temp_type; +}; + void Print::clear() { std::scoped_lock lock(this->state_mutex()); @@ -2513,6 +2521,14 @@ Vec2d Print::translate_to_print_space(const Point &point) const { FilamentTempType Print::get_filament_temp_type(const std::string& filament_type) { + // FilamentTempType Temperature-based logic + int min_temp, max_temp; + if (MaterialType::get_temperature_range(filament_type, min_temp, max_temp)) { + if (max_temp <= 250) return FilamentTempType::LowTemp; + else if (max_temp < 280) return FilamentTempType::HighLowCompatible; + else return FilamentTempType::HighTemp; + } + const static std::string HighTempFilamentStr = "high_temp_filament"; const static std::string LowTempFilamentStr = "low_temp_filament"; const static std::string HighLowCompatibleFilamentStr = "high_low_compatible_filament"; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index d8bfb00fba..ce2f656862 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1,6 +1,7 @@ #include "PrintConfig.hpp" #include "ClipperUtils.hpp" #include "Config.hpp" +#include "MaterialType.hpp" #include "I18N.hpp" #include "format.hpp" @@ -53,6 +54,9 @@ namespace Slic3r { #define L(s) (s) #define _(s) Slic3r::I18N::translate(s) +// Filament types are defined in MaterialType. + + static t_config_enum_names enum_names_from_keys_map(const t_config_enum_values &enum_keys_map) { t_config_enum_names names; @@ -562,7 +566,7 @@ void PrintConfigDef::init_common_params() def = this->add("preferred_orientation", coFloat); def->label = L("Preferred orientation"); def->tooltip = L("Automatically orient stls on the Z axis upon initial import."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->max = 360; def->min = -360; def->mode = comAdvanced; @@ -997,7 +1001,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Bridging angle override. If left to zero, the bridging angle will be calculated " "automatically. Otherwise the provided angle will be used for external bridges. " "Use 180°for zero angle."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.)); @@ -1009,7 +1013,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Internal bridging angle override. If left to zero, the bridging angle will be calculated " "automatically. Otherwise the provided angle will be used for internal bridges. " "Use 180°for zero angle.\n\nIt is recommended to leave it at 0 unless there is a specific model need not to."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.)); @@ -1081,6 +1085,102 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(1)); + def = this->add("set_other_flow_ratios", coBool); + def->label = L("Set other flow ratios"); + def->category = L("Advanced"); + def->tooltip = L("Change flow ratios for other extrusion path types."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + + def = this->add("first_layer_flow_ratio", coFloat); + def->label = L("First layer flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material on the first layer for the extrusion path roles listed in this section.\n\n" + "For the first layer, the actual flow ratio for each path role (does not affect brims and skirts) will be multiplied by this value."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("outer_wall_flow_ratio", coFloat); + def->label = L("Outer wall flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for outer walls.\n\n" + "The actual outer wall flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("inner_wall_flow_ratio", coFloat); + def->label = L("Inner wall flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for inner walls.\n\n" + "The actual inner wall flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("overhang_flow_ratio", coFloat); + def->label = L("Overhang flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for overhangs.\n\n" + "The actual overhang flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("sparse_infill_flow_ratio", coFloat); + def->label = L("Sparse infill flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for sparse infill.\n\n" + "The actual sparse infill flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("internal_solid_infill_flow_ratio", coFloat); + def->label = L("Internal solid infill flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for internal solid infill.\n\n" + "The actual internal solid infill flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("gap_fill_flow_ratio", coFloat); + def->label = L("Gap fill flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for filling the gaps.\n\n" + "The actual gap filling flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("support_flow_ratio", coFloat); + def->label = L("Support flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for support.\n\n" + "The actual support flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + + def = this->add("support_interface_flow_ratio", coFloat); + def->label = L("Support interface flow ratio"); + def->category = L("Advanced"); + def->tooltip = L("This factor affects the amount of material for the support interface.\n\n" + "The actual support interface flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio."); + def->min = 0; + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); def = this->add("precise_outer_wall",coBool); def->label = L("Precise wall"); @@ -1328,7 +1428,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Maximum angle to let a brim ear appear.\n" "If set to 0, no brim will be created.\n" "If set to ~180, brim will be created on everything but straight sections."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 180; def->mode = comAdvanced; @@ -2107,7 +2207,8 @@ void PrintConfigDef::init_fff_params() "\nBe sure to allow enough space between objects, as this compensation is done after the checks."); def->sidetext = "%"; def->ratio_over = ""; - def->min = 10; + def->min = 50; + def->max = 150; def->mode = comAdvanced; def->set_default_value(new ConfigOptionPercents{ 100 }); @@ -2118,7 +2219,8 @@ void PrintConfigDef::init_fff_params() " The part will be scaled in Z to compensate."); def->sidetext = "%"; def->ratio_over = ""; - def->min = 10; + def->min = 50; + def->max = 150; def->mode = comAdvanced; def->set_default_value(new ConfigOptionPercents{ 100 }); @@ -2261,45 +2363,11 @@ void PrintConfigDef::init_fff_params() def->gui_type = ConfigOptionDef::GUIType::f_enum_open; def->gui_flags = "show_value"; - def->enum_values.push_back("ABS"); - def->enum_values.push_back("ABS-GF"); - def->enum_values.push_back("ASA"); - def->enum_values.push_back("ASA-Aero"); - def->enum_values.push_back("BVOH"); - def->enum_values.push_back("PCTG"); - def->enum_values.push_back("EVA"); - def->enum_values.push_back("FLEX"); - def->enum_values.push_back("HIPS"); - def->enum_values.push_back("PA"); - def->enum_values.push_back("PA-CF"); - def->enum_values.push_back("PA-GF"); - def->enum_values.push_back("PA6-CF"); - def->enum_values.push_back("PA11-CF"); - def->enum_values.push_back("PC"); - def->enum_values.push_back("PC-CF"); - def->enum_values.push_back("PCTG"); - def->enum_values.push_back("PE"); - def->enum_values.push_back("PE-CF"); - def->enum_values.push_back("PET-CF"); - def->enum_values.push_back("PETG"); - def->enum_values.push_back("PETG-CF"); - def->enum_values.push_back("PETG-CF10"); - def->enum_values.push_back("PETG-GF"); - def->enum_values.push_back("PHA"); - def->enum_values.push_back("PLA"); - def->enum_values.push_back("PLA-AERO"); - def->enum_values.push_back("PLA-CF"); - def->enum_values.push_back("PP"); - def->enum_values.push_back("PP-CF"); - def->enum_values.push_back("PP-GF"); - def->enum_values.push_back("PPA-CF"); - def->enum_values.push_back("PPA-GF"); - def->enum_values.push_back("PPS"); - def->enum_values.push_back("PPS-CF"); - def->enum_values.push_back("PVA"); - def->enum_values.push_back("PVB"); - def->enum_values.push_back("SBS"); - def->enum_values.push_back("TPU"); + // Populate the enum values using the shared material type database + for (const auto& filament : MaterialType::all()) { + def->enum_values.push_back(filament.name); + } + def->mode = comSimple; def->set_default_value(new ConfigOptionStrings { "PLA" }); @@ -2369,7 +2437,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Sparse infill direction"); def->category = L("Strength"); def->tooltip = L("Angle for sparse infill pattern, which controls the start or main direction of line."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 360; def->mode = comAdvanced; @@ -2379,7 +2447,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Solid infill direction"); def->category = L("Strength"); def->tooltip = L("Angle for solid infill pattern, which controls the start or main direction of line."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 360; def->mode = comAdvanced; @@ -2481,7 +2549,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Lateral lattice angle 1"); def->category = L("Strength"); def->tooltip = L("The angle of the first set of Lateral lattice elements in the Z direction. Zero is vertical."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = -75; def->max = 75; def->mode = comAdvanced; @@ -2491,7 +2559,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Lateral lattice angle 2"); def->category = L("Strength"); def->tooltip = L("The angle of the second set of Lateral lattice elements in the Z direction. Zero is vertical."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = -75; def->max = 75; def->mode = comAdvanced; @@ -2501,7 +2569,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Infill overhang angle"); def->category = L("Strength"); def->tooltip = L("The angle of the infill angled lines. 60° will result in a pure honeycomb."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 15; def->max = 75; def->mode = comAdvanced; @@ -3227,7 +3295,7 @@ void PrintConfigDef::init_fff_params() "The template is a comma-separated list of angles in degrees, e.g. '0,90'. " "The first angle is applied to the first layer, the second angle to the second layer, and so on. " "If there are more layers than angles, the angles will be repeated. Note that not all solid infill patterns support rotation."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->mode = comAdvanced; def->set_default_value(new ConfigOptionString("")); @@ -3437,7 +3505,7 @@ void PrintConfigDef::init_fff_params() def = this->add("interlocking_orientation", coFloat); def->label = L("Interlocking direction"); def->tooltip = L("Orientation of interlock beams."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 360; def->category = L("Advanced"); @@ -3544,14 +3612,14 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloat(20)); def = this->add("ironing_angle", coFloat); - def->label = L("Ironing angle"); + def->label = L("Ironing angle offset"); def->category = L("Quality"); - def->tooltip = L("The angle ironing is done at. A negative number disables this function and uses the default method."); - def->sidetext = "°"; // degrees, don't need translation - def->min = -1; + def->tooltip = L("The angle of ironing lines offset from the top surface."); + def->sidetext = u8"°"; // degrees, don't need translation + def->min = 0; def->max = 359; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(-1)); + def->set_default_value(new ConfigOptionFloat(0)); def = this->add("layer_change_gcode", coString); def->label = L("Layer change G-code"); @@ -4034,7 +4102,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Maximum angle of overhangs to allow after making more steep overhangs printable." "90° will not change the model at all and allow any overhang, while 0 will " "replace all overhangs with conical material."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->mode = comAdvanced; def->min = 0.; def->max = 90.; @@ -4045,7 +4113,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Quality"); def->tooltip = L("Maximum area of a hole in the base of the model before it's filled by conical material. " "A value of 0 will fill all the holes in the model base."); - def->sidetext = "mm²"; // square milimeters, don't need translation + def->sidetext = u8"mm²"; // square millimeters, don't need translation def->mode = comAdvanced; def->min = 0.; def->set_default_value(new ConfigOptionFloat(0.)); @@ -4312,7 +4380,7 @@ void PrintConfigDef::init_fff_params() def = this->add("travel_slope", coFloats); def->label = L("Traveling angle"); def->tooltip = L("Traveling angle for Slope and Spiral Z-hop type. Setting it to 90° results in Normal Lift."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->mode = comAdvanced; def->min = 1; def->max = 90; @@ -4456,7 +4524,7 @@ void PrintConfigDef::init_fff_params() "This option sets the threshold angle for applying a conditional scarf joint seam.\nIf the maximum angle within the perimeter loop " "exceeds this value (indicating the absence of sharp corners), a scarf joint seam will be used. The default value is 155°."); def->mode = comAdvanced; - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 180; def->set_default_value(new ConfigOptionInt(155)); @@ -4577,7 +4645,7 @@ void PrintConfigDef::init_fff_params() def = this->add("skirt_start_angle", coFloat); def->label = L("Skirt start point"); def->tooltip = L("Angle from the object center to skirt start point. Zero is the most right position, counter clockwise is positive angle."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = -180; def->max = 180; def->mode = comAdvanced; @@ -4667,7 +4735,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Minimum sparse infill threshold"); def->category = L("Strength"); def->tooltip = L("Sparse infill area which is smaller than threshold value is replaced by internal solid infill."); - def->sidetext = "mm²"; // square milimeters, don't need translation + def->sidetext = u8"mm²"; // square millimeters, don't need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(15)); @@ -4944,7 +5012,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Pattern angle"); def->category = L("Support"); def->tooltip = L("Use this setting to rotate the support pattern on the horizontal plane."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 359; def->mode = comAdvanced; @@ -5228,7 +5296,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Threshold angle"); def->category = L("Support"); def->tooltip = L("Support will be generated for overhangs whose slope angle is below the threshold."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 90; def->mode = comSimple; @@ -5250,7 +5318,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Support"); def->tooltip = L("This setting determines the maximum overhang angle that the branches of tree support are allowed to make. " "If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 60; def->mode = comAdvanced; @@ -5261,7 +5329,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Support"); def->tooltip = L("This setting determines the maximum overhang angle that the branches of tree support are allowed to make. " "If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 60; def->mode = comAdvanced; @@ -5273,7 +5341,7 @@ void PrintConfigDef::init_fff_params() // TRN PrintSettings: "Organic supports" > "Preferred Branch Angle" def->tooltip = L("The preferred angle of the branches, when they do not have to avoid the model. " "Use a lower angle to make them more vertical and more stable. Use a higher angle for branches to merge faster."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 10; def->max = 85; def->mode = comAdvanced; @@ -5361,7 +5429,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("The angle of the branches' diameter as they gradually become thicker towards the bottom. " "An angle of 0 will cause the branches to have uniform thickness over their length. " "A bit of an angle can increase stability of the organic support."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->min = 0; def->max = 15; def->mode = comAdvanced; @@ -5693,7 +5761,7 @@ void PrintConfigDef::init_fff_params() def = this->add("wipe_tower_rotation_angle", coFloat); def->label = L("Wipe tower rotation angle"); def->tooltip = L("Wipe tower rotation angle with respect to X axis."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.)); @@ -5709,7 +5777,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Stabilization cone apex angle"); def->tooltip = L("Angle at the apex of the cone that is used to stabilize the wipe tower. " "Larger angle means wider base."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->mode = comAdvanced; def->min = 0.; def->max = 90.; @@ -5974,7 +6042,7 @@ void PrintConfigDef::init_fff_params() " an angle greater than this setting will not have transitions and no walls will be " "printed in the center to fill the remaining space. Reducing this setting reduces " "the number and length of these center walls, but may leave gaps or overextrude."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->mode = comAdvanced; def->min = 1.; def->max = 59.; @@ -6910,6 +6978,8 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va opt_key = "bottom_solid_infill_flow_ratio"; } else if (opt_key == "ironing_direction") { opt_key = "ironing_angle"; + } else if (opt_key == "ironing_angle" && boost::starts_with(value, "-")) { + value = "0"; } else if (opt_key == "counterbole_hole_bridging") { opt_key = "counterbore_hole_bridging"; } else if (opt_key == "draft_shield" && value == "limited") { @@ -7870,19 +7940,19 @@ CLITransformConfigDef::CLITransformConfigDef() def = this->add("rotate", coFloat); def->label = L("Rotate"); def->tooltip = L("Rotation angle around the Z axis in degrees."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->set_default_value(new ConfigOptionFloat(0)); def = this->add("rotate_x", coFloat); def->label = L("Rotate around X"); def->tooltip = L("Rotation angle around the X axis in degrees."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->set_default_value(new ConfigOptionFloat(0)); def = this->add("rotate_y", coFloat); def->label = L("Rotate around Y"); def->tooltip = L("Rotation angle around the Y axis in degrees."); - def->sidetext = "°"; // degrees, don't need translation + def->sidetext = u8"°"; // degrees, don't need translation def->set_default_value(new ConfigOptionFloat(0)); def = this->add("scale", coFloat); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index c53744b51b..100700267a 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1082,6 +1082,18 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, small_area_infill_flow_compensation)) ((ConfigOptionEnum, wall_direction)) + // Orca: flow ratios + ((ConfigOptionBool, set_other_flow_ratios)) + ((ConfigOptionFloat, first_layer_flow_ratio)) + ((ConfigOptionFloat, outer_wall_flow_ratio)) + ((ConfigOptionFloat, inner_wall_flow_ratio)) + ((ConfigOptionFloat, overhang_flow_ratio)) + ((ConfigOptionFloat, sparse_infill_flow_ratio)) + ((ConfigOptionFloat, internal_solid_infill_flow_ratio)) + ((ConfigOptionFloat, gap_fill_flow_ratio)) + ((ConfigOptionFloat, support_flow_ratio)) + ((ConfigOptionFloat, support_interface_flow_ratio)) + // Orca: seam slopes ((ConfigOptionEnum, seam_slope_type)) ((ConfigOptionBool, seam_slope_conditional)) diff --git a/src/libslic3r/SLA/RasterToPolygons.cpp b/src/libslic3r/SLA/RasterToPolygons.cpp index 79c21fe726..e05a721cd8 100644 --- a/src/libslic3r/SLA/RasterToPolygons.cpp +++ b/src/libslic3r/SLA/RasterToPolygons.cpp @@ -10,13 +10,13 @@ namespace marchsq { // Specialize this struct to register a raster type for the Marching squares alg template<> struct _RasterTraits { using Rst = Slic3r::sla::RasterGrayscaleAA; - + // The type of pixel cell in the raster using ValueType = uint8_t; - + // Value at a given position static uint8_t get(const Rst &rst, size_t row, size_t col) { return rst.read_pixel(col, row); } - + // Number of rows and cols of the raster static size_t rows(const Rst &rst) { return rst.resolution().height_px; } static size_t cols(const Rst &rst) { return rst.resolution().width_px; } @@ -34,57 +34,55 @@ template void foreach_vertex(ExPolygon &poly, Fn &&fn) } ExPolygons raster_to_polygons(const RasterGrayscaleAA &rst, Vec2i32 windowsize) -{ +{ size_t rows = rst.resolution().height_px, cols = rst.resolution().width_px; - + if (rows < 2 || cols < 2) return {}; - + Polygons polys; - long w_rows = std::max(2l, long(windowsize.y())); - long w_cols = std::max(2l, long(windowsize.x())); - + long w_rows = std::max(1l, long(windowsize.y())); + long w_cols = std::max(1l, long(windowsize.x())); + std::vector rings = marchsq::execute(rst, 128, {w_rows, w_cols}); - + polys.reserve(rings.size()); - + auto pxd = rst.pixel_dimensions(); - pxd.w_mm = (rst.resolution().width_px * pxd.w_mm) / (rst.resolution().width_px - 1); - pxd.h_mm = (rst.resolution().height_px * pxd.h_mm) / (rst.resolution().height_px - 1); - + for (const marchsq::Ring &ring : rings) { Polygon poly; Points &pts = poly.points; pts.reserve(ring.size()); - + for (const marchsq::Coord &crd : ring) pts.emplace_back(scaled(crd.c * pxd.w_mm), scaled(crd.r * pxd.h_mm)); - + polys.emplace_back(poly); } - + // reverse the raster transformations ExPolygons unioned = union_ex(polys); coord_t width = scaled(cols * pxd.h_mm), height = scaled(rows * pxd.w_mm); - + auto tr = rst.trafo(); for (ExPolygon &expoly : unioned) { if (tr.mirror_y) foreach_vertex(expoly, [height](Point &p) {p.y() = height - p.y(); }); - + if (tr.mirror_x) foreach_vertex(expoly, [width](Point &p) {p.x() = width - p.x(); }); - + expoly.translate(-tr.center_x, -tr.center_y); - + if (tr.flipXY) foreach_vertex(expoly, [](Point &p) { std::swap(p.x(), p.y()); }); - + if ((tr.mirror_x + tr.mirror_y + tr.flipXY) % 2) { expoly.contour.reverse(); for (auto &h : expoly.holes) h.reverse(); } } - + return unioned; } diff --git a/src/libslic3r/SLA/RasterToPolygons.hpp b/src/libslic3r/SLA/RasterToPolygons.hpp index e7e554fbb7..5320887c8f 100644 --- a/src/libslic3r/SLA/RasterToPolygons.hpp +++ b/src/libslic3r/SLA/RasterToPolygons.hpp @@ -8,7 +8,7 @@ namespace sla { class RasterGrayscaleAA; -ExPolygons raster_to_polygons(const RasterGrayscaleAA &rst, Vec2i32 windowsize = {2, 2}); +ExPolygons raster_to_polygons(const RasterGrayscaleAA &rst, Vec2i32 windowsize = {1, 1}); }} // namespace Slic3r::sla diff --git a/src/libslic3r/StreamUtils.hpp b/src/libslic3r/StreamUtils.hpp new file mode 100644 index 0000000000..78a9ac7335 --- /dev/null +++ b/src/libslic3r/StreamUtils.hpp @@ -0,0 +1,60 @@ +#ifndef slic3r_StreamUtils_hpp_ +#define slic3r_StreamUtils_hpp_ + +#include "Point.hpp" +#include "libslic3r.h" +#include "Polygon.hpp" +#include "Polyline.hpp" +#include "ExPolygon.hpp" +#include +#include + +namespace Slic3r { + +inline std::ostream& operator<<(std::ostream& os, const Points& pts) +{ + os << "[" << pts.size() << "]:"; + for (Point p : pts) + os << " (" << p << ")"; + os << "\n"; + return os; +} + +inline std::ostream& operator<<(std::ostream& os, const MultiPoint& mpts) +{ + os << "Multipoint" << mpts.points; + return os; +} + +inline std::ostream& operator<<(std::ostream& os, const Polygon& poly) +{ + os << "Polygon" << poly.points; + return os; +} + +inline std::ostream& operator<<(std::ostream& os, const Polygons& polys) +{ + os << "Polygons[" << polys.size() << "]:" << "\n"; + for (Polygon p : polys) + os << " " << p; + return os; +} + +inline std::ostream& operator<<(std::ostream& os, const ExPolygon& epoly) +{ + os << "ExPolygon:\n"; + os << " contour: " << epoly.contour; + os << " holes: " << epoly.holes; + return os; +} + +inline std::ostream& operator<<(std::ostream& os, const ExPolygons& epolys) +{ + os << "ExPolygons[" << epolys.size() << "]:" << "\n"; + for (ExPolygon p : epolys) + os << " " << p; + return os; +} + +} // namespace Slic3r +#endif // slic3r_StreamUtils_hpp_ diff --git a/src/libslic3r/Support/SupportSpotsGenerator.hpp b/src/libslic3r/Support/SupportSpotsGenerator.hpp index 73a3419067..48f07d52aa 100644 --- a/src/libslic3r/Support/SupportSpotsGenerator.hpp +++ b/src/libslic3r/Support/SupportSpotsGenerator.hpp @@ -5,6 +5,7 @@ #include "Line.hpp" #include "PrintBase.hpp" #include "PrintConfig.hpp" +#include "MaterialType.hpp" #include #include #include @@ -64,15 +65,9 @@ struct Params return get_support_spots_adhesion_strength() * 2.0; } - if (filament_type == "PLA") { - return 0.02 * 1e6; - } else if (filament_type == "PET" || filament_type == "PETG") { - return 0.3 * 1e6; - } else if (filament_type == "ABS" || filament_type == "ASA") { - return 0.1 * 1e6; //TODO do measurements - } else { //PLA default value - defensive approach, PLA has quite low adhesion - return 0.02 * 1e6; - } + double yield_strength = 0.02; + MaterialType::get_yield_strength(filament_type, yield_strength); + return yield_strength * 1e6; } double get_support_spots_adhesion_strength() const { diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index 17e7fb044f..50272009cd 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -1529,7 +1529,7 @@ void TreeSupport::generate_toolpaths() need_infill &= area_group.need_infill; std::shared_ptr filler_support = std::shared_ptr(Fill::new_from_type(layer_id == 0 ? ipConcentric : m_support_params.base_fill_pattern)); filler_support->set_bounding_box(bbox_object); - filler_support->spacing = object_config.support_base_pattern_spacing.value * support_density;// constant spacing to align support infill lines + filler_support->spacing = support_spacing * support_density; // constant spacing to align support infill lines filler_support->angle = Geometry::deg2rad(object_config.support_angle.value); Polygons loops = to_polygons(poly); diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index d7db10fd81..650c02b341 100644 --- a/src/libslic3r/calib.hpp +++ b/src/libslic3r/calib.hpp @@ -37,6 +37,7 @@ struct Calib_Params bool print_numbers; double freqStartX, freqEndX, freqStartY, freqEndY; int test_model; + std::string shaper_type; std::vector accelerations; std::vector speeds; diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 70298fea44..2c7eef0ef9 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -537,6 +537,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 @@ -619,11 +621,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}) @@ -649,7 +668,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) @@ -674,7 +693,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. @@ -683,8 +704,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/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 0bf251d729..42e2961396 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -696,3 +696,22 @@ wxAuiToolBarItem* BBLTopbar::FindToolByCurrentPosition() wxPoint client_pos = this->ScreenToClient(mouse_pos); return this->FindToolByPosition(client_pos.x, client_pos.y); } + +#ifdef __WIN32__ +WXLRESULT BBLTopbar::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) +{ + switch (nMsg) { + case WM_NCHITTEST: { + const wxAuiToolBarItem* current_item = this->FindToolByCurrentPosition(); + if (current_item != nullptr && current_item != m_title_item) { + break; + } + + // Pass the event to main window if mouse is on the top bar and not on any of the buttons + return HTTRANSPARENT; + } + } + + return wxAuiToolBar::MSWWindowProc(nMsg, wParam, lParam); +} +#endif diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index 78820813a7..b5f4673a44 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -56,6 +56,11 @@ public: void ShowCalibrationButton(bool show = true); +protected: +#ifdef __WIN32__ + WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) override; +#endif + private: wxFrame* m_frame; wxAuiToolBarItem* m_file_menu_item; diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 367cd9d26a..f81fb1c62c 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -6,6 +6,7 @@ #include "libslic3r/Config.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/PresetBundle.hpp" +#include "libslic3r/MaterialType.hpp" #include "MsgDialog.hpp" #include "libslic3r/PrintConfig.hpp" @@ -59,10 +60,29 @@ void ConfigManipulation::check_nozzle_recommended_temperature_range(DynamicPrint int temperature_range_low, temperature_range_high; if (!get_temperature_range(config, temperature_range_low, temperature_range_high)) return; + // Get the selected filament type + std::string filament_type = ""; + if (config->has("filament_type") && config->option("filament_type")->values.size() > 0) { + filament_type = config->option("filament_type")->values[0]; + } + + int min_recommended_temp = 190; + int max_recommended_temp = 300; + + if (!MaterialType::get_temperature_range(filament_type, min_recommended_temp, max_recommended_temp)){ + filament_type = "Unknown"; + } + wxString msg_text; bool need_check = false; - if (temperature_range_low < 190 || temperature_range_high > 300) { - msg_text += _L("The recommended minimum temperature is less than 190°C or the recommended maximum temperature is greater than 300°C.\n"); + if (temperature_range_low < min_recommended_temp) { + msg_text += wxString::Format(_L("A minimum temperature above %d\u2103 is recommended for %s.\n"), + min_recommended_temp, filament_type); + need_check = true; + } + if (temperature_range_high > max_recommended_temp) { + msg_text += wxString::Format(_L("A maximum temperature below %d\u2103 is recommended for %s.\n"), + max_recommended_temp, filament_type); need_check = true; } if (temperature_range_low > temperature_range_high) { @@ -145,23 +165,14 @@ void ConfigManipulation::check_filament_max_volumetric_speed(DynamicPrintConfig void ConfigManipulation::check_chamber_temperature(DynamicPrintConfig* config) { - const static std::maprecommend_temp_map = { - {"PLA",45}, - {"PLA-CF",45}, - {"PVA",45}, - {"TPU",50}, - {"PETG",55}, - {"PCTG",55}, - {"PETG-CF",55} - }; bool support_chamber_temp_control=GUI::wxGetApp().preset_bundle->printers.get_selected_preset().config.opt_bool("support_chamber_temp_control"); if (support_chamber_temp_control&&config->has("chamber_temperatures")) { std::string filament_type = config->option("filament_type")->get_at(0); - auto iter = recommend_temp_map.find(filament_type); - if (iter!=recommend_temp_map.end()) { - if (iter->second < config->option("chamber_temperatures")->get_at(0)) { + int chamber_min_temp, chamber_max_temp; + if (MaterialType::get_chamber_temperature_range(filament_type, chamber_min_temp, chamber_max_temp)) { + if (chamber_max_temp < config->option("chamber_temperatures")->get_at(0)) { wxString msg_text = wxString::Format(_L("Current chamber temperature is higher than the material's safe temperature, this may result in material softening and clogging. " - "The maximum safe temperature for the material is %d"), iter->second); + "The maximum safe temperature for the material is %d"), chamber_max_temp); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); is_msg_dlg_already_exist = true; dialog.ShowModal(); @@ -794,6 +805,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co bool have_avoid_crossing_perimeters = config->opt_bool("reduce_crossing_wall"); toggle_line("max_travel_detour_distance", have_avoid_crossing_perimeters); + bool has_set_other_flow_ratios = config->opt_bool("set_other_flow_ratios"); + for (auto el : {"first_layer_flow_ratio", "outer_wall_flow_ratio", "inner_wall_flow_ratio", "overhang_flow_ratio", "sparse_infill_flow_ratio", "internal_solid_infill_flow_ratio", "gap_fill_flow_ratio", "support_flow_ratio", "support_interface_flow_ratio"}) + toggle_line(el, has_set_other_flow_ratios); + bool has_overhang_speed = config->opt_bool("enable_overhang_speed"); for (auto el : {"overhang_1_4_speed", "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed"}) toggle_line(el, has_overhang_speed); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index e62b031286..922a5aa030 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -4478,7 +4478,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::SameLine(checkbox_pos); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0, 0.0)); // ensure no padding active ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0, 0.0)); // ensure no item spacing active - ImGui::Text(into_u8(visible ? ImGui::VisibleIcon : ImGui::HiddenIcon).c_str(), ImVec2(16 * m_scale, 16 * m_scale)); + ImGui::Text("%s", into_u8(visible ? ImGui::VisibleIcon : ImGui::HiddenIcon).c_str()); ImGui::PopStyleVar(2); } } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 67611c49d1..e0753b1bc3 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" @@ -4384,108 +4390,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/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 6b93098aa2..591b310cfe 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -1022,6 +1022,10 @@ void ImGuiWrapper::tooltip(const char *label, float wrap_width) ImGui::EndTooltip(); } +void ImGuiWrapper::tooltip(const std::string &label, float wrap_width) { + tooltip(label.c_str(), wrap_width); +} + void ImGuiWrapper::tooltip(const wxString &label, float wrap_width) { ImGui::BeginTooltip(); diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index 65c8225120..c7be9dc063 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -154,6 +154,7 @@ public: void text_wrapped(const std::string &label, float wrap_width); void text_wrapped(const wxString &label, float wrap_width); void tooltip(const char *label, float wrap_width); + void tooltip(const std::string &label, float wrap_width); void tooltip(const wxString &label, float wrap_width); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index df1dc541c4..f48d2197aa 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -739,6 +739,36 @@ WXLRESULT MainFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam } break; + case WM_NCHITTEST: { + if (IsMaximized()) { + // When maximized, no resize border + return HTCAPTION; + } + + // Allow resizing from top of the title bar + wxPoint mouse_pos = ::wxGetMousePosition(); + if (m_topbar->GetScreenRect().GetBottom() >= mouse_pos.y) { + RECT borderThickness; + SetRectEmpty(&borderThickness); + AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE) & ~WS_CAPTION, FALSE, NULL); + borderThickness.left *= -1; + borderThickness.top *= -1; + wxPoint client_pos = this->ScreenToClient(mouse_pos); + + bool on_top_border = client_pos.y <= borderThickness.top; + + // And to allow diagonally resizing, we check if mouse is at window corner + if (client_pos.x <= borderThickness.left) { + return on_top_border ? HTTOPLEFT : HTLEFT; + } else if (client_pos.x >= GetClientSize().x - borderThickness.right) { + return on_top_border ? HTTOPRIGHT : HTRIGHT; + } + + return on_top_border ? HTTOP : HTCAPTION; + } + break; + } + case WM_GETMINMAXINFO: { auto mmi = (MINMAXINFO*) lParam; HandleGetMinMaxInfo(mmi); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index bbe1cbae46..4850fc74d0 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -197,8 +197,8 @@ private: int picking_id_component(int idx) const; public: - static const unsigned int PLATE_NAME_HOVER_ID = 6; - static const unsigned int GRABBER_COUNT = 8; + static constexpr unsigned int PLATE_NAME_HOVER_ID = 6; + static constexpr unsigned int GRABBER_COUNT = 8; static ColorRGBA SELECT_COLOR; static ColorRGBA UNSELECT_COLOR; @@ -630,7 +630,7 @@ public: void reset(); }; - static const unsigned int MAX_PLATES_COUNT = MAX_PLATE_COUNT; + static constexpr unsigned int MAX_PLATES_COUNT = MAX_PLATE_COUNT; static GLTexture bed_textures[(unsigned int)btCount]; static bool is_load_bedtype_textures; static bool is_load_cali_texture; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 721a67fba7..ea09ec8812 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10362,7 +10362,28 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; - printer_config->set_key_value("machine_max_junction_deviation", new ConfigOptionFloats {0.3}); + const auto gcode_flavor_option = printer_config->option>("gcode_flavor"); + float junction_deviation_value = 0.f; + if (gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfMarlinFirmware) { + const auto machine_junction_option = printer_config->option("machine_max_junction_deviation"); + const float current = (machine_junction_option && !machine_junction_option->values.empty()) + ? machine_junction_option->values.front() + : 0.f; + junction_deviation_value = std::max(current, 0.25f); + } + float machine_max_jerk_x = 0.f; + if (const auto option = printer_config->option("machine_max_jerk_x"); + option != nullptr && !option->values.empty()) { + machine_max_jerk_x = option->values.front(); + } + float machine_max_jerk_y = 0.f; + if (const auto option = printer_config->option("machine_max_jerk_y"); + option != nullptr && !option->values.empty()) { + machine_max_jerk_y = option->values.front(); + } + const float jerk_value = std::max((gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfKlipper) ? 5.f : 10.f, + std::min(machine_max_jerk_x, machine_max_jerk_y)); + printer_config->set_key_value("machine_max_junction_deviation", new ConfigOptionFloats {junction_deviation_value}); printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 0.0 }); filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats { 0.0 }); @@ -10379,12 +10400,14 @@ 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)); - print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(2000)); - print_config->set_key_value("default_junction_deviation", new ConfigOptionFloat(0.25)); + print_config->set_key_value("default_acceleration", new ConfigOptionFloat(20000)); + print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(20000)); + print_config->set_key_value("default_jerk", new ConfigOptionFloat(jerk_value)); + print_config->set_key_value("outer_wall_jerk", new ConfigOptionFloat(jerk_value)); + print_config->set_key_value("default_junction_deviation", new ConfigOptionFloat(junction_deviation_value)); model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum(btOuterOnly)); model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0)); model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); @@ -10410,7 +10433,28 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; - printer_config->set_key_value("machine_max_junction_deviation", new ConfigOptionFloats{0.3}); + const auto gcode_flavor_option = printer_config->option>("gcode_flavor"); + float junction_deviation_value = 0.f; + if (gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfMarlinFirmware) { + const auto machine_junction_option = printer_config->option("machine_max_junction_deviation"); + const float current = (machine_junction_option && !machine_junction_option->values.empty()) + ? machine_junction_option->values.front() + : 0.f; + junction_deviation_value = std::max(current, 0.25f); + } + float machine_max_jerk_x = 0.f; + if (const auto option = printer_config->option("machine_max_jerk_x"); + option != nullptr && !option->values.empty()) { + machine_max_jerk_x = option->values.front(); + } + float machine_max_jerk_y = 0.f; + if (const auto option = printer_config->option("machine_max_jerk_y"); + option != nullptr && !option->values.empty()) { + machine_max_jerk_y = option->values.front(); + } + const float jerk_value = std::max((gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfKlipper) ? 5.f : 10.f, + std::min(machine_max_jerk_x, machine_max_jerk_y)); + printer_config->set_key_value("machine_max_junction_deviation", new ConfigOptionFloats{junction_deviation_value}); printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 0.0 }); filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats { 0.0 }); @@ -10427,12 +10471,14 @@ 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)); - print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(2000)); - print_config->set_key_value("default_junction_deviation", new ConfigOptionFloat(0.25)); + print_config->set_key_value("default_acceleration", new ConfigOptionFloat(20000)); + print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(20000)); + print_config->set_key_value("default_jerk", new ConfigOptionFloat(jerk_value)); + print_config->set_key_value("outer_wall_jerk", new ConfigOptionFloat(jerk_value)); + print_config->set_key_value("default_junction_deviation", new ConfigOptionFloat(junction_deviation_value)); model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum(btOuterOnly)); model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0)); model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); @@ -10476,11 +10522,12 @@ 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)); print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(2000)); + print_config->set_key_value("default_jerk", new ConfigOptionFloat(0)); print_config->set_key_value("default_junction_deviation", new ConfigOptionFloat(0.0)); model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum(btOuterOnly)); model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0)); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 20376fad17..d17427e6da 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -7,17 +7,13 @@ #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" #include -#include -#include "Notebook.hpp" #include "OG_CustomCtrl.hpp" #include "wx/graphics.h" -#include "Widgets/CheckBox.hpp" -#include "Widgets/ComboBox.hpp" -#include "Widgets/RadioBox.hpp" -#include "Widgets/TextInput.hpp" #include #include -#include +#include "NetworkTestDialog.hpp" +#include "Widgets/StaticLine.hpp" +#include "Widgets/RadioGroup.hpp" #ifdef __WINDOWS__ #ifdef _MSW_DARK_MODE @@ -27,10 +23,6 @@ namespace Slic3r { namespace GUI { -WX_DEFINE_LIST(RadioSelectorList); -wxDEFINE_EVENT(EVT_PREFERENCES_SELECT_TAB, wxCommandEvent); - - class MyscrolledWindow : public wxScrolledWindow { public: MyscrolledWindow(wxWindow* parent, @@ -42,46 +34,37 @@ public: bool ShouldScrollToChildOnFocus(wxWindow* child) override { return false; } }; - -wxBoxSizer *PreferencesDialog::create_item_title(wxString title, wxWindow *parent, wxString tooltip) +wxBoxSizer *PreferencesDialog::create_item_title(wxString title) { wxBoxSizer *m_sizer_title = new wxBoxSizer(wxHORIZONTAL); - auto m_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - m_title->SetForegroundColour(DESIGN_GRAY800_COLOR); - m_title->SetFont(::Label::Head_13); - m_title->Wrap(-1); - //m_title->SetToolTip(tooltip); - - auto m_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); - m_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); - - m_sizer_title->Add(m_title, 0, wxALIGN_CENTER | wxALL, 3); - m_sizer_title->Add(0, 0, 0, wxLEFT, 9); - //m_sizer_title->Add(m_line, 0, wxEXPAND, 0); - wxBoxSizer *sizer_line = new wxBoxSizer(wxVERTICAL); - sizer_line->Add( m_line, 0, wxEXPAND, 0 ); - m_sizer_title->Add( sizer_line, 1, wxALIGN_CENTER, 0 ); - //m_sizer_title->Add( 0, 0, 0, wxEXPAND|wxLEFT, 80 ); + auto title_ctrl = new StaticLine(m_parent, 0, title); + title_ctrl->SetFont(Label::Head_14); + title_ctrl->SetForegroundColour(DESIGN_GRAY900_COLOR); + m_sizer_title->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN - 10)); + m_sizer_title->Add(title_ctrl, 1, wxEXPAND | wxBOTTOM | wxTOP, FromDIP(6)); + m_sizer_title->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN - 10)); return m_sizer_title; } -std::tuple PreferencesDialog::create_item_combobox_base(wxString title, wxWindow* parent, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index) +std::tuple PreferencesDialog::create_item_combobox_base(wxString title, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index) { wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); std::vector::iterator iter; for (iter = vlist.begin(); iter != vlist.end(); iter++) { @@ -90,12 +73,12 @@ std::tuple PreferencesDialog::create_item_combobox_base( combobox->SetSelection(current_index); - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); return {m_sizer_combox, combobox}; } -wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxWindow* parent, wxString tooltip, std::string param, std::vector vlist) +wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist) { unsigned int current_index = 0; @@ -104,7 +87,7 @@ wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxWindow* pa current_index = atoi(current_setting.c_str()); } - auto [sizer, combobox] = create_item_combobox_base(title, parent, tooltip, param, vlist, current_index); + auto [sizer, combobox] = create_item_combobox_base(title, tooltip, param, vlist, current_index); //// save config combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this, param](wxCommandEvent& e) { @@ -115,7 +98,7 @@ wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxWindow* pa return sizer; } -wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxWindow *parent, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index) +wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index) { assert(vlist.size() == config_name_index.size()); unsigned int current_index = 0; @@ -127,7 +110,7 @@ wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxWindow *pa current_index = iterator - config_name_index.begin(); } - auto [sizer, combobox] = create_item_combobox_base(title, parent, tooltip, param, vlist, current_index); + auto [sizer, combobox] = create_item_combobox_base(title, tooltip, param, vlist, current_index); //// save config combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this, param, config_name_index](wxCommandEvent& e) { @@ -138,23 +121,68 @@ wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxWindow *pa return sizer; } -wxBoxSizer *PreferencesDialog::create_item_language_combobox( - wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param, std::vector vlist) +wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxString tooltip) { + wxLanguage supported_languages[]{ + wxLANGUAGE_ENGLISH, + wxLANGUAGE_CHINESE_SIMPLIFIED, + wxLANGUAGE_CHINESE, + wxLANGUAGE_GERMAN, + wxLANGUAGE_CZECH, + wxLANGUAGE_FRENCH, + wxLANGUAGE_SPANISH, + wxLANGUAGE_SWEDISH, + wxLANGUAGE_DUTCH, + wxLANGUAGE_HUNGARIAN, + wxLANGUAGE_JAPANESE, + wxLANGUAGE_ITALIAN, + wxLANGUAGE_KOREAN, + wxLANGUAGE_RUSSIAN, + wxLANGUAGE_UKRAINIAN, + wxLANGUAGE_TURKISH, + wxLANGUAGE_POLISH, + wxLANGUAGE_CATALAN, + wxLANGUAGE_PORTUGUESE_BRAZILIAN, + wxLANGUAGE_LITHUANIAN, + }; + + auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); + std::vector language_infos; + language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH)); + for (size_t i = 0; i < translations.GetCount(); ++i) { + const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]); + + if (langinfo == nullptr) continue; + int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); + for (auto si = 0; si < language_num; si++) { + if (langinfo == wxLocale::GetLanguageInfo(supported_languages[si])) { + language_infos.emplace_back(langinfo); + } + } + //if (langinfo != nullptr) language_infos.emplace_back(langinfo); + } + sort_remove_duplicates(language_infos); + std::sort(language_infos.begin(), language_infos.end(), [](const wxLanguageInfo *l, const wxLanguageInfo *r) { return l->Description < r->Description; }); + + auto vlist = language_infos; + auto param = "language"; + wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); auto language = app_config->get(param); m_current_language_selected = -1; std::vector::iterator iter; @@ -235,7 +263,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( } combobox->SetSelection(m_current_language_selected); - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); combobox->Bind(wxEVT_LEFT_DOWN, [this, combobox](wxMouseEvent &e) { m_current_language_selected = combobox->GetSelection(); @@ -296,24 +324,30 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( return m_sizer_combox; } -wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist) +wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxString tooltip) { + + std::vector Regions = {_L("Asia-Pacific"), _L("China"), _L("Europe"), _L("North America"), _L("Others")}; std::vector local_regions = {"Asia-Pacific", "China", "Europe", "North America", "Others"}; + auto vlist = Regions; + wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); std::vector::iterator iter; for (iter = vlist.begin(); iter != vlist.end(); iter++) { combobox->Append(*iter); } @@ -377,21 +411,64 @@ wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWin return m_sizer_combox; } -wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist) +wxBoxSizer *PreferencesDialog::create_item_autoflush(wxString title, wxString tooltip) { wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title , wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); + combo_title->SetFont(::Label::Body_14); combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); + + std::vector FlushOptions = {_L("All"), _L("Color"), _L("Filament"), _L("None")}; + std::vector::iterator iter; + for (iter = FlushOptions.begin(); iter != FlushOptions.end(); iter++) { combobox->Append(*iter); } + + auto opt_color = app_config->get("auto_calculate") == "true"; + auto opt_filam = app_config->get("auto_calculate_when_filament_change") == "true"; + if (opt_color && opt_filam) { + combobox->SetValue(FlushOptions[0]); + }else if(opt_color){ + combobox->SetValue(FlushOptions[1]); + }else if(opt_filam){ + combobox->SetValue(FlushOptions[2]); + }else{ + combobox->SetValue(FlushOptions[3]); + } + + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); + + combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { + auto sel = e.GetSelection(); + app_config->set("auto_calculate" ,(sel == 0 || sel == 1) ? "true" : "false"); + app_config->set("auto_calculate_when_filament_change",(sel == 0 || sel == 2) ? "true" : "false"); + e.Skip(); + }); + return m_sizer_combox; +} + +wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxString tooltip, std::vector vlist) +{ + wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); + combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tooltip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); + + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); std::vector::iterator iter; for (iter = vlist.begin(); iter != vlist.end(); iter++) { combobox->Append(*iter); } @@ -399,7 +476,7 @@ wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxW auto severity_level = app_config->get("log_severity_level"); if (!severity_level.empty()) { combobox->SetValue(severity_level); } - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); //// save config combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { @@ -411,9 +488,8 @@ wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxW return m_sizer_combox; } - wxBoxSizer *PreferencesDialog::create_item_multiple_combobox( - wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param, std::vector vlista, std::vector vlistb) + wxString title, wxString tooltip, std::string param, std::vector vlista, std::vector vlistb) { std::vector params; Split(app_config->get(param), "/", params); @@ -421,37 +497,37 @@ wxBoxSizer *PreferencesDialog::create_item_multiple_combobox( std::vector::iterator iter; wxBoxSizer *m_sizer_tcombox= new wxBoxSizer(wxHORIZONTAL); - m_sizer_tcombox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_tcombox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - m_sizer_tcombox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + m_sizer_tcombox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox_left = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox_left->SetFont(::Label::Body_13); - combobox_left->GetDropDown().SetFont(::Label::Body_13); + auto combobox_left = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox_left->SetFont(::Label::Body_14); + combobox_left->GetDropDown().SetFont(::Label::Body_14); for (iter = vlista.begin(); iter != vlista.end(); iter++) { combobox_left->Append(*iter); } combobox_left->SetValue(std::string(params[0].mb_str())); - m_sizer_tcombox->Add(combobox_left, 0, wxALIGN_CENTER, 0); + m_sizer_tcombox->Add(combobox_left, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); - auto combo_title_add = new wxStaticText(parent, wxID_ANY, wxT("+"), wxDefaultPosition, wxDefaultSize, 0); + auto combo_title_add = new wxStaticText(m_parent, wxID_ANY, wxT("+"), wxDefaultPosition, wxDefaultSize, 0); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); + combo_title->SetFont(::Label::Body_14); combo_title_add->Wrap(-1); - m_sizer_tcombox->Add(combo_title_add, 0, wxALIGN_CENTER | wxALL, 3); + m_sizer_tcombox->Add(combo_title_add, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(5)); - auto combobox_right = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox_right->SetFont(::Label::Body_13); - combobox_right->GetDropDown().SetFont(::Label::Body_13); + auto combobox_right = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox_right->SetFont(::Label::Body_14); + combobox_right->GetDropDown().SetFont(::Label::Body_14); for (iter = vlistb.begin(); iter != vlistb.end(); iter++) { combobox_right->Append(*iter); } combobox_right->SetValue(std::string(params[1].mb_str())); - m_sizer_tcombox->Add(combobox_right, 0, wxALIGN_CENTER, 0); + m_sizer_tcombox->Add(combobox_right, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); // save config combobox_left->GetDropDown().Bind(wxEVT_COMBOBOX, [this, param, combobox_right](wxCommandEvent &e) { @@ -469,33 +545,33 @@ wxBoxSizer *PreferencesDialog::create_item_multiple_combobox( return m_sizer_tcombox; } -wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange) +wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2, wxString tooltip, std::string param, std::function onchange) { wxBoxSizer *sizer_input = new wxBoxSizer(wxHORIZONTAL); - auto input_title = new wxStaticText(parent, wxID_ANY, title); + auto input_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - input_title->SetFont(::Label::Body_13); + input_title->SetFont(::Label::Body_14); input_title->SetToolTip(tooltip); - input_title->Wrap(-1); + input_title->Wrap(DESIGN_TITLE_SIZE.x); - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + auto input = new ::TextInput(m_parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); input->GetTextCtrl()->SetValue(app_config->get(param)); wxTextValidator validator(wxFILTER_DIGITS); + input->SetToolTip(tooltip); input->GetTextCtrl()->SetValidator(validator); - auto second_title = new wxStaticText(parent, wxID_ANY, title2, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto second_title = new wxStaticText(m_parent, wxID_ANY, title2, wxDefaultPosition, wxDefaultSize, 0); second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - second_title->SetFont(::Label::Body_13); + second_title->SetFont(::Label::Body_14); second_title->SetToolTip(tooltip); second_title->Wrap(-1); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); - sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + sizer_input->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + sizer_input->Add(input_title , 0, wxALIGN_CENTER_VERTICAL); + sizer_input->Add(input , 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); + sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(2)); input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, param, input, onchange](wxCommandEvent &e) { auto value = input->GetTextCtrl()->GetValue(); @@ -515,27 +591,27 @@ wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2 return sizer_input; } -wxBoxSizer *PreferencesDialog::create_camera_orbit_mult_input(wxString title, wxWindow *parent, wxString tooltip) +wxBoxSizer *PreferencesDialog::create_camera_orbit_mult_input(wxString title, wxString tooltip) { wxBoxSizer *sizer_input = new wxBoxSizer(wxHORIZONTAL); - auto input_title = new wxStaticText(parent, wxID_ANY, title); + auto input_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - input_title->SetFont(::Label::Body_13); + input_title->SetFont(::Label::Body_14); input_title->SetToolTip(tooltip); - input_title->Wrap(-1); + input_title->Wrap(DESIGN_TITLE_SIZE.x); auto param = "camera_orbit_mult"; - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + auto input = new ::TextInput(m_parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); input->GetTextCtrl()->SetValue(app_config->get(param)); wxTextValidator validator(wxFILTER_NUMERIC); + input->SetToolTip(tooltip); input->GetTextCtrl()->SetValidator(validator); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); + sizer_input->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL); + sizer_input->Add(input , 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); const double min = 0.05; const double max = 2.0; @@ -568,42 +644,53 @@ wxBoxSizer *PreferencesDialog::create_camera_orbit_mult_input(wxString title, wx return sizer_input; } -wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param) +wxBoxSizer *PreferencesDialog::create_item_backup(wxString title, wxString tooltip) { wxBoxSizer *m_sizer_input = new wxBoxSizer(wxHORIZONTAL); - auto input_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - input_title->SetFont(::Label::Body_13); - input_title->SetToolTip(tooltip); - input_title->Wrap(-1); - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + m_sizer_input->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); + checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + checkbox_title->SetFont(::Label::Body_14); + checkbox_title->Wrap(DESIGN_TITLE_SIZE.x); + checkbox_title->SetToolTip(tooltip); + + auto checkbox = new ::CheckBox(m_parent); + checkbox->SetValue(app_config->get_bool("backup_switch")); + checkbox->SetToolTip(tooltip); + + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox](wxCommandEvent &e) { + app_config->set_bool("backup_switch", checkbox->GetValue()); + app_config->save(); + bool pbool = app_config->get("backup_switch") == "true" ? true : false; + std::string backup_interval = "10"; + app_config->get("backup_interval", backup_interval); + Slic3r::set_backup_interval(pbool ? boost::lexical_cast(backup_interval) : 0); + if (m_backup_interval_textinput != nullptr) { m_backup_interval_textinput->Enable(pbool); } + e.Skip(); + }); + + m_backup_interval_time = app_config->get("backup_interval"); + + auto input = new ::TextInput(m_parent, wxEmptyString, _L("sec"), "loop", wxDefaultPosition, wxSize(FromDIP(97), -1), wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); - input->GetTextCtrl()->SetValue(app_config->get(param)); + input->GetTextCtrl()->SetValue(m_backup_interval_time); wxTextValidator validator(wxFILTER_DIGITS); + input->SetToolTip(_L("The period of backup in seconds.")); input->GetTextCtrl()->SetValidator(validator); + m_sizer_input->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + m_sizer_input->Add(checkbox , 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(5)); + m_sizer_input->Add(input , 0, wxALIGN_CENTER_VERTICAL); - auto second_title = new wxStaticText(parent, wxID_ANY, _L("Second"), wxDefaultPosition, DESIGN_TITLE_SIZE, 0); - second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - second_title->SetFont(::Label::Body_13); - second_title->SetToolTip(tooltip); - second_title->Wrap(-1); - - m_sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - m_sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - m_sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); - m_sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); - m_sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - - - input->GetTextCtrl()->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this, param, input](wxCommandEvent &e) { + input->GetTextCtrl()->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this, input](wxCommandEvent &e) { m_backup_interval_time = input->GetTextCtrl()->GetValue(); e.Skip(); }); - std::function backup_interval = [this, param, input]() { + std::function backup_interval = [this, input]() { m_backup_interval_time = input->GetTextCtrl()->GetValue(); app_config->set("backup_interval", std::string(m_backup_interval_time.mb_str())); app_config->save(); @@ -622,69 +709,30 @@ wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow e.Skip(); }); - if (app_config->get("backup_switch") == "true") { - input->Enable(true); - input->Refresh(); - } else { - input->Enable(false); - input->Refresh(); - } + input->Enable(app_config->get("backup_switch") == "true"); + input->Refresh(); - if (param == "backup_interval") { m_backup_interval_textinput = input; } + m_backup_interval_textinput = input; return m_sizer_input; } - -wxBoxSizer *PreferencesDialog::create_item_switch(wxString title, wxWindow *parent, wxString tooltip ,std::string param) -{ - wxBoxSizer *m_sizer_switch = new wxBoxSizer(wxHORIZONTAL); - auto switch_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); - switch_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - switch_title->SetFont(::Label::Body_13); - switch_title->SetToolTip(tooltip); - switch_title->Wrap(-1); - auto switchbox = new ::SwitchButton(parent, wxID_ANY); - - /*auto index = app_config->get(param); - if (!index.empty()) { combobox->SetSelection(atoi(index.c_str())); }*/ - - m_sizer_switch->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - m_sizer_switch->Add(switch_title, 0, wxALIGN_CENTER | wxALL, 3); - m_sizer_switch->Add( 0, 0, 1, wxEXPAND, 0 ); - m_sizer_switch->Add(switchbox, 0, wxALIGN_CENTER, 0); - m_sizer_switch->Add( 0, 0, 0, wxEXPAND|wxLEFT, 40 ); - - //// save config - switchbox->Bind(wxEVT_TOGGLEBUTTON, [this, param](wxCommandEvent &e) { - /* app_config->set(param, std::to_string(e.GetSelection())); - app_config->save();*/ - e.Skip(); - }); - return m_sizer_switch; -} - -wxBoxSizer* PreferencesDialog::create_item_darkmode_checkbox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, std::string param) +wxBoxSizer* PreferencesDialog::create_item_darkmode(wxString title,wxString tooltip, std::string param) { wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto checkbox = new ::CheckBox(parent); + auto checkbox = new ::CheckBox(m_parent); checkbox->SetValue((app_config->get(param) == "1") ? true : false); m_dark_mode_ckeckbox = checkbox; - m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); - - auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - checkbox_title->SetFont(::Label::Body_13); - - auto size = checkbox_title->GetTextExtent(title); - checkbox_title->SetMinSize(wxSize(size.x + FromDIP(40), -1)); - checkbox_title->Wrap(-1); - m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + checkbox_title->SetFont(::Label::Body_14); + checkbox_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + m_sizer_checkbox->Add(checkbox , 0, wxALIGN_CENTER | wxRIGHT | wxLEFT, FromDIP(5)); //// save config checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent& e) { @@ -703,7 +751,9 @@ wxBoxSizer* PreferencesDialog::create_item_darkmode_checkbox(wxString title, wxW e.Skip(); }); - checkbox->SetToolTip(tooltip); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + checkbox_title->SetToolTip(tip); + checkbox->SetToolTip(tip); return m_sizer_checkbox; } @@ -720,27 +770,35 @@ void PreferencesDialog::set_dark_mode() #endif } -wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param) +wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxString tooltip, std::string param, const wxString secondary_title) { wxBoxSizer *m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty - auto checkbox = new ::CheckBox(parent); - checkbox->SetValue(app_config->get_bool(param)); - - m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); - - auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - checkbox_title->SetFont(::Label::Body_13); + checkbox_title->SetFont(::Label::Body_14); + checkbox_title->Wrap(DESIGN_TITLE_SIZE.x); + checkbox_title->SetToolTip(tip); - auto size = checkbox_title->GetTextExtent(title); - checkbox_title->SetMinSize(wxSize(size.x + FromDIP(5), -1)); - checkbox_title->Wrap(-1); - m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + auto checkbox = new ::CheckBox(m_parent); + checkbox->SetValue(app_config->get_bool(param)); + checkbox->SetToolTip(tip); + m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + m_sizer_checkbox->Add(checkbox , 0, wxALIGN_CENTER | wxRIGHT | wxLEFT, FromDIP(5)); + + if(!secondary_title.IsEmpty()){ + auto sec_title = new wxStaticText(m_parent, wxID_ANY, secondary_title); + sec_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + sec_title->SetFont(::Label::Body_14); + sec_title->Wrap(-1); + sec_title->SetToolTip(tip); + m_sizer_checkbox->Add(sec_title, 0, wxALIGN_CENTER); + } //// save config checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent &e) { @@ -752,15 +810,6 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa // wxGetApp().switch_staff_pick(pbool); // } - // backup - if (param == "backup_switch") { - bool pbool = app_config->get("backup_switch") == "true" ? true : false; - std::string backup_interval = "10"; - app_config->get("backup_interval", backup_interval); - Slic3r::set_backup_interval(pbool ? boost::lexical_cast(backup_interval) : 0); - if (m_backup_interval_textinput != nullptr) { m_backup_interval_textinput->Enable(pbool); } - } - if (param == "sync_user_preset") { bool sync = app_config->get("sync_user_preset") == "true" ? true : false; if (sync) { @@ -841,59 +890,68 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa checkbox->Enable(pbool); } - - checkbox->SetToolTip(tooltip); return m_sizer_checkbox; } -wxBoxSizer* PreferencesDialog::create_item_button( - wxString title, wxString title2, wxWindow* parent, wxString tooltip, wxString tooltip2, std::function onclick, bool button_on_left/* = false*/) +wxBoxSizer* PreferencesDialog::create_item_button(wxString title, wxString title2, wxString tooltip, wxString tooltip2, std::function onclick) { wxBoxSizer *m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - auto m_staticTextPath = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - m_staticTextPath->SetMaxSize(wxSize(FromDIP(240), -1)); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + auto m_staticTextPath = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); m_staticTextPath->SetForegroundColour(DESIGN_GRAY900_COLOR); - m_staticTextPath->SetFont(::Label::Body_13); - m_staticTextPath->Wrap(-1); - m_staticTextPath->SetToolTip(tooltip); + m_staticTextPath->SetFont(::Label::Body_14); + m_staticTextPath->Wrap(DESIGN_TITLE_SIZE.x); + + m_staticTextPath->SetToolTip(tooltip.IsEmpty() ? tooltip2 : tooltip); // use button tooltip if label tooltip empty - auto m_button_download = new Button(parent, title2); - m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Window); - m_button_download->SetToolTip(tooltip2); + auto m_button_download = new Button(m_parent, title2); + m_button_download->SetStyle(title2 == _L("Clear") ? ButtonStyle::Alert : ButtonStyle::Regular, ButtonType::Parameter); + m_button_download->SetToolTip(tooltip2.IsEmpty() ? tooltip : tooltip2); // use label tooltip if button tooltip empty m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); - if (button_on_left) { - m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); - m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - } else { - m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); - } + m_sizer_checkbox->Add(m_staticTextPath , 0, wxALIGN_CENTER_VERTICAL); + m_sizer_checkbox->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); return m_sizer_checkbox; } -wxWindow* PreferencesDialog::create_item_downloads(wxWindow* parent, int padding_left, std::string param) +wxBoxSizer* PreferencesDialog::create_item_downloads(wxString title, wxString tooltip) { wxString download_path = wxString::FromUTF8(app_config->get("download_path")); - auto item_panel = new wxWindow(parent, wxID_ANY); - item_panel->SetBackgroundColour(*wxWHITE); + wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); + wxPanel* label_panel = new wxPanel(m_parent); + wxBoxSizer* label_sizer = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - auto m_staticTextPath = new wxStaticText(item_panel, wxID_ANY, download_path, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - //m_staticTextPath->SetMaxSize(wxSize(FromDIP(440), -1)); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto downloads_folder = new wxStaticText(label_panel, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxST_NO_AUTORESIZE); + downloads_folder->SetForegroundColour(DESIGN_GRAY900_COLOR); + downloads_folder->SetFont(::Label::Body_14); + downloads_folder->SetToolTip(tooltip); + downloads_folder->Wrap(-1); + + auto m_staticTextPath = new wxStaticText(label_panel, wxID_ANY, download_path, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); m_staticTextPath->SetForegroundColour(DESIGN_GRAY600_COLOR); - m_staticTextPath->SetFont(::Label::Body_13); + m_staticTextPath->SetFont(::Label::Body_14); m_staticTextPath->Wrap(-1); + m_staticTextPath->SetToolTip(download_path); - auto m_button_download = new Button(item_panel, _L("Browse")); - m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Window); + label_sizer->Add(downloads_folder , 0, wxALIGN_CENTER_VERTICAL); + label_sizer->Add(m_staticTextPath , 0, wxALIGN_CENTER_VERTICAL); + label_panel->SetSize( wxSize(DESIGN_TITLE_SIZE.x, -1)); + label_panel->SetMinSize(wxSize(DESIGN_TITLE_SIZE.x, -1)); + label_panel->SetMaxSize(wxSize(DESIGN_TITLE_SIZE.x, -1)); + label_panel->SetSizer(label_sizer); + label_panel->Layout(); - m_button_download->Bind(wxEVT_BUTTON, [this, m_staticTextPath, item_panel](auto& e) { + auto m_button_download = new Button(m_parent, _L("Browse") + " " + dots); + m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); + m_button_download->SetToolTip(_L("Choose folder for downloaded items")); + + m_button_download->Bind(wxEVT_BUTTON, [this, m_staticTextPath, m_sizer_checkbox](auto& e) { wxString defaultPath = wxT("/"); wxDirDialog dialog(this, _L("Choose Download Directory"), defaultPath, wxDD_NEW_DIR_BUTTON); @@ -902,45 +960,19 @@ wxWindow* PreferencesDialog::create_item_downloads(wxWindow* parent, int padding std::string download_path_str = download_path.ToUTF8().data(); app_config->set("download_path", download_path_str); m_staticTextPath->SetLabelText(download_path); - item_panel->Layout(); + m_staticTextPath->SetToolTip(download_path); + m_sizer_checkbox->Layout(); } }); - m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); + m_sizer_checkbox->Add(label_panel , 0, wxALIGN_CENTER_VERTICAL); + m_sizer_checkbox->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); - item_panel->SetSizer(m_sizer_checkbox); - item_panel->Layout(); - - return item_panel; -} - -wxWindow *PreferencesDialog ::create_item_radiobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, int groupid, std::string param) -{ - wxWindow *item = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(28))); - item->SetBackgroundColour(*wxWHITE); - - RadioBox *radiobox = new RadioBox(item); - radiobox->SetPosition(wxPoint(padding_left, (item->GetSize().GetHeight() - radiobox->GetSize().GetHeight()) / 2)); - radiobox->Bind(wxEVT_LEFT_DOWN, &PreferencesDialog::OnSelectRadio, this); - - RadioSelector *rs = new RadioSelector; - rs->m_groupid = groupid; - rs->m_param_name = param; - rs->m_radiobox = radiobox; - rs->m_selected = false; - m_radio_group.Append(rs); - - wxStaticText *text = new wxStaticText(item, wxID_ANY, title, wxDefaultPosition, wxDefaultSize); - text->SetPosition(wxPoint(padding_left + radiobox->GetSize().GetWidth() + 10, (item->GetSize().GetHeight() - text->GetSize().GetHeight()) / 2)); - - radiobox->SetToolTip(tooltip); - text->SetToolTip(tooltip); - return item; + return m_sizer_checkbox; } #ifdef WIN32 -wxBoxSizer* PreferencesDialog::create_item_link_association(wxWindow* parent, wxString url_prefix, wxString website_name) +wxBoxSizer* PreferencesDialog::create_item_link_association( wxString url_prefix, wxString website_name) { wxString title = _L("Associate") + (boost::format(" %1%://") % url_prefix.c_str()).str(); wxString tooltip = _L("Associate") + " " + url_prefix + ":// " + _L("with OrcaSlicer so that Orca can open models from") + " " + website_name; @@ -949,34 +981,31 @@ wxBoxSizer* PreferencesDialog::create_item_link_association(wxWindow* parent, wx bool reg_to_current_instance = wxGetApp().check_url_association(url_prefix.ToStdWstring(), registered_bin); auto* h_sizer = new wxBoxSizer(wxHORIZONTAL); // contains checkbox and other elements on the first line - h_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + h_sizer->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); // build checkbox - auto checkbox = new ::CheckBox(parent); + auto checkbox = new ::CheckBox(m_parent); checkbox->SetToolTip(tooltip); checkbox->SetValue(reg_to_current_instance); // If registered to the current instance, checkbox should be checked checkbox->Enable(!reg_to_current_instance); // Since unregistering isn't supported, checkbox is disabled when checked - h_sizer->Add(checkbox, 0, wxALIGN_CENTER, 0); - h_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); - // build text next to checkbox - auto checkbox_title = new wxStaticText(parent, wxID_ANY, title); + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE); checkbox_title->SetToolTip(tooltip); checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - checkbox_title->SetFont(::Label::Body_13); - auto size = checkbox_title->GetTextExtent(title); - checkbox_title->SetMinSize({ size.x + FromDIP(5), -1 }); + checkbox_title->SetFont(::Label::Body_14); checkbox_title->Wrap(-1); - h_sizer->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + + h_sizer->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + h_sizer->Add(checkbox , 0, wxALIGN_CENTER | wxLEFT , FromDIP(5)); auto* v_sizer = new wxBoxSizer(wxVERTICAL); v_sizer->Add(h_sizer); // build text below checkbox that indicates the instance currently registered to handle the link type - auto* registered_instance_title = new wxStaticText(parent, wxID_ANY, ""); - registered_instance_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - registered_instance_title->SetFont(::Label::Body_13); + auto* registered_instance_title = new wxStaticText(m_parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + registered_instance_title->SetForegroundColour(DESIGN_GRAY600_COLOR); + registered_instance_title->SetFont(::Label::Body_14); registered_instance_title->Wrap(-1); // update the text below checkbox @@ -996,16 +1025,17 @@ wxBoxSizer* PreferencesDialog::create_item_link_association(wxWindow* parent, wx registered_instance_title->SetToolTip(_L("Current Instance Path: ") + registered_bin); } else if (registered_bin.empty()) current_association_str += _L("None"); - else + else{ current_association_str += registered_bin; + registered_instance_title->SetToolTip(current_association_str); + } registered_instance_title->SetLabel(current_association_str); - auto size = registered_instance_title->GetTextExtent(current_association_str); - registered_instance_title->SetMinSize({ size.x + FromDIP(5), -1 }); + registered_instance_title->SetMaxSize(wxSize(DESIGN_WINDOW_SIZE.x - FromDIP(DESIGN_LEFT_MARGIN) - FromDIP(40), -1)); // prevent horizontal scroll }; update_current_association_str(); - v_sizer->Add(registered_instance_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 60); + v_sizer->Add(registered_instance_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(DESIGN_LEFT_MARGIN)); checkbox->Bind(wxEVT_TOGGLEBUTTON, [=](wxCommandEvent& e) { wxGetApp().associate_url(url_prefix.ToStdWstring()); @@ -1022,8 +1052,10 @@ PreferencesDialog::PreferencesDialog(wxWindow *parent, wxWindowID id, const wxSt : DPIDialog(parent, id, _L("Preferences"), pos, size, style) { SetBackgroundColour(*wxWHITE); + SetMinSize(DESIGN_WINDOW_SIZE); create(); wxGetApp().UpdateDlgDarkUI(this); + Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& event) { try { NetworkAgent* agent = GUI::wxGetApp().getAgent(); @@ -1043,60 +1075,55 @@ PreferencesDialog::PreferencesDialog(wxWindow *parent, wxWindowID id, const wxSt void PreferencesDialog::create() { - app_config = get_app_config(); - m_backup_interval_time = app_config->get("backup_interval"); + app_config = get_app_config(); - SetSizeHints(wxDefaultSize, wxDefaultSize); - - auto main_sizer = new wxBoxSizer(wxVERTICAL); - - m_scrolledWindow = new MyscrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); - m_scrolledWindow->SetScrollRate(5, 5); + m_parent = new MyscrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_parent->SetScrollRate(5, 5); + m_parent->SetBackgroundColour(*wxWHITE); m_sizer_body = new wxBoxSizer(wxVERTICAL); - auto m_top_line = new wxPanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxSize(DESIGN_RESOUTION_PREFERENCES.x, 1), wxTAB_TRAVERSAL); - m_top_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); + m_pref_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT); + m_pref_tabs->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable right select + m_pref_tabs->SetFont(Label::Body_14); - m_sizer_body->Add(m_top_line, 0, wxEXPAND, 0); + create_items(); - auto general_page = create_general_page(); -#if !BBL_RELEASE_TO_PUBLIC - auto debug_page = create_debug_page(); -#endif + m_pref_tabs->Bind(wxEVT_TAB_SEL_CHANGED, [this](wxCommandEvent& e) { + Freeze(); + #ifdef __linux__ + m_pref_tabs->SetFocus(); + #endif + int selection = e.GetSelection(); + for (size_t i = 0; i < m_pref_tabs->GetCount(); ++i){ + m_pref_tabs->SetItemBold(i, i == selection); + f_sizers[i]->Show(i == selection); + } + Layout(); + Thaw(); + }); - m_sizer_body->Add(0, 0, 0, wxTOP, FromDIP(28)); - m_sizer_body->Add(general_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); -#if !BBL_RELEASE_TO_PUBLIC - m_sizer_body->Add(debug_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); -#endif - m_sizer_body->Add(0, 0, 0, wxBOTTOM, FromDIP(28)); - m_scrolledWindow->SetSizerAndFit(m_sizer_body); + auto item_color = StateColor( + std::make_pair(wxColour("#6B6B6C"), (int) StateColor::NotChecked), + std::make_pair(wxColour("#363636"), (int) StateColor::Normal) + ); - main_sizer->Add(m_scrolledWindow, 1, wxEXPAND); + for (size_t i = 0; i < m_pref_tabs->GetCount(); ++i) + m_pref_tabs->SetItemTextColour(i, item_color); - SetSizer(main_sizer); + m_pref_tabs->SelectItem(0); + + m_sizer_body->Add(m_pref_tabs, 0, wxEXPAND | wxBOTTOM, FromDIP(5)); + m_sizer_body->Add(m_parent, 1, wxEXPAND); + + SetSizer(m_sizer_body); Layout(); Fit(); - int screen_height = wxDisplay(m_parent).GetClientArea().GetHeight(); - if (this->GetSize().GetY() > screen_height) - this->SetSize(this->GetSize().GetX() + FromDIP(40), screen_height * 4 / 5); - CenterOnParent(); - wxPoint start_pos = this->GetPosition(); - if (start_pos.y < 0) { this->SetPosition(wxPoint(start_pos.x, 0)); } - - //select first - auto event = wxCommandEvent(EVT_PREFERENCES_SELECT_TAB); - event.SetInt(0); - event.SetEventObject(this); - wxPostEvent(this, event); } PreferencesDialog::~PreferencesDialog() { - m_radio_group.DeleteContents(true); - m_hash_selector.clear(); } void PreferencesDialog::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } @@ -1122,257 +1149,291 @@ void PreferencesDialog::Split(const std::string &src, const std::string &separat dest.push_back(substring); } -wxWindow* PreferencesDialog::create_general_page() +void PreferencesDialog::create_items() { - auto page = new wxWindow(m_scrolledWindow, wxID_ANY); - page->SetBackgroundColour(*wxWHITE); - wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); + // ORCA + // Window focus follows item creation order. so below code has to be in same order with UI + // Create functions for custom controls to keep list clean + // Tooltips added automatically from related title if its empty - auto title_general_settings = create_item_title(_L("General Settings"), page, _L("General Settings")); + wxBoxSizer*sizer_page = new wxBoxSizer(wxVERTICAL); + wxFlexGridSizer* g_sizer; // use same name on all sizers to make easier to ordering without renaming + auto v_gap = FromDIP(4); - // bbs supported languages - wxLanguage supported_languages[]{ - wxLANGUAGE_ENGLISH, - wxLANGUAGE_CHINESE_SIMPLIFIED, - wxLANGUAGE_CHINESE, - wxLANGUAGE_GERMAN, - wxLANGUAGE_CZECH, - wxLANGUAGE_FRENCH, - wxLANGUAGE_SPANISH, - wxLANGUAGE_SWEDISH, - wxLANGUAGE_DUTCH, - wxLANGUAGE_HUNGARIAN, - wxLANGUAGE_JAPANESE, - wxLANGUAGE_ITALIAN, - wxLANGUAGE_KOREAN, - wxLANGUAGE_RUSSIAN, - wxLANGUAGE_UKRAINIAN, - wxLANGUAGE_TURKISH, - wxLANGUAGE_POLISH, - wxLANGUAGE_CATALAN, - wxLANGUAGE_PORTUGUESE_BRAZILIAN, - wxLANGUAGE_LITHUANIAN, - }; + ////////////////////////// + //// GENERAL TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("General")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); - auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); - std::vector language_infos; - language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH)); - for (size_t i = 0; i < translations.GetCount(); ++i) { - const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]); + //// GENERAL > Settings + g_sizer->Add(create_item_title(_L("Settings")), 1, wxEXPAND); - if (langinfo == nullptr) continue; - int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); - for (auto si = 0; si < language_num; si++) { - if (langinfo == wxLocale::GetLanguageInfo(supported_languages[si])) { - language_infos.emplace_back(langinfo); - } - } - //if (langinfo != nullptr) language_infos.emplace_back(langinfo); - } - sort_remove_duplicates(language_infos); - std::sort(language_infos.begin(), language_infos.end(), [](const wxLanguageInfo *l, const wxLanguageInfo *r) { return l->Description < r->Description; }); - auto item_language = create_item_language_combobox(_L("Language"), page, _L("Language"), 50, "language", language_infos); + auto item_language = create_item_language_combobox(_L("Language"), ""); + g_sizer->Add(item_language); - std::vector Regions = {_L("Asia-Pacific"), _L("China"), _L("Europe"), _L("North America"), _L("Others")}; - auto item_region= create_item_region_combobox(_L("Login Region"), page, _L("Login Region"), Regions); + std::vectorUnits = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; + auto item_currency = create_item_combobox(_L("Units"), "", "use_inches", Units); + g_sizer->Add(item_currency); - auto item_stealth_mode = create_item_checkbox(_L("Stealth Mode"), page, _L("This stops the transmission of data to Bambu's cloud services. Users who don't use BBL machines or use LAN mode only can safely turn on this function."), 50, "stealth_mode"); - auto item_enable_plugin = create_item_checkbox(_L("Enable network plugin"), page, _L("Enable network plugin"), 50, "installed_networking"); - auto item_legacy_network_plugin = create_item_checkbox(_L("Use legacy network plugin (Takes effect after restarting Orca)"), page, _L("Disable to use latest network plugin that supports new BambuLab firmwares."), 50, "legacy_networking"); - auto item_check_stable_version_only = create_item_checkbox(_L("Check for stable updates only"), page, _L("Check for stable updates only"), 50, "check_stable_update_only"); + std::vector DefaultPage = {_L("Home"), _L("Prepare")}; + auto item_default_page = create_item_combobox(_L("Default page"), _L("Set the page opened on startup."), "default_page", DefaultPage); + g_sizer->Add(item_default_page); - std::vector Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; - auto item_currency = create_item_combobox(_L("Units"), page, _L("Units"), "use_inches", Units); - auto item_single_instance = create_item_checkbox(_L("Allow only one OrcaSlicer instance"), page, +#ifdef _WIN32 + auto item_darkmode = create_item_darkmode(_L("Enable dark mode"), "", "dark_color_mode"); + g_sizer->Add(item_darkmode); +#endif + + auto item_single_instance = create_item_checkbox(_L("Allow only one OrcaSlicer instance"), #if __APPLE__ _L("On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances " "of same app from the command line. In such case this settings will allow only one instance."), #else _L("If this is enabled, when starting OrcaSlicer and another instance of the same OrcaSlicer is already running, that instance will be reactivated instead."), #endif - 50, "single_instance"); + "single_instance"); + g_sizer->Add(item_single_instance); - std::vector DefaultPage = {_L("Home"), _L("Prepare")}; - auto item_default_page = create_item_combobox(_L("Default Page"), page, _L("Set the page opened on startup."), "default_page", DefaultPage); + auto item_show_splash_scr = create_item_checkbox(_L("Show splash screen"), _L("Show the splash screen during startup."), "show_splash_screen"); + g_sizer->Add(item_show_splash_scr); - std::vector CameraNavStyle = {_L("Default"), _L("Touchpad")}; - auto item_camera_navigation_style = create_item_combobox(_L("Camera style"), page, _L("Select camera navigation style.\nDefault: LMB+move for rotation, RMB/MMB+move for panning.\nTouchpad: Alt+move for rotation, Shift+move for panning."), "camera_navigation_style", CameraNavStyle); + //auto item_hints = create_item_checkbox(_L("Show \"Daily Tips\" after start"), page, _L("If enabled, useful hints are displayed at startup."), "show_daily_tips"); + //g_sizer->Add(item_hints); - auto item_mouse_zoom_settings = create_item_checkbox(_L("Zoom to mouse position"), page, _L("Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center."), 50, "zoom_to_mouse"); - auto item_use_free_camera_settings = create_item_checkbox(_L("Use free camera"), page, _L("If enabled, use free camera. If not enabled, use constrained camera."), 50, "use_free_camera"); - auto swap_pan_rotate = create_item_checkbox(_L("Swap pan and rotate mouse buttons"), page, _L("If enabled, swaps the left and right mouse buttons pan and rotate functions."), 50, "swap_mouse_buttons"); - auto reverse_mouse_zoom = create_item_checkbox(_L("Reverse mouse zoom"), page, _L("If enabled, reverses the direction of zoom with mouse wheel."), 50, "reverse_mouse_wheel_zoom"); - auto camera_orbit_mult = create_camera_orbit_mult_input(_L("Orbit speed multiplier"), page, _L("Multiplies the orbit speed for finer or coarser camera movement.")); + auto item_downloads = create_item_downloads(_L("Downloads folder") + ": ", _L("Target folder for downloaded items")); + g_sizer->Add(item_downloads); - auto item_show_splash_screen = create_item_checkbox(_L("Show splash screen"), page, _L("Show the splash screen during startup."), 50, "show_splash_screen"); - auto item_hints = create_item_checkbox(_L("Show \"Tip of the day\" notification after start"), page, _L("If enabled, useful hints are displayed at startup."), 50, "show_hints"); - - auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time the color changed."), page, _L("If enabled, auto-calculate every time the color changed."), 50, "auto_calculate"); - auto item_calc_in_long_retract = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time when the filament is changed."), page, _L("If enabled, auto-calculate every time when filament is changed"), 50, "auto_calculate_when_filament_change"); - auto item_remember_printer_config = create_item_checkbox(_L("Remember printer configuration"), page, _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), 50, "remember_printer_config"); - auto item_step_mesh_setting = create_item_checkbox(_L("Show the step mesh parameter setting dialog."), page, _L("If enabled,a parameter settings dialog will appear during STEP file import."), 50, "enable_step_mesh_setting"); - auto item_multi_machine = create_item_checkbox(_L("Multi-device Management (Take effect after restarting Orca Slicer)."), page, _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), 50, "enable_multi_machine"); - auto item_auto_arrange = create_item_checkbox(_L("Auto arrange plate after cloning"), page, _L("Auto arrange plate after object cloning"), 50, "auto_arrange"); - auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); - auto title_network = create_item_title(_L("Network"), page, _L("Network")); - auto item_user_sync = create_item_checkbox(_L("Auto sync user presets (Printer/Filament/Process)"), page, _L("User Sync"), 50, "sync_user_preset"); - auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), page, _L("System Sync"), 50, "sync_system_preset"); - auto item_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, L"", _L("Clear my choice on the unsaved presets."), []() { - wxGetApp().app_config->set("save_preset_choise", ""); - }); - -#ifdef _WIN32 - auto title_associate_file = create_item_title(_L("Associate files to OrcaSlicer"), page, _L("Associate files to OrcaSlicer")); - - // associate file - auto item_associate_3mf = create_item_checkbox(_L("Associate .3mf files to OrcaSlicer"), page, - _L("If enabled, sets OrcaSlicer as default application to open .3mf files"), 50, "associate_3mf"); - auto item_associate_stl = create_item_checkbox(_L("Associate .stl files to OrcaSlicer"), page, - _L("If enabled, sets OrcaSlicer as default application to open .stl files"), 50, "associate_stl"); - auto item_associate_step = create_item_checkbox(_L("Associate .step/.stp files to OrcaSlicer"), page, - _L("If enabled, sets OrcaSlicer as default application to open .step files"), 50, "associate_step"); - - auto title_associate_url = create_item_title(_L("Associate web links to OrcaSlicer"), page, _L("Associate URLs to OrcaSlicer")); - - auto associate_url_prusaslicer = create_item_link_association(page, L"prusaslicer", "Printables.com"); - auto associate_url_bambustudio = create_item_link_association(page, L"bambustudio", "Makerworld.com"); - auto associate_url_cura = create_item_link_association(page, L"cura", "Thingiverse.com"); -#endif // _WIN32 - - // auto title_modelmall = create_item_title(_L("Online Models"), page, _L("Online Models")); - // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); - // auto item_modelmall = create_item_checkbox(_L("Show online staff-picked models on the home page"), page, _L("Show online staff-picked models on the home page"), 50, "staff_pick_switch"); - - auto title_project = create_item_title(_L("Project"), page, ""); + //// GENERAL > Project + g_sizer->Add(create_item_title(_L("Project")), 1, wxEXPAND); std::vector projectLoadSettingsBehaviourOptions = {_L("Load All"), _L("Ask When Relevant"), _L("Always Ask"), _L("Load Geometry Only")}; - std::vector projectLoadSettingsConfigOptions = { OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL, OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT, OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY }; - auto item_project_load_behaviour = create_item_combobox(_L("Load Behaviour"), page, _L("Should printer/filament/process settings be loaded when opening a .3mf?"), SETTING_PROJECT_LOAD_BEHAVIOUR, projectLoadSettingsBehaviourOptions, projectLoadSettingsConfigOptions); + std::vector projectLoadSettingsConfigOptions = { OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL, OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT, OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY }; + auto item_project_load = create_item_combobox(_L("Load behaviour"), _L("Should printer/filament/process settings be loaded when opening a .3mf?"), SETTING_PROJECT_LOAD_BEHAVIOUR, projectLoadSettingsBehaviourOptions, projectLoadSettingsConfigOptions); + g_sizer->Add(item_project_load); - auto item_max_recent_count = create_item_input(_L("Maximum recent files"), "", page, _L("Maximum count of recent files"), "max_recent_count", [](wxString value) { + auto item_max_recent_count = create_item_input(_L("Maximum recent files"), "", _L("Maximum count of recent files"), "max_recent_count", [](wxString value) { long max = 0; if (value.ToLong(&max)) wxGetApp().mainframe->set_max_recent_count(max); }); + g_sizer->Add(item_max_recent_count); - auto item_recent_models = create_item_checkbox(_L("Add model files (stl/step) to recent file list."), page, _L("Add model files (stl/step) to recent file list."), 50, "recent_models"); + auto item_recent_models = create_item_checkbox(_L("Add STL/STEP files to recent files list"), "", "recent_models"); + g_sizer->Add(item_recent_models); - auto item_save_choise = create_item_button(_L("Clear my choice on the unsaved projects."), _L("Clear"), page, L"", _L("Clear my choice on the unsaved projects."), []() { + auto item_gcodes_warning = create_item_checkbox(_L("Don't warn when loading 3MF with modified G-code"), "", "no_warn_when_modified_gcodes"); + g_sizer->Add(item_gcodes_warning); + + auto item_step_dialog = create_item_checkbox(_L("Show options when importing STEP file"), _L("If enabled,a parameter settings dialog will appear during STEP file import."), "enable_step_mesh_setting"); + g_sizer->Add(item_step_dialog); + + auto item_backup = create_item_backup(_L("Auto backup"), _L("Backup your project periodically for restoring from the occasional crash.")); + g_sizer->Add(item_backup); + + //// GENERAL > Preset + g_sizer->Add(create_item_title(_L("Preset")), 1, wxEXPAND); + + auto item_remember_printer = create_item_checkbox(_L("Remember printer configuration"), _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), "remember_printer_config"); + g_sizer->Add(item_remember_printer); + + //// GENERAL > Features + g_sizer->Add(create_item_title(_L("Features")), 1, wxEXPAND); + + auto item_multi_machine = create_item_checkbox(_L("Multi device management"), _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), "enable_multi_machine", _L("(Requires restart)")); + g_sizer->Add(item_multi_machine); + + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); + + ////////////////////////// + //// CONTROL TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("Control")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); + + //// CONTROL > Behaviour + g_sizer->Add(create_item_title(_L("Behaviour")), 1, wxEXPAND); + + auto item_auto_flush = create_item_autoflush(_L("Auto flush after changing ..."), _L("Auto calculate flushing volumes when selected values changed")); + g_sizer->Add(item_auto_flush); + + auto item_auto_arrange = create_item_checkbox(_L("Auto arrange plate after cloning"), "", "auto_arrange"); + g_sizer->Add(item_auto_arrange); + + //// CONTROL > Camera + g_sizer->Add(create_item_title(_L("Camera")), 1, wxEXPAND); + + std::vector CameraNavStyle = {_L("Default"), _L("Touchpad")}; + auto item_camera_nav_style = create_item_combobox(_L("Camera style"), _L("Select camera navigation style.\nDefault: LMB+move for rotation, RMB/MMB+move for panning.\nTouchpad: Alt+move for rotation, Shift+move for panning."), "camera_navigation_style", CameraNavStyle); + g_sizer->Add(item_camera_nav_style); + + auto camera_orbit_mult = create_camera_orbit_mult_input(_L("Orbit speed multiplier"), _L("Multiplies the orbit speed for finer or coarser camera movement.")); + g_sizer->Add(camera_orbit_mult); + + auto item_zoom_to_mouse = create_item_checkbox(_L("Zoom to mouse position"), _L("Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center."), "zoom_to_mouse"); + g_sizer->Add(item_zoom_to_mouse); + + auto item_use_free_camera = create_item_checkbox(_L("Use free camera"), _L("If enabled, use free camera. If not enabled, use constrained camera."), "use_free_camera"); + g_sizer->Add(item_use_free_camera); + + auto swap_pan_rotate = create_item_checkbox(_L("Swap pan and rotate mouse buttons"), _L("If enabled, swaps the left and right mouse buttons pan and rotate functions."), "swap_mouse_buttons"); + g_sizer->Add(swap_pan_rotate); + + auto reverse_mouse_zoom = create_item_checkbox(_L("Reverse mouse zoom"), _L("If enabled, reverses the direction of zoom with mouse wheel."), "reverse_mouse_wheel_zoom"); + g_sizer->Add(reverse_mouse_zoom); + + //// CONTROL > Clear my choice on ... + g_sizer->Add(create_item_title(_L("Clear my choice on ...")), 1, wxEXPAND); + + auto item_save_choise = create_item_button(_L("Unsaved projects"), _L("Clear"), "", _L("Clear my choice on the unsaved projects."), []() { wxGetApp().app_config->set("save_project_choise", ""); }); - // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); - auto item_gcodes_warning = create_item_checkbox(_L("No warnings when loading 3MF with modified G-code"), page, _L("No warnings when loading 3MF with modified G-code"), 50, "no_warn_when_modified_gcodes"); - auto item_backup = create_item_checkbox(_L("Auto-Backup"), page,_L("Backup your project periodically for restoring from the occasional crash."), 50, "backup_switch"); - auto item_backup_interval = create_item_backup_input(_L("every"), page, _L("The period of backup in seconds."), "backup_interval"); + g_sizer->Add(item_save_choise); - //downloads - auto title_downloads = create_item_title(_L("Downloads"), page, _L("Downloads")); - auto item_downloads = create_item_downloads(page,50,"download_path"); + auto item_save_presets = create_item_button(_L("Unsaved presets"), _L("Clear"), "", _L("Clear my choice on the unsaved presets."), []() { + wxGetApp().app_config->set("save_preset_choise", ""); + }); + g_sizer->Add(item_save_presets); - //dark mode + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); + + ////////////////////////// + //// ONLINE TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("Online")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); + + //// ONLINE > Connection + g_sizer->Add(create_item_title(_L("Connection")), 1, wxEXPAND); + + auto item_region = create_item_region_combobox(_L("Login region"), ""); + g_sizer->Add(item_region); + + auto item_stealth_mode = create_item_checkbox(_L("Stealth mode"), _L("This stops the transmission of data to Bambu's cloud services. Users who don't use BBL machines or use LAN mode only can safely turn on this function."), "stealth_mode"); + g_sizer->Add(item_stealth_mode); + + auto item_network_test = create_item_button(_L("Network test"), _L("Test") + " " + dots, "", _L("Open Network Test"), []() { + NetworkTestDialog dlg(wxGetApp().mainframe); + dlg.ShowModal(); + }); + g_sizer->Add(item_network_test); + + //// ONLINE > Update & sync + g_sizer->Add(create_item_title(_L("Update & sync")), 1, wxEXPAND); + + auto item_stable_updates = create_item_checkbox(_L("Check for stable updates only"), "", "check_stable_update_only"); + g_sizer->Add(item_stable_updates); + + auto item_user_sync = create_item_checkbox(_L("Auto sync user presets (Printer/Filament/Process)"), "", "sync_user_preset"); + g_sizer->Add(item_user_sync); + + auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), "", "sync_system_preset"); + g_sizer->Add(item_system_sync); + + //// ONLINE > Network plugin + g_sizer->Add(create_item_title(_L("Network plugin")), 1, wxEXPAND); + + auto item_enable_plugin = create_item_checkbox(_L("Enable network plugin"), "", "installed_networking"); + g_sizer->Add(item_enable_plugin); + + auto item_legacy_network = create_item_checkbox(_L("Use legacy network plugin"), _L("Disable to use latest network plugin that supports new BambuLab firmwares."), "legacy_networking", _L("(Requires restart)")); + g_sizer->Add(item_legacy_network); + + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); + + ////////////////////////// + //// ASSOCIATE TAB + ///////////////////////////////////// #ifdef _WIN32 - auto title_darkmode = create_item_title(_L("Dark Mode"), page, _L("Dark Mode")); - auto item_darkmode = create_item_darkmode_checkbox(_L("Enable Dark mode"), page,_L("Enable Dark mode"), 50, "dark_color_mode"); -#endif + m_pref_tabs->AppendItem(_L("Associate")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); - auto title_develop_mode = create_item_title(_L("Develop mode"), page, _L("Develop mode")); - auto item_develop_mode = create_item_checkbox(_L("Develop mode"), page, _L("Develop mode"), 50, "developer_mode"); - auto item_skip_ams_blacklist_check = create_item_checkbox(_L("Skip AMS blacklist check"), page, _L("Skip AMS blacklist check"), 50, "skip_ams_blacklist_check"); + //// ASSOCIATE > Extensions + g_sizer->Add(create_item_title(_L("Associate files to OrcaSlicer")), 1, wxEXPAND); - sizer_page->Add(title_general_settings, 0, wxEXPAND, 0); - sizer_page->Add(item_language, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_region, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_currency, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_default_page, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_camera_navigation_style, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_single_instance, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_mouse_zoom_settings, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_use_free_camera_settings, 0, wxTOP, FromDIP(3)); - sizer_page->Add(swap_pan_rotate, 0, wxTOP, FromDIP(3)); - sizer_page->Add(reverse_mouse_zoom, 0, wxTOP, FromDIP(3)); - sizer_page->Add(camera_orbit_mult, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_show_splash_screen, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_calc_in_long_retract, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_multi_machine, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_step_mesh_setting, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_auto_arrange, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_system_sync, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_remember_printer_config, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_save_presets, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_network, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_check_stable_version_only, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_stealth_mode, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_enable_plugin, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_legacy_network_plugin, 0, wxTOP, FromDIP(3)); -#ifdef _WIN32 - sizer_page->Add(title_associate_file, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(item_associate_3mf, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_associate_stl, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_associate_step, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_associate_url, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(associate_url_prusaslicer, 0, wxTOP, FromDIP(3)); - sizer_page->Add(associate_url_bambustudio, 0, wxTOP, FromDIP(3)); - sizer_page->Add(associate_url_cura, 0, wxTOP, FromDIP(3)); + auto item_associate_3mf = create_item_checkbox(_L("Associate .3mf files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open .3mf files") , "associate_3mf"); + g_sizer->Add(item_associate_3mf); + + auto item_associate_stl = create_item_checkbox(_L("Associate .stl files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open .stl files") , "associate_stl"); + g_sizer->Add(item_associate_stl); + + auto item_associate_step = create_item_checkbox(_L("Associate .step/.stp files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open .step files"), "associate_step"); + g_sizer->Add(item_associate_step); + + //// ASSOCIATE > WebLinks + g_sizer->Add(create_item_title(_L("Associate web links to OrcaSlicer")), 1, wxEXPAND); + + auto associate_url_prusa = create_item_link_association(L"prusaslicer", "Printables.com"); + g_sizer->Add(associate_url_prusa); + + auto associate_url_bambu = create_item_link_association(L"bambustudio", "Makerworld.com"); + g_sizer->Add(associate_url_bambu); + + auto associate_url_cura = create_item_link_association(L"cura", "Thingiverse.com"); + g_sizer->Add(associate_url_cura); + + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); #endif // _WIN32 - // auto item_title_modelmall = sizer_page->Add(title_modelmall, 0, wxTOP | wxEXPAND, FromDIP(20)); - // auto item_item_modelmall = sizer_page->Add(item_modelmall, 0, wxTOP, FromDIP(3)); - // auto update_modelmall = [this, item_title_modelmall, item_item_modelmall] (wxEvent & e) { - // bool has_model_mall = wxGetApp().has_model_mall(); - // item_title_modelmall->Show(has_model_mall); - // item_item_modelmall->Show(has_model_mall); - // Layout(); - // Fit(); - // }; - // wxCommandEvent eee(wxEVT_COMBOBOX); - // update_modelmall(eee); - // item_region->GetItem(size_t(2))->GetWindow()->Bind(wxEVT_COMBOBOX, update_modelmall); - sizer_page->Add(title_project, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(item_project_load_behaviour, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_max_recent_count, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_recent_models, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_save_choise, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_gcodes_warning, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_backup, 0, wxTOP,FromDIP(3)); - item_backup->Add(item_backup_interval, 0, wxLEFT, 0); - sizer_page->Add(title_downloads, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(item_downloads, 0, wxEXPAND, FromDIP(3)); + ////////////////////////// + //// DEVELOPER TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("Developer")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); -#ifdef _WIN32 - sizer_page->Add(title_darkmode, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_darkmode, 0, wxEXPAND, FromDIP(3)); + //// DEVELOPER > Settings + g_sizer->Add(create_item_title(_L("Settings")), 1, wxEXPAND); + + auto item_develop_mode = create_item_checkbox(_L("Develop mode"), "", "developer_mode"); + g_sizer->Add(item_develop_mode); + + auto item_ams_blacklist = create_item_checkbox(_L("Skip AMS blacklist check"), "", "skip_ams_blacklist_check"); + g_sizer->Add(item_ams_blacklist); + + g_sizer->Add(create_item_title(_L("Log Level")), 1, wxEXPAND); + auto log_level_list = std::vector{_L("fatal"), _L("error"), _L("warning"), _L("info"), _L("debug"), _L("trace")}; + auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), _L("Log Level"), log_level_list); + g_sizer->Add(loglevel_combox); + + //// DEVELOPER > Debug +#if !BBL_RELEASE_TO_PUBLIC + g_sizer->Add(create_item_title(_L("Debug")), 1, wxEXPAND); + auto debug_page = create_debug_page(); + g_sizer->Add(debug_page, 1, wxEXPAND); #endif - sizer_page->Add(title_develop_mode, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_develop_mode, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_skip_ams_blacklist_check, 0, wxTOP, FromDIP(3)); + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); - page->SetSizer(sizer_page); - page->Layout(); - sizer_page->Fit(page); - return page; -} + ///////////////////////////////////// + ////////////////////////// -void PreferencesDialog::create_gui_page() -{ - auto page = new wxWindow(this, wxID_ANY); - wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); + g_sizer = nullptr; - auto title_index_and_tip = create_item_title(_L("Home page and daily tips"), page, _L("Home page and daily tips")); - auto item_home_page = create_item_checkbox(_L("Show home page on startup"), page, _L("Show home page on startup"), 50, "show_home_page"); - //auto item_daily_tip = create_item_checkbox(_L("Show daily tip on startup"), page, _L("Show daily tip on startup"), 50, "show_daily_tips"); + // Hide all tabs instead first one + for (size_t i = 1; i < f_sizers.size(); ++i) + f_sizers[i]->Show(false); - sizer_page->Add(title_index_and_tip, 0, wxTOP, 26); - sizer_page->Add(item_home_page, 0, wxTOP, 6); - //sizer_page->Add(item_daily_tip, 0, wxTOP, 6); + ///////////////////////////////////// + ////////////////////////// - page->SetSizer(sizer_page); - page->Layout(); - sizer_page->Fit(page); + m_parent->SetSizer(sizer_page); + m_parent->Layout(); + sizer_page->Fit(m_parent); } void PreferencesDialog::create_sync_page() @@ -1380,10 +1441,10 @@ void PreferencesDialog::create_sync_page() auto page = new wxWindow(this, wxID_ANY); wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); - auto title_sync_settingy = create_item_title(_L("Sync settings"), page, _L("Sync settings")); - auto item_user_sync = create_item_checkbox(_L("User sync"), page, _L("User sync"), 50, "user_sync_switch"); - auto item_preset_sync = create_item_checkbox(_L("Preset sync"), page, _L("Preset sync"), 50, "preset_sync_switch"); - auto item_preferences_sync = create_item_checkbox(_L("Preferences sync"), page, _L("Preferences sync"), 50, "preferences_sync_switch"); + auto title_sync_settingy = create_item_title(_L("Sync settings")); + auto item_user_sync = create_item_checkbox(_L("User sync"), _L("User sync"), "user_sync_switch"); + auto item_preset_sync = create_item_checkbox(_L("Preset sync"), _L("Preset sync"), "preset_sync_switch"); + auto item_preferences_sync = create_item_checkbox(_L("Preferences sync"), _L("Preferences sync"), "preferences_sync_switch"); sizer_page->Add(title_sync_settingy, 0, wxTOP, 26); sizer_page->Add(item_user_sync, 0, wxTOP, 6); @@ -1400,20 +1461,20 @@ void PreferencesDialog::create_shortcuts_page() auto page = new wxWindow(this, wxID_ANY); wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); - auto title_view_control = create_item_title(_L("View control settings"), page, _L("View control settings")); + auto title_view_control = create_item_title(_L("View control settings")); std::vector keyboard_supported; Split(app_config->get("keyboard_supported"), "/", keyboard_supported); std::vector mouse_supported; Split(app_config->get("mouse_supported"), "/", mouse_supported); - auto item_rotate_view = create_item_multiple_combobox(_L("Rotate of view"), page, _L("Rotate of view"), 10, "rotate_view", keyboard_supported, + auto item_rotate_view = create_item_multiple_combobox(_L("Rotate of view"), _L("Rotate of view"), "rotate_view", keyboard_supported, mouse_supported); - auto item_move_view = create_item_multiple_combobox(_L("Move of view"), page, _L("Move of view"), 10, "move_view", keyboard_supported, mouse_supported); - auto item_zoom_view = create_item_multiple_combobox(_L("Zoom of view"), page, _L("Zoom of view"), 10, "rotate_view", keyboard_supported, mouse_supported); + auto item_move_view = create_item_multiple_combobox(_L("Move of view"), _L("Move of view"), "move_view", keyboard_supported, mouse_supported); + auto item_zoom_view = create_item_multiple_combobox(_L("Zoom of view"), _L("Zoom of view"), "rotate_view", keyboard_supported, mouse_supported); - auto title_other = create_item_title(_L("Other"), page, _L("Other")); - auto item_other = create_item_checkbox(_L("Mouse wheel reverses when zooming"), page, _L("Mouse wheel reverses when zooming"), 50, "mouse_wheel"); + auto title_other = create_item_title(_L("Other")); + auto item_other = create_item_checkbox(_L("Mouse wheel reverses when zooming"), _L("Mouse wheel reverses when zooming"), "mouse_wheel"); sizer_page->Add(title_view_control, 0, wxTOP, 26); sizer_page->Add(item_rotate_view, 0, wxTOP, 8); @@ -1428,52 +1489,46 @@ void PreferencesDialog::create_shortcuts_page() sizer_page->Fit(page); } -wxWindow* PreferencesDialog::create_debug_page() +wxBoxSizer* PreferencesDialog::create_debug_page() { - auto page = new wxWindow(m_scrolledWindow, wxID_ANY); - page->SetBackgroundColour(*wxWHITE); - m_internal_developer_mode_def = app_config->get("internal_developer_mode"); m_backup_interval_def = app_config->get("backup_interval"); m_iot_environment_def = app_config->get("iot_environment"); wxBoxSizer *bSizer = new wxBoxSizer(wxVERTICAL); + auto enable_ssl_for_mqtt = create_item_checkbox(_L("Enable SSL(MQTT)"), _L("Enable SSL(MQTT)"), "enable_ssl_for_mqtt"); + auto enable_ssl_for_ftp = create_item_checkbox(_L("Enable SSL(FTP)"), _L("Enable SSL(MQTT)"), "enable_ssl_for_ftp"); + auto item_internal_developer = create_item_checkbox(_L("Internal developer mode"), _L("Internal developer mode"), "internal_developer_mode"); - auto enable_ssl_for_mqtt = create_item_checkbox(_L("Enable SSL(MQTT)"), page, _L("Enable SSL(MQTT)"), 50, "enable_ssl_for_mqtt"); - auto enable_ssl_for_ftp = create_item_checkbox(_L("Enable SSL(FTP)"), page, _L("Enable SSL(MQTT)"), 50, "enable_ssl_for_ftp"); - auto item_internal_developer = create_item_checkbox(_L("Internal developer mode"), page, _L("Internal developer mode"), 50, "internal_developer_mode"); + auto title_host = create_item_title(_L("Host Setting")); + // ORCA RadioGroup + auto radio_group = new RadioGroup(m_parent, { + _L("DEV host: api-dev.bambu-lab.com/v1"), // 0 + _L("QA host: api-qa.bambu-lab.com/v1"), // 1 + _L("PRE host: api-pre.bambu-lab.com/v1"), // 2 + _L("Product host") // 3 + }, wxVERTICAL); - auto title_log_level = create_item_title(_L("Log Level"), page, _L("Log Level")); - auto log_level_list = std::vector{_L("fatal"), _L("error"), _L("warning"), _L("info"), _L("debug"), _L("trace")}; - auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), page, _L("Log Level"), log_level_list); - - auto title_host = create_item_title(_L("Host Setting"), page, _L("Host Setting")); - auto radio1 = create_item_radiobox(_L("DEV host: api-dev.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "dev_host"); - auto radio2 = create_item_radiobox(_L("QA host: api-qa.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "qa_host"); - auto radio3 = create_item_radiobox(_L("PRE host: api-pre.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "pre_host"); - auto radio4 = create_item_radiobox(_L("Product host"), page, wxEmptyString, 50, 1, "product_host"); + radio_group->SetRadioTooltip(0, "dev_host"); + radio_group->SetRadioTooltip(1, "qa_host"); + radio_group->SetRadioTooltip(2, "pre_host"); + radio_group->SetRadioTooltip(3, "product_host"); if (m_iot_environment_def == ENV_DEV_HOST) { - on_select_radio("dev_host"); + radio_group->SetSelection(0); } else if (m_iot_environment_def == ENV_QAT_HOST) { - on_select_radio("qa_host"); + radio_group->SetSelection(1); } else if (m_iot_environment_def == ENV_PRE_HOST) { - on_select_radio("pre_host"); + radio_group->SetSelection(2); } else if (m_iot_environment_def == ENV_PRODUCT_HOST) { - on_select_radio("product_host"); + radio_group->SetSelection(3); } + Button* debug_button = new Button(m_parent, _L("debug save button")); + debug_button->SetStyle(ButtonStyle::Confirm, ButtonType::Window); - StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), - std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), - std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); - StateColor btn_bd_white(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - - Button* debug_button = new Button(page, _L("debug save button")); - debug_button->SetStyle(ButtonStyle::Regular, ButtonType::Window); - - debug_button->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + debug_button->Bind(wxEVT_LEFT_DOWN, [this, radio_group](wxMouseEvent &e) { // success message box MessageDialog dialog(this, _L("save debug settings"), _L("DEBUG settings have been saved successfully!"), wxNO_DEFAULT | wxYES_NO | wxICON_INFORMATION); dialog.SetSize(400,-1); @@ -1491,13 +1546,13 @@ wxWindow* PreferencesDialog::create_debug_page() if (m_backup_interval_def != m_backup_interval_time) { m_backup_interval_textinput->GetTextCtrl()->SetValue(m_backup_interval_def); } if (m_iot_environment_def == ENV_DEV_HOST) { - on_select_radio("dev_host"); + radio_group->SetSelection(0); } else if (m_iot_environment_def == ENV_QAT_HOST) { - on_select_radio("qa_host"); + radio_group->SetSelection(1); } else if (m_iot_environment_def == ENV_PRE_HOST) { - on_select_radio("pre_host"); + radio_group->SetSelection(2); } else if (m_iot_environment_def == ENV_PRODUCT_HOST) { - on_select_radio("product_host"); + radio_group->SetSelection(3); } break; @@ -1505,7 +1560,7 @@ wxWindow* PreferencesDialog::create_debug_page() case wxID_YES: { // bbs domain changed - auto param = get_select_radio(1); + auto param = radio_group->GetSelection(); std::map iot_environment_map; iot_environment_map["dev_host"] = ENV_DEV_HOST; @@ -1516,21 +1571,19 @@ wxWindow* PreferencesDialog::create_debug_page() //if (iot_environment_map[param] != m_iot_environment_def) { if (true) { NetworkAgent* agent = wxGetApp().getAgent(); - if (param == "dev_host") { + if (param == 0) { // "dev_host" app_config->set("iot_environment", ENV_DEV_HOST); } - else if (param == "qa_host") { + else if (param == 1) { // "qa_host" app_config->set("iot_environment", ENV_QAT_HOST); } - else if (param == "pre_host") { + else if (param == 2) { // "pre_host" app_config->set("iot_environment", ENV_PRE_HOST); } - else if (param == "product_host") { + else if (param == 3) { // "product_host" app_config->set("iot_environment", ENV_PRODUCT_HOST); } - - AppConfig* config = GUI::wxGetApp().app_config; std::string country_code = config->get_country_code(); if (agent) { @@ -1553,76 +1606,14 @@ wxWindow* PreferencesDialog::create_debug_page() } }); - bSizer->Add(enable_ssl_for_mqtt, 0, wxTOP, FromDIP(3)); bSizer->Add(enable_ssl_for_ftp, 0, wxTOP, FromDIP(3)); bSizer->Add(item_internal_developer, 0, wxTOP, FromDIP(3)); - bSizer->Add(title_log_level, 0, wxTOP| wxEXPAND, FromDIP(20)); - bSizer->Add(loglevel_combox, 0, wxTOP, FromDIP(3)); - bSizer->Add(title_host, 0, wxTOP| wxEXPAND, FromDIP(20)); - bSizer->Add(radio1, 0, wxEXPAND | wxTOP, FromDIP(3)); - bSizer->Add(radio2, 0, wxEXPAND | wxTOP, FromDIP(3)); - bSizer->Add(radio3, 0, wxEXPAND | wxTOP, FromDIP(3)); - bSizer->Add(radio4, 0, wxEXPAND | wxTOP, FromDIP(3)); + bSizer->Add(title_host, 0, wxEXPAND); + bSizer->Add(radio_group, 0, wxEXPAND | wxLEFT, FromDIP(DESIGN_LEFT_MARGIN)); bSizer->Add(debug_button, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(15)); - page->SetSizer(bSizer); - page->Layout(); - bSizer->Fit(page); - return page; + return bSizer; } -void PreferencesDialog::on_select_radio(std::string param) -{ - RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); - auto groupid = 0; - - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_param_name == param) groupid = rs->m_groupid; - it = it->GetNext(); - } - - it = m_radio_group.GetFirst(); - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_groupid == groupid && rs->m_param_name == param) rs->m_radiobox->SetValue(true); - if (rs->m_groupid == groupid && rs->m_param_name != param) rs->m_radiobox->SetValue(false); - it = it->GetNext(); - } -} - -wxString PreferencesDialog::get_select_radio(int groupid) -{ - RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_groupid == groupid && rs->m_radiobox->GetValue()) { return rs->m_param_name; } - it = it->GetNext(); - } - - return wxEmptyString; -} - -void PreferencesDialog::OnSelectRadio(wxMouseEvent &event) -{ - RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); - auto groupid = 0; - - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_radiobox->GetId() == event.GetId()) groupid = rs->m_groupid; - it = it->GetNext(); - } - - it = m_radio_group.GetFirst(); - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_groupid == groupid && rs->m_radiobox->GetId() == event.GetId()) rs->m_radiobox->SetValue(true); - if (rs->m_groupid == groupid && rs->m_radiobox->GetId() != event.GetId()) rs->m_radiobox->SetValue(false); - it = it->GetNext(); - } -} - - }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index e65ae52d35..9be0d9d656 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -4,7 +4,6 @@ #include "GUI.hpp" #include "GUI_Utils.hpp" -#include #include #include #include @@ -13,48 +12,23 @@ #include "Widgets/ComboBox.hpp" #include "Widgets/CheckBox.hpp" #include "Widgets/TextInput.hpp" +#include "Widgets/TabCtrl.hpp" namespace Slic3r { namespace GUI { +#define DESIGN_GRAY900_COLOR wxColour("#363636") // Label color +#define DESIGN_GRAY600_COLOR wxColour("#ACACAC") // Dimmed text color -#define DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) -#define DESIGN_GRAY900_COLOR wxColour(38, 46, 48) -#define DESIGN_GRAY800_COLOR wxColour(50, 58, 61) -#define DESIGN_GRAY600_COLOR wxColour(144, 144, 144) -#define DESIGN_GRAY400_COLOR wxColour(166, 169, 170) +#define DESIGN_WINDOW_SIZE wxSize(FromDIP(640), FromDIP(640)) +#define DESIGN_TITLE_SIZE wxSize(FromDIP(280), -1) +#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(120), -1) +#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(120), -1) +#define DESIGN_INPUT_SIZE wxSize(FromDIP(120), -1) +#define DESIGN_LEFT_MARGIN 25 -class Selector -{ -public: - int m_index; - wxWindow *m_tab_button; - wxWindow *m_tab_text; -}; -WX_DECLARE_HASH_MAP(int, Selector *, wxIntegerHash, wxIntegerEqual, SelectorHash); - -class RadioBox; -class RadioSelector -{ -public: - wxString m_param_name; - int m_groupid; - RadioBox *m_radiobox; - bool m_selected = false; -}; - -WX_DECLARE_LIST(RadioSelector, RadioSelectorList); class CheckBox; class TextInput; - - -#define DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) -#define DESIGN_TITLE_SIZE wxSize(FromDIP(100), -1) -#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) -#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) -#define DESIGN_INPUT_SIZE wxSize(FromDIP(100), -1) - - class PreferencesDialog : public DPIDialog { private: @@ -62,7 +36,8 @@ private: protected: wxBoxSizer * m_sizer_body; - wxScrolledWindow* m_scrolledWindow; + wxScrolledWindow* m_parent; + TabCtrl* m_pref_tabs; // bool m_settings_layout_changed {false}; bool m_seq_top_layer_only_changed{false}; @@ -86,7 +61,6 @@ public: wxString m_backup_interval_time; void create(); - wxWindow *create_tab_button(int id, wxString text); // debug mode ::CheckBox * m_developer_mode_ckeckbox = {nullptr}; @@ -100,56 +74,43 @@ public: wxString m_backup_interval_def; wxString m_iot_environment_def; - SelectorHash m_hash_selector; - RadioSelectorList m_radio_group; - // ComboBoxSelectorList m_comxbo_group; + std::vector f_sizers; - wxBoxSizer *create_item_title(wxString title, wxWindow *parent, wxString tooltip); - wxBoxSizer *create_item_combobox(wxString title, wxWindow *parent, wxString tooltip, std::string param, std::vector vlist); - wxBoxSizer *create_item_combobox(wxString title, wxWindow *parent, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index); - wxBoxSizer *create_item_region_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist); - wxBoxSizer *create_item_language_combobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param, std::vector vlist); - wxBoxSizer *create_item_loglevel_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist); - wxBoxSizer *create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); - wxBoxSizer *create_item_darkmode_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); + wxBoxSizer *create_item_title(wxString title); + wxBoxSizer *create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist); + wxBoxSizer *create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index); + wxBoxSizer *create_item_region_combobox(wxString title, wxString tooltip); + wxBoxSizer *create_item_language_combobox(wxString title, wxString tooltip); + wxBoxSizer *create_item_autoflush(wxString title, wxString tooltip); + wxBoxSizer *create_item_loglevel_combobox(wxString title, wxString tooltip, std::vector vlist); + wxBoxSizer *create_item_checkbox(wxString title, wxString tooltip, std::string param, const wxString secondary_title = ""); + wxBoxSizer *create_item_darkmode(wxString title,wxString tooltip, std::string param); void set_dark_mode(); - wxBoxSizer *create_item_button(wxString title, wxString title2, wxWindow *parent, wxString tooltip, wxString tooltip2, std::function onclick, bool button_on_left = false); - wxWindow* create_item_downloads(wxWindow* parent, int padding_left, std::string param); - wxBoxSizer *create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange = {}); - wxBoxSizer *create_camera_orbit_mult_input(wxString title, wxWindow *parent, wxString tooltip); - wxBoxSizer *create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param); - wxBoxSizer *create_item_multiple_combobox( - wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string parama, std::vector vlista, std::vector vlistb); - wxBoxSizer *create_item_switch(wxString title, wxWindow *parent, wxString tooltip, std::string param); - wxWindow * create_item_radiobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, int groupid, std::string param); + wxBoxSizer *create_item_button(wxString title, wxString title2, wxString tooltip, wxString tooltip2, std::function onclick); + wxBoxSizer *create_item_downloads(wxString title, wxString tooltip); + wxBoxSizer *create_item_input(wxString title, wxString title2, wxString tooltip, std::string param, std::function onchange = {}); + wxBoxSizer *create_camera_orbit_mult_input(wxString title, wxString tooltip); + wxBoxSizer *create_item_backup(wxString title, wxString tooltip); + wxBoxSizer *create_item_multiple_combobox(wxString title, wxString tooltip, std::string parama, std::vector vlista, std::vector vlistb); #ifdef WIN32 - wxBoxSizer* create_item_link_association(wxWindow* parent, wxString url_prefix, wxString website_name); + wxBoxSizer *create_item_link_association(wxString url_prefix, wxString website_name); #endif // WIN32 - wxWindow* create_general_page(); - void create_gui_page(); + void create_items(); void create_sync_page(); void create_shortcuts_page(); - wxWindow* create_debug_page(); + wxBoxSizer* create_debug_page(); - void on_select_radio(std::string param); - wxString get_select_radio(int groupid); // BBS void create_select_domain_widget(); void Split(const std::string &src, const std::string &separator, std::vector &dest); int m_current_language_selected = {0}; -protected: - void OnSelectTabel(wxCommandEvent &event); - void OnSelectRadio(wxMouseEvent &event); - private: - std::tuple create_item_combobox_base(wxString title, wxWindow* parent, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index); + std::tuple create_item_combobox_base(wxString title, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index); }; -wxDECLARE_EVENT(EVT_PREFERENCES_SELECT_TAB, wxCommandEvent); - }} // namespace Slic3r::GUI #endif /* slic3r_Preferences_hpp_ */ diff --git a/src/slic3r/GUI/SceneRaycaster.cpp b/src/slic3r/GUI/SceneRaycaster.cpp index 08c3407632..64a091211b 100644 --- a/src/slic3r/GUI/SceneRaycaster.cpp +++ b/src/slic3r/GUI/SceneRaycaster.cpp @@ -9,6 +9,9 @@ namespace Slic3r { namespace GUI { +// EIdBase::Volume must be greater than PartPlateList::MAX_PLATES_COUNT * PartPlate::GRABBER_COUNT +static_assert((int) SceneRaycaster::EIdBase::Volume > PartPlateList::MAX_PLATES_COUNT * PartPlate::GRABBER_COUNT, "EIdBase::Volume too small"); + SceneRaycaster::SceneRaycaster() { #if ENABLE_RAYCAST_PICKING_DEBUG // hit point diff --git a/src/slic3r/GUI/SceneRaycaster.hpp b/src/slic3r/GUI/SceneRaycaster.hpp index 3d4473197c..99152712dd 100644 --- a/src/slic3r/GUI/SceneRaycaster.hpp +++ b/src/slic3r/GUI/SceneRaycaster.hpp @@ -52,7 +52,7 @@ public: enum class EIdBase { Bed = 0, - Volume = 1000, // Must be smaller than PartPlateList::MAX_PLATES_COUNT * PartPlate::GRABBER_COUNT + Volume = 1000, // Must be greater than PartPlateList::MAX_PLATES_COUNT * PartPlate::GRABBER_COUNT Gizmo = 1000000, FallbackGizmo = 2000000 }; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 242f9658b0..57769a37cb 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2163,7 +2163,7 @@ void TabPrint::build() optgroup->append_single_option_line("ironing_flow", "quality_settings_ironing#flow"); optgroup->append_single_option_line("ironing_spacing", "quality_settings_ironing#line-spacing"); optgroup->append_single_option_line("ironing_inset", "quality_settings_ironing#inset"); - optgroup->append_single_option_line("ironing_angle", "quality_settings_ironing#angle"); + optgroup->append_single_option_line("ironing_angle", "quality_settings_ironing#angle-offset"); optgroup = page->new_optgroup(L("Wall generator"), L"param_wall_generator"); optgroup->append_single_option_line("wall_generator", "quality_settings_wall_generator"); @@ -2183,6 +2183,16 @@ void TabPrint::build() optgroup->append_single_option_line("print_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("top_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("bottom_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("set_other_flow_ratios", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("first_layer_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("outer_wall_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("inner_wall_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("overhang_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("sparse_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("internal_solid_infill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("gap_fill_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("support_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); + optgroup->append_single_option_line("support_interface_flow_ratio", "quality_settings_wall_and_surfaces#surface-flow-ratio"); optgroup->append_single_option_line("only_one_wall_top", "quality_settings_wall_and_surfaces#only-one-wall"); optgroup->append_single_option_line("min_width_top_surface", "quality_settings_wall_and_surfaces#threshold"); optgroup->append_single_option_line("only_one_wall_first_layer", "quality_settings_wall_and_surfaces#only-one-wall"); diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index e36073ea45..91853d3457 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -6,6 +6,8 @@ #include "MainFrame.hpp" #include "Widgets/DialogButtons.hpp" #include +#include +#include "libslic3r/PrintConfig.hpp" namespace Slic3r { namespace GUI { @@ -28,6 +30,39 @@ int GetTextMax(wxWindow* parent, const std::vector& labels) return text_size.x + parent->FromDIP(10); } +std::vector get_shaper_type_values() +{ + if (auto* preset_bundle = wxGetApp().preset_bundle) { + auto printer_config = &preset_bundle->printers.get_edited_preset().config; + if (auto* gcode_flavor_option = printer_config->option>("gcode_flavor")) { + switch (gcode_flavor_option->value) { + case GCodeFlavor::gcfKlipper: + return {"Default", "ZV", "MZV", "ZVD", "EI", "2HUMP_EI", "3HUMP_EI"}; + case GCodeFlavor::gcfRepRapFirmware: + return {"Default", "MZV", "ZVD", "ZVDD", "ZVDDD", "EI2", "EI3", "DAA"}; + case GCodeFlavor::gcfMarlinFirmware: + return {"ZV"}; + default: + break; + } + } + } + return {"Default"}; +} + +std::vector make_shaper_type_labels() +{ + auto values = get_shaper_type_values(); + if (values.empty()) + values.emplace_back(""); + + std::vector labels; + labels.reserve(values.size()); + for (const auto& label : values) + labels.emplace_back(wxString::FromUTF8(label.c_str())); + return labels; +} + } PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) @@ -761,6 +796,12 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin SetForegroundColour(wxColour("#363636")); SetFont(Label::Body_14); + const auto* preset_bundle = wxGetApp().preset_bundle; + const auto* gcode_flavor_option = (preset_bundle != nullptr) + ? preset_bundle->printers.get_edited_preset().config.option>("gcode_flavor") + : nullptr; + const bool reprap_firmware = gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfRepRapFirmware; + wxBoxSizer* v_sizer = new wxBoxSizer(wxVERTICAL); SetSizer(v_sizer); @@ -772,8 +813,41 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin model_box->Add(m_rbModel, 0, wxALL | wxEXPAND, FromDIP(4)); v_sizer->Add(model_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); + // Input shaper type selection + auto labeled_box_type = new LabeledStaticBox(this, _L("Input shaper type")); + auto type_box = new wxStaticBoxSizer(labeled_box_type, wxVERTICAL); + auto type_labels = make_shaper_type_labels(); + m_rbType = new RadioGroup(this, type_labels, wxVERTICAL, 3); + type_box->Add(m_rbType, 0, wxALL | wxEXPAND, FromDIP(4)); + m_rbType->SetSelection(0); + + // Determine firmware-specific note + wxString firmware_note = "Please ensure the selected type is compatible with your firmware version."; + if (gcode_flavor_option) { + switch (gcode_flavor_option->value) { + case GCodeFlavor::gcfMarlinFirmware: + case GCodeFlavor::gcfMarlinLegacy: + firmware_note = "Marlin version => 2.1.2\nFixed-Time motion not yet implemented."; + break; + case GCodeFlavor::gcfKlipper: + firmware_note = "Klipper version => 0.9.0"; + break; + case GCodeFlavor::gcfRepRapFirmware: + firmware_note = "RepRap firmware version => 3.4.0\nCheck your firmware documentation for supported shaper types."; + break; + default: + break; + } + } + + auto type_note = new wxStaticText(this, wxID_ANY, firmware_note, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + type_note->SetForegroundColour(wxColour(128, 128, 128)); + type_box->Add(type_note, 0, wxALL, FromDIP(5)); + + v_sizer->Add(type_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); + // Settings - wxString x_axis_str = "X " + _L("Start / End") + ": "; + wxString x_axis_str = reprap_firmware ? _L("Frequency (Start / End): ") : "X " + _L("Start / End") + ": "; wxString y_axis_str = "Y " + _L("Start / End") + ": "; int text_max = GetTextMax(this, std::vector{x_axis_str, y_axis_str}); @@ -805,12 +879,24 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin m_tiFreqStartY->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); m_tiFreqEndY = new TextInput(this, std::to_string(110), "Hz", "", wxDefaultPosition, ti_size); m_tiFreqEndY->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); - + y_freq_sizer->Add(start_y_text , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); y_freq_sizer->Add(m_tiFreqStartY, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); y_freq_sizer->Add(m_tiFreqEndY , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(y_freq_sizer, 0, wxLEFT, FromDIP(3)); + if (reprap_firmware) { + m_tiFreqStartY->GetTextCtrl()->SetValue(m_tiFreqStartX->GetTextCtrl()->GetValue()); + m_tiFreqEndY->GetTextCtrl()->SetValue(m_tiFreqEndX->GetTextCtrl()->GetValue()); + start_y_text->Hide(); + m_tiFreqStartY->Hide(); + m_tiFreqEndY->Hide(); + settings_sizer->Hide(y_freq_sizer); + start_x_text->SetLabel(_L("Frequency (Start / End): ")); + m_tiFreqStartX->GetTextCtrl()->SetToolTip(_L("RepRap firmware uses the same frequency range for both axes.")); + m_tiFreqEndX->GetTextCtrl()->SetToolTip(_L("RepRap firmware uses the same frequency range for both axes.")); + } + // Damping Factor wxString damping_factor_str = _L("Damp: "); auto damping_factor_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -824,8 +910,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin settings_sizer->AddSpacer(FromDIP(5)); - // Add a note explaining that 0 means use default value - auto note_text = new wxStaticText(this, wxID_ANY, _L("Recommended: Set Damp to 0.\nThis will use the printer's default or the last saved value."), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + auto note_text = new wxStaticText(this, wxID_ANY, _L("Recommended: Set Damp to 0.\nThis will use the printer's default or saved value."), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); note_text->SetForegroundColour(wxColour(128, 128, 128)); settings_sizer->Add(note_text, 0, wxALL, FromDIP(5)); @@ -853,15 +938,29 @@ void Input_Shaping_Freq_Test_Dlg::on_start(wxCommandEvent& event) { bool read_double = false; read_double = m_tiFreqStartX->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartX); read_double = read_double && m_tiFreqEndX->GetTextCtrl()->GetValue().ToDouble(&m_params.freqEndX); - read_double = read_double && m_tiFreqStartY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartY); - read_double = read_double && m_tiFreqEndY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqEndY); + + const auto* preset_bundle = wxGetApp().preset_bundle; + const auto* gcode_flavor_option = (preset_bundle != nullptr) + ? preset_bundle->printers.get_edited_preset().config.option>("gcode_flavor") + : nullptr; + const bool reprap_firmware = gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfRepRapFirmware; + + if (!reprap_firmware) { + read_double = read_double && m_tiFreqStartY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartY); + read_double = read_double && m_tiFreqEndY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqEndY); + } else { + m_params.freqStartY = m_params.freqStartX; + m_params.freqEndY = m_params.freqEndX; + m_tiFreqStartY->GetTextCtrl()->SetValue(m_tiFreqStartX->GetTextCtrl()->GetValue()); + m_tiFreqEndY->GetTextCtrl()->SetValue(m_tiFreqEndX->GetTextCtrl()->GetValue()); + } read_double = read_double && m_tiDampingFactor->GetTextCtrl()->GetValue().ToDouble(&m_params.start); if (!read_double || m_params.freqStartX < 0 || m_params.freqEndX > 500 || - m_params.freqStartY < 0 || m_params.freqEndX > 500 || + (!reprap_firmware && (m_params.freqStartY < 0 || m_params.freqEndY > 500)) || m_params.freqStartX >= m_params.freqEndX || - m_params.freqStartY >= m_params.freqEndY) { + (!reprap_firmware && m_params.freqStartY >= m_params.freqEndY)) { MessageDialog msg_dlg(nullptr, _L("Please input valid values:\n(0 < FreqStart < FreqEnd < 500)"), wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return; @@ -873,6 +972,16 @@ void Input_Shaping_Freq_Test_Dlg::on_start(wxCommandEvent& event) { return; } + auto shaper_values = get_shaper_type_values(); + int type_selection = m_rbType->GetSelection(); + if (shaper_values.empty()) { + m_params.shaper_type.clear(); + } else { + if (type_selection < 0 || type_selection >= static_cast(shaper_values.size())) + type_selection = 0; + m_params.shaper_type = shaper_values[static_cast(type_selection)]; + } + m_params.mode = CalibMode::Calib_Input_shaping_freq; // Set model type based on selection @@ -897,6 +1006,12 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin SetForegroundColour(wxColour("#363636")); SetFont(Label::Body_14); + const auto* preset_bundle = wxGetApp().preset_bundle; + const auto* gcode_flavor_option = (preset_bundle != nullptr) + ? preset_bundle->printers.get_edited_preset().config.option>("gcode_flavor") + : nullptr; + const bool reprap_firmware = gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfRepRapFirmware; + wxBoxSizer* v_sizer = new wxBoxSizer(wxVERTICAL); SetSizer(v_sizer); @@ -908,8 +1023,41 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin model_box->Add(m_rbModel, 0, wxALL | wxEXPAND, FromDIP(4)); v_sizer->Add(model_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); + // Input shaper type selection + auto labeled_box_type = new LabeledStaticBox(this, _L("Input shaper type")); + auto type_box = new wxStaticBoxSizer(labeled_box_type, wxVERTICAL); + auto type_labels = make_shaper_type_labels(); + m_rbType = new RadioGroup(this, type_labels, wxVERTICAL, 3); + type_box->Add(m_rbType, 0, wxALL | wxEXPAND, FromDIP(4)); + m_rbType->SetSelection(0); + + // Determine firmware-specific note + wxString firmware_note = "Check firmware compatibility."; + if (gcode_flavor_option) { + switch (gcode_flavor_option->value) { + case GCodeFlavor::gcfMarlinFirmware: + case GCodeFlavor::gcfMarlinLegacy: + firmware_note = "Marlin version => 2.1.2\nFixed-Time motion not yet implemented."; + break; + case GCodeFlavor::gcfKlipper: + firmware_note = "Klipper version => 0.9.0"; + break; + case GCodeFlavor::gcfRepRapFirmware: + firmware_note = "RepRap firmware version => 3.4.0\nCheck your firmware documentation for supported shaper types."; + break; + default: + break; + } + } + + auto type_note = new wxStaticText(this, wxID_ANY, firmware_note, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + type_note->SetForegroundColour(wxColour(128, 128, 128)); + type_box->Add(type_note, 0, wxALL, FromDIP(5)); + + v_sizer->Add(type_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); + // Settings - wxString freq_str = _L("Frequency") + " X / Y: "; + wxString freq_str = reprap_firmware ? _L("Frequency: ") : _L("Frequency") + " X / Y: "; wxString damp_str = _L("Damp") + " " + _L("Start / End") + ": "; int text_max = GetTextMax(this, std::vector{freq_str, damp_str}); @@ -931,7 +1079,14 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin freq_sizer->Add(m_tiFreqX, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); freq_sizer->Add(m_tiFreqY, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(freq_sizer, 0, wxLEFT, FromDIP(3)); - + + if (reprap_firmware) { + m_tiFreqY->GetTextCtrl()->SetValue(m_tiFreqX->GetTextCtrl()->GetValue()); + m_tiFreqY->Hide(); + freq_text->SetLabel(freq_str); + m_tiFreqX->GetTextCtrl()->SetToolTip(_L("RepRap firmware uses the same frequency for both axes.")); + } + // Damping Factor Start and End auto damp_sizer = new wxBoxSizer(wxHORIZONTAL); auto damp_text = new wxStaticText(this, wxID_ANY, damp_str, wxDefaultPosition, st_size, wxALIGN_LEFT); @@ -974,13 +1129,24 @@ Input_Shaping_Damp_Test_Dlg::~Input_Shaping_Damp_Test_Dlg() { void Input_Shaping_Damp_Test_Dlg::on_start(wxCommandEvent& event) { bool read_double = false; read_double = m_tiFreqX->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartX); - read_double = read_double && m_tiFreqY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartY); + const auto* preset_bundle = wxGetApp().preset_bundle; + const auto* gcode_flavor_option = (preset_bundle != nullptr) + ? preset_bundle->printers.get_edited_preset().config.option>("gcode_flavor") + : nullptr; + const bool reprap_firmware = gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfRepRapFirmware; + + if (!reprap_firmware) { + read_double = read_double && m_tiFreqY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartY); + } else { + m_params.freqStartY = m_params.freqStartX; + m_tiFreqY->GetTextCtrl()->SetValue(m_tiFreqX->GetTextCtrl()->GetValue()); + } read_double = read_double && m_tiDampingFactorStart->GetTextCtrl()->GetValue().ToDouble(&m_params.start); read_double = read_double && m_tiDampingFactorEnd->GetTextCtrl()->GetValue().ToDouble(&m_params.end); if (!read_double || m_params.freqStartX < 0 || m_params.freqStartX > 500 || - m_params.freqStartY < 0 || m_params.freqStartY > 500 ) { + (!reprap_firmware && (m_params.freqStartY < 0 || m_params.freqStartY > 500))) { MessageDialog msg_dlg(nullptr, _L("Please input valid values:\n(0 < Freq < 500)"), wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return; @@ -993,6 +1159,16 @@ void Input_Shaping_Damp_Test_Dlg::on_start(wxCommandEvent& event) { return; } + auto shaper_values = get_shaper_type_values(); + int type_selection = m_rbType->GetSelection(); + if (shaper_values.empty()) { + m_params.shaper_type.clear(); + } else { + if (type_selection < 0 || type_selection >= static_cast(shaper_values.size())) + type_selection = 0; + m_params.shaper_type = shaper_values[static_cast(type_selection)]; + } + m_params.mode = CalibMode::Calib_Input_shaping_damp; // Set model type based on selection diff --git a/src/slic3r/GUI/calib_dlg.hpp b/src/slic3r/GUI/calib_dlg.hpp index fd21c59ca9..9f43b71107 100644 --- a/src/slic3r/GUI/calib_dlg.hpp +++ b/src/slic3r/GUI/calib_dlg.hpp @@ -134,6 +134,7 @@ protected: Calib_Params m_params; RadioGroup* m_rbModel; + RadioGroup* m_rbType; TextInput* m_tiFreqStartX; TextInput* m_tiFreqEndX; TextInput* m_tiFreqStartY; @@ -155,6 +156,7 @@ protected: Calib_Params m_params; RadioGroup* m_rbModel; + RadioGroup* m_rbType; TextInput* m_tiFreqX; TextInput* m_tiFreqY; TextInput* m_tiDampingFactorStart; 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/tests/CMakeLists.txt b/tests/CMakeLists.txt index 175b6e3a16..b97967fe34 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,6 +8,7 @@ add_library(Catch2 INTERFACE) list (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules/Catch2) target_include_directories(Catch2 INTERFACE ${CMAKE_CURRENT_LIST_DIR}) add_library(Catch2::Catch2 ALIAS Catch2) +target_compile_definitions(Catch2 INTERFACE -DCATCH_CONFIG_ENABLE_BENCHMARKING) if (APPLE) # OSX builds targeting OSX 10.9 do not support new std::uncought_exception() # see https://github.com/catchorg/Catch2/issues/1218 diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index 2f71808cb7..ea01e27e99 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -1,44 +1,44 @@ get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) -add_executable(${_TEST_NAME}_tests - ${_TEST_NAME}_tests.cpp - test_3mf.cpp - test_aabbindirect.cpp - test_clipper_offset.cpp - test_clipper_utils.cpp - test_config.cpp - test_elephant_foot_compensation.cpp - test_geometry.cpp - test_placeholder_parser.cpp - test_polygon.cpp - test_mutable_polygon.cpp - test_mutable_priority_queue.cpp - test_stl.cpp - test_meshboolean.cpp - # test_marchingsquares.cpp - test_timeutils.cpp - test_voronoi.cpp +add_executable(${_TEST_NAME}_tests + ${_TEST_NAME}_tests.cpp + test_3mf.cpp + test_aabbindirect.cpp + test_clipper_offset.cpp + test_clipper_utils.cpp + test_config.cpp + test_elephant_foot_compensation.cpp + test_geometry.cpp + test_placeholder_parser.cpp + test_polygon.cpp + test_mutable_polygon.cpp + test_mutable_priority_queue.cpp + test_stl.cpp + test_meshboolean.cpp + test_marchingsquares.cpp + test_timeutils.cpp + test_voronoi.cpp test_optimizers.cpp # test_png_io.cpp test_indexed_triangle_set.cpp ../libnest2d/printer_parts.cpp - ) + ) if (TARGET OpenVDB::openvdb) target_sources(${_TEST_NAME}_tests PRIVATE test_hollowing.cpp) endif() - + target_link_libraries(${_TEST_NAME}_tests test_common libslic3r) set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests") if (WIN32) - if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - orcaslicer_copy_dlls(COPY_DLLS "Debug" "d" output_dlls_Debug) - elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") - orcaslicer_copy_dlls(COPY_DLLS "RelWithDebInfo" "" output_dlls_Release) - else() - orcaslicer_copy_dlls(COPY_DLLS "Release" "" output_dlls_Release) - endif() + if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + orcaslicer_copy_dlls(COPY_DLLS "Debug" "d" output_dlls_Debug) + elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") + orcaslicer_copy_dlls(COPY_DLLS "RelWithDebInfo" "" output_dlls_Release) + else() + orcaslicer_copy_dlls(COPY_DLLS "Release" "" output_dlls_Release) + endif() endif() catch_discover_tests(${_TEST_NAME}_tests TEST_PREFIX "${_TEST_NAME}: ") diff --git a/tests/libslic3r/test_clipper_utils.cpp b/tests/libslic3r/test_clipper_utils.cpp index 86afdcbcc4..6bbad8ef72 100644 --- a/tests/libslic3r/test_clipper_utils.cpp +++ b/tests/libslic3r/test_clipper_utils.cpp @@ -11,16 +11,16 @@ using namespace Slic3r; SCENARIO("Various Clipper operations - xs/t/11_clipper.t", "[ClipperUtils]") { - // CCW oriented contour - Slic3r::Polygon square{ { 200, 100 }, {200, 200}, {100, 200}, {100, 100} }; - // CW oriented contour - Slic3r::Polygon hole_in_square{ { 160, 140 }, { 140, 140 }, { 140, 160 }, { 160, 160 } }; - Slic3r::ExPolygon square_with_hole(square, hole_in_square); - GIVEN("square_with_hole") { + // CCW oriented contour + Slic3r::Polygon square{ { 200, 100 }, {200, 200}, {100, 200}, {100, 100} }; + // CW oriented contour + Slic3r::Polygon hole_in_square{ { 160, 140 }, { 140, 140 }, { 140, 160 }, { 160, 160 } }; + Slic3r::ExPolygon square_with_hole(square, hole_in_square); + GIVEN("square_with_hole") { WHEN("offset") { Polygons result = Slic3r::offset(square_with_hole, 5.f); THEN("offset matches") { - REQUIRE(result == Polygons { + REQUIRE(result == Polygons { { { 205, 205 }, { 95, 205 }, { 95, 95 }, { 205, 95 }, }, { { 155, 145 }, { 145, 145 }, { 145, 155 }, { 155, 155 } } }); } @@ -28,7 +28,7 @@ SCENARIO("Various Clipper operations - xs/t/11_clipper.t", "[ClipperUtils]") { WHEN("offset_ex") { ExPolygons result = Slic3r::offset_ex(square_with_hole, 5.f); THEN("offset matches") { - REQUIRE(result == ExPolygons { { + REQUIRE(result == ExPolygons { { { { 205, 205 }, { 95, 205 }, { 95, 95 }, { 205, 95 }, }, { { 145, 145 }, { 145, 155 }, { 155, 155 }, { 155, 145 } } } } ); } @@ -66,7 +66,7 @@ SCENARIO("Various Clipper operations - xs/t/11_clipper.t", "[ClipperUtils]") { GIVEN("polyline") { Polyline polyline { { 50, 150 }, { 300, 150 } }; WHEN("intersection_pl") { - Polylines result = Slic3r::intersection_pl({ polyline }, { square, hole_in_square }); + Polylines result = Slic3r::intersection_pl({ polyline }, Polygons{ square, hole_in_square }); THEN("correct number of result lines") { REQUIRE(result.size() == 2); } @@ -93,82 +93,82 @@ SCENARIO("Various Clipper operations - xs/t/11_clipper.t", "[ClipperUtils]") { } } } - GIVEN("Clipper bug #96 / Slic3r issue #2028") { - Slic3r::Polyline subject{ - { 44735000, 31936670 }, { 55270000, 31936670 }, { 55270000, 25270000 }, { 74730000, 25270000 }, { 74730000, 44730000 }, { 68063296, 44730000 }, { 68063296, 55270000 }, { 74730000, 55270000 }, - { 74730000, 74730000 }, { 55270000, 74730000 }, { 55270000, 68063296 }, { 44730000, 68063296 }, { 44730000, 74730000 }, { 25270000, 74730000 }, { 25270000, 55270000 }, { 31936670, 55270000 }, - { 31936670, 44730000 }, { 25270000, 44730000 }, { 25270000, 25270000 }, { 44730000, 25270000 }, { 44730000, 31936670 } }; - Slic3r::Polygon clip { {75200000, 45200000}, {54800000, 45200000}, {54800000, 24800000}, {75200000, 24800000} }; - Slic3r::Polylines result = Slic3r::intersection_pl(subject, { clip }); - THEN("intersection_pl - result is not empty") { - REQUIRE(result.size() == 1); - } - } - GIVEN("Clipper bug #122") { - Slic3r::Polyline subject { { 1975, 1975 }, { 25, 1975 }, { 25, 25 }, { 1975, 25 }, { 1975, 1975 } }; - Slic3r::Polygons clip { { { 2025, 2025 }, { -25, 2025 } , { -25, -25 }, { 2025, -25 } }, - { { 525, 525 }, { 525, 1475 }, { 1475, 1475 }, { 1475, 525 } } }; - Slic3r::Polylines result = Slic3r::intersection_pl({ subject }, clip); - THEN("intersection_pl - result is not empty") { - REQUIRE(result.size() == 1); - REQUIRE(result.front().points.size() == 5); - } - } - GIVEN("Clipper bug #126") { - Slic3r::Polyline subject { { 200000, 19799999 }, { 200000, 200000 }, { 24304692, 200000 }, { 15102879, 17506106 }, { 13883200, 19799999 }, { 200000, 19799999 } }; - Slic3r::Polygon clip { { 15257205, 18493894 }, { 14350057, 20200000 }, { -200000, 20200000 }, { -200000, -200000 }, { 25196917, -200000 } }; - Slic3r::Polylines result = Slic3r::intersection_pl(subject, { clip }); - THEN("intersection_pl - result is not empty") { - REQUIRE(result.size() == 1); - } - THEN("intersection_pl - result has same length as subject polyline") { - REQUIRE(result.front().length() == Approx(subject.length())); - } - } + GIVEN("Clipper bug #96 / Slic3r issue #2028") { + Slic3r::Polyline subject{ + { 44735000, 31936670 }, { 55270000, 31936670 }, { 55270000, 25270000 }, { 74730000, 25270000 }, { 74730000, 44730000 }, { 68063296, 44730000 }, { 68063296, 55270000 }, { 74730000, 55270000 }, + { 74730000, 74730000 }, { 55270000, 74730000 }, { 55270000, 68063296 }, { 44730000, 68063296 }, { 44730000, 74730000 }, { 25270000, 74730000 }, { 25270000, 55270000 }, { 31936670, 55270000 }, + { 31936670, 44730000 }, { 25270000, 44730000 }, { 25270000, 25270000 }, { 44730000, 25270000 }, { 44730000, 31936670 } }; + Slic3r::Polygon clip { {75200000, 45200000}, {54800000, 45200000}, {54800000, 24800000}, {75200000, 24800000} }; + Slic3r::Polylines result = Slic3r::intersection_pl(subject, Polygons{ clip }); + THEN("intersection_pl - result is not empty") { + REQUIRE(result.size() == 1); + } + } + GIVEN("Clipper bug #122") { + Slic3r::Polyline subject { { 1975, 1975 }, { 25, 1975 }, { 25, 25 }, { 1975, 25 }, { 1975, 1975 } }; + Slic3r::Polygons clip { { { 2025, 2025 }, { -25, 2025 } , { -25, -25 }, { 2025, -25 } }, + { { 525, 525 }, { 525, 1475 }, { 1475, 1475 }, { 1475, 525 } } }; + Slic3r::Polylines result = Slic3r::intersection_pl({ subject }, clip); + THEN("intersection_pl - result is not empty") { + REQUIRE(result.size() == 1); + REQUIRE(result.front().points.size() == 5); + } + } + GIVEN("Clipper bug #126") { + Slic3r::Polyline subject { { 200000, 19799999 }, { 200000, 200000 }, { 24304692, 200000 }, { 15102879, 17506106 }, { 13883200, 19799999 }, { 200000, 19799999 } }; + Slic3r::Polygon clip { { 15257205, 18493894 }, { 14350057, 20200000 }, { -200000, 20200000 }, { -200000, -200000 }, { 25196917, -200000 } }; + Slic3r::Polylines result = Slic3r::intersection_pl(subject, Polygons{ clip }); + THEN("intersection_pl - result is not empty") { + REQUIRE(result.size() == 1); + } + THEN("intersection_pl - result has same length as subject polyline") { + REQUIRE(result.front().length() == Approx(subject.length())); + } + } #if 0 - { - # Clipper does not preserve polyline orientation - my $polyline = Slic3r::Polyline->new([50, 150], [300, 150]); - my $result = Slic3r::Geometry::Clipper::intersection_pl([$polyline], [$square]); - is scalar(@$result), 1, 'intersection_pl - correct number of result lines'; - is_deeply $result->[0]->pp, [[100, 150], [200, 150]], 'clipped line orientation is preserved'; - } - { - # Clipper does not preserve polyline orientation - my $polyline = Slic3r::Polyline->new([300, 150], [50, 150]); - my $result = Slic3r::Geometry::Clipper::intersection_pl([$polyline], [$square]); - is scalar(@$result), 1, 'intersection_pl - correct number of result lines'; - is_deeply $result->[0]->pp, [[200, 150], [100, 150]], 'clipped line orientation is preserved'; - } - { - # Disabled until Clipper bug #127 is fixed - my $subject = [ - Slic3r::Polyline->new([-90000000, -100000000], [-90000000, 100000000]), # vertical - Slic3r::Polyline->new([-100000000, -10000000], [100000000, -10000000]), # horizontal - Slic3r::Polyline->new([-100000000, 0], [100000000, 0]), # horizontal - Slic3r::Polyline->new([-100000000, 10000000], [100000000, 10000000]), # horizontal - ]; - my $clip = Slic3r::Polygon->new(# a circular, convex, polygon - [99452190, 10452846], [97814760, 20791169], [95105652, 30901699], [91354546, 40673664], [86602540, 50000000], - [80901699, 58778525], [74314483, 66913061], [66913061, 74314483], [58778525, 80901699], [50000000, 86602540], - [40673664, 91354546], [30901699, 95105652], [20791169, 97814760], [10452846, 99452190], [0, 100000000], - [-10452846, 99452190], [-20791169, 97814760], [-30901699, 95105652], [-40673664, 91354546], - [-50000000, 86602540], [-58778525, 80901699], [-66913061, 74314483], [-74314483, 66913061], - [-80901699, 58778525], [-86602540, 50000000], [-91354546, 40673664], [-95105652, 30901699], - [-97814760, 20791169], [-99452190, 10452846], [-100000000, 0], [-99452190, -10452846], - [-97814760, -20791169], [-95105652, -30901699], [-91354546, -40673664], [-86602540, -50000000], - [-80901699, -58778525], [-74314483, -66913061], [-66913061, -74314483], [-58778525, -80901699], - [-50000000, -86602540], [-40673664, -91354546], [-30901699, -95105652], [-20791169, -97814760], - [-10452846, -99452190], [0, -100000000], [10452846, -99452190], [20791169, -97814760], - [30901699, -95105652], [40673664, -91354546], [50000000, -86602540], [58778525, -80901699], - [66913061, -74314483], [74314483, -66913061], [80901699, -58778525], [86602540, -50000000], - [91354546, -40673664], [95105652, -30901699], [97814760, -20791169], [99452190, -10452846], [100000000, 0] - ); - my $result = Slic3r::Geometry::Clipper::intersection_pl($subject, [$clip]); - is scalar(@$result), scalar(@$subject), 'intersection_pl - expected number of polylines'; - is sum(map scalar(@$_), @$result), scalar(@$subject) * 2, 'intersection_pl - expected number of points in polylines'; - } + { + # Clipper does not preserve polyline orientation + my $polyline = Slic3r::Polyline->new([50, 150], [300, 150]); + my $result = Slic3r::Geometry::Clipper::intersection_pl([$polyline], [$square]); + is scalar(@$result), 1, 'intersection_pl - correct number of result lines'; + is_deeply $result->[0]->pp, [[100, 150], [200, 150]], 'clipped line orientation is preserved'; + } + { + # Clipper does not preserve polyline orientation + my $polyline = Slic3r::Polyline->new([300, 150], [50, 150]); + my $result = Slic3r::Geometry::Clipper::intersection_pl([$polyline], [$square]); + is scalar(@$result), 1, 'intersection_pl - correct number of result lines'; + is_deeply $result->[0]->pp, [[200, 150], [100, 150]], 'clipped line orientation is preserved'; + } + { + # Disabled until Clipper bug #127 is fixed + my $subject = [ + Slic3r::Polyline->new([-90000000, -100000000], [-90000000, 100000000]), # vertical + Slic3r::Polyline->new([-100000000, -10000000], [100000000, -10000000]), # horizontal + Slic3r::Polyline->new([-100000000, 0], [100000000, 0]), # horizontal + Slic3r::Polyline->new([-100000000, 10000000], [100000000, 10000000]), # horizontal + ]; + my $clip = Slic3r::Polygon->new(# a circular, convex, polygon + [99452190, 10452846], [97814760, 20791169], [95105652, 30901699], [91354546, 40673664], [86602540, 50000000], + [80901699, 58778525], [74314483, 66913061], [66913061, 74314483], [58778525, 80901699], [50000000, 86602540], + [40673664, 91354546], [30901699, 95105652], [20791169, 97814760], [10452846, 99452190], [0, 100000000], + [-10452846, 99452190], [-20791169, 97814760], [-30901699, 95105652], [-40673664, 91354546], + [-50000000, 86602540], [-58778525, 80901699], [-66913061, 74314483], [-74314483, 66913061], + [-80901699, 58778525], [-86602540, 50000000], [-91354546, 40673664], [-95105652, 30901699], + [-97814760, 20791169], [-99452190, 10452846], [-100000000, 0], [-99452190, -10452846], + [-97814760, -20791169], [-95105652, -30901699], [-91354546, -40673664], [-86602540, -50000000], + [-80901699, -58778525], [-74314483, -66913061], [-66913061, -74314483], [-58778525, -80901699], + [-50000000, -86602540], [-40673664, -91354546], [-30901699, -95105652], [-20791169, -97814760], + [-10452846, -99452190], [0, -100000000], [10452846, -99452190], [20791169, -97814760], + [30901699, -95105652], [40673664, -91354546], [50000000, -86602540], [58778525, -80901699], + [66913061, -74314483], [74314483, -66913061], [80901699, -58778525], [86602540, -50000000], + [91354546, -40673664], [95105652, -30901699], [97814760, -20791169], [99452190, -10452846], [100000000, 0] + ); + my $result = Slic3r::Geometry::Clipper::intersection_pl($subject, [$clip]); + is scalar(@$result), scalar(@$subject), 'intersection_pl - expected number of polylines'; + is sum(map scalar(@$_), @$result), scalar(@$subject) * 2, 'intersection_pl - expected number of points in polylines'; + } #endif } @@ -203,7 +203,7 @@ SCENARIO("Various Clipper operations - t/clipper.t", "[ClipperUtils]") { } } WHEN("diff_ex with another square") { - ExPolygons diff = Slic3r::diff_ex(Polygons{ square, square2 }, Polygons{ hole }); + ExPolygons diff = Slic3r::diff_ex(Polygons{ square, square2 }, Polygons{ hole }); THEN("difference of a cw from two ccw is a contour with one hole") { REQUIRE(diff.size() == 1); REQUIRE(diff.front().area() == Approx(ExPolygon({ {40, 40}, {0, 40}, {0, 0}, {40, 0} }, { {15, 25}, {25, 25}, {25, 15}, {15, 15} }).area())); @@ -225,11 +225,11 @@ SCENARIO("Various Clipper operations - t/clipper.t", "[ClipperUtils]") { } } -template +template double polytree_area(const Tree &tree, std::vector *out) { traverse_pt(tree, out); - + return std::accumulate(out->begin(), out->end(), 0.0, [](double a, const P &p) { return a + p.area(); }); } @@ -238,7 +238,7 @@ size_t count_polys(const ExPolygons& expolys) { size_t c = 0; for (auto &ep : expolys) c += ep.holes.size() + 1; - + return c; } @@ -247,32 +247,32 @@ TEST_CASE("Traversing Clipper PolyTree", "[ClipperUtils]") { Polygon unitbox; const auto UNIT = coord_t(1. / SCALING_FACTOR); unitbox.points = { Vec2crd{0, 0}, Vec2crd{UNIT, 0}, Vec2crd{UNIT, UNIT}, Vec2crd{0, UNIT}}; - + Polygon box_frame = unitbox; box_frame.scale(20, 10); - + Polygon hole_left = unitbox; hole_left.scale(8); hole_left.translate(UNIT, UNIT); hole_left.reverse(); - + Polygon hole_right = hole_left; hole_right.translate(UNIT * 10, 0); - + Polygon inner_left = unitbox; inner_left.scale(4); inner_left.translate(UNIT * 3, UNIT * 3); - + Polygon inner_right = inner_left; inner_right.translate(UNIT * 10, 0); - + Polygons reference = union_({box_frame, hole_left, hole_right, inner_left, inner_right}); - + ClipperLib::PolyTree tree = union_pt(reference); double area_sum = box_frame.area() + hole_left.area() + hole_right.area() + inner_left.area() + inner_right.area(); - + REQUIRE(area_sum > 0); SECTION("Traverse into Polygons WITHOUT spatial ordering") { @@ -280,19 +280,19 @@ TEST_CASE("Traversing Clipper PolyTree", "[ClipperUtils]") { REQUIRE(area_sum == Approx(polytree_area(tree.GetFirst(), &output))); REQUIRE(output.size() == reference.size()); } - + SECTION("Traverse into ExPolygons WITHOUT spatial ordering") { ExPolygons output; REQUIRE(area_sum == Approx(polytree_area(tree.GetFirst(), &output))); REQUIRE(count_polys(output) == reference.size()); } - + SECTION("Traverse into Polygons WITH spatial ordering") { Polygons output; REQUIRE(area_sum == Approx(polytree_area(tree.GetFirst(), &output))); REQUIRE(output.size() == reference.size()); } - + SECTION("Traverse into ExPolygons WITH spatial ordering") { ExPolygons output; REQUIRE(area_sum == Approx(polytree_area(tree.GetFirst(), &output))); diff --git a/tests/libslic3r/test_marchingsquares.cpp b/tests/libslic3r/test_marchingsquares.cpp index fed5cc2d4d..db427a8d70 100644 --- a/tests/libslic3r/test_marchingsquares.cpp +++ b/tests/libslic3r/test_marchingsquares.cpp @@ -17,22 +17,111 @@ #include #include #include +#include using namespace Slic3r; +using namespace Catch::Matchers; -static double area(const sla::RasterBase::PixelDim &pxd) +// Note this tests SLA/RasterToPolygons.hpp, SLA/AGGRaster.hpp, and +// ClipperUtils.hpp at least as much as MarchingSquares.hpp. + +// Get the Point corresponding to a raster column and row. +Point rstPoint(const sla::RasterGrayscaleAA& rst, const size_t c, const size_t r) { - return pxd.w_mm * pxd.h_mm; + size_t rows = rst.resolution().height_px, cols = rst.resolution().width_px; + auto pxd = rst.pixel_dimensions(); + auto tr = rst.trafo(); + coord_t width = scaled(cols * pxd.h_mm), height = scaled(rows * pxd.w_mm); + Point p = Point::new_scale(c * pxd.w_mm, r * pxd.h_mm); + // reverse the raster transformations + if (tr.mirror_y) + p.y() = height - p.y(); + if (tr.mirror_x) + p.x() = width - p.x(); + p.x() -= tr.center_x; + p.y() -= tr.center_y; + if (tr.flipXY) + std::swap(p.x(), p.y()); + return p; } -static Slic3r::sla::RasterGrayscaleAA create_raster( - const sla::RasterBase::Resolution &res, - double disp_w = 100., - double disp_h = 100.) +// Get the size of a raster pixel in coord_t. +static Point rstPixel(const sla::RasterGrayscaleAA& rst) { - sla::RasterBase::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; - - auto bb = BoundingBox({0, 0}, {scaled(disp_w), scaled(disp_h)}); + auto pxd = rst.pixel_dimensions(); + return Point::new_scale(pxd.w_mm, pxd.h_mm); +} + +// Get the size of a raster in coord_t. +static Point rstSize(const sla::RasterGrayscaleAA& rst) +{ + auto pxd = rst.pixel_dimensions(); + auto res = rst.resolution(); + return Point::new_scale(pxd.w_mm * res.width_px, pxd.h_mm * res.height_px); +} + +// Get the bounding box of a raster. +static BoundingBox rstBBox(const sla::RasterGrayscaleAA& rst) +{ + auto center = rst.trafo().get_center(); + return BoundingBox(Point(0, 0) - center, rstSize(rst) - center); +} + +// Get the ExPolygons directly corresponding to a raster. +static ExPolygons rstGetPolys(sla::RasterGrayscaleAA& rst) +{ + size_t rows = rst.resolution().height_px, cols = rst.resolution().width_px; + Polygons polys; + for (auto r = 0; r < rows; r++) { + // use c0==cols as a sentinel marker for "no start column yet". + size_t c0 = cols; + for (auto c = 0; c <= cols; c++) { + if (c < cols && rst.read_pixel(c, r) > 128) { + // We have set pixels, set the c0 start column if it is not yet set. + if (c0 == cols) + c0 = c; + } else if (c0 < cols) { + // There is no pixel set, but we do have a c0 start column. Output a + // "row-rectangle" poly for this row between the start column c0 and + // the current column. + polys.push_back({rstPoint(rst, c0, r), rstPoint(rst, c0, r + 1), rstPoint(rst, c, r + 1), rstPoint(rst, c, r)}); + // Make sure the poly is anti-clockwise, which it might not be + // depending on how rstPoint() reverses the raster transformations + // from (c,r) to (x,y) coordinates. + if (polys.back().is_clockwise()) + polys.back().reverse(); + // Clear the start column c0 for the next row-rectangle. + c0 = cols; + } + } + } + // Merge all the row-rectangle polys into contiguous raster ExPolygons. + return union_ex(polys); +} + +// Get the length in mm of a "vector" Point. +static double len(const Point& v) { return unscaled(v.norm()); } +// Get the area in mm^2 of a box with corners at the origin and a Point. +static double area(const Point& v) { return unscaled(v.x()) * unscaled(v.y()); } + +// Find the index of the nearest extracted ExPolygon for a reference ExPolygon. +static int find_closest_ext(const ExPolygons& exts, ExPolygon ref) +{ + auto ref_center = ref.contour.bounding_box().center(); + + auto closest = std::min_element(exts.begin(), exts.end(), [&ref_center](auto a, auto b) { + auto a_center = a.contour.bounding_box().center(); + auto b_center = b.contour.bounding_box().center(); + return a_center.distance_to(ref_center) < b_center.distance_to(ref_center); + }); + return std::distance(exts.begin(), closest); +} + +static Slic3r::sla::RasterGrayscaleAA create_raster(const sla::Resolution& res, double disp_w = 100., double disp_h = 100.) +{ + sla::PixelDim pixdim{disp_w / res.width_px, disp_h / res.height_px}; + + auto bb = BoundingBox({0, 0}, {scaled(disp_w), scaled(disp_h)}); sla::RasterBase::Trafo trafo; trafo.center_x = bb.center().x(); trafo.center_y = bb.center().y(); @@ -43,334 +132,439 @@ static Slic3r::sla::RasterGrayscaleAA create_raster( static ExPolygon square(double a, Point center = {0, 0}) { ExPolygon poly; - coord_t V = scaled(a / 2.); - + coord_t V = scaled(a / 2.); + poly.contour.points = {{-V, -V}, {V, -V}, {V, V}, {-V, V}}; poly.translate(center.x(), center.y()); - + return poly; } static ExPolygon square_with_hole(double a, Point center = {0, 0}) { ExPolygon poly = square(a); - + poly.holes.emplace_back(); - coord_t V = scaled(a / 4.); + coord_t V = scaled(a / 4.); poly.holes.front().points = {{-V, V}, {V, V}, {V, -V}, {-V, -V}}; - + poly.translate(center.x(), center.y()); return poly; } -static ExPolygons circle_with_hole(double r, Point center = {0, 0}) { - +static ExPolygons circle_with_hole(double r, Point center = {0, 0}) +{ ExPolygon poly; - + std::vector pis = linspace_vector(0., 2 * PI, 100); - + coord_t rs = scaled(r); for (double phi : pis) { poly.contour.points.emplace_back(rs * std::cos(phi), rs * std::sin(phi)); } - + poly.holes.emplace_back(poly.contour); poly.holes.front().reverse(); - for (auto &p : poly.holes.front().points) p /= 2; - + for (auto& p : poly.holes.front().points) + p /= 2; + poly.translate(center.x(), center.y()); - + return {poly}; } -static const Vec2i32 W4x4 = {4, 4}; static const Vec2i32 W2x2 = {2, 2}; +static const Vec2i32 W1x1 = {1, 1}; template -static void test_expolys(Rst && rst, - const ExPolygons & ref, - Vec2i32 window, - const std::string &name = "test") +static void test_expolys(Rst&& rst, const ExPolygons& ref, Vec2i32 window, const std::string& name = "test", bool strict = true) { - for (const ExPolygon &expoly : ref) rst.draw(expoly); - + auto raster_bb = rstBBox(rst); + Point pixel_size = rstPixel(rst); + Point window_size{coord_t(pixel_size.x() * window.x()), coord_t(pixel_size.y() * window.y())}; + double pixel_area = area(pixel_size); + double pixel_len = len(pixel_size); + double window_area = area(window_size); + double window_len = len(window_size); + + for (const ExPolygon& expoly : ref) + rst.draw(expoly); + std::fstream out(name + ".png", std::ios::out); out << rst.encode(sla::PNGRasterEncoder{}); out.close(); - - ExPolygons extracted = sla::raster_to_polygons(rst, window); - - SVG svg(name + ".svg"); - svg.draw(extracted); - svg.draw(ref, "green"); + + const ExPolygons bmp = rstGetPolys(rst); + const ExPolygons ext = sla::raster_to_polygons(rst, window); + + SVG svg(name + ".svg", raster_bb); + svg.draw(bmp, "green"); + if (pixel_size.x() >= scale_(0.5)) + svg.draw_grid(raster_bb, "grey", scale_(0.05), pixel_size.x()); + if (window_size.x() >= scale_(1.0)) + svg.draw_grid(raster_bb, "grey", scale_(0.10), window_size.x()); + svg.draw_outline(ref, "red", "red", scale_(0.3)); + svg.draw_outline(ext, "blue", "blue"); svg.Close(); - - double max_rel_err = 0.1; - sla::RasterBase::PixelDim pxd = rst.pixel_dimensions(); - double max_abs_err = area(pxd) * scaled(1.) * scaled(1.); - - BoundingBox ref_bb; - for (auto &expoly : ref) ref_bb.merge(expoly.contour.bounding_box()); - - double max_displacement = 4. * (std::pow(pxd.h_mm, 2) + std::pow(pxd.w_mm, 2)); - max_displacement *= scaled(1.) * scaled(1.); - - REQUIRE(extracted.size() == ref.size()); + + // Note all these areas are unscaled back to mm^2. + double raster_area = unscaled(unscaled(area(bmp))); + double reference_area = unscaled(unscaled(area(ref))); + double extracted_area = unscaled(unscaled(area(ext))); + + // Note that errors accumulate with each step going from the reference + // polys to the extracted polys. The rendering of the reference polys to + // the raster does introduce pixelization errors too. This checks for + // acceptable errors going from reference to raster, and raster to + // reference. for (size_t i = 0; i < ref.size(); ++i) { - REQUIRE(extracted[i].contour.is_counter_clockwise()); - REQUIRE(extracted[i].holes.size() == ref[i].holes.size()); - - for (auto &h : extracted[i].holes) REQUIRE(h.is_clockwise()); - - double refa = ref[i].area(); - double abs_err = std::abs(extracted[i].area() - refa); - double rel_err = abs_err / refa; - - REQUIRE((rel_err <= max_rel_err || abs_err <= max_abs_err)); - - BoundingBox bb; - for (auto &expoly : extracted) bb.merge(expoly.contour.bounding_box()); - - Point d = bb.center() - ref_bb.center(); - REQUIRE(double(d.transpose() * d) <= max_displacement); + if (ref[i].contour.size() < 20) + UNSCOPED_INFO("reference ref[" << i << "]: " << ref[i]); + } + CHECK_THAT(raster_area, WithinRel(reference_area, pixel_len * 0.05) || WithinAbs(reference_area, pixel_area)); + for (size_t i = 0; i < ext.size(); ++i) { + if (ext[i].contour.size() < 20) + UNSCOPED_INFO("extracted ext[" << i << "]: " << ext[i]); + } + CHECK_THAT(extracted_area, WithinRel(raster_area, 0.05) || WithinAbs(raster_area, window_area)); + for (auto i = 0; i < ext.size(); ++i) { + CHECK(ext[i].contour.is_counter_clockwise()); + for (auto& h : ext[i].holes) + CHECK(h.is_clockwise()); + } + + BoundingBox ref_bb; + for (auto& expoly : ref) + ref_bb.merge(expoly.contour.bounding_box()); + BoundingBox ext_bb; + for (auto& expoly : ext) + ext_bb.merge(expoly.contour.bounding_box()); + CHECK(len(ext_bb.center() - ref_bb.center()) < pixel_len); + + // In ambigous cases (when polygons just touch) there are multiple equally + // valid interpretations of the raster into polygons. Although + // MarchingSquares currently systematically selects the solution that + // breaks them into separate polygons, that might not always be true. Also, + // SLA/RasterToPolygons.hpp, and in particular union_ex() from + // ClipperUtils.hpp that it uses, can and does sometimes merge them back + // together. This means we cannot reliably make assertions about the + // extracted number of polygons and their shapes in these cases. So we skip + // the individual polygon checks for strict=false. + if (strict) { + CHECK(ext.size() == ref.size()); + for (auto i = 0; i < ext.size(); ++i) { + auto j = find_closest_ext(ref, ext[i]); + INFO("Comparing ext[" << i << "] against closest ref[" << j << "]"); + CHECK(ext[i].holes.size() == ref[j].holes.size()); + double ext_i_area = unscaled(unscaled(ext[i].area())); + double ref_j_area = unscaled(unscaled(ref[j].area())); + CHECK_THAT(ext_i_area, WithinRel(ref_j_area, pixel_len * 0.05) || WithinAbs(ref_j_area, window_area)); + auto ext_i_bb = ext[i].contour.bounding_box(); + auto ref_j_bb = ref[j].contour.bounding_box(); + CHECK(len(ext_i_bb.center() - ref_j_bb.center()) < pixel_len); + } } } -TEST_CASE("Empty raster should result in empty polygons", "[MarchingSquares]") { +TEST_CASE("Empty raster should result in empty polygons", "[MarchingSquares]") +{ sla::RasterGrayscaleAAGammaPower rst{{}, {}, {}}; - ExPolygons extracted = sla::raster_to_polygons(rst); + ExPolygons extracted = sla::raster_to_polygons(rst); REQUIRE(extracted.size() == 0); } -TEST_CASE("Marching squares directions", "[MarchingSquares]") { - marchsq::Coord crd{1, 1}; - - REQUIRE(step(crd, marchsq::__impl::Dir::left).r == 1); - REQUIRE(step(crd, marchsq::__impl::Dir::left).c == 0); - - REQUIRE(step(crd, marchsq::__impl::Dir::down).r == 2); - REQUIRE(step(crd, marchsq::__impl::Dir::down).c == 1); - - REQUIRE(step(crd, marchsq::__impl::Dir::right).r == 1); - REQUIRE(step(crd, marchsq::__impl::Dir::right).c == 2); - - REQUIRE(step(crd, marchsq::__impl::Dir::up).r == 0); - REQUIRE(step(crd, marchsq::__impl::Dir::up).c == 1); +TEST_CASE("Marching squares directions", "[MarchingSquares]") +{ + using namespace marchsq; + Coord crd{0, 0}; + + __impl::step(crd, __impl::Dir::left); + CHECK(crd == Coord(0, -1)); + __impl::step(crd, __impl::Dir::down); + CHECK(crd == Coord(1, -1)); + __impl::step(crd, __impl::Dir::right); + CHECK(crd == Coord(1, 0)); + __impl::step(crd, __impl::Dir::up); + CHECK(crd == Coord(0, 0)); + __impl::step(crd, __impl::Dir::left, 7); + CHECK(crd == Coord(0, -7)); + __impl::step(crd, __impl::Dir::down, 7); + CHECK(crd == Coord(7, -7)); + __impl::step(crd, __impl::Dir::right, 7); + CHECK(crd == Coord(7, 0)); + __impl::step(crd, __impl::Dir::up, 7); + CHECK(crd == Coord(0, 0)); + __impl::step(crd, __impl::Dir::left, -3); + CHECK(crd == Coord(0, 3)); + __impl::step(crd, __impl::Dir::down, -3); + CHECK(crd == Coord(-3, 3)); + __impl::step(crd, __impl::Dir::right, -3); + CHECK(crd == Coord(-3, 0)); + __impl::step(crd, __impl::Dir::up, -3); + CHECK(crd == Coord(0, 0)); } -TEST_CASE("Fully covered raster should result in a rectangle", "[MarchingSquares]") { +TEST_CASE("Fully covered raster should result in a rectangle", "[MarchingSquares]") +{ auto rst = create_raster({4, 4}, 4., 4.); - + ExPolygon rect = square(4); - SECTION("Full accuracy") { - test_expolys(rst, {rect}, W2x2, "fully_covered_full_acc"); - } - - SECTION("Half accuracy") { - test_expolys(rst, {rect}, W4x4, "fully_covered_half_acc"); - } + SECTION("Full accuracy") { test_expolys(rst, {rect}, W1x1, "fully_covered_full_acc"); } + + SECTION("Half accuracy") { test_expolys(rst, {rect}, W2x2, "fully_covered_half_acc"); } } -TEST_CASE("4x4 raster with one ring", "[MarchingSquares]") { - - sla::RasterBase::PixelDim pixdim{1, 1}; - +TEST_CASE("4x4 raster with one ring", "[MarchingSquares]") +{ + sla::PixelDim pixdim{1, 1}; + // We need one additional row and column to detect edges sla::RasterGrayscaleAA rst{{4, 4}, pixdim, {}, agg::gamma_threshold(.5)}; - - // Draw a triangle from individual pixels - rst.draw(square(1., {0500000, 0500000})); - rst.draw(square(1., {1500000, 0500000})); - rst.draw(square(1., {2500000, 0500000})); - - rst.draw(square(1., {1500000, 1500000})); - rst.draw(square(1., {2500000, 1500000})); - - rst.draw(square(1., {2500000, 2500000})); - - std::fstream out("4x4.png", std::ios::out); - out << rst.encode(sla::PNGRasterEncoder{}); - out.close(); - - ExPolygons extracted = sla::raster_to_polygons(rst); - - SVG svg("4x4.svg"); - svg.draw(extracted); - svg.Close(); - - REQUIRE(extracted.size() == 1); + + ExPolygons one = {{{1, 1}, {3, 1}, {3, 3}, {2, 3}, {2, 2}, {1, 2}}}; + for (ExPolygon& p : one) + p.scale(scaled(1.0)); + test_expolys(rst, one, W1x1, "one_4x4"); } -TEST_CASE("4x4 raster with two rings", "[MarchingSquares]") { - - sla::RasterBase::PixelDim pixdim{1, 1}; - +TEST_CASE("10x10 raster with two rings", "[MarchingSquares]") +{ + sla::PixelDim pixdim{1, 1}; + // We need one additional row and column to detect edges - sla::RasterGrayscaleAA rst{{5, 5}, pixdim, {}, agg::gamma_threshold(.5)}; - - SECTION("Ambiguous case with 'ac' square") { - - // Draw a triangle from individual pixels - rst.draw(square(1., {3500000, 2500000})); - rst.draw(square(1., {3500000, 3500000})); - rst.draw(square(1., {2500000, 3500000})); - - rst.draw(square(1., {2500000, 1500000})); - rst.draw(square(1., {1500000, 1500000})); - rst.draw(square(1., {1500000, 2500000})); - - std::fstream out("4x4_ac.png", std::ios::out); - out << rst.encode(sla::PNGRasterEncoder{}); - out.close(); - - ExPolygons extracted = sla::raster_to_polygons(rst); - - SVG svg("4x4_ac.svg"); - svg.draw(extracted); - svg.Close(); - - REQUIRE(extracted.size() == 2); + sla::RasterGrayscaleAA rst{{10, 10}, pixdim, {}, agg::gamma_threshold(.5)}; + + SECTION("Ambiguous case with 'bd' square") + { + ExPolygons ac = {{{1, 1}, {3, 1}, {3, 2}, {2, 2}, {2, 3}, {1, 3}}, {{4, 4}, {2, 4}, {2, 3}, {3, 3}, {3, 2}, {4, 2}}}; + for (ExPolygon& p : ac) + p.scale(scaled(2.0)); + test_expolys(rst, ac, W1x1, "bd_10x10", false); } - - SECTION("Ambiguous case with 'bd' square") { - - // Draw a triangle from individual pixels - rst.draw(square(1., {3500000, 1500000})); - rst.draw(square(1., {3500000, 2500000})); - rst.draw(square(1., {2500000, 1500000})); - - rst.draw(square(1., {1500000, 2500000})); - rst.draw(square(1., {1500000, 3500000})); - rst.draw(square(1., {2500000, 3500000})); - - std::fstream out("4x4_bd.png", std::ios::out); - out << rst.encode(sla::PNGRasterEncoder{}); - out.close(); - - ExPolygons extracted = sla::raster_to_polygons(rst); - - SVG svg("4x4_bd.svg"); - svg.draw(extracted); - svg.Close(); - - REQUIRE(extracted.size() == 2); + + SECTION("Ambiguous case with 'ac' square") + { + ExPolygons bd = {{{1, 4}, {1, 2}, {2, 2}, {2, 3}, {3, 3}, {3, 4}}, {{4, 1}, {4, 3}, {3, 3}, {3, 2}, {2, 2}, {2, 1}}}; + for (ExPolygon& p : bd) + p.scale(scaled(2.0)); + test_expolys(rst, bd, W1x1, "ac_10x10", false); } } -TEST_CASE("Square with hole in the middle", "[MarchingSquares]") { +TEST_CASE("Square with hole in the middle", "[MarchingSquares]") +{ using namespace Slic3r; - + ExPolygons inp = {square_with_hole(50.)}; - - SECTION("Proportional raster, 1x1 mm pixel size, full accuracy") { - test_expolys(create_raster({100, 100}, 100., 100.), inp, W2x2, "square_with_hole_proportional_1x1_mm_px_full"); + + SECTION("Proportional raster, 1x1 mm pixel size, full accuracy") + { + test_expolys(create_raster({100, 100}, 100., 100.), inp, W1x1, "square_with_hole_proportional_1x1_mm_px_full"); } - - SECTION("Proportional raster, 1x1 mm pixel size, half accuracy") { - test_expolys(create_raster({100, 100}, 100., 100.), inp, W4x4, "square_with_hole_proportional_1x1_mm_px_half"); + + SECTION("Proportional raster, 1x1 mm pixel size, half accuracy") + { + test_expolys(create_raster({100, 100}, 100., 100.), inp, W2x2, "square_with_hole_proportional_1x1_mm_px_half"); } - - SECTION("Landscape raster, 1x1 mm pixel size, full accuracy") { - test_expolys(create_raster({150, 100}, 150., 100.), inp, W2x2, "square_with_hole_landsc_1x1_mm_px_full"); + + SECTION("Landscape raster, 1x1 mm pixel size, full accuracy") + { + test_expolys(create_raster({150, 100}, 150., 100.), inp, W1x1, "square_with_hole_landsc_1x1_mm_px_full"); } - - SECTION("Landscape raster, 1x1 mm pixel size, half accuracy") { - test_expolys(create_raster({150, 100}, 150., 100.), inp, W4x4, "square_with_hole_landsc_1x1_mm_px_half"); + + SECTION("Landscape raster, 1x1 mm pixel size, half accuracy") + { + test_expolys(create_raster({150, 100}, 150., 100.), inp, W2x2, "square_with_hole_landsc_1x1_mm_px_half"); } - - SECTION("Portrait raster, 1x1 mm pixel size, full accuracy") { - test_expolys(create_raster({100, 150}, 100., 150.), inp, W2x2, "square_with_hole_portrait_1x1_mm_px_full"); + + SECTION("Portrait raster, 1x1 mm pixel size, full accuracy") + { + test_expolys(create_raster({100, 150}, 100., 150.), inp, W1x1, "square_with_hole_portrait_1x1_mm_px_full"); } - - SECTION("Portrait raster, 1x1 mm pixel size, half accuracy") { - test_expolys(create_raster({100, 150}, 100., 150.), inp, W4x4, "square_with_hole_portrait_1x1_mm_px_half"); + + SECTION("Portrait raster, 1x1 mm pixel size, half accuracy") + { + test_expolys(create_raster({100, 150}, 100., 150.), inp, W2x2, "square_with_hole_portrait_1x1_mm_px_half"); } - - SECTION("Proportional raster, 2x2 mm pixel size, full accuracy") { - test_expolys(create_raster({200, 200}, 100., 100.), inp, W2x2, "square_with_hole_proportional_2x2_mm_px_full"); + + SECTION("Proportional raster, 2x2 mm pixel size, full accuracy") + { + test_expolys(create_raster({50, 50}, 100., 100.), inp, W1x1, "square_with_hole_proportional_2x2_mm_px_full"); } - - SECTION("Proportional raster, 2x2 mm pixel size, half accuracy") { - test_expolys(create_raster({200, 200}, 100., 100.), inp, W4x4, "square_with_hole_proportional_2x2_mm_px_half"); + + SECTION("Proportional raster, 2x2 mm pixel size, half accuracy") + { + test_expolys(create_raster({50, 50}, 100., 100.), inp, W2x2, "square_with_hole_proportional_2x2_mm_px_half"); } - - SECTION("Proportional raster, 0.5x0.5 mm pixel size, full accuracy") { - test_expolys(create_raster({50, 50}, 100., 100.), inp, W2x2, "square_with_hole_proportional_0.5x0.5_mm_px_full"); + + SECTION("Proportional raster, 0.5x0.5 mm pixel size, full accuracy") + { + test_expolys(create_raster({200, 200}, 100., 100.), inp, W1x1, "square_with_hole_proportional_0.5x0.5_mm_px_full"); } - - SECTION("Proportional raster, 0.5x0.5 mm pixel size, half accuracy") { - test_expolys(create_raster({50, 50}, 100., 100.), inp, W4x4, "square_with_hole_proportional_0.5x0.5_mm_px_half"); + + SECTION("Proportional raster, 0.5x0.5 mm pixel size, half accuracy") + { + test_expolys(create_raster({200, 200}, 100., 100.), inp, W2x2, "square_with_hole_proportional_0.5x0.5_mm_px_half"); } } -TEST_CASE("Circle with hole in the middle", "[MarchingSquares]") { +TEST_CASE("Circle with hole in the middle", "[MarchingSquares]") +{ using namespace Slic3r; - - test_expolys(create_raster({1000, 1000}), circle_with_hole(25.), W2x2, "circle_with_hole"); + + test_expolys(create_raster({1000, 1000}), circle_with_hole(25.), W1x1, "circle_with_hole"); } -static void recreate_object_from_rasters(const std::string &objname, float lh) { +static void recreate_object_from_rasters(const std::string& objname, float lh) +{ TriangleMesh mesh = load_model(objname); - - auto bb = mesh.bounding_box(); + + auto bb = mesh.bounding_box(); Vec3f tr = -bb.center().cast(); mesh.translate(tr.x(), tr.y(), tr.z()); bb = mesh.bounding_box(); - + std::vector layers = slice_mesh_ex(mesh.its, grid(float(bb.min.z()) + lh, float(bb.max.z()), lh)); - - sla::RasterBase::Resolution res{2560, 1440}; - double disp_w = 120.96; - double disp_h = 68.04; + + sla::Resolution res{2560, 1440}; + double disp_w = 120.96; + double disp_h = 68.04; #ifndef NDEBUG size_t cntr = 0; #endif - for (ExPolygons &layer : layers) { + for (ExPolygons& layer : layers) { auto rst = create_raster(res, disp_w, disp_h); - - for (ExPolygon &island : layer) { + + for (ExPolygon& island : layer) { rst.draw(island); } - + #ifndef NDEBUG std::fstream out(objname + std::to_string(cntr) + ".png", std::ios::out); out << rst.encode(sla::PNGRasterEncoder{}); out.close(); #endif - + ExPolygons layer_ = sla::raster_to_polygons(rst); -// float delta = scaled(std::min(rst.pixel_dimensions().h_mm, -// rst.pixel_dimensions().w_mm)) / 2; - -// layer_ = expolygons_simplify(layer_, delta); + // float delta = scaled(std::min(rst.pixel_dimensions().h_mm, + // rst.pixel_dimensions().w_mm)) / 2; + + // layer_ = expolygons_simplify(layer_, delta); #ifndef NDEBUG - SVG svg(objname + std::to_string(cntr) + ".svg", BoundingBox(Point{0, 0}, Point{scaled(disp_w), scaled(disp_h)})); + SVG svg(objname + std::to_string(cntr) + ".svg", rstBBox(rst)); svg.draw(layer_); svg.draw(layer, "green"); svg.Close(); #endif - + double layera = 0., layera_ = 0.; - for (auto &p : layer) layera += p.area(); - for (auto &p : layer_) layera_ += p.area(); + for (auto& p : layer) + layera += p.area(); + for (auto& p : layer_) + layera_ += p.area(); #ifndef NDEBUG std::cout << cntr++ << std::endl; #endif double diff = std::abs(layera_ - layera); REQUIRE((diff <= 0.1 * layera || diff < scaled(1.) * scaled(1.))); - + layer = std::move(layer_); } - + indexed_triangle_set out = slices_to_mesh(layers, bb.min.z(), double(lh), double(lh)); its_write_obj(out, "out_from_rasters.obj"); } -TEST_CASE("Recreate object from rasters", "[SL1Import]") { - recreate_object_from_rasters("frog_legs.obj", 0.05f); +TEST_CASE("Recreate object from rasters", "[SL1Import]") { recreate_object_from_rasters("frog_legs.obj", 0.05f); } + +namespace marchsq { + +static constexpr float layerf = 0.20; // layer height in mm (used for z values). +static constexpr float gsizef = 100.0; // grid size in mm (box volume side length). +static constexpr float wsizef = 0.50; // grid window size in mm (roughly line segment length). +static constexpr float psizef = 0.01; // raster pixel size in mm (roughly point accuracy). +static constexpr float isoval = 0.0; // iso value threshold to use. +static constexpr size_t wsize = std::round(wsizef / psizef); + +static float period = 10.0; // gyroid "wavelength" in mm (2x line spacing). +static float freq = 2 * PI / period; // gyroid frequency in waves per mm. + +void set_period(float len = 10.0) +{ + period = len; + freq = 2 * PI / period; } + +static size_t layer_n; +static size_t ring_n; +static size_t point_n; +static size_t get_n; + +void reset_stats() +{ + layer_n = 0; + ring_n = 0; + point_n = 0; + get_n = 0; +} + +using Rings = std::vector; + +template<> struct _RasterTraits +{ + // using Rst = Slic3r::sla::RasterGrayscaleAA; + // The type of pixel cell in the raster + using ValueType = float; + + // Value at a given position + static float get(const size_t& layer, size_t row, size_t col) + { + get_n++; + const float x = col * psizef * freq; + const float y = row * psizef * freq; + const float z = layer * psizef * freq; + + return sinf(x) * cosf(y) + sinf(y) * cosf(z) + sinf(z) * cosf(x); + } + + // Number of rows and cols of the raster + static size_t rows(const size_t& layer) { return std::round(gsizef / psizef); } + static size_t cols(const size_t& layer) { return std::round(gsizef / psizef); } +}; + +Rings get_gyroids(size_t l) +{ + size_t layer = l; + Rings rings = execute(layer, isoval, {wsize, wsize}); + layer_n++; + ring_n += rings.size(); + for (auto r : rings) + point_n += r.size(); + return rings; +} + +}; // namespace marchsq + +void benchmark_gyroid(float period) +{ + marchsq::reset_stats(); + marchsq::set_period(period); + INFO("grid size: " << marchsq::gsizef << "mm\nlayer height: " << marchsq::layerf << "mm\n"); + INFO("window size: " << marchsq::wsizef << "mm\npoint size: " << marchsq::psizef << "mm\n"); + INFO("gyroid period: " << marchsq::period << "mm\n"); + BENCHMARK("indexed", i) { return marchsq::get_gyroids(i); }; + INFO("output avg rings/layer: " << float(marchsq::ring_n) / float(marchsq::layer_n) << "\n"); + INFO("output avg points/layer: " << float(marchsq::point_n) / float(marchsq::layer_n) << "\n"); + INFO("output avg gets/layer: " << float(marchsq::get_n) / float(marchsq::layer_n) << "\n"); + + REQUIRE(marchsq::layer_n > 0); +} + +TEST_CASE("Benchmark gyroid cube period 10.0mm", "[MarchingSquares]") { benchmark_gyroid(10.0); } + +TEST_CASE("Benchmark gyroid cube period 5.0mm", "[MarchingSquares]") { benchmark_gyroid(5.0); } 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()