Merge branch 'main' into dev/ams-heat

This commit is contained in:
Noisyfox
2026-07-13 14:43:45 +08:00
committed by GitHub
125 changed files with 6293 additions and 1534 deletions
+56 -37
View File
@@ -122,54 +122,73 @@ jobs:
arch: universal arch: universal
macos-combine-only: true macos-combine-only: true
secrets: inherit secrets: inherit
unit_tests: # One test job per built arch, on the runner that built it.
name: Unit Tests unit_tests_linux_x86_64:
# Tests are built on the aarch64 leg by default (faster GitHub arm runner), name: Linux x86_64
# so run them there; self-hosted builds them on the amd64 server instead.
runs-on: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04-arm' }}
needs: build_linux needs: build_linux
if: ${{ !cancelled() && success() }} if: ${{ !cancelled() && success() }}
uses: ./.github/workflows/unit_tests.yml
with:
os: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }}
artifact: ${{ github.sha }}-tests-linux-x86_64
unit_tests_linux_aarch64:
name: Linux aarch64
needs: build_linux
if: ${{ !cancelled() && success() }}
uses: ./.github/workflows/unit_tests.yml
with:
os: ubuntu-24.04-arm
artifact: ${{ github.sha }}-tests-linux-aarch64
unit_tests_windows_x64:
name: Windows x64
needs: build_windows
if: ${{ !cancelled() && success() }}
uses: ./.github/workflows/unit_tests.yml
with:
os: ${{ vars.SELF_HOSTED && 'orca-win-server' || 'windows-latest' }}
artifact: ${{ github.sha }}-tests-windows-x64
unit_tests_windows_arm64:
name: Windows arm64
needs: build_windows
if: ${{ !cancelled() && success() }}
uses: ./.github/workflows/unit_tests.yml
with:
os: windows-11-arm
artifact: ${{ github.sha }}-tests-windows-arm64
test-dir: build-arm64/tests
unit_tests_macos_arm64:
name: macOS arm64
needs: build_macos_arch
if: ${{ !cancelled() && success() }}
uses: ./.github/workflows/unit_tests.yml
with:
os: ${{ vars.SELF_HOSTED && 'orca-macos-arm64' || 'macos-14' }}
artifact: ${{ github.sha }}-tests-macos-arm64
test-dir: build/arm64/tests
publish_test_results:
name: Publish Test Results
needs: [unit_tests_linux_x86_64, unit_tests_linux_aarch64, unit_tests_windows_x64, unit_tests_windows_arm64, unit_tests_macos_arm64]
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Download Test Results
uses: actions/checkout@v7
with:
sparse-checkout: |
.github
scripts
tests
- name: Apt-Install Dependencies
if: ${{ !vars.SELF_HOSTED }}
uses: ./.github/actions/apt-install-deps
- name: Restore Test Artifact
uses: actions/download-artifact@v8 uses: actions/download-artifact@v8
with: with:
name: ${{ github.sha }}-tests pattern: test-results-*
- uses: lukka/get-cmake@latest path: test-results
with: # Best-effort: a read-only token (e.g. fork PRs) can't write the check, so
cmakeVersion: "~4.3.0" # use most recent 4.3.x version # don't let a publish failure fail the run. The test jobs gate correctness.
useLocalCache: true # <--= Use the local cache (default is 'false').
useCloudCache: true
- name: Unpackage and Run Unit Tests
timeout-minutes: 20
run: |
tar -xvf build_tests.tar
scripts/run_unit_tests.sh
- name: Upload Test Logs
uses: actions/upload-artifact@v7
if: ${{ failure() }}
with:
name: unit-test-logs
path: build/tests/**/*.log
- name: Publish Test Results - name: Publish Test Results
if: always() continue-on-error: true
uses: EnricoMi/publish-unit-test-result-action@v2 uses: EnricoMi/publish-unit-test-result-action@v2
with: with:
files: "ctest_results.xml" files: "test-results/**/*.xml"
- name: Delete Test Artifact - name: Delete Test Results
if: success() if: success()
uses: geekyeggo/delete-artifact@v6 uses: geekyeggo/delete-artifact@v6
with: with:
name: ${{ github.sha }}-tests name: test-results-*
failOnError: false
flatpak: flatpak:
name: "Flatpak" name: "Flatpak"
container: container:
+43 -12
View File
@@ -141,8 +141,26 @@ jobs:
- name: Build slicer mac - name: Build slicer mac
if: runner.os == 'macOS' && !inputs.macos-combine-only if: runner.os == 'macOS' && !inputs.macos-combine-only
working-directory: ${{ github.workspace }} working-directory: ${{ github.workspace }}
# arm64 only: build the tests here; the unit_tests_macos job runs them.
env:
ORCA_TESTS_BUILD_ONLY: ${{ inputs.arch == 'arm64' && '1' || '' }}
run: | run: |
./build_release_macos.sh -s -n -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a ${{ inputs.arch }} -t 10.15 ./build_release_macos.sh -s -n -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a ${{ inputs.arch }} -t 10.15 ${{ inputs.arch == 'arm64' && '-T' || '' }}
- name: Pack unit tests mac
if: runner.os == 'macOS' && !inputs.macos-combine-only && inputs.arch == 'arm64'
working-directory: ${{ github.workspace }}
run: tar -cvf build_tests.tar build/arm64/tests
- name: Upload Test Artifact mac
if: runner.os == 'macOS' && !inputs.macos-combine-only && inputs.arch == 'arm64'
uses: actions/upload-artifact@v7
with:
name: ${{ github.sha }}-tests-macos-arm64
overwrite: true
path: build_tests.tar
retention-days: 5
if-no-files-found: error
- name: Pack macOS app bundle ${{ inputs.arch }} - name: Pack macOS app bundle ${{ inputs.arch }}
if: runner.os == 'macOS' && !inputs.macos-combine-only if: runner.os == 'macOS' && !inputs.macos-combine-only
@@ -335,11 +353,28 @@ jobs:
# env: # env:
# WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\' # WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\'
# WindowsSDKVersion: '10.0.26100.0\' # WindowsSDKVersion: '10.0.26100.0\'
# "tests" builds the unit tests too; the unit_tests_windows_* jobs run them.
run: | run: |
$arch = "${{ inputs.arch }}" $arch = "${{ inputs.arch }}"
if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 } else { .\build_release_vs.bat slicer } if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 tests } else { .\build_release_vs.bat slicer tests }
shell: pwsh shell: pwsh
- name: Pack unit tests Win
if: runner.os == 'Windows'
working-directory: ${{ github.workspace }}
shell: pwsh
run: tar -cvf build_tests.tar ${{ env.BUILD_DIR }}/tests
- name: Upload Test Artifact Win
if: runner.os == 'Windows'
uses: actions/upload-artifact@v7
with:
name: ${{ github.sha }}-tests-windows-${{ inputs.arch }}
overwrite: true
path: build_tests.tar
retention-days: 5
if-no-files-found: error
# NSIS is x86-only; it runs (and the installer it emits runs) under ARM64's # NSIS is x86-only; it runs (and the installer it emits runs) under ARM64's
# x86 emulation, packaging the native arm64 payload from build-arm64. # x86 emulation, packaging the native arm64 payload from build-arm64.
- name: Create installer Win - name: Create installer Win
@@ -452,26 +487,22 @@ jobs:
if: runner.os == 'Linux' if: runner.os == 'Linux'
shell: bash shell: bash
run: | run: |
# Build + tar the unit tests (-t) only on the leg that runs them: the # Build + tar the unit tests (-t) on both Linux legs so each arch
# aarch64 leg by default (faster GitHub arm runner), or amd64 when using # (x86_64 + aarch64) gets tested by its own unit_tests_linux_* job.
# self-hosted runners (no arm self-hosted server). unit_tests downloads ./build_linux.sh -istrlL
# this tarball. The profile validator is built with -s, so amd64 keeps it.
tests=${{ (!vars.SELF_HOSTED && inputs.arch == 'aarch64') || (vars.SELF_HOSTED && inputs.arch != 'aarch64') }}
if $tests; then flags=-istrlL; else flags=-isrlL; fi
./build_linux.sh "$flags"
./scripts/check_appimage_libs.sh ./build/package ./build/package/bin/orca-slicer ./scripts/check_appimage_libs.sh ./build/package ./build/package/bin/orca-slicer
appimage=./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_${{ env.ver }}.AppImage appimage=./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_${{ env.ver }}.AppImage
mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage "$appimage" mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage "$appimage"
chmod +x "$appimage" chmod +x "$appimage"
if $tests; then tar -cvpf build_tests.tar build/tests; fi tar -cvf build_tests.tar build/tests
# Use tar because upload-artifacts won't always preserve directory structure # Use tar because upload-artifacts won't always preserve directory structure
# and doesn't preserve file permissions # and doesn't preserve file permissions
- name: Upload Test Artifact - name: Upload Test Artifact
if: runner.os == 'Linux' && ((!vars.SELF_HOSTED && inputs.arch == 'aarch64') || (vars.SELF_HOSTED && inputs.arch != 'aarch64')) if: runner.os == 'Linux'
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v7
with: with:
name: ${{ github.sha }}-tests name: ${{ github.sha }}-tests-linux-${{ inputs.arch == 'aarch64' && 'aarch64' || 'x86_64' }}
overwrite: true overwrite: true
path: build_tests.tar path: build_tests.tar
retention-days: 5 retention-days: 5
+1 -1
View File
@@ -27,7 +27,7 @@ jobs:
with: with:
prompt: "/dedupe ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}" prompt: "/dedupe ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}"
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
claude_args: "--model claude-sonnet-4-5-20250929" model: "claude-sonnet-4-5-20250929"
claude_env: | claude_env: |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+73
View File
@@ -0,0 +1,73 @@
name: Unit Tests
# Download a platform's test artifact, run ctest, and upload the JUnit
# results for aggregation. Called once per arch from build_all.yml.
on:
workflow_call:
inputs:
os:
required: true
type: string
artifact:
description: Test artifact uploaded by the build leg
required: true
type: string
test-dir:
description: Built tests dir; defaults to build/tests, override for arch-separated builds
required: false
type: string
default: build/tests
jobs:
unit_tests:
# Static "Unit Tests"; the per-arch label is the caller's job name, so the
# graph shows e.g. "Windows x64 / Unit Tests".
name: Unit Tests
runs-on: ${{ inputs.os }}
steps:
- name: Checkout
uses: actions/checkout@v7
with:
# tests/data is referenced by absolute path (TEST_DATA_DIR).
sparse-checkout: |
.github
scripts
tests
- name: Apt-Install Dependencies
if: runner.os == 'Linux' && !vars.SELF_HOSTED
uses: ./.github/actions/apt-install-deps
- name: Restore Test Artifact
uses: actions/download-artifact@v8
with:
name: ${{ inputs.artifact }}
- uses: lukka/get-cmake@latest
with:
cmakeVersion: "~4.3.0" # use most recent 4.3.x version
useLocalCache: true
useCloudCache: true
- name: Unpackage and Run Unit Tests
timeout-minutes: 20
shell: bash
run: |
tar -xvf build_tests.tar
# Multi-config generators (Windows/macOS) need a config; Linux is single-config.
scripts/run_unit_tests.sh "${{ inputs.test-dir }}" "${{ runner.os != 'Linux' && 'Release' || '' }}"
- name: Upload Test Logs
if: ${{ failure() }}
uses: actions/upload-artifact@v7
with:
name: unit-test-logs-${{ inputs.artifact }}
path: ${{ inputs.test-dir }}/**/*.log
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v7
with:
name: test-results-${{ inputs.artifact }}
path: ctest_results.xml
retention-days: 5
if-no-files-found: warn
- name: Delete Test Artifact
if: success()
uses: geekyeggo/delete-artifact@v6
with:
name: ${{ inputs.artifact }}
+1 -1
View File
@@ -710,7 +710,7 @@ endif ()
set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/i18n") set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/i18n")
set(BBL_L18N_DIR "${CMAKE_CURRENT_SOURCE_DIR}/localization/i18n") set(BBL_L18N_DIR "${CMAKE_CURRENT_SOURCE_DIR}/localization/i18n")
add_custom_target(gettext_make_pot add_custom_target(gettext_make_pot
COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_CTX:1,2c --keyword=_CTX_utf8:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost
-f "${BBL_L18N_DIR}/list.txt" -f "${BBL_L18N_DIR}/list.txt"
-o "${BBL_L18N_DIR}/OrcaSlicer.pot" -o "${BBL_L18N_DIR}/OrcaSlicer.pot"
COMMAND hintsToPot ${SLIC3R_RESOURCES_DIR} ${BBL_L18N_DIR} COMMAND hintsToPot ${SLIC3R_RESOURCES_DIR} ${BBL_L18N_DIR}
+5 -8
View File
@@ -59,7 +59,7 @@ while getopts ":dpa:snt:xbc:i:1Tuh" opt; do
echo " -c: Set CMake build configuration, default is Release" echo " -c: Set CMake build configuration, default is Release"
echo " -i: Add a prefix to ignore during CMake dependency discovery (repeatable), defaults to /opt/local:/usr/local:/opt/homebrew" echo " -i: Add a prefix to ignore during CMake dependency discovery (repeatable), defaults to /opt/local:/usr/local:/opt/homebrew"
echo " -1: Use single job for building" echo " -1: Use single job for building"
echo " -T: Build and run tests" echo " -T: Build and run tests (set ORCA_TESTS_BUILD_ONLY=1 to build without running)"
exit 0 exit 0
;; ;;
* ) * )
@@ -209,13 +209,10 @@ function build_slicer() {
cmake --build . --config "$BUILD_CONFIG" --target "$SLICER_BUILD_TARGET" cmake --build . --config "$BUILD_CONFIG" --target "$SLICER_BUILD_TARGET"
) )
if [ "1." == "$BUILD_TESTS". ]; then # -T also runs the tests; ORCA_TESTS_BUILD_ONLY=1 builds them without
echo "Running tests for $_ARCH..." # running, so CI can build here and run them in a dedicated job.
( if [ "1." == "$BUILD_TESTS". ] && [ "1." != "$ORCA_TESTS_BUILD_ONLY". ]; then
set -x "$PROJECT_DIR/scripts/run_unit_tests.sh" "build/$_ARCH/tests" "$BUILD_CONFIG"
cd "$PROJECT_BUILD_DIR"
ctest --build-config "$BUILD_CONFIG" --output-on-failure
)
fi fi
echo "Verify localization with gettext..." echo "Verify localization with gettext..."
+8 -2
View File
@@ -20,6 +20,12 @@ for %%a in (%*) do (
if "%%a"=="-x" set USE_NINJA=1 if "%%a"=="-x" set USE_NINJA=1
) )
@REM Check for unit-tests option ("tests")
set BUILD_TESTS=OFF
for %%a in (%*) do (
if /I "%%a"=="tests" set BUILD_TESTS=ON
)
if "%USE_NINJA%"=="1" ( if "%USE_NINJA%"=="1" (
echo Using Ninja Multi-Config generator echo Using Ninja Multi-Config generator
set CMAKE_GENERATOR="Ninja Multi-Config" set CMAKE_GENERATOR="Ninja Multi-Config"
@@ -145,10 +151,10 @@ cd %build_dir%
echo on echo on
set CMAKE_POLICY_VERSION_MINIMUM=3.5 set CMAKE_POLICY_VERSION_MINIMUM=3.5
if "%USE_NINJA%"=="1" ( if "%USE_NINJA%"=="1" (
cmake .. -G %CMAKE_GENERATOR% -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type% cmake .. -G %CMAKE_GENERATOR% -DORCA_TOOLS=ON %SIG_FLAG% -DBUILD_TESTS=%BUILD_TESTS% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target ALL_BUILD cmake --build . --config %build_type% --target ALL_BUILD
) else ( ) else (
cmake .. -G %CMAKE_GENERATOR% -A %arch% -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type% cmake .. -G %CMAKE_GENERATOR% -A %arch% -DORCA_TOOLS=ON %SIG_FLAG% -DBUILD_TESTS=%BUILD_TESTS% -DCMAKE_BUILD_TYPE=%build_type%
cmake --build . --config %build_type% --target ALL_BUILD -- -m cmake --build . --config %build_type% --target ALL_BUILD -- -m
) )
@echo off @echo off
+133 -28
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -163,6 +163,12 @@ msgstr ""
msgid "Gap Fill" msgid "Gap Fill"
msgstr "" msgstr ""
msgid "Vertical"
msgstr ""
msgid "Horizontal"
msgstr ""
#, possible-boost-format #, possible-boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "" msgstr ""
@@ -255,12 +261,6 @@ msgstr ""
msgid "Height Range" msgid "Height Range"
msgstr "" msgstr ""
msgid "Vertical"
msgstr ""
msgid "Horizontal"
msgstr ""
msgid "Remove painted color" msgid "Remove painted color"
msgstr "" msgstr ""
@@ -325,6 +325,7 @@ msgstr ""
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "" msgstr ""
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "" msgstr ""
@@ -334,6 +335,7 @@ msgstr ""
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "" msgstr ""
msgctxt "inches"
msgid "in" msgid "in"
msgstr "" msgstr ""
@@ -367,6 +369,9 @@ msgstr ""
msgid "Object operations" msgid "Object operations"
msgstr "" msgstr ""
msgid "Scale"
msgstr ""
msgid "Volume operations" msgid "Volume operations"
msgstr "" msgstr ""
@@ -412,6 +417,10 @@ msgstr ""
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "" msgstr ""
msgctxt "Noun"
msgid "Scale"
msgstr ""
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "" msgstr ""
@@ -3498,6 +3507,7 @@ msgstr ""
msgid "Save" msgid "Save"
msgstr "" msgstr ""
msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "" msgstr ""
@@ -4780,6 +4790,7 @@ msgstr ""
msgid "Color change" msgid "Color change"
msgstr "" msgstr ""
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "" msgstr ""
@@ -4935,11 +4946,15 @@ msgstr ""
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "" msgstr ""
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr ""
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "" msgstr ""
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "" msgstr ""
@@ -5256,6 +5271,10 @@ msgstr ""
msgid "Export G-code file" msgid "Export G-code file"
msgstr "" msgstr ""
msgctxt "Verb"
msgid "Print"
msgstr ""
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "" msgstr ""
@@ -5429,15 +5448,6 @@ msgstr ""
msgid "Export" msgid "Export"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
@@ -5552,6 +5562,15 @@ msgstr ""
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -9832,11 +9851,7 @@ msgstr ""
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "" msgstr ""
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "" msgstr ""
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
@@ -11072,7 +11087,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11086,7 +11101,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11710,6 +11725,42 @@ msgstr ""
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "" msgstr ""
@@ -12310,12 +12361,12 @@ msgstr ""
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "" msgstr ""
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -13919,6 +13970,9 @@ msgstr ""
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
msgid "Back"
msgstr ""
msgid "Random" msgid "Random"
msgstr "" msgstr ""
@@ -14253,6 +14307,18 @@ msgstr ""
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "" msgstr ""
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "" msgstr ""
@@ -14656,6 +14722,45 @@ msgstr ""
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "" msgstr ""
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "" msgstr ""
+153 -36
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2025-03-15 10:55+0100\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -167,6 +167,12 @@ msgstr "Farcir"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Farcir el buit" msgstr "Farcir el buit"
msgid "Vertical"
msgstr ""
msgid "Horizontal"
msgstr "Horitzontal"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Permet pintar només les facetes seleccionades per: \"%1%\"" msgstr "Permet pintar només les facetes seleccionades per: \"%1%\""
@@ -262,12 +268,6 @@ msgstr ""
msgid "Height Range" msgid "Height Range"
msgstr "Rang d'alçada" msgstr "Rang d'alçada"
msgid "Vertical"
msgstr ""
msgid "Horizontal"
msgstr "Horitzontal"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Elimina el color pintat" msgstr "Elimina el color pintat"
@@ -332,6 +332,7 @@ msgstr "Gizmo-Rotació"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optimitzar l'orientació" msgstr "Optimitzar l'orientació"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Escalar" msgstr "Escalar"
@@ -341,8 +342,9 @@ msgstr "Gizmo-Escalar"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Error: Tanqueu primer tots els menús de la barra d'eines" msgstr "Error: Tanqueu primer tots els menús de la barra d'eines"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "polç" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -375,6 +377,9 @@ msgstr "Ràtios d'escala"
msgid "Object operations" msgid "Object operations"
msgstr "Operacions amb objectes" msgstr "Operacions amb objectes"
msgid "Scale"
msgstr "Escalar"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Operacions de volum" msgstr "Operacions de volum"
@@ -426,6 +431,10 @@ msgstr "Restableix la rotació actual al valor d'quan s'ha obert l'eina de rotac
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Restableix la rotació actual a zeros reals." msgstr "Restableix la rotació actual a zeros reals."
msgctxt "Noun"
msgid "Scale"
msgstr "Escalar"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Mida" msgstr "Mida"
@@ -3651,7 +3660,7 @@ msgstr "Calibratge completat. Trobeu la línia d'extrusió més uniforme al vost
msgid "Save" msgid "Save"
msgstr "Desar" msgstr "Desar"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Darrera" msgstr "Darrera"
@@ -5034,6 +5043,7 @@ msgstr "Canvis d'eina"
msgid "Color change" msgid "Color change"
msgstr "Canvi de color" msgstr "Canvi de color"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Imprimir" msgstr "Imprimir"
@@ -5197,11 +5207,15 @@ msgstr "Evitar la regió de calibratge d'extrusió"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Alinear a l'eix Y" msgstr "Alinear a l'eix Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Darrera"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Esquerra" msgstr "Esquerra"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Dreta" msgstr "Dreta"
@@ -5530,6 +5544,10 @@ msgstr "Imprimir placa d'impressió"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Exportar el fitxer del Codi-G" msgstr "Exportar el fitxer del Codi-G"
msgctxt "Verb"
msgid "Print"
msgstr "Imprimir"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exportar fitxer de la placa laminada" msgstr "Exportar fitxer de la placa laminada"
@@ -5703,15 +5721,6 @@ msgstr "Exportar la configuració actual a fitxers"
msgid "Export" msgid "Export"
msgstr "Exportar" msgstr "Exportar"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Surt" msgstr "Surt"
@@ -5828,6 +5837,15 @@ msgstr "Vista"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10328,12 +10346,8 @@ msgstr "Informació del broquet sincronitzada correctament."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Informació del broquet i nombre d'AMS sincronitzats correctament." msgstr "Informació del broquet i nombre d'AMS sincronitzats correctament."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Continua sincronitzant filaments" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Cancel·la"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Color del filament sincronitzat correctament de la impressora." msgstr "Color del filament sincronitzat correctament de la impressora."
@@ -11658,7 +11672,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11672,7 +11686,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12404,6 +12418,42 @@ msgstr "Densitat de la superfície superior"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Densitat de la capa de superfície superior. Un valor del 100% crea una capa superior completament sòlida i llisa. Reduir aquest valor resulta en una superfície superior texturada, segons el patró de superfície superior triat. Un valor del 0% resultarà en la creació de només les parets a la capa superior. Destinat a fins estètics o funcionals, no per solucionar problemes com la sobreextrusió." msgstr "Densitat de la capa de superfície superior. Un valor del 100% crea una capa superior completament sòlida i llisa. Reduir aquest valor resulta en una superfície superior texturada, segons el patró de superfície superior triat. Un valor del 0% resultarà en la creació de només les parets a la capa superior. Destinat a fins estètics o funcionals, no per solucionar problemes com la sobreextrusió."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Patró de superfície inferior" msgstr "Patró de superfície inferior"
@@ -13069,12 +13119,12 @@ msgstr "Densitat de farciment poc dens"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Densitat de farciment poc dens, converteix el 100% tu el teu farciment poc dens en farciment sòlid i s'utilitzarà el patró de farciment sòlid intern" msgstr "Densitat de farciment poc dens, converteix el 100% tu el teu farciment poc dens en farciment sòlid i s'utilitzarà el patró de farciment sòlid intern"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Alinea la direcció del farciment al model" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14807,6 +14857,10 @@ msgstr "Alineat"
msgid "Aligned back" msgid "Aligned back"
msgstr "Alineat al darrere" msgstr "Alineat al darrere"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Darrera"
msgid "Random" msgid "Random"
msgstr "Aleatori" msgstr "Aleatori"
@@ -15165,6 +15219,18 @@ msgstr "Purgar tots els extrusors d'impressió"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Si està habilitat, tots els extrusors d'impressió seran purgats a la vora frontal del llit d'impressió al començament de la impressió." msgstr "Si està habilitat, tots els extrusors d'impressió seran purgats a la vora frontal del llit d'impressió al començament de la impressió."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Radi de tancament dels buits en laminar" msgstr "Radi de tancament dels buits en laminar"
@@ -15611,6 +15677,45 @@ msgstr "Gruix mínim de la carcassa superior"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "El nombre de capes sòlides superiors augmenta quan es tallen si el gruix calculat per les capes de closca superior és més prim que aquest valor. Això pot evitar tenir una closca massa fina quan l'alçada de la capa és petita. 0 significa que aquesta configuració està desactivada i que el gruix de la carcassa superior està absolutament determinat per les capes de la carcassa superior" msgstr "El nombre de capes sòlides superiors augmenta quan es tallen si el gruix calculat per les capes de closca superior és més prim que aquest valor. Això pot evitar tenir una closca massa fina quan l'alçada de la capa és petita. 0 significa que aquesta configuració està desactivada i que el gruix de la carcassa superior està absolutament determinat per les capes de la carcassa superior"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Velocitat de desplaçament més ràpida i sense extrusió" msgstr "Velocitat de desplaçament més ràpida i sense extrusió"
@@ -19646,6 +19751,22 @@ msgstr ""
"Evitar la deformació( warping )\n" "Evitar la deformació( warping )\n"
"Sabíeu que quan imprimiu materials propensos a deformar-se, com ara l'ABS, augmentar adequadament la temperatura del llit pot reduir la probabilitat de deformació?" "Sabíeu que quan imprimiu materials propensos a deformar-se, com ara l'ABS, augmentar adequadament la temperatura del llit pot reduir la probabilitat de deformació?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Continua sincronitzant filaments"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Cancel·la"
#~ msgid "Align infill direction to model"
#~ msgstr "Alinea la direcció del farciment al model"
#~ msgid "Print"
#~ msgstr "Imprimir"
#~ msgid "in"
#~ msgstr "polç"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Coordenades de l'objecte" #~ msgstr "Coordenades de l'objecte"
@@ -21099,10 +21220,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "Desmarcar" #~ msgstr "Desmarcar"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Escalar"
#~ msgid "Lift Z Enforcement" #~ msgid "Lift Z Enforcement"
#~ msgstr "Forçar elevació Z" #~ msgstr "Forçar elevació Z"
+145 -31
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Jakub Hencl\n" "Last-Translator: Jakub Hencl\n"
"Language-Team: \n" "Language-Team: \n"
@@ -162,6 +162,12 @@ msgstr "Výplň"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Vyplnění mezery" msgstr "Vyplnění mezery"
msgid "Vertical"
msgstr "Vertikální"
msgid "Horizontal"
msgstr "Vodorovně"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Umožňuje malování pouze na plochách vybraných podle: \"%1%\"" msgstr "Umožňuje malování pouze na plochách vybraných podle: \"%1%\""
@@ -257,12 +263,6 @@ msgstr "Trojúhelník"
msgid "Height Range" msgid "Height Range"
msgstr "Rozsah výšky" msgstr "Rozsah výšky"
msgid "Vertical"
msgstr "Vertikální"
msgid "Horizontal"
msgstr "Vodorovně"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Odstranit nanesenou barvu" msgstr "Odstranit nanesenou barvu"
@@ -327,6 +327,7 @@ msgstr "Gizmo-Otočit"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optimalizovat orientaci" msgstr "Optimalizovat orientaci"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Měřítko" msgstr "Měřítko"
@@ -336,8 +337,9 @@ msgstr "Gizmo-Měřítko"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Nejprve prosím zavřete všechna menu nástrojové lišty" msgstr "Nejprve prosím zavřete všechna menu nástrojové lišty"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "v" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -370,6 +372,9 @@ msgstr "Poměry měřítka"
msgid "Object operations" msgid "Object operations"
msgstr "Operace s objektem" msgstr "Operace s objektem"
msgid "Scale"
msgstr "Měřítko"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Operace s hlasitostí" msgstr "Operace s hlasitostí"
@@ -421,6 +426,10 @@ msgstr "Obnovit aktuální rotaci na hodnotu při otevření nástroje pro rotac
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Obnovit aktuální rotaci na skutečné nuly." msgstr "Obnovit aktuální rotaci na skutečné nuly."
msgctxt "Noun"
msgid "Scale"
msgstr "Měřítko"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Velikost" msgstr "Velikost"
@@ -3650,7 +3659,7 @@ msgstr "Kalibrace byla dokončena. Najděte na vyhřívané podložce nejrovnom
msgid "Save" msgid "Save"
msgstr "Uložit" msgstr "Uložit"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Zpět" msgstr "Zpět"
@@ -5031,6 +5040,7 @@ msgstr "Výměny nástrojů"
msgid "Color change" msgid "Color change"
msgstr "Změna barvy" msgstr "Změna barvy"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Tisk" msgstr "Tisk"
@@ -5194,11 +5204,15 @@ msgstr "Vyhněte se kalibrační oblasti extruze"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Zarovnat na osu Y" msgstr "Zarovnat na osu Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Zpět"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Levý" msgstr "Levý"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Pravý" msgstr "Pravý"
@@ -5526,6 +5540,10 @@ msgstr "Tisková deska"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Exportovat G-code soubor" msgstr "Exportovat G-code soubor"
msgctxt "Verb"
msgid "Print"
msgstr "Tisk"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exportovat nařezaný soubor desky" msgstr "Exportovat nařezaný soubor desky"
@@ -5699,15 +5717,6 @@ msgstr "Exportovat aktuální konfiguraci do souborů"
msgid "Export" msgid "Export"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Ukončit" msgstr "Ukončit"
@@ -5824,6 +5833,15 @@ msgstr "Zobrazit"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Balík předvoleb" msgstr "Balík předvoleb"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10333,11 +10351,7 @@ msgstr ""
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "" msgstr ""
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "" msgstr ""
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
@@ -11664,7 +11678,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11678,7 +11692,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12408,6 +12422,42 @@ msgstr "Hustota horního povrchu"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Hustota horní povrchové vrstvy. Hodnota 100 % vytvoří zcela plnou, hladkou horní vrstvu. Snížením této hodnoty vznikne texturovaný horní povrch podle zvoleného vzoru horního povrchu. Hodnota 0 % znamená, že na horní vrstvě budou vytvořeny pouze stěny. Určeno pro estetické nebo funkční účely, nikoli k řešení problémů jako je nadměrná extruze." msgstr "Hustota horní povrchové vrstvy. Hodnota 100 % vytvoří zcela plnou, hladkou horní vrstvu. Snížením této hodnoty vznikne texturovaný horní povrch podle zvoleného vzoru horního povrchu. Hodnota 0 % znamená, že na horní vrstvě budou vytvořeny pouze stěny. Určeno pro estetické nebo funkční účely, nikoli k řešení problémů jako je nadměrná extruze."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Vzor spodního povrchu" msgstr "Vzor spodního povrchu"
@@ -13075,12 +13125,12 @@ msgstr "Hustota řídké výplně"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Hustota vnitřní řídké výplně, 100 % přemění veškerou řídkou výplň na plnou a použije se vzor vnitřní plné výplně." msgstr "Hustota vnitřní řídké výplně, 100 % přemění veškerou řídkou výplň na plnou a použije se vzor vnitřní plné výplně."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Zarovnat směr výplně podle modelu" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14854,6 +14904,10 @@ msgstr "Zarovnáno"
msgid "Aligned back" msgid "Aligned back"
msgstr "Zarovnat zpět" msgstr "Zarovnat zpět"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Zpět"
msgid "Random" msgid "Random"
msgstr "Náhodně" msgstr "Náhodně"
@@ -15214,6 +15268,18 @@ msgstr "Připravit všechny tiskové extrudery"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Pokud je povoleno, všechny tiskové extrudery budou na začátku tisku připraveny na předním okraji tiskové podložky." msgstr "Pokud je povoleno, všechny tiskové extrudery budou na začátku tisku připraveny na předním okraji tiskové podložky."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Poloměr uzavření mezery řezu" msgstr "Poloměr uzavření mezery řezu"
@@ -15653,6 +15719,45 @@ msgstr "Tloušťka horního pláště"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Počet horních pevných vrstev bude při slicování zvýšen, pokud tloušťka vypočtená podle horních vrstev bude menší než tato hodnota. Tím lze předejít příliš tenké skořepině při malé výšce vrstvy. 0 znamená, že je nastavení vypnuté a tloušťka horní skořepiny je určena pouze počtem horních vrstev." msgstr "Počet horních pevných vrstev bude při slicování zvýšen, pokud tloušťka vypočtená podle horních vrstev bude menší než tato hodnota. Tím lze předejít příliš tenké skořepině při malé výšce vrstvy. 0 znamená, že je nastavení vypnuté a tloušťka horní skořepiny je určena pouze počtem horních vrstev."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Rychlost přejezdu bez extruze." msgstr "Rychlost přejezdu bez extruze."
@@ -19680,6 +19785,15 @@ msgstr ""
"Zamezte kroucení\n" "Zamezte kroucení\n"
"Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?" "Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?"
#~ msgid "Align infill direction to model"
#~ msgstr "Zarovnat směr výplně podle modelu"
#~ msgid "Print"
#~ msgstr "Tisk"
#~ msgid "in"
#~ msgstr "v"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Souřadnice objektu" #~ msgstr "Souřadnice objektu"
+199 -54
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n" "Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -162,6 +162,12 @@ msgstr "Ausfüllen"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Lücken füllen" msgstr "Lücken füllen"
msgid "Vertical"
msgstr "Vertikal"
msgid "Horizontal"
msgstr "Horizontal"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Erlaubt das malen nur auf Seiten, welche ausgewählt wurden durch: \"%1%\"" msgstr "Erlaubt das malen nur auf Seiten, welche ausgewählt wurden durch: \"%1%\""
@@ -257,12 +263,6 @@ msgstr "Dreieck"
msgid "Height Range" msgid "Height Range"
msgstr "Höhenbereich" msgstr "Höhenbereich"
msgid "Vertical"
msgstr "Vertikal"
msgid "Horizontal"
msgstr "Horizontal"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Gemalte Farbe entfernen" msgstr "Gemalte Farbe entfernen"
@@ -327,6 +327,7 @@ msgstr "Gizmo-Drehen"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optimiere Ausrichtung" msgstr "Optimiere Ausrichtung"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Skalieren" msgstr "Skalieren"
@@ -336,8 +337,9 @@ msgstr "Gizmo-Skalieren"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Fehler: Bitte schließen sie zuerst alle Werkzeugleistenmenüs" msgstr "Fehler: Bitte schließen sie zuerst alle Werkzeugleistenmenüs"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "in" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -370,6 +372,9 @@ msgstr "Skalierungsverhältnisse"
msgid "Object operations" msgid "Object operations"
msgstr "Objekt-Operationen" msgstr "Objekt-Operationen"
msgid "Scale"
msgstr "Skalieren"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Volumen Operationen" msgstr "Volumen Operationen"
@@ -421,6 +426,10 @@ msgstr "Setze die aktuelle Rotation auf den Wert zurück, als das Rotationswerkz
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Setze die aktuelle Rotation auf die realen Nullen zurück." msgstr "Setze die aktuelle Rotation auf die realen Nullen zurück."
msgctxt "Noun"
msgid "Scale"
msgstr "Skalieren"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Größe" msgstr "Größe"
@@ -3653,7 +3662,7 @@ msgstr "Kalibrierung abgeschlossen. Bitte suchen Sie die gleichmäßigste Extrus
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Zurück" msgstr "Zurück"
@@ -5035,6 +5044,7 @@ msgstr "Werkzeugwechsel"
msgid "Color change" msgid "Color change"
msgstr "Farbwechsel" msgstr "Farbwechsel"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "aktuelle Platte drucken" msgstr "aktuelle Platte drucken"
@@ -5198,11 +5208,15 @@ msgstr "Vermeiden Sie den Bereich der Extrusionskalibrierung"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "An Y-Achse ausrichten" msgstr "An Y-Achse ausrichten"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Zurück"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "links" msgstr "links"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "rechts" msgstr "rechts"
@@ -5528,6 +5542,10 @@ msgstr "Aktuelle Platte drucken"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "G-Code als Datei exportieren" msgstr "G-Code als Datei exportieren"
msgctxt "Verb"
msgid "Print"
msgstr "aktuelle Platte drucken"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exportiere aktuelle Platte als STL Datei" msgstr "Exportiere aktuelle Platte als STL Datei"
@@ -5701,15 +5719,6 @@ msgstr "Aktuelle Konfiguration in Dateien exportieren"
msgid "Export" msgid "Export"
msgstr "Exportieren" msgstr "Exportieren"
msgid "Sync Presets"
msgstr "Presets synchronisieren"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Die neuesten Presets von OrcaCloud abrufen und anwenden"
msgid "You must be logged in to sync presets from cloud."
msgstr "Sie müssen angemeldet sein, um Presets aus der Cloud zu synchronisieren."
msgid "Quit" msgid "Quit"
msgstr "Beenden" msgstr "Beenden"
@@ -5826,6 +5835,15 @@ msgstr "Ansicht"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Vorlagen-Bundle" msgstr "Vorlagen-Bundle"
msgid "Sync Presets"
msgstr "Presets synchronisieren"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Die neuesten Presets von OrcaCloud abrufen und anwenden"
msgid "You must be logged in to sync presets from cloud."
msgstr "Sie müssen angemeldet sein, um Presets aus der Cloud zu synchronisieren."
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "Synchronisiere Presets aus der Cloud…" msgstr "Synchronisiere Presets aus der Cloud…"
@@ -10362,12 +10380,8 @@ msgstr "Düseninformationen erfolgreich synchronisiert."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Düsen und AMS Nummer erfolgreich synchronisiert." msgstr "Düsen und AMS Nummer erfolgreich synchronisiert."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Weiter mit dem Synchronisieren der Filamente" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Abbrechen"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Farbe des Filaments erfolgreich vom Drucker synchronisiert." msgstr "Farbe des Filaments erfolgreich vom Drucker synchronisiert."
@@ -11697,19 +11711,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Externe Brückenwinkelüberschreibung.\n"
"Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n"
"Ansonsten wird der angegebene Winkel wie folgt verwendet:\n"
" - Die absoluten Koordinaten\n"
" - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n"
" - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n"
"\n"
"Verwenden Sie 180° für einen absoluten Winkel von Null."
msgid "Internal bridge infill direction" msgid "Internal bridge infill direction"
msgstr "Interne Brücken Füllrichtung" msgstr "Interne Brücken Füllrichtung"
@@ -11719,19 +11725,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Interne Brückenwinkelüberschreibung.\n"
"Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n"
"Ansonsten wird der angegebene Winkel wie folgt verwendet:\n"
" - Die absoluten Koordinaten\n"
" - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n"
" - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n"
"\n"
"Verwenden Sie 180° für einen absoluten Winkel von Null."
msgid "Relative bridge angle" msgid "Relative bridge angle"
msgstr "Relativer Brückenwinkel" msgstr "Relativer Brückenwinkel"
@@ -12514,6 +12512,42 @@ msgstr "Dichte der oberen Oberfläche"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Dichte der oberen Oberflächenschicht. Ein Wert von 100 % erzeugt eine vollständig massive, glatte obere Schicht. Eine Reduzierung dieses Wertes führt zu einer strukturierten oberen Oberfläche, abhängig vom gewählten Oberflächenmuster. Ein Wert von 0 % führt dazu, dass nur die Wände der oberen Schicht erstellt werden. Diese Einstellung dient ästhetischen oder funktionalen Zwecken und nicht zur Behebung von Problemen wie Überextrusion." msgstr "Dichte der oberen Oberflächenschicht. Ein Wert von 100 % erzeugt eine vollständig massive, glatte obere Schicht. Eine Reduzierung dieses Wertes führt zu einer strukturierten oberen Oberfläche, abhängig vom gewählten Oberflächenmuster. Ein Wert von 0 % führt dazu, dass nur die Wände der oberen Schicht erstellt werden. Diese Einstellung dient ästhetischen oder funktionalen Zwecken und nicht zur Behebung von Problemen wie Überextrusion."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Muster der unteren Fläche" msgstr "Muster der unteren Fläche"
@@ -13179,15 +13213,13 @@ msgstr "Fülldichte"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Dichte der internen Füllung, 100% verwandelt alle interne Füllung in massive Füllung und das interne massive Füllmuster wird verwendet." msgstr "Dichte der internen Füllung, 100% verwandelt alle interne Füllung in massive Füllung und das interne massive Füllmuster wird verwendet."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Füllrichtung am Modell ausrichten" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"Richtet die Richtungen von Füllung, Brücke, Glättung und Oberflächenfüllung so aus, dass sie der Orientierung des Modells auf der Bauplatte folgen.\n"
"Wenn aktiviert, drehen sich die Richtungen mit dem Modell, um optimale Festigkeitseigenschaften zu erhalten."
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "Massive Schichten einfügen" msgstr "Massive Schichten einfügen"
@@ -14961,6 +14993,10 @@ msgstr "Ausgerichtet"
msgid "Aligned back" msgid "Aligned back"
msgstr "Ausgerichtet hinten" msgstr "Ausgerichtet hinten"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Zurück"
msgid "Random" msgid "Random"
msgstr "Zufall" msgstr "Zufall"
@@ -15333,6 +15369,18 @@ msgstr "Reinige alle Druckextruder"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Wenn aktiviert, werden alle Druckextruder am vorderen Rand des Druckbetts am Anfang des Drucks gereinigt." msgstr "Wenn aktiviert, werden alle Druckextruder am vorderen Rand des Druckbetts am Anfang des Drucks gereinigt."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Slice-Lückenschlussradius" msgstr "Slice-Lückenschlussradius"
@@ -15780,6 +15828,45 @@ msgstr "Dicke der oberen Schale"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Die Anzahl der oberen festen Schichten wird beim Slicen erhöht, wenn die obere Schalenstärke dünner als dieser Wert ist. Dies kann verhindern, dass die Schale zu dünn wird, wenn eine geringe Schichthöhe verwendet wird. 0 bedeutet, dass diese Einstellung deaktiviert ist und die Dicke der oberen Schale absolut durch die oberen Schalenschichten bestimmt wird." msgstr "Die Anzahl der oberen festen Schichten wird beim Slicen erhöht, wenn die obere Schalenstärke dünner als dieser Wert ist. Dies kann verhindern, dass die Schale zu dünn wird, wenn eine geringe Schichthöhe verwendet wird. 0 bedeutet, dass diese Einstellung deaktiviert ist und die Dicke der oberen Schale absolut durch die oberen Schalenschichten bestimmt wird."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Eilgeschwindigkeit, wenn nicht extrudiert wird." msgstr "Eilgeschwindigkeit, wenn nicht extrudiert wird."
@@ -19821,6 +19908,68 @@ msgstr ""
"Verwerfungen vermeiden\n" "Verwerfungen vermeiden\n"
"Wussten Sie, dass beim Drucken von Materialien, die zu Verwerfungen neigen, wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die Wahrscheinlichkeit von Verwerfungen verringert werden kann?" "Wussten Sie, dass beim Drucken von Materialien, die zu Verwerfungen neigen, wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die Wahrscheinlichkeit von Verwerfungen verringert werden kann?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Weiter mit dem Synchronisieren der Filamente"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Abbrechen"
#, no-c-format, no-boost-format
#~ msgid ""
#~ "External Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Externe Brückenwinkelüberschreibung.\n"
#~ "Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n"
#~ "Ansonsten wird der angegebene Winkel wie folgt verwendet:\n"
#~ " - Die absoluten Koordinaten\n"
#~ " - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n"
#~ " - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n"
#~ "\n"
#~ "Verwenden Sie 180° für einen absoluten Winkel von Null."
#~ msgid ""
#~ "Internal Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Interne Brückenwinkelüberschreibung.\n"
#~ "Wenn auf Null gelassen, wird der Brückenwinkel automatisch für jede spezifische Brücke berechnet.\n"
#~ "Ansonsten wird der angegebene Winkel wie folgt verwendet:\n"
#~ " - Die absoluten Koordinaten\n"
#~ " - Die absoluten Koordinaten + Modellrotation: Wenn 'Füllrichtung an Modell ausrichten' aktiviert ist\n"
#~ " - Der optimale automatische Winkel + dieser Wert: Wenn 'Relativer Brückenwinkel' aktiviert ist\n"
#~ "\n"
#~ "Verwenden Sie 180° für einen absoluten Winkel von Null."
#~ msgid "Align infill direction to model"
#~ msgstr "Füllrichtung am Modell ausrichten"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "Richtet die Richtungen von Füllung, Brücke, Glättung und Oberflächenfüllung so aus, dass sie der Orientierung des Modells auf der Bauplatte folgen.\n"
#~ "Wenn aktiviert, drehen sich die Richtungen mit dem Modell, um optimale Festigkeitseigenschaften zu erhalten."
#~ msgid "Print"
#~ msgstr "aktuelle Platte drucken"
#~ msgid "in"
#~ msgstr "in"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Objektkoordinaten" #~ msgstr "Objektkoordinaten"
@@ -21726,10 +21875,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "Abwählen" #~ msgstr "Abwählen"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Skalieren"
#~ msgid "Lift Z Enforcement" #~ msgid "Lift Z Enforcement"
#~ msgstr "Z-Höhe einhalten" #~ msgstr "Z-Höhe einhalten"
+133 -28
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2026-06-17 15:44-0300\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n"
"Last-Translator: Alexandre Folle de Menezes\n" "Last-Translator: Alexandre Folle de Menezes\n"
"Language-Team: \n" "Language-Team: \n"
@@ -159,6 +159,12 @@ msgstr ""
msgid "Gap Fill" msgid "Gap Fill"
msgstr "" msgstr ""
msgid "Vertical"
msgstr ""
msgid "Horizontal"
msgstr ""
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "" msgstr ""
@@ -251,12 +257,6 @@ msgstr ""
msgid "Height Range" msgid "Height Range"
msgstr "" msgstr ""
msgid "Vertical"
msgstr ""
msgid "Horizontal"
msgstr ""
msgid "Remove painted color" msgid "Remove painted color"
msgstr "" msgstr ""
@@ -321,6 +321,7 @@ msgstr ""
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "" msgstr ""
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "" msgstr ""
@@ -330,6 +331,7 @@ msgstr ""
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "" msgstr ""
msgctxt "inches"
msgid "in" msgid "in"
msgstr "" msgstr ""
@@ -363,6 +365,9 @@ msgstr ""
msgid "Object operations" msgid "Object operations"
msgstr "" msgstr ""
msgid "Scale"
msgstr ""
msgid "Volume operations" msgid "Volume operations"
msgstr "" msgstr ""
@@ -408,6 +413,10 @@ msgstr ""
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "" msgstr ""
msgctxt "Noun"
msgid "Scale"
msgstr ""
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "" msgstr ""
@@ -3494,6 +3503,7 @@ msgstr ""
msgid "Save" msgid "Save"
msgstr "" msgstr ""
msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "" msgstr ""
@@ -4776,6 +4786,7 @@ msgstr ""
msgid "Color change" msgid "Color change"
msgstr "" msgstr ""
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "" msgstr ""
@@ -4931,11 +4942,15 @@ msgstr ""
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "" msgstr ""
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr ""
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "" msgstr ""
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "" msgstr ""
@@ -5252,6 +5267,10 @@ msgstr ""
msgid "Export G-code file" msgid "Export G-code file"
msgstr "" msgstr ""
msgctxt "Verb"
msgid "Print"
msgstr ""
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "" msgstr ""
@@ -5425,15 +5444,6 @@ msgstr ""
msgid "Export" msgid "Export"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
@@ -5548,6 +5558,15 @@ msgstr ""
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -9828,11 +9847,7 @@ msgstr ""
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "" msgstr ""
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "" msgstr ""
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
@@ -11068,7 +11083,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11082,7 +11097,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11706,6 +11721,42 @@ msgstr ""
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "" msgstr ""
@@ -12306,12 +12357,12 @@ msgstr ""
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "" msgstr ""
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -13915,6 +13966,9 @@ msgstr ""
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
msgid "Back"
msgstr ""
msgid "Random" msgid "Random"
msgstr "" msgstr ""
@@ -14249,6 +14303,18 @@ msgstr ""
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "" msgstr ""
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "" msgstr ""
@@ -14652,6 +14718,45 @@ msgstr ""
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "" msgstr ""
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "" msgstr ""
+263 -75
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Ian A. Bassi <>\n" "Last-Translator: Ian A. Bassi <>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -159,6 +159,12 @@ msgstr "Llenar"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Rellenar huecos" msgstr "Rellenar huecos"
msgid "Vertical"
msgstr "Vertical"
msgid "Horizontal"
msgstr "Horizontal"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Permite pintar solo las facetas seleccionadas por: \"%1%\"" msgstr "Permite pintar solo las facetas seleccionadas por: \"%1%\""
@@ -251,12 +257,6 @@ msgstr "Triángulo"
msgid "Height Range" msgid "Height Range"
msgstr "Rango de altura" msgstr "Rango de altura"
msgid "Vertical"
msgstr "Vertical"
msgid "Horizontal"
msgstr "Horizontal"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Eliminar color pintado" msgstr "Eliminar color pintado"
@@ -321,6 +321,7 @@ msgstr "Herramienta de rotación"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optimizar orientación" msgstr "Optimizar orientación"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Escalar" msgstr "Escalar"
@@ -330,8 +331,9 @@ msgstr "Ejes de escalado"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Error: Por favor, cierre primero todos los menús de la barra de herramientas" msgstr "Error: Por favor, cierre primero todos los menús de la barra de herramientas"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "pulg" msgstr "\""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -363,6 +365,9 @@ msgstr "Factor de escalado"
msgid "Object operations" msgid "Object operations"
msgstr "Operaciones con objetos" msgstr "Operaciones con objetos"
msgid "Scale"
msgstr "Escalar"
msgid "Volume operations" msgid "Volume operations"
msgstr "Operaciones de volumen" msgstr "Operaciones de volumen"
@@ -408,6 +413,10 @@ msgstr "Restablecer la rotación actual al valor que tenía al abrir la herramie
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Restablecer la rotación actual a ceros reales." msgstr "Restablecer la rotación actual a ceros reales."
msgctxt "Noun"
msgid "Scale"
msgstr "Escala"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Tamaño" msgstr "Tamaño"
@@ -1863,22 +1872,30 @@ msgstr "Conflicto de sincronización con la nube para el perfil \"%s\":"
msgid "" msgid ""
"This preset has a newer version in OrcaCloud.\n" "This preset has a newer version in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset." "Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr "Este perfil tiene una versión más reciente en OrcaCloud.\nDescargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local." msgstr ""
"Este perfil tiene una versión más reciente en OrcaCloud.\n"
"Descargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local."
msgid "" msgid ""
"A preset with this name already exists in OrcaCloud.\n" "A preset with this name already exists in OrcaCloud.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset." "Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr "Ya existe un perfil con este nombre en OrcaCloud.\nDescargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local." msgstr ""
"Ya existe un perfil con este nombre en OrcaCloud.\n"
"Descargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local."
msgid "" msgid ""
"A preset with the same name was previously deleted from the cloud.\n" "A preset with the same name was previously deleted from the cloud.\n"
"Delete will delete your local preset. Force push overwrites it with your local preset." "Delete will delete your local preset. Force push overwrites it with your local preset."
msgstr "Un perfil con el mismo nombre se eliminó anteriormente de la nube.\nEliminar borrará tu perfil local. Forzar envío la sobrescribe con tu perfil local." msgstr ""
"Un perfil con el mismo nombre se eliminó anteriormente de la nube.\n"
"Eliminar borrará tu perfil local. Forzar envío la sobrescribe con tu perfil local."
msgid "" msgid ""
"There was an unexpected or unidentified preset conflict.\n" "There was an unexpected or unidentified preset conflict.\n"
"Pull downloads the cloud copy. Force push overwrites it with your local preset." "Pull downloads the cloud copy. Force push overwrites it with your local preset."
msgstr "Se produjo un conflicto de perfil inesperado o no identificado.\nDescargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local." msgstr ""
"Se produjo un conflicto de perfil inesperado o no identificado.\n"
"Descargar obtiene la copia de la nube. Forzar envío la sobrescribe con tu perfil local."
msgid "" msgid ""
"Force push will overwrite the cloud copy with your local preset changes.\n" "Force push will overwrite the cloud copy with your local preset changes.\n"
@@ -1891,7 +1908,9 @@ msgstr ""
msgid "" msgid ""
"Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n" "Force push will overwrite the cloud copy of preset \"%s\" with your local changes.\n"
"Do you want to continue?" "Do you want to continue?"
msgstr "Forzar envío sobrescribirá la copia en la nube del perfil \"%s\" con tus cambios locales.\n¿Quieres continuar?" msgstr ""
"Forzar envío sobrescribirá la copia en la nube del perfil \"%s\" con tus cambios locales.\n"
"¿Quieres continuar?"
msgid "Resolve cloud sync conflict" msgid "Resolve cloud sync conflict"
msgstr "Resolver conflictos de sincronización con la nube" msgstr "Resolver conflictos de sincronización con la nube"
@@ -3569,6 +3588,7 @@ msgstr "Calibración completada. Por favor, observe cual es línea de extrusión
msgid "Save" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Atrás" msgstr "Atrás"
@@ -4698,7 +4718,7 @@ msgid "Support interface"
msgstr "Interfaz de soporte" msgstr "Interfaz de soporte"
msgid "Prime tower" msgid "Prime tower"
msgstr "Torre de Purga" msgstr "Torre de purga"
msgid "Bottom surface" msgid "Bottom surface"
msgstr "Relleno sólido inferior" msgstr "Relleno sólido inferior"
@@ -4919,8 +4939,9 @@ msgstr "Cambios de herramienta"
msgid "Color change" msgid "Color change"
msgstr "Cambio de color" msgstr "Cambio de color"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Imprimir" msgstr "Impresión"
msgid "Printer" msgid "Printer"
msgstr "Impresora" msgstr "Impresora"
@@ -5078,11 +5099,15 @@ msgstr "Evitar la zona de calibración del extrusor"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Alinear con el eje Y" msgstr "Alinear con el eje Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Posterior"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Izquierda" msgstr "Izquierda"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Derecha" msgstr "Derecha"
@@ -5405,6 +5430,10 @@ msgstr "Imprimir cama"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Exportar archivo G-Code" msgstr "Exportar archivo G-Code"
msgctxt "Verb"
msgid "Print"
msgstr "Imprimir"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exportar los objetos laminados de la cama a un archivo" msgstr "Exportar los objetos laminados de la cama a un archivo"
@@ -5477,10 +5506,10 @@ msgid "Front View"
msgstr "Vista frontal" msgstr "Vista frontal"
msgid "Rear" msgid "Rear"
msgstr "Trasera" msgstr "Posterior"
msgid "Rear View" msgid "Rear View"
msgstr "Vista trasera" msgstr "Vista posterior"
msgid "Left View" msgid "Left View"
msgstr "Vista izquierda" msgstr "Vista izquierda"
@@ -5578,15 +5607,6 @@ msgstr "Exportar configuración actual a archivos"
msgid "Export" msgid "Export"
msgstr "Exportar" msgstr "Exportar"
msgid "Sync Presets"
msgstr "Sincronizar perfiles"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Descarga y aplica los últimos ajustes preestablecidos de OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "Debes haber iniciado sesión para sincronizar los ajustes preestablecidos desde la nube."
msgid "Quit" msgid "Quit"
msgstr "Salir del programa" msgstr "Salir del programa"
@@ -5701,6 +5721,15 @@ msgstr "Vista"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Paquete de perfiles" msgstr "Paquete de perfiles"
msgid "Sync Presets"
msgstr "Sincronizar perfiles"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Descarga y aplica los últimos ajustes preestablecidos de OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "Debes haber iniciado sesión para sincronizar los ajustes preestablecidos desde la nube."
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "Sincronizando perfiles desde la nube…" msgstr "Sincronizando perfiles desde la nube…"
@@ -7905,7 +7934,11 @@ msgid ""
"Smaller values produce higher-quality meshes but increase processing time.\n" "Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n" "Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.003 mm." "Default: 0.003 mm."
msgstr "Deflexión lineal utilizada al mallar los archivos STEP importados.\nLos valores más pequeños producen mallas de mayor calidad pero aumentan el tiempo de procesamiento.\nSe usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\nPredeterminado: 0.003 mm." msgstr ""
"Deflexión lineal utilizada al mallar los archivos STEP importados.\n"
"Los valores más pequeños producen mallas de mayor calidad pero aumentan el tiempo de procesamiento.\n"
"Se usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\n"
"Predeterminado: 0.003 mm."
msgid "STEP importing: angle deflection" msgid "STEP importing: angle deflection"
msgstr "Importación STEP: deflexión angular" msgstr "Importación STEP: deflexión angular"
@@ -7915,7 +7948,11 @@ msgid ""
"Smaller values produce higher-quality meshes but increase processing time.\n" "Smaller values produce higher-quality meshes but increase processing time.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n" "Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: 0.5." "Default: 0.5."
msgstr "Deflexión angular utilizada al mallar los archivos STEP importados.\nLos valores más pequeños producen mallas de mayor calidad pero aumentan el tiempo de procesamiento.\nSe usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\nPredeterminado: 0.5." msgstr ""
"Deflexión angular utilizada al mallar los archivos STEP importados.\n"
"Los valores más pequeños producen mallas de mayor calidad pero aumentan el tiempo de procesamiento.\n"
"Se usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\n"
"Predeterminado: 0.5."
msgid "STEP importing: Split into multiple objects" msgid "STEP importing: Split into multiple objects"
msgstr "Importación STEP: Separar en múltiples objetos" msgstr "Importación STEP: Separar en múltiples objetos"
@@ -7924,7 +7961,10 @@ msgid ""
"If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n" "If enabled, compound and compsolid shapes in imported STEP files are split into multiple objects.\n"
"Used as the default in the import dialog, or directly when the import dialog is disabled.\n" "Used as the default in the import dialog, or directly when the import dialog is disabled.\n"
"Default: disabled." "Default: disabled."
msgstr "Si está activado, las formas compound y compsolid de los archivos STEP importados se separan en múltiples objetos.\nSe usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\nPredeterminado: desactivado." msgstr ""
"Si está activado, las formas compound y compsolid de los archivos STEP importados se separan en múltiples objetos.\n"
"Se usa como valor predeterminado en el diálogo de importación, o directamente cuando el diálogo de importación está desactivado.\n"
"Predeterminado: desactivado."
msgid "Quality level for Draco export" msgid "Quality level for Draco export"
msgstr "Nivel de calidad para exportación Draco" msgstr "Nivel de calidad para exportación Draco"
@@ -9168,7 +9208,7 @@ msgstr "Característica experimental: Retraer y cortar el filamento a mayor dist
msgid "" msgid ""
"When recording timelapse without toolhead, it is recommended to add a \"Timelapse Wipe Tower\" \n" "When recording timelapse without toolhead, it is recommended to add a \"Timelapse Wipe Tower\" \n"
"by right-click the empty position of build plate and choose \"Add Primitive\"->\"Timelapse Wipe Tower\"." "by right-click the empty position of build plate and choose \"Add Primitive\"->\"Timelapse Wipe Tower\"."
msgstr "Cuando se graba un timelapse sin cabezal, se recomienda añadir una \"Torre de Purga de Timelapse\" haciendo clic con el botón derecho del ratón en una posición vacía de la cama de impresión y seleccionando \"Añadir Primitivo\"->Torre de Purga de Timelapse\"." msgstr "Cuando se graba un timelapse sin cabezal, se recomienda añadir una \"Torre de purga de Timelapse\" haciendo clic con el botón derecho del ratón en una posición vacía de la cama de impresión y seleccionando \"Añadir Primitivo\"->\"Torre de purga de Timelapse\"."
msgid "A copy of the current system preset will be created, which will be detached from the system preset." msgid "A copy of the current system preset will be created, which will be detached from the system preset."
msgstr "Se creará una copia de el perfil de sistema actual, que quedará separado del perfil de sistema." msgstr "Se creará una copia de el perfil de sistema actual, que quedará separado del perfil de sistema."
@@ -10151,12 +10191,8 @@ msgstr "Información de boquilla sincronizada con éxito."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Información de boquilla y número AMS sincronizada con éxito." msgstr "Información de boquilla y número AMS sincronizada con éxito."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Continuar sincronizando filamentos" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Cancelar"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Color de filamento sincronizado desde la impresora con éxito." msgstr "Color de filamento sincronizado desde la impresora con éxito."
@@ -10874,7 +10910,7 @@ msgid " is too close to clumping detection area, there may be collisions when pr
msgstr " está demasiado cerca del área de detección de aglomeraciones, puede haber colisiones durante la impresión." msgstr " está demasiado cerca del área de detección de aglomeraciones, puede haber colisiones durante la impresión."
msgid "Prime Tower" msgid "Prime Tower"
msgstr "Torre de Purga" msgstr "Torre de purga"
msgid " is too close to others, and collisions may be caused.\n" msgid " is too close to others, and collisions may be caused.\n"
msgstr " está demasiado cerca de otros, y se pueden producir colisiones.\n" msgstr " está demasiado cerca de otros, y se pueden producir colisiones.\n"
@@ -11424,19 +11460,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Anulación del ángulo de puente externo.\n"
"Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n"
"De lo contrario, se utilizará el ángulo indicado según:\n"
" - Las coordenadas absolutas\n"
" - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n"
" - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n"
"\n"
"Utiliza 180° para un ángulo absoluto de cero."
msgid "Internal bridge infill direction" msgid "Internal bridge infill direction"
msgstr "Dirección de relleno de puentes internos" msgstr "Dirección de relleno de puentes internos"
@@ -11446,19 +11474,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Anulación del ángulo de puente interno.\n"
"Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n"
"De lo contrario, se utilizará el ángulo indicado según:\n"
" - Las coordenadas absolutas\n"
" - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n"
" - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n"
"\n"
"Utiliza 180° para un ángulo absoluto de cero."
msgid "Relative bridge angle" msgid "Relative bridge angle"
msgstr "Ángulo de puente relativo" msgstr "Ángulo de puente relativo"
@@ -12231,6 +12251,42 @@ msgstr "Densidad de la superficie superior"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Densidad de la capa superficial superior. Un valor de 100% crea una capa superior totalmente sólida y lisa. Reducir este valor produce una superficie superior texturada, según el patrón elegido. Un valor de 0% provocará que sólo se creen las paredes en la capa superior. Destinado a fines estéticos o funcionales, no para corregir problemas como la sobreextrusión." msgstr "Densidad de la capa superficial superior. Un valor de 100% crea una capa superior totalmente sólida y lisa. Reducir este valor produce una superficie superior texturada, según el patrón elegido. Un valor de 0% provocará que sólo se creen las paredes en la capa superior. Destinado a fines estéticos o funcionales, no para corregir problemas como la sobreextrusión."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Patrón de relleno de cubierta inferior" msgstr "Patrón de relleno de cubierta inferior"
@@ -12477,7 +12533,12 @@ msgid ""
"Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n" "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n"
"\n" "\n"
"This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues." "This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues."
msgstr "Activa el PA adaptativo siempre que haya cambios de flujo en una característica, como cambios de ancho de línea en una esquina o en voladizos.\n\nNo es compatible con las impresoras Prusa, ya que se pausan para procesar los cambios de PA, lo que provoca retrasos y defectos.\n\nEsta es una opción experimental, ya que si el perfil de PA no se configura con precisión, causará problemas de uniformidad." msgstr ""
"Activa el PA adaptativo siempre que haya cambios de flujo en una característica, como cambios de ancho de línea en una esquina o en voladizos.\n"
"\n"
"No es compatible con las impresoras Prusa, ya que se pausan para procesar los cambios de PA, lo que provoca retrasos y defectos.\n"
"\n"
"Esta es una opción experimental, ya que si el perfil de PA no se configura con precisión, causará problemas de uniformidad."
msgid "Static pressure advance for bridges" msgid "Static pressure advance for bridges"
msgstr "Pressure Advance estático para puentes" msgstr "Pressure Advance estático para puentes"
@@ -12487,7 +12548,11 @@ msgid ""
"equivalent walls (using adaptive settings if enabled).\n" "equivalent walls (using adaptive settings if enabled).\n"
"\n" "\n"
"A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this." "A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."
msgstr "Valor de Pressure Advance estático para los puentes. Establécelo a 0 para aplicar el mismo Pressure Advance que en los \nperímetros equivalentes (usando los ajustes adaptativos si están activados).\n\nUn valor de PA más bajo al imprimir puentes ayuda a reducir la aparición de una ligera subextrusión justo después de los puentes. Esto se debe a la caída de presión en la boquilla al imprimir en el aire, y un PA más bajo ayuda a contrarrestarlo." msgstr ""
"Valor de Pressure Advance estático para los puentes. Establécelo a 0 para aplicar el mismo Pressure Advance que en los \n"
"perímetros equivalentes (usando los ajustes adaptativos si están activados).\n"
"\n"
"Un valor de PA más bajo al imprimir puentes ayuda a reducir la aparición de una ligera subextrusión justo después de los puentes. Esto se debe a la caída de presión en la boquilla al imprimir en el aire, y un PA más bajo ayuda a contrarrestarlo."
msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter." msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter."
msgstr "Ancho de línea por defecto si otros anchos de línea están a 0. Si se expresa cómo %, se calculará en base al diámetro de la boquilla." msgstr "Ancho de línea por defecto si otros anchos de línea están a 0. Si se expresa cómo %, se calculará en base al diámetro de la boquilla."
@@ -12719,7 +12784,7 @@ msgid "After a tool change, the exact position of the newly loaded filament insi
msgstr "Tras un cambio de cabezal, es posible que no se conozca la posición exacta del filamento recién cargado dentro de la boquilla y que la presión del filamento aún no sea estable. Antes de purgar el cabezal de impresión en un relleno o en un objeto de sacrificio, OrcaSlicer siempre cebará esta cantidad de material en la torre de purga para producir sucesivas extrusiones de relleno u objetos de sacrificio de forma fiable." msgstr "Tras un cambio de cabezal, es posible que no se conozca la posición exacta del filamento recién cargado dentro de la boquilla y que la presión del filamento aún no sea estable. Antes de purgar el cabezal de impresión en un relleno o en un objeto de sacrificio, OrcaSlicer siempre cebará esta cantidad de material en la torre de purga para producir sucesivas extrusiones de relleno u objetos de sacrificio de forma fiable."
msgid "Wipe tower cooling" msgid "Wipe tower cooling"
msgstr "Refrigeración de Torre de Purga" msgstr "Refrigeración de torre de purga"
msgid "Temperature drop before entering filament tower" msgid "Temperature drop before entering filament tower"
msgstr "Descenso de temperatura antes de entrar en la torre de filamentos" msgstr "Descenso de temperatura antes de entrar en la torre de filamentos"
@@ -12865,7 +12930,9 @@ msgstr "Dirección de la capa superior"
msgid "" msgid ""
"Fixed angle for the top solid infill and ironing lines.\n" "Fixed angle for the top solid infill and ironing lines.\n"
"Set to -1 to follow the default solid infill direction." "Set to -1 to follow the default solid infill direction."
msgstr "Ángulo fijo para el relleno sólido superior y las líneas de alisado.\nEstablécelo a -1 para seguir la dirección predeterminada del relleno sólido." msgstr ""
"Ángulo fijo para el relleno sólido superior y las líneas de alisado.\n"
"Establécelo a -1 para seguir la dirección predeterminada del relleno sólido."
msgid "Bottom layer direction" msgid "Bottom layer direction"
msgstr "Dirección de la capa inferior" msgstr "Dirección de la capa inferior"
@@ -12873,7 +12940,9 @@ msgstr "Dirección de la capa inferior"
msgid "" msgid ""
"Fixed angle for the bottom solid infill lines.\n" "Fixed angle for the bottom solid infill lines.\n"
"Set to -1 to follow the default solid infill direction." "Set to -1 to follow the default solid infill direction."
msgstr "Ángulo fijo para las líneas del relleno sólido inferior.\nEstablécelo a -1 para seguir la dirección predeterminada del relleno sólido." msgstr ""
"Ángulo fijo para las líneas del relleno sólido inferior.\n"
"Establécelo a -1 para seguir la dirección predeterminada del relleno sólido."
msgid "Sparse infill density" msgid "Sparse infill density"
msgstr "Densidad de relleno de baja densidad" msgstr "Densidad de relleno de baja densidad"
@@ -12882,15 +12951,13 @@ msgstr "Densidad de relleno de baja densidad"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Densidad del relleno de baja densidad interno, el 100% convierte el relleno de baja densidad en relleno sólido y se utilizará el patrón de relleno sólido interno." msgstr "Densidad del relleno de baja densidad interno, el 100% convierte el relleno de baja densidad en relleno sólido y se utilizará el patrón de relleno sólido interno."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Alinear la dirección de relleno al modelo" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"Alinea las direcciones de relleno, puente, alisado y relleno superficial para que sigan la orientación del modelo sobre la placa de impresión.\n"
"Cuando está activada, las direcciones giran junto con el modelo para mantener sus características de resistencia óptimas."
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "Insertar capas sólidas" msgstr "Insertar capas sólidas"
@@ -13090,7 +13157,12 @@ msgid ""
"If \"Full fan speed at layer\" is also set, the fan ramps smoothly from this value on the first layer up to your target by the chosen layer.\n" "If \"Full fan speed at layer\" is also set, the fan ramps smoothly from this value on the first layer up to your target by the chosen layer.\n"
"Only available when \"No cooling for the first\" is 0.\n" "Only available when \"No cooling for the first\" is 0.\n"
"Set to -1 to disable it." "Set to -1 to disable it."
msgstr "Establece una velocidad exacta del ventilador para la primera capa, anulando el resto de ajustes de refrigeración. Útil para proteger las piezas del cabezal impresas en 3D (por ejemplo, los conductos de ABS/ASA tipo Voron) de una cama caliente. Una pequeña cantidad de flujo de aire enfría los conductos, sin usar la refrigeración completa que en ciertas condiciones puede perjudicar la adhesión de la primera capa.\nA partir de la segunda capa, se reanuda la refrigeración normal.\nSi también se ha establecido \"Velocidad máxima del ventilador en la capa\", el ventilador sube suavemente desde este valor en la primera capa hasta tu objetivo en la capa elegida.\nSolo disponible cuando \"No refrigerar las primeras\" es 0.\nEstablécelo a -1 para desactivarlo." msgstr ""
"Establece una velocidad exacta del ventilador para la primera capa, anulando el resto de ajustes de refrigeración. Útil para proteger las piezas del cabezal impresas en 3D (por ejemplo, los conductos de ABS/ASA tipo Voron) de una cama caliente. Una pequeña cantidad de flujo de aire enfría los conductos, sin usar la refrigeración completa que en ciertas condiciones puede perjudicar la adhesión de la primera capa.\n"
"A partir de la segunda capa, se reanuda la refrigeración normal.\n"
"Si también se ha establecido \"Velocidad máxima del ventilador en la capa\", el ventilador sube suavemente desde este valor en la primera capa hasta tu objetivo en la capa elegida.\n"
"Solo disponible cuando \"No refrigerar las primeras\" es 0.\n"
"Establécelo a -1 para desactivarlo."
msgid "Support interface fan speed" msgid "Support interface fan speed"
msgstr "Velocidad de ventilador en la interfaz de los soportes" msgstr "Velocidad de ventilador en la interfaz de los soportes"
@@ -14617,6 +14689,9 @@ msgstr "Alineado"
msgid "Aligned back" msgid "Aligned back"
msgstr "Alineado atrás" msgstr "Alineado atrás"
msgid "Back"
msgstr "Atrás"
msgid "Random" msgid "Random"
msgstr "Aleatorio" msgstr "Aleatorio"
@@ -14972,6 +15047,18 @@ msgstr "Purgar todos los extrusores"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Sí se activa, todos los extrusores serán purgados en el frontal de la cama de impresión al inicio de la impresión." msgstr "Sí se activa, todos los extrusores serán purgados en el frontal de la cama de impresión al inicio de la impresión."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Radio de cierre de laminado" msgstr "Radio de cierre de laminado"
@@ -15408,6 +15495,45 @@ msgstr "Espesor mínimo de la cubierta superior"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "El número de capas sólidas superiores se incrementa al laminar si el espesor calculado por las capas de la cubierta es más delgado que este valor. Esto puede evitar tener una cubierta demasiado fina cuando la altura de la capa es pequeña. 0 significa que este ajuste está desactivado y el grosor de la capa superior está absolutamente determinado por las capas de la cubierta superior." msgstr "El número de capas sólidas superiores se incrementa al laminar si el espesor calculado por las capas de la cubierta es más delgado que este valor. Esto puede evitar tener una cubierta demasiado fina cuando la altura de la capa es pequeña. 0 significa que este ajuste está desactivado y el grosor de la capa superior está absolutamente determinado por las capas de la cubierta superior."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Velocidad de desplazamiento más rápida y sin extrusión." msgstr "Velocidad de desplazamiento más rápida y sin extrusión."
@@ -15650,7 +15776,9 @@ msgstr "Número máximo de aristas de poliorificio"
msgid "" msgid ""
"Maximum number of polyhole edges\n" "Maximum number of polyhole edges\n"
"This setting limits the amount of edges a polyhole can have" "This setting limits the amount of edges a polyhole can have"
msgstr "Número máximo de aristas de un poliorificio\nEste ajuste limita la cantidad de aristas que puede tener un poliorificio" msgstr ""
"Número máximo de aristas de un poliorificio\n"
"Este ajuste limita la cantidad de aristas que puede tener un poliorificio"
msgid "G-code thumbnails" msgid "G-code thumbnails"
msgstr "Miniaturas de G-Code" msgstr "Miniaturas de G-Code"
@@ -18126,7 +18254,9 @@ msgstr "Elige dónde guardar el archivo JSON exportado"
msgid "" msgid ""
"Export failed\n" "Export failed\n"
"Please check write permissions or file in use by another application" "Please check write permissions or file in use by another application"
msgstr "La exportación ha fallado\nComprueba los permisos de escritura o si el archivo está siendo usado por otra aplicación" msgstr ""
"La exportación ha fallado\n"
"Comprueba los permisos de escritura o si el archivo está siendo usado por otra aplicación"
msgid "Choose where to save the exported ZIP file" msgid "Choose where to save the exported ZIP file"
msgstr "Elige dónde guardar el archivo ZIP exportado" msgstr "Elige dónde guardar el archivo ZIP exportado"
@@ -19385,6 +19515,68 @@ msgstr ""
"Evita la deformación\n" "Evita la deformación\n"
"¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?" "¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Continuar sincronizando filamentos"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Cancelar"
#, no-c-format, no-boost-format
#~ msgid ""
#~ "External Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Anulación del ángulo de puente externo.\n"
#~ "Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n"
#~ "De lo contrario, se utilizará el ángulo indicado según:\n"
#~ " - Las coordenadas absolutas\n"
#~ " - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n"
#~ " - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n"
#~ "\n"
#~ "Utiliza 180° para un ángulo absoluto de cero."
#~ msgid ""
#~ "Internal Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Anulación del ángulo de puente interno.\n"
#~ "Si se deja en cero, el ángulo de puente se calculará automáticamente para cada puente concreto.\n"
#~ "De lo contrario, se utilizará el ángulo indicado según:\n"
#~ " - Las coordenadas absolutas\n"
#~ " - Las coordenadas absolutas + rotación del modelo: si está activada la opción «Alinear la dirección de relleno al modelo»\n"
#~ " - El ángulo automático óptimo + este valor: si está activada la opción «Ángulo de puente relativo»\n"
#~ "\n"
#~ "Utiliza 180° para un ángulo absoluto de cero."
#~ msgid "Align infill direction to model"
#~ msgstr "Alinear la dirección de relleno al modelo"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "Alinea las direcciones de relleno, puente, alisado y relleno superficial para que sigan la orientación del modelo sobre la placa de impresión.\n"
#~ "Cuando está activada, las direcciones giran junto con el modelo para mantener sus características de resistencia óptimas."
#~ msgid "Print"
#~ msgstr "Imprimir"
#~ msgid "in"
#~ msgstr "pulg"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Coordenadas de objeto" #~ msgstr "Coordenadas de objeto"
@@ -20965,10 +21157,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "Deseleccionar" #~ msgstr "Deseleccionar"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Escala"
#~ msgid "Lift Z Enforcement" #~ msgid "Lift Z Enforcement"
#~ msgstr "Forzar elevación Z" #~ msgstr "Forzar elevación Z"
+198 -53
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Guislain Cyril, Thomas Lété\n" "Language-Team: Guislain Cyril, Thomas Lété\n"
@@ -162,6 +162,12 @@ msgstr "Remplir"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Remplissage des espaces" msgstr "Remplissage des espaces"
msgid "Vertical"
msgstr "Vertical"
msgid "Horizontal"
msgstr "Horizontal"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Permet de peindre uniquement sur les facettes sélectionnées par : \"%1%\"" msgstr "Permet de peindre uniquement sur les facettes sélectionnées par : \"%1%\""
@@ -254,12 +260,6 @@ msgstr "Triangle"
msgid "Height Range" msgid "Height Range"
msgstr "Plage de hauteur" msgstr "Plage de hauteur"
msgid "Vertical"
msgstr "Vertical"
msgid "Horizontal"
msgstr "Horizontal"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Supprimer la couleur peinte" msgstr "Supprimer la couleur peinte"
@@ -324,6 +324,7 @@ msgstr "Gizmo-Pivoter"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optimiser l'orientation" msgstr "Optimiser l'orientation"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Redimensionner" msgstr "Redimensionner"
@@ -333,8 +334,9 @@ msgstr "Gizmo-Redimensionner"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Erreur : Veuillez d'abord fermer tous les menus de la barre d'outils" msgstr "Erreur : Veuillez d'abord fermer tous les menus de la barre d'outils"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "dans" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -366,6 +368,9 @@ msgstr "Rapports d'échelle"
msgid "Object operations" msgid "Object operations"
msgstr "Opérations sur les objets" msgstr "Opérations sur les objets"
msgid "Scale"
msgstr "Redimensionner"
msgid "Volume operations" msgid "Volume operations"
msgstr "Opérations sur les volumes" msgstr "Opérations sur les volumes"
@@ -411,6 +416,10 @@ msgstr "Réinitialiser la rotation actuelle à la valeur lors de l'ouverture de
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Réinitialiser la rotation actuelle à zéro." msgstr "Réinitialiser la rotation actuelle à zéro."
msgctxt "Noun"
msgid "Scale"
msgstr "Redimensionner"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Taille" msgstr "Taille"
@@ -3568,6 +3577,7 @@ msgstr "Calibrage terminé. Veuillez trouver la ligne d'extrusion la plus unifor
msgid "Save" msgid "Save"
msgstr "Enregistrer" msgstr "Enregistrer"
msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Arrière" msgstr "Arrière"
@@ -4915,6 +4925,7 @@ msgstr "Changements d’outil"
msgid "Color change" msgid "Color change"
msgstr "Changement de couleur" msgstr "Changement de couleur"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Imprimer" msgstr "Imprimer"
@@ -5074,11 +5085,15 @@ msgstr "Éviter la région de calibration de l'extrusion"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Aligner sur l’axe Y" msgstr "Aligner sur l’axe Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Arrière"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Gauche" msgstr "Gauche"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Droite" msgstr "Droite"
@@ -5401,6 +5416,10 @@ msgstr "Imprimer le plateau"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Exporter le fichier G-code" msgstr "Exporter le fichier G-code"
msgctxt "Verb"
msgid "Print"
msgstr "Imprimer"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exporter le fichier découpé du plateau" msgstr "Exporter le fichier découpé du plateau"
@@ -5574,15 +5593,6 @@ msgstr "Exporter la configuration actuelle vers des fichiers"
msgid "Export" msgid "Export"
msgstr "Exporter" msgstr "Exporter"
msgid "Sync Presets"
msgstr "Synchroniser les préréglages"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Récupérer et appliquer les derniers préréglages depuis OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "Vous devez être connecté pour synchroniser les préréglages depuis le cloud."
msgid "Quit" msgid "Quit"
msgstr "Quitter" msgstr "Quitter"
@@ -5697,6 +5707,15 @@ msgstr "Affichage"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Paquet de préréglages" msgstr "Paquet de préréglages"
msgid "Sync Presets"
msgstr "Synchroniser les préréglages"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Récupérer et appliquer les derniers préréglages depuis OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "Vous devez être connecté pour synchroniser les préréglages depuis le cloud."
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "Synchronisation des préréglages depuis le cloud…" msgstr "Synchronisation des préréglages depuis le cloud…"
@@ -10147,12 +10166,8 @@ msgstr "Informations de buse synchronisées avec succès."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Informations de buse et de nombre d'AMS synchronisées avec succès." msgstr "Informations de buse et de nombre d'AMS synchronisées avec succès."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Continuer la synchronisation des filaments" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Annuler"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Couleur de filament synchronisée avec succès depuis l'imprimante." msgstr "Couleur de filament synchronisée avec succès depuis l'imprimante."
@@ -11429,19 +11444,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Remplacement de l’angle des ponts externes.\n"
"Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n"
"Sinon, l’angle fourni est utilisé selon :\n"
" - les coordonnées absolues\n"
" - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n"
" - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n"
"\n"
"Utilisez 180° pour un angle absolu nul."
msgid "Internal bridge infill direction" msgid "Internal bridge infill direction"
msgstr "Direction du remplissage du pont interne" msgstr "Direction du remplissage du pont interne"
@@ -11451,19 +11458,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Remplacement de l’angle des ponts internes.\n"
"Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n"
"Sinon, l’angle fourni est utilisé selon :\n"
" - les coordonnées absolues\n"
" - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n"
" - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n"
"\n"
"Utilisez 180° pour un angle absolu nul."
msgid "Relative bridge angle" msgid "Relative bridge angle"
msgstr "Angle de pont relatif" msgstr "Angle de pont relatif"
@@ -12233,6 +12232,42 @@ msgstr "Densité de la surface supérieure"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Densité de la couche de surface supérieure. Une valeur de 100 % crée une couche supérieure entièrement solide et lisse. Réduire cette valeur donne une surface supérieure texturée, selon le motif de surface supérieure choisi. Une valeur de 0 % ne créera que les parois sur la couche supérieure. Destiné à des fins esthétiques ou fonctionnelles, pas pour corriger des problèmes comme la surextrusion." msgstr "Densité de la couche de surface supérieure. Une valeur de 100 % crée une couche supérieure entièrement solide et lisse. Réduire cette valeur donne une surface supérieure texturée, selon le motif de surface supérieure choisi. Une valeur de 0 % ne créera que les parois sur la couche supérieure. Destiné à des fins esthétiques ou fonctionnelles, pas pour corriger des problèmes comme la surextrusion."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Motif de surface inférieure" msgstr "Motif de surface inférieure"
@@ -12884,15 +12919,13 @@ msgstr "Densité de remplissage"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Densité du remplissage interne, 100% transforme tous les remplissages en remplissages pleins et le modèle de remplissage interne sera utilisé" msgstr "Densité du remplissage interne, 100% transforme tous les remplissages en remplissages pleins et le modèle de remplissage interne sera utilisé"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Aligner la direction du remplissage sur le modèle" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"Aligne les directions du remplissage, des ponts, du lissage et des surfaces sur l’orientation du modèle sur le plateau.\n"
"Lorsque cette option est activée, les directions pivotent avec le modèle afin de conserver des caractéristiques de résistance optimales."
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "Insérer des couches solides" msgstr "Insérer des couches solides"
@@ -14627,6 +14660,9 @@ msgstr "Alignée"
msgid "Aligned back" msgid "Aligned back"
msgstr "Aligné à l'arrière" msgstr "Aligné à l'arrière"
msgid "Back"
msgstr "Arrière"
msgid "Random" msgid "Random"
msgstr "Aléatoire" msgstr "Aléatoire"
@@ -14984,6 +15020,18 @@ msgstr "Amorcer tous les extrudeurs d’impression"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Si cette option est activée, tous les extrudeurs d’impression seront amorcés sur le bord avant du plateau au début de l’impression." msgstr "Si cette option est activée, tous les extrudeurs d’impression seront amorcés sur le bord avant du plateau au début de l’impression."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Rayon de fermeture de l’écart des tranches" msgstr "Rayon de fermeture de l’écart des tranches"
@@ -15416,6 +15464,45 @@ msgstr "Épaisseur de la coque supérieure"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Le nombre de couches solides supérieures est augmenté lors du découpage si l'épaisseur calculée par les couches de coque supérieures est inférieure à cette valeur. Cela peut éviter d'avoir une coque trop fine lorsque la hauteur de couche est faible. 0 signifie que ce paramètre est désactivé et que l'épaisseur de la coque supérieure est simplement déterminée par le nombre de couches de coque supérieures." msgstr "Le nombre de couches solides supérieures est augmenté lors du découpage si l'épaisseur calculée par les couches de coque supérieures est inférieure à cette valeur. Cela peut éviter d'avoir une coque trop fine lorsque la hauteur de couche est faible. 0 signifie que ce paramètre est désactivé et que l'épaisseur de la coque supérieure est simplement déterminée par le nombre de couches de coque supérieures."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Vitesse de déplacement plus rapide et sans extrusion" msgstr "Vitesse de déplacement plus rapide et sans extrusion"
@@ -19396,6 +19483,68 @@ msgstr ""
"Éviter la déformation\n" "Éviter la déformation\n"
"Saviez-vous que lors de l’impression de matériaux susceptibles de se déformer, tels que l’ABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?" "Saviez-vous que lors de l’impression de matériaux susceptibles de se déformer, tels que l’ABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Continuer la synchronisation des filaments"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Annuler"
#, no-c-format, no-boost-format
#~ msgid ""
#~ "External Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Remplacement de l’angle des ponts externes.\n"
#~ "Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n"
#~ "Sinon, l’angle fourni est utilisé selon :\n"
#~ " - les coordonnées absolues\n"
#~ " - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n"
#~ " - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n"
#~ "\n"
#~ "Utilisez 180° pour un angle absolu nul."
#~ msgid ""
#~ "Internal Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Remplacement de l’angle des ponts internes.\n"
#~ "Si laissé à zéro, l’angle des ponts est calculé automatiquement pour chaque pont.\n"
#~ "Sinon, l’angle fourni est utilisé selon :\n"
#~ " - les coordonnées absolues\n"
#~ " - les coordonnées absolues + la rotation du modèle : si « Aligner la direction du remplissage sur le modèle » est activé\n"
#~ " - l’angle automatique optimal + cette valeur : si « Angle de pont relatif » est activé\n"
#~ "\n"
#~ "Utilisez 180° pour un angle absolu nul."
#~ msgid "Align infill direction to model"
#~ msgstr "Aligner la direction du remplissage sur le modèle"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "Aligne les directions du remplissage, des ponts, du lissage et des surfaces sur l’orientation du modèle sur le plateau.\n"
#~ "Lorsque cette option est activée, les directions pivotent avec le modèle afin de conserver des caractéristiques de résistance optimales."
#~ msgid "Print"
#~ msgstr "Imprimer"
#~ msgid "in"
#~ msgstr "dans"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Coordonnées de l’objet" #~ msgstr "Coordonnées de l’objet"
@@ -21103,10 +21252,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "Désélectionner" #~ msgstr "Désélectionner"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Redimensionner"
#~ msgid "Lift Z Enforcement" #~ msgid "Lift Z Enforcement"
#~ msgstr "Exécution du décalage en Z" #~ msgstr "Exécution du décalage en Z"
+153 -32
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"Language: hu\n" "Language: hu\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -159,6 +159,12 @@ msgstr "Kitöltés"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Hézagok kitöltése" msgstr "Hézagok kitöltése"
msgid "Vertical"
msgstr "Függőleges"
msgid "Horizontal"
msgstr "Vízszintes"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Csak a(z) \"%1%\" által kijelölt felületeken történik festés" msgstr "Csak a(z) \"%1%\" által kijelölt felületeken történik festés"
@@ -254,12 +260,6 @@ msgstr "Háromszög"
msgid "Height Range" msgid "Height Range"
msgstr "Magasságtartomány" msgstr "Magasságtartomány"
msgid "Vertical"
msgstr "Függőleges"
msgid "Horizontal"
msgstr "Vízszintes"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Festett szín eltávolítása" msgstr "Festett szín eltávolítása"
@@ -324,6 +324,7 @@ msgstr "Gizmo-Forgatás"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Orientáció optimalizálása" msgstr "Orientáció optimalizálása"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Átméretezés" msgstr "Átméretezés"
@@ -333,8 +334,9 @@ msgstr "Gizmo-Átméretezés"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Hiba: Kérlek, először zárd be az összes eszköztár menüt" msgstr "Hiba: Kérlek, először zárd be az összes eszköztár menüt"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "in" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -367,6 +369,9 @@ msgstr "Méretarányok"
msgid "Object operations" msgid "Object operations"
msgstr "Objektum műveletek" msgstr "Objektum műveletek"
msgid "Scale"
msgstr "Átméretezés"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Térfogat műveletek" msgstr "Térfogat műveletek"
@@ -418,6 +423,10 @@ msgstr "Az aktuális forgatás visszaállítása a forgatás eszköz megnyitása
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Az aktuális forgatás visszaállítása valódi nullára." msgstr "Az aktuális forgatás visszaállítása valódi nullára."
msgctxt "Noun"
msgid "Scale"
msgstr "Átméretezés"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Méret" msgstr "Méret"
@@ -3644,7 +3653,7 @@ msgstr "A kalibrálás befejeződött. Kérlek, válaszd ki az alábbi képen l
msgid "Save" msgid "Save"
msgstr "Mentés" msgstr "Mentés"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Hátul" msgstr "Hátul"
@@ -5025,6 +5034,7 @@ msgstr "Szerszámváltások"
msgid "Color change" msgid "Color change"
msgstr "Színváltás" msgstr "Színváltás"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Nyomtatás" msgstr "Nyomtatás"
@@ -5188,11 +5198,15 @@ msgstr "Extrudáláskalibráció környékének elkerülése"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Igazítás az Y-tengelyhez" msgstr "Igazítás az Y-tengelyhez"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Hátul"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Bal" msgstr "Bal"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Jobb" msgstr "Jobb"
@@ -5520,6 +5534,10 @@ msgstr "Nyomtatótálca"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "G-kód fájl exportálása" msgstr "G-kód fájl exportálása"
msgctxt "Verb"
msgid "Print"
msgstr "Nyomtatás"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Szeletelt tálca exportálása" msgstr "Szeletelt tálca exportálása"
@@ -5693,15 +5711,6 @@ msgstr "Aktuális konfiguráció exportálása fájlokba"
msgid "Export" msgid "Export"
msgstr "Exportálás" msgstr "Exportálás"
msgid "Sync Presets"
msgstr "Beállítások szinkronizálása"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Hívd le és alkalmazd az OrcaCloud legújabb beállításait"
msgid "You must be logged in to sync presets from cloud."
msgstr "A beállítások felhőből történő szinkronizálásához be kell jelentkezz."
msgid "Quit" msgid "Quit"
msgstr "Kilépés" msgstr "Kilépés"
@@ -5818,6 +5827,15 @@ msgstr "Nézet"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Beállításcsomag" msgstr "Beállításcsomag"
msgid "Sync Presets"
msgstr "Beállítások szinkronizálása"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Hívd le és alkalmazd az OrcaCloud legújabb beállításait"
msgid "You must be logged in to sync presets from cloud."
msgstr "A beállítások felhőből történő szinkronizálásához be kell jelentkezz."
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "Beállítások szinkronizálása a felhőből…" msgstr "Beállítások szinkronizálása a felhőből…"
@@ -10342,12 +10360,8 @@ msgstr "A fúvókainformációk szinkronizálása sikerült."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "A fúvóka- és AMS-száminformációk szinkronizálása sikerült." msgstr "A fúvóka- és AMS-száminformációk szinkronizálása sikerült."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Filamentek szinkronizálásának folytatása" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Mégse"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "A filament színének szinkronizálása a nyomtatóról sikerült." msgstr "A filament színének szinkronizálása a nyomtatóról sikerült."
@@ -11676,7 +11690,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11690,7 +11704,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12425,6 +12439,42 @@ msgstr "Felső felületi sűrűség"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "A felső felületi réteg sűrűsége. A 100%-os érték teljesen tömör, sima felső réteget hoz létre. Ennek az értéknek a csökkentése a kiválasztott felső felületi mintázatnak megfelelően texturált felső felületet eredményez. A 0%-os érték azt eredményezi, hogy a felső rétegen csak a falak jönnek létre. Esztétikai vagy funkcionális célokra szolgál, nem pedig olyan problémák javítására, mint a túlextrudálás." msgstr "A felső felületi réteg sűrűsége. A 100%-os érték teljesen tömör, sima felső réteget hoz létre. Ennek az értéknek a csökkentése a kiválasztott felső felületi mintázatnak megfelelően texturált felső felületet eredményez. A 0%-os érték azt eredményezi, hogy a felső rétegen csak a falak jönnek létre. Esztétikai vagy funkcionális célokra szolgál, nem pedig olyan problémák javítására, mint a túlextrudálás."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Alsó felület mintázata" msgstr "Alsó felület mintázata"
@@ -13092,12 +13142,12 @@ msgstr "Kitöltés sűrűsége"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "A belső ritka kitöltés sűrűsége. A 100% minden ritka kitöltést tömör kitöltéssé alakít, és a belső tömör kitöltési minta kerül használatra." msgstr "A belső ritka kitöltés sűrűsége. A 100% minden ritka kitöltést tömör kitöltéssé alakít, és a belső tömör kitöltési minta kerül használatra."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Kitöltési irány igazítása a modellhez" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14879,6 +14929,10 @@ msgstr "Igazított"
msgid "Aligned back" msgid "Aligned back"
msgstr "Hátulra igazítva" msgstr "Hátulra igazítva"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Hátul"
msgid "Random" msgid "Random"
msgstr "Véletlenszerû" msgstr "Véletlenszerû"
@@ -15243,6 +15297,18 @@ msgstr "Az összes nyomtató extruder előkészítése"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Ha engedélyezve van, akkor a nyomtatás kezdetén az összes nyomtató extruder előkészítésre kerül a tárgyasztal elülső szélénél." msgstr "Ha engedélyezve van, akkor a nyomtatás kezdetén az összes nyomtató extruder előkészítésre kerül a tárgyasztal elülső szélénél."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Szeletelési hézag lezárási sugara" msgstr "Szeletelési hézag lezárási sugara"
@@ -15690,6 +15756,45 @@ msgstr "Felső héj vastagság"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "A felső szilárd rétegek száma szeleteléskor megnő, ha a felső héjrétegekből számított vastagság kisebb ennél az értéknél. Ezzel elkerülhető, hogy túl vékony legyen a héj kis rétegmagasságnál. A 0 azt jelenti, hogy ez a beállítás ki van kapcsolva, és a felső héj vastagságát egyszerűen a felső héjrétegek száma határozza meg." msgstr "A felső szilárd rétegek száma szeleteléskor megnő, ha a felső héjrétegekből számított vastagság kisebb ennél az értéknél. Ezzel elkerülhető, hogy túl vékony legyen a héj kis rétegmagasságnál. A 0 azt jelenti, hogy ez a beállítás ki van kapcsolva, és a felső héj vastagságát egyszerűen a felső héjrétegek száma határozza meg."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Mozgási sebesség, amikor nem történik extrudálás" msgstr "Mozgási sebesség, amikor nem történik extrudálás"
@@ -19711,6 +19816,22 @@ msgstr ""
"Kunkorodás elkerülése\n" "Kunkorodás elkerülése\n"
"Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor a tárgyasztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?" "Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor a tárgyasztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Filamentek szinkronizálásának folytatása"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Mégse"
#~ msgid "Align infill direction to model"
#~ msgstr "Kitöltési irány igazítása a modellhez"
#~ msgid "Print"
#~ msgstr "Nyomtatás"
#~ msgid "in"
#~ msgstr "in"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Objektum koordináták" #~ msgstr "Objektum koordináták"
+153 -36
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -162,6 +162,12 @@ msgstr "Riempi"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Riempi spazio vuoto" msgstr "Riempi spazio vuoto"
msgid "Vertical"
msgstr "Verticale"
msgid "Horizontal"
msgstr "Orizzontale"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Consente di dipingere solo sulle facce selezionate da: \"%1%\"" msgstr "Consente di dipingere solo sulle facce selezionate da: \"%1%\""
@@ -257,12 +263,6 @@ msgstr "Triangolo"
msgid "Height Range" msgid "Height Range"
msgstr "Interv. altezza" msgstr "Interv. altezza"
msgid "Vertical"
msgstr "Verticale"
msgid "Horizontal"
msgstr "Orizzontale"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Rimuovi colore dipinto" msgstr "Rimuovi colore dipinto"
@@ -327,6 +327,7 @@ msgstr "Strumento di rotazione"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Ottimizza orientamento" msgstr "Ottimizza orientamento"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Ridimensiona" msgstr "Ridimensiona"
@@ -336,8 +337,9 @@ msgstr "Strumento di ridimensionamento"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Errore: chiudi prima tutti i menu della barra degli strumenti" msgstr "Errore: chiudi prima tutti i menu della barra degli strumenti"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "in" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -370,6 +372,9 @@ msgstr "Rapporti di scala"
msgid "Object operations" msgid "Object operations"
msgstr "Operazioni sugli oggetti" msgstr "Operazioni sugli oggetti"
msgid "Scale"
msgstr "Ridimensiona"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Operazioni volume" msgstr "Operazioni volume"
@@ -421,6 +426,10 @@ msgstr "Reimposta la rotazione corrente al valore di apertura dello strumento."
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Reimposta la rotazione corrente a zero reale." msgstr "Reimposta la rotazione corrente a zero reale."
msgctxt "Noun"
msgid "Scale"
msgstr "Ridimensiona"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Dimensioni" msgstr "Dimensioni"
@@ -3645,7 +3654,7 @@ msgstr "Calibrazione completata. Trova la linea di estrusione più uniforme sul
msgid "Save" msgid "Save"
msgstr "Salva" msgstr "Salva"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Posteriore" msgstr "Posteriore"
@@ -5026,6 +5035,7 @@ msgstr "Cambi testina"
msgid "Color change" msgid "Color change"
msgstr "Cambio colore" msgstr "Cambio colore"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Stampa" msgstr "Stampa"
@@ -5189,11 +5199,15 @@ msgstr "Evitare la regione di calibrazione dell'estrusione"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Allinea all'asse Y" msgstr "Allinea all'asse Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Posteriore"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Sinistra" msgstr "Sinistra"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Destra" msgstr "Destra"
@@ -5521,6 +5535,10 @@ msgstr "Piatto di stampa"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Esporta file G-code" msgstr "Esporta file G-code"
msgctxt "Verb"
msgid "Print"
msgstr "Stampa"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Esporta il file del piatto elaborato" msgstr "Esporta il file del piatto elaborato"
@@ -5694,15 +5712,6 @@ msgstr "Esporta la configurazione corrente in un file"
msgid "Export" msgid "Export"
msgstr "Esporta" msgstr "Esporta"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Esci" msgstr "Esci"
@@ -5819,6 +5828,15 @@ msgstr "Vista"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Pacchetto profili" msgstr "Pacchetto profili"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10324,12 +10342,8 @@ msgstr "Informazioni ugello sincronizzate con successo."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Informazioni ugello e numero AMS sincronizzate con successo." msgstr "Informazioni ugello e numero AMS sincronizzate con successo."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Continua la sincronizzazione dei filamenti" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Annulla"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Colore del filamento sincronizzato con successo dalla stampante." msgstr "Colore del filamento sincronizzato con successo dalla stampante."
@@ -11658,7 +11672,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11672,7 +11686,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12408,6 +12422,42 @@ msgstr "Densità superficie superiore"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Densità dello strato superficiale superiore. Un valore del 100% crea uno strato superiore completamente solido e liscio. La riduzione di questo valore produce una superficie superiore texturizzata, secondo il pattern di superficie superiore scelto. Un valore dello 0% risulterà nella creazione delle sole pareti sullo strato superiore. Destinato a scopi estetici o funzionali, non per risolvere problemi come la sovraestrusione." msgstr "Densità dello strato superficiale superiore. Un valore del 100% crea uno strato superiore completamente solido e liscio. La riduzione di questo valore produce una superficie superiore texturizzata, secondo il pattern di superficie superiore scelto. Un valore dello 0% risulterà nella creazione delle sole pareti sullo strato superiore. Destinato a scopi estetici o funzionali, non per risolvere problemi come la sovraestrusione."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Motivo superficie inferiore" msgstr "Motivo superficie inferiore"
@@ -13075,12 +13125,12 @@ msgstr "Densità riempimento sparso"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Densità del riempimento sparso interno. 100% trasforma il riempimento sparso in riempimento solido e verrà utilizzato il motivo del riempimento solido interno." msgstr "Densità del riempimento sparso interno. 100% trasforma il riempimento sparso in riempimento solido e verrà utilizzato il motivo del riempimento solido interno."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Allinea direzione riempimento al modello" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14853,6 +14903,10 @@ msgstr "Allineato"
msgid "Aligned back" msgid "Aligned back"
msgstr "Allineato dietro" msgstr "Allineato dietro"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Posteriore"
msgid "Random" msgid "Random"
msgstr "Casuale" msgstr "Casuale"
@@ -15213,6 +15267,18 @@ msgstr "Prepara tutti gli estrusori di stampa"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Se abilitata, tutti gli estrusori di stampa verranno preparati nel bordo frontale del piano di stampa all'inizio della stampa." msgstr "Se abilitata, tutti gli estrusori di stampa verranno preparati nel bordo frontale del piano di stampa all'inizio della stampa."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Raggio di chiusura spazi vuoti" msgstr "Raggio di chiusura spazi vuoti"
@@ -15658,6 +15724,45 @@ msgstr "Spessore guscio superiore"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Il numero di strati solidi superiori viene aumentato durante l'elaborazione se lo spessore calcolato dagli strati del guscio superiore è più sottile di questo valore. In questo modo si evita di avere un guscio troppo sottile quando l'altezza degli strati è piccola. Il valore 0 indica che questa impostazione è disattivata e che lo spessore del guscio superiore è determinato in modo assoluto dagli strati del guscio superiore." msgstr "Il numero di strati solidi superiori viene aumentato durante l'elaborazione se lo spessore calcolato dagli strati del guscio superiore è più sottile di questo valore. In questo modo si evita di avere un guscio troppo sottile quando l'altezza degli strati è piccola. Il valore 0 indica che questa impostazione è disattivata e che lo spessore del guscio superiore è determinato in modo assoluto dagli strati del guscio superiore."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Indica la velocità di spostamento più rapida e senza estrusione." msgstr "Indica la velocità di spostamento più rapida e senza estrusione."
@@ -19691,6 +19796,22 @@ msgstr ""
"Evita le deformazioni\n" "Evita le deformazioni\n"
"Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?" "Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Continua la sincronizzazione dei filamenti"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Annulla"
#~ msgid "Align infill direction to model"
#~ msgstr "Allinea direzione riempimento al modello"
#~ msgid "Print"
#~ msgstr "Stampa"
#~ msgid "in"
#~ msgstr "in"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Coordinate oggetto" #~ msgstr "Coordinate oggetto"
@@ -21204,10 +21325,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "Deseleziona" #~ msgstr "Deseleziona"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Ridimensiona"
#~ msgid "Lift Z Enforcement" #~ msgid "Lift Z Enforcement"
#~ msgstr "Applicazione dell'ascensore Z" #~ msgstr "Applicazione dell'ascensore Z"
+153 -36
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -162,6 +162,12 @@ msgstr "塗りつぶし"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "隙間充填" msgstr "隙間充填"
msgid "Vertical"
msgstr "垂直"
msgid "Horizontal"
msgstr "水平"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "%1%で選択した面だけをペイントする" msgstr "%1%で選択した面だけをペイントする"
@@ -257,12 +263,6 @@ msgstr "三角形"
msgid "Height Range" msgid "Height Range"
msgstr "高さ範囲" msgstr "高さ範囲"
msgid "Vertical"
msgstr "垂直"
msgid "Horizontal"
msgstr "水平"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "塗った色を消去" msgstr "塗った色を消去"
@@ -327,6 +327,7 @@ msgstr "ギズモ-回転"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "向きを最適化" msgstr "向きを最適化"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "スケール" msgstr "スケール"
@@ -336,8 +337,9 @@ msgstr "ギズモ-縮尺"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "エラー: ツールバーを閉じてください" msgstr "エラー: ツールバーを閉じてください"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "に" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -370,6 +372,9 @@ msgstr "倍率"
msgid "Object operations" msgid "Object operations"
msgstr "オブジェクト操作" msgstr "オブジェクト操作"
msgid "Scale"
msgstr "スケール"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "操作" msgstr "操作"
@@ -421,6 +426,10 @@ msgstr "回転ツールを開いた時の値にリセットします。"
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "現在の回転を0にリセットします。" msgstr "現在の回転を0にリセットします。"
msgctxt "Noun"
msgid "Scale"
msgstr "スケール"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "サイズ" msgstr "サイズ"
@@ -3628,7 +3637,7 @@ msgstr "キャリブレーションが完了しました。下の写真のよう
msgid "Save" msgid "Save"
msgstr "保存" msgstr "保存"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "背面" msgstr "背面"
@@ -4999,6 +5008,7 @@ msgstr "ツールチェンジ"
msgid "Color change" msgid "Color change"
msgstr "色変更" msgstr "色変更"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "造形する" msgstr "造形する"
@@ -5162,11 +5172,15 @@ msgstr "押出しキャリブレーション領域を避ける"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Y軸に整列" msgstr "Y軸に整列"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "背面"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "左" msgstr "左"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "右" msgstr "右"
@@ -5488,6 +5502,10 @@ msgstr "造形開始"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "G-codeをエクスポート" msgstr "G-codeをエクスポート"
msgctxt "Verb"
msgid "Print"
msgstr "造形する"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "エクスポート" msgstr "エクスポート"
@@ -5661,15 +5679,6 @@ msgstr "現在の構成をエクスポート"
msgid "Export" msgid "Export"
msgstr "エクスポート" msgstr "エクスポート"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "終了" msgstr "終了"
@@ -5786,6 +5795,15 @@ msgstr "表示"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10257,12 +10275,8 @@ msgstr "ノズル情報の同期に成功しました。"
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "ノズルとAMS数の情報の同期に成功しました。" msgstr "ノズルとAMS数の情報の同期に成功しました。"
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "フィラメントの同期を続行" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "キャンセル"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "プリンターからフィラメントの色を正常に同期しました。" msgstr "プリンターからフィラメントの色を正常に同期しました。"
@@ -11555,7 +11569,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11569,7 +11583,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12213,6 +12227,42 @@ msgstr "上面密度"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "底面パターン" msgstr "底面パターン"
@@ -12836,12 +12886,12 @@ msgstr "充填密度"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "" msgstr ""
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "インフィル方向をモデルに合わせる" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14501,6 +14551,10 @@ msgstr "整列"
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "背面"
msgid "Random" msgid "Random"
msgstr "ランダム" msgstr "ランダム"
@@ -14843,6 +14897,18 @@ msgstr "全てのエクストルーダーでプライムを実施"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "有効にすると、すべてのプリントエクストルーダーは、プリント開始時にプリントベッドの前端で準備されます。" msgstr "有効にすると、すべてのプリントエクストルーダーは、プリント開始時にプリントベッドの前端で準備されます。"
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "隙間充填半径" msgstr "隙間充填半径"
@@ -15271,6 +15337,45 @@ msgstr "トップ面厚さ"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "トップ面の厚さです、トップ面層数で決まった厚みがこの値より小さい場合、層数を増やします。この値が0にする場合、この設定が無効となり、設定した層数で造形します。" msgstr "トップ面の厚さです、トップ面層数で決まった厚みがこの値より小さい場合、層数を増やします。この値が0にする場合、この設定が無効となり、設定した層数で造形します。"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "移動完了時の速度です。" msgstr "移動完了時の速度です。"
@@ -19159,6 +19264,22 @@ msgstr ""
"反りを避ける\n" "反りを避ける\n"
"ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?"
#~ msgid "Continue to sync filaments"
#~ msgstr "フィラメントの同期を続行"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "キャンセル"
#~ msgid "Align infill direction to model"
#~ msgstr "インフィル方向をモデルに合わせる"
#~ msgid "Print"
#~ msgstr "造形する"
#~ msgid "in"
#~ msgstr "に"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "オブジェクト座標" #~ msgstr "オブジェクト座標"
@@ -20102,10 +20223,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "選択解除" #~ msgstr "選択解除"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "スケール"
#~ msgid "Z-hop when retract" #~ msgid "Z-hop when retract"
#~ msgstr "リトラクト時にZ方向調整" #~ msgstr "リトラクト時にZ方向調整"
+149 -35
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2025-06-02 17:12+0900\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n"
"Last-Translator: crwusiz <crwusiz@gmail.com>\n" "Last-Translator: crwusiz <crwusiz@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -166,6 +166,12 @@ msgstr "채우기"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "간격 채우기" msgstr "간격 채우기"
msgid "Vertical"
msgstr "수직"
msgid "Horizontal"
msgstr "수평"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "\"%1%\"에서 선택한 영역에만 칠하기 허용" msgstr "\"%1%\"에서 선택한 영역에만 칠하기 허용"
@@ -261,12 +267,6 @@ msgstr "삼각형"
msgid "Height Range" msgid "Height Range"
msgstr "높이 범위" msgstr "높이 범위"
msgid "Vertical"
msgstr "수직"
msgid "Horizontal"
msgstr "수평"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "칠한 색 제거" msgstr "칠한 색 제거"
@@ -331,6 +331,7 @@ msgstr "변형도구 - 회전"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "방향 최적화" msgstr "방향 최적화"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "배율" msgstr "배율"
@@ -340,8 +341,9 @@ msgstr "변형도구 - 배율"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "오류: 먼저 모든 도구 모음 메뉴를 닫으십시오." msgstr "오류: 먼저 모든 도구 모음 메뉴를 닫으십시오."
msgctxt "inches"
msgid "in" msgid "in"
msgstr "인치" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -374,6 +376,9 @@ msgstr "배율비"
msgid "Object operations" msgid "Object operations"
msgstr "객체 작업" msgstr "객체 작업"
msgid "Scale"
msgstr "배율"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "용량 작업" msgstr "용량 작업"
@@ -425,6 +430,10 @@ msgstr "회전 도구를 열었을 때의 값으로 현재 회전을 초기화
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "현재 회전을 0으로 초기화합니다." msgstr "현재 회전을 0으로 초기화합니다."
msgctxt "Noun"
msgid "Scale"
msgstr "배율"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "크기" msgstr "크기"
@@ -3643,7 +3652,7 @@ msgstr "교정이 완료되었습니다. 당신의 고온 베드에서 아래
msgid "Save" msgid "Save"
msgstr "저장" msgstr "저장"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "뒷면" msgstr "뒷면"
@@ -5025,6 +5034,7 @@ msgstr ""
msgid "Color change" msgid "Color change"
msgstr "색 변경" msgstr "색 변경"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "출력" msgstr "출력"
@@ -5188,11 +5198,15 @@ msgstr "압출 교정 영역을 피하세요"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Y축에 정렬" msgstr "Y축에 정렬"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "뒷면"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "왼쪽" msgstr "왼쪽"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "오른쪽" msgstr "오른쪽"
@@ -5516,6 +5530,10 @@ msgstr "플레이트 출력"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Gcode 파일 내보내기" msgstr "Gcode 파일 내보내기"
msgctxt "Verb"
msgid "Print"
msgstr "출력"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "플레이트 슬라이스 파일 내보내기" msgstr "플레이트 슬라이스 파일 내보내기"
@@ -5689,15 +5707,6 @@ msgstr "현재 설정을 파일로 내보내기"
msgid "Export" msgid "Export"
msgstr "내보내기" msgstr "내보내기"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "종료" msgstr "종료"
@@ -5814,6 +5823,15 @@ msgstr "시점"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10290,12 +10308,8 @@ msgstr "노즐 정보를 성공적으로 동기화했습니다."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "노즐 및 AMS 번호 정보를 성공적으로 동기화했습니다." msgstr "노즐 및 AMS 번호 정보를 성공적으로 동기화했습니다."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "필라멘트 동기화 계속하기" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "취소"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "" msgstr ""
@@ -11617,7 +11631,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11631,7 +11645,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12336,6 +12350,42 @@ msgstr "상단 표면 밀도"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "하단 표면 패턴" msgstr "하단 표면 패턴"
@@ -12990,12 +13040,12 @@ msgstr "드문 채우기 밀도"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "내부 드문 채우기의 밀도, 100%는 모든 드문 채우기를 꽉찬 내부 채우기로 변경하고 채우기에는 패턴이 사용됩니다" msgstr "내부 드문 채우기의 밀도, 100%는 모든 드문 채우기를 꽉찬 내부 채우기로 변경하고 채우기에는 패턴이 사용됩니다"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14719,6 +14769,10 @@ msgstr "정렬"
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "뒷면"
msgid "Random" msgid "Random"
msgstr "무작위" msgstr "무작위"
@@ -15081,6 +15135,18 @@ msgstr "모든 활성화된 압출기 프라이밍"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "활성화되면 모든 활성화된 압출기는 출력 시작 시 출력 베드의 앞쪽 가장자리에서 프라이밍합니다." msgstr "활성화되면 모든 활성화된 압출기는 출력 시작 시 출력 베드의 앞쪽 가장자리에서 프라이밍합니다."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "슬라이스 간격 폐쇄 반경" msgstr "슬라이스 간격 폐쇄 반경"
@@ -15520,6 +15586,45 @@ msgstr "상단 쉘 두께"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "상단 쉘 레이어로 계산된 두께가 이 값보다 얇은 경우 슬라이싱할 때 상단 꽉찬 레이어의 수가 증가합니다. 이렇게 하면 레이어 높이가 작을 때 쉘이 너무 얇아지는 것을 방지할 수 있습니다. 0은 이 설정이 비활성화되고 상단 쉘의 두께가 절대적으로 상단 쉘 레이어에 의해 결정됨을 의미합니다" msgstr "상단 쉘 레이어로 계산된 두께가 이 값보다 얇은 경우 슬라이싱할 때 상단 꽉찬 레이어의 수가 증가합니다. 이렇게 하면 레이어 높이가 작을 때 쉘이 너무 얇아지는 것을 방지할 수 있습니다. 0은 이 설정이 비활성화되고 상단 쉘의 두께가 절대적으로 상단 쉘 레이어에 의해 결정됨을 의미합니다"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "압출이 없을 때의 이동 속도" msgstr "압출이 없을 때의 이동 속도"
@@ -19527,6 +19632,19 @@ msgstr ""
"뒤틀림 방지\n" "뒤틀림 방지\n"
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
#~ msgid "Continue to sync filaments"
#~ msgstr "필라멘트 동기화 계속하기"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "취소"
#~ msgid "Print"
#~ msgstr "출력"
#~ msgid "in"
#~ msgstr "인치"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "객체 좌표" #~ msgstr "객체 좌표"
@@ -21015,10 +21133,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "선택 취소" #~ msgstr "선택 취소"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "규모"
#~ msgid "Lift Z Enforcement" #~ msgid "Lift Z Enforcement"
#~ msgstr "강제 Z 올리기" #~ msgstr "강제 Z 올리기"
+198 -49
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2026-07-02 14:13+0300\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n"
"Last-Translator: Gintaras Kučinskas <sharanchius@gmail.com>\n" "Last-Translator: Gintaras Kučinskas <sharanchius@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -164,6 +164,12 @@ msgstr "Užpildymas"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Plyšių užpildymas" msgstr "Plyšių užpildymas"
msgid "Vertical"
msgstr "Vertikaliai"
msgid "Horizontal"
msgstr "Horizontaliai"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Leidžia piešti tik ant paviršių, kuriuos pasirinko: „%1%“" msgstr "Leidžia piešti tik ant paviršių, kuriuos pasirinko: „%1%“"
@@ -256,12 +262,6 @@ msgstr "Trikampis"
msgid "Height Range" msgid "Height Range"
msgstr "Aukščio diapazonas" msgstr "Aukščio diapazonas"
msgid "Vertical"
msgstr "Vertikaliai"
msgid "Horizontal"
msgstr "Horizontaliai"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Pašalinti dažytą spalvą" msgstr "Pašalinti dažytą spalvą"
@@ -326,6 +326,7 @@ msgstr "Manipuliatorius – Pasukimas"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optimizuoti orientaciją" msgstr "Optimizuoti orientaciją"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Mastelis" msgstr "Mastelis"
@@ -335,8 +336,9 @@ msgstr "Manipuliatorius – Mastelio keitimas"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Klaida: Prašome pirmiau uždaryti visus įrankių juostos meniu" msgstr "Klaida: Prašome pirmiau uždaryti visus įrankių juostos meniu"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "col." msgstr ""
msgid "mm" msgid "mm"
msgstr "mm." msgstr "mm."
@@ -368,6 +370,9 @@ msgstr "Mastelio koeficientai"
msgid "Object operations" msgid "Object operations"
msgstr "" msgstr ""
msgid "Scale"
msgstr "Mastelis"
msgid "Volume operations" msgid "Volume operations"
msgstr "" msgstr ""
@@ -413,6 +418,10 @@ msgstr "Atkurti dabartinį pasukimą iki vertės, buvusios atidarius pasukimo į
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Atstatyti dabartinį sukimąsi į tikrąsias nulines vertes." msgstr "Atstatyti dabartinį sukimąsi į tikrąsias nulines vertes."
msgctxt "Noun"
msgid "Scale"
msgstr "Mastelis"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Dydis" msgstr "Dydis"
@@ -3575,6 +3584,7 @@ msgstr "Kalibravimas baigtas. Raskite tolygiausią ekstruzijos liniją ant kaiti
msgid "Save" msgid "Save"
msgstr "Išsaugoti" msgstr "Išsaugoti"
msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Atgal" msgstr "Atgal"
@@ -4905,6 +4915,7 @@ msgstr "Įrankio keitimai"
msgid "Color change" msgid "Color change"
msgstr "Spalvos keitimas" msgstr "Spalvos keitimas"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Spausdinti" msgstr "Spausdinti"
@@ -5068,11 +5079,15 @@ msgstr "Vengti ekstruzijos kalibravimo srities"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Išlygiuoti pagal Y ašį" msgstr "Išlygiuoti pagal Y ašį"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Atgal"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Kairė" msgstr "Kairė"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Dešinė" msgstr "Dešinė"
@@ -5395,6 +5410,10 @@ msgstr "Spausdinti plokštę"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Eksportuoti G-kodo failą" msgstr "Eksportuoti G-kodo failą"
msgctxt "Verb"
msgid "Print"
msgstr "Spausdinti"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Eksportuoti supjaustytos plokštės failą" msgstr "Eksportuoti supjaustytos plokštės failą"
@@ -5568,15 +5587,6 @@ msgstr "Eksportuoti dabartinę konfigūraciją į failus"
msgid "Export" msgid "Export"
msgstr "Eksportuoti" msgstr "Eksportuoti"
msgid "Sync Presets"
msgstr "Sinchronizuoti profilius"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Atsisiųsti ir pritaikyti naujausius profilius iš „OrcaCloud“"
msgid "You must be logged in to sync presets from cloud."
msgstr "Norėdami sinchronizuoti profilius iš debesies, turite būti prisijungę."
msgid "Quit" msgid "Quit"
msgstr "Išeiti" msgstr "Išeiti"
@@ -5691,6 +5701,15 @@ msgstr "Vaizdas"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Profilių rinkinys" msgstr "Profilių rinkinys"
msgid "Sync Presets"
msgstr "Sinchronizuoti profilius"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Atsisiųsti ir pritaikyti naujausius profilius iš „OrcaCloud“"
msgid "You must be logged in to sync presets from cloud."
msgstr "Norėdami sinchronizuoti profilius iš debesies, turite būti prisijungę."
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "Sinchronizuojami profiliai iš debesies…" msgstr "Sinchronizuojami profiliai iš debesies…"
@@ -10142,12 +10161,8 @@ msgstr "Purkštuko informacija sėkmingai sinchronizuota."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Purkštuko ir AMS skaičiaus informacija sėkmingai sinchronizuota." msgstr "Purkštuko ir AMS skaičiaus informacija sėkmingai sinchronizuota."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Tęsti gijų sinchronizavimą" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Atšaukti"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Gijos spalva sėkmingai sinchronizuota iš spausdintuvo." msgstr "Gijos spalva sėkmingai sinchronizuota iš spausdintuvo."
@@ -11424,19 +11439,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Išorinių tiltelių kampo perrašymas.\n"
"Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n"
"Kitu atveju nurodytas kampas bus naudojamas pagal:\n"
" - absoliučiąsias koordinates;\n"
" - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n"
" - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n"
"\n"
"Naudokite 180° nulinėms absoliučiosioms koordinatėms."
msgid "Internal bridge infill direction" msgid "Internal bridge infill direction"
msgstr "Vidinio tilto užpildo kryptis" msgstr "Vidinio tilto užpildo kryptis"
@@ -11446,19 +11453,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"Vidinių tiltelių kampo perrašymas.\n"
"Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n"
"Kitu atveju nurodytas kampas bus naudojamas pagal:\n"
" - absoliučiąsias koordinates;\n"
" - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n"
" - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n"
"\n"
"Naudokite 180° nulinėms absoliučiosioms koordinatėms."
msgid "Relative bridge angle" msgid "Relative bridge angle"
msgstr "Santykinis tiltelio kampas" msgstr "Santykinis tiltelio kampas"
@@ -12227,6 +12226,42 @@ msgstr "Viršutinio paviršiaus tankis"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Viršutinio paviršiaus sluoksnio tankis. Nustačius 100 %, sukuriamas visiškai vientisas ir lygus viršutinis sluoksnis. Sumažinus šią reikšmę, gaunamas tekstūruotas viršutinis paviršius pagal pasirinktą raštą. Nustačius 0 %, viršutiniame sluoksnyje bus spausdinamos tik sienelės. Funkcija skirta estetiniais arba funkciniais tikslais, o ne tokioms problemoms kaip perteklinė ekstruzija (over-extrusion) spręsti." msgstr "Viršutinio paviršiaus sluoksnio tankis. Nustačius 100 %, sukuriamas visiškai vientisas ir lygus viršutinis sluoksnis. Sumažinus šią reikšmę, gaunamas tekstūruotas viršutinis paviršius pagal pasirinktą raštą. Nustačius 0 %, viršutiniame sluoksnyje bus spausdinamos tik sienelės. Funkcija skirta estetiniais arba funkciniais tikslais, o ne tokioms problemoms kaip perteklinė ekstruzija (over-extrusion) spręsti."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Apatinio paviršiaus raštas" msgstr "Apatinio paviršiaus raštas"
@@ -12877,15 +12912,13 @@ msgstr "Reto užpildo tankis"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Vidinio reto užpildo tankis. 100% paverčia visą retą užpildą vientisu užpildu ir tuomet bus naudojamas vidinio vientiso užpildo raštas." msgstr "Vidinio reto užpildo tankis. 100% paverčia visą retą užpildą vientisu užpildu ir tuomet bus naudojamas vidinio vientiso užpildo raštas."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Suderinti užpildo kryptį su modeliu" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"Sulygiuoja užpildo, tiltelių, lyginimo ir paviršiaus užpildymo kryptis pagal modelio orientaciją ant pagrindo.\n"
"Kai įjungta, kryptys sukasi kartu su modeliu, kad būtų išlaikytos optimalios tvirtumo charakteristikos."
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "Įterpti vientisus sluoksnius" msgstr "Įterpti vientisus sluoksnius"
@@ -14603,6 +14636,9 @@ msgstr "Sulygiuota"
msgid "Aligned back" msgid "Aligned back"
msgstr "Sulygiuota gale" msgstr "Sulygiuota gale"
msgid "Back"
msgstr "Atgal"
msgid "Random" msgid "Random"
msgstr "Atsitiktinė" msgstr "Atsitiktinė"
@@ -14960,6 +14996,18 @@ msgstr "Paruošti (prime) visus spausdinimo ekstruderius"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Jei įjungta, visi spausdinimo ekstruderiai spausdinimo pradžioje bus paruošti (primed) prie priekinio spausdinimo pagrindo krašto." msgstr "Jei įjungta, visi spausdinimo ekstruderiai spausdinimo pradžioje bus paruošti (primed) prie priekinio spausdinimo pagrindo krašto."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Sluoksniavimo tarpo uždarymo spindulys" msgstr "Sluoksniavimo tarpo uždarymo spindulys"
@@ -15387,6 +15435,45 @@ msgstr "Viršutinio apvalkalo storis"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "" msgstr ""
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "" msgstr ""
@@ -19345,6 +19432,68 @@ msgstr ""
"Venkite deformacijų (warping)\n" "Venkite deformacijų (warping)\n"
"Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?" "Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Tęsti gijų sinchronizavimą"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Atšaukti"
#, no-c-format, no-boost-format
#~ msgid ""
#~ "External Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Išorinių tiltelių kampo perrašymas.\n"
#~ "Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n"
#~ "Kitu atveju nurodytas kampas bus naudojamas pagal:\n"
#~ " - absoliučiąsias koordinates;\n"
#~ " - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n"
#~ " - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n"
#~ "\n"
#~ "Naudokite 180° nulinėms absoliučiosioms koordinatėms."
#~ msgid ""
#~ "Internal Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "Vidinių tiltelių kampo perrašymas.\n"
#~ "Palikus 0, tiltelio kampas bus apskaičiuojamas automatiškai kiekvienam konkrečiam tilteliui.\n"
#~ "Kitu atveju nurodytas kampas bus naudojamas pagal:\n"
#~ " - absoliučiąsias koordinates;\n"
#~ " - absoliučiąsias koordinates + modelio pasukimą: jei įjungta „Sulygiuoti užpildo kryptį su modeliu“;\n"
#~ " - optimalų automatinį kampą + šią reikšmę: jei įjungta „Santykinis tiltelio kampas“.\n"
#~ "\n"
#~ "Naudokite 180° nulinėms absoliučiosioms koordinatėms."
#~ msgid "Align infill direction to model"
#~ msgstr "Suderinti užpildo kryptį su modeliu"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "Sulygiuoja užpildo, tiltelių, lyginimo ir paviršiaus užpildymo kryptis pagal modelio orientaciją ant pagrindo.\n"
#~ "Kai įjungta, kryptys sukasi kartu su modeliu, kad būtų išlaikytos optimalios tvirtumo charakteristikos."
#~ msgid "Print"
#~ msgstr "Spausdinti"
#~ msgid "in"
#~ msgstr "col."
#~ msgid "Perform" #~ msgid "Perform"
#~ msgstr "Atlikti" #~ msgstr "Atlikti"
+142 -34
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -162,6 +162,12 @@ msgstr "Vullen"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Gatvulling" msgstr "Gatvulling"
msgid "Vertical"
msgstr "Verticaal"
msgid "Horizontal"
msgstr "Horizontaal"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Staat alleen schilderen toe op facetten geselecteerd met: \"%1%\"" msgstr "Staat alleen schilderen toe op facetten geselecteerd met: \"%1%\""
@@ -257,12 +263,6 @@ msgstr "Driehoek"
msgid "Height Range" msgid "Height Range"
msgstr "Hoogtebereik" msgstr "Hoogtebereik"
msgid "Vertical"
msgstr "Verticaal"
msgid "Horizontal"
msgstr "Horizontaal"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Geschilderd kleur verwijderen" msgstr "Geschilderd kleur verwijderen"
@@ -327,6 +327,7 @@ msgstr "Roteren"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Oriëntatie optimaliseren" msgstr "Oriëntatie optimaliseren"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Schalen" msgstr "Schalen"
@@ -336,8 +337,9 @@ msgstr "Verschalen"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Fout: sluit eerst alle openstaande hulpmiddelmenu's" msgstr "Fout: sluit eerst alle openstaande hulpmiddelmenu's"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "in" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -370,6 +372,9 @@ msgstr "Schaalverhoudingen"
msgid "Object operations" msgid "Object operations"
msgstr "Objectbewerkingen" msgstr "Objectbewerkingen"
msgid "Scale"
msgstr "Schalen"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Volumebewerkingen" msgstr "Volumebewerkingen"
@@ -421,6 +426,10 @@ msgstr ""
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "" msgstr ""
msgctxt "Noun"
msgid "Scale"
msgstr "Schalen"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Maat" msgstr "Maat"
@@ -3610,7 +3619,7 @@ msgstr "Kalibratie voltooid. Zoek de meest uniforme extrusielijn op uw hotbed, z
msgid "Save" msgid "Save"
msgstr "Bewaar" msgstr "Bewaar"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Achterzijde" msgstr "Achterzijde"
@@ -4970,6 +4979,7 @@ msgstr "Toolwisselingen"
msgid "Color change" msgid "Color change"
msgstr "Kleur veranderen" msgstr "Kleur veranderen"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "" msgstr ""
@@ -5128,11 +5138,15 @@ msgstr "Vermijd het extrusie kalibratie gebied"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Uitlijnen op Y-as" msgstr "Uitlijnen op Y-as"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Achterzijde"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Links" msgstr "Links"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Rechts" msgstr "Rechts"
@@ -5456,6 +5470,10 @@ msgstr "Printplaat"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "G-codebestand exporteren" msgstr "G-codebestand exporteren"
msgctxt "Verb"
msgid "Print"
msgstr ""
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exporteer plate sliced bestand" msgstr "Exporteer plate sliced bestand"
@@ -5629,15 +5647,6 @@ msgstr "Huidige configuratie exporteren naar bestanden"
msgid "Export" msgid "Export"
msgstr "Exporteren" msgstr "Exporteren"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Stop" msgstr "Stop"
@@ -5754,6 +5763,15 @@ msgstr "Weergave"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10184,13 +10202,9 @@ msgstr ""
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "" msgstr ""
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Annuleren"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "" msgstr ""
@@ -11487,7 +11501,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11501,7 +11515,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12145,6 +12159,42 @@ msgstr ""
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Bodem oppvlakte patroon" msgstr "Bodem oppvlakte patroon"
@@ -12761,12 +12811,12 @@ msgstr "Vulling percentage"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "" msgstr ""
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14426,6 +14476,10 @@ msgstr "Uitgelijnd"
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Achterzijde"
msgid "Random" msgid "Random"
msgstr "Willekeurig" msgstr "Willekeurig"
@@ -14769,6 +14823,18 @@ msgstr "Veeg alle printextruders af"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Alle extruders worden afgeveegd aan de voorzijde van het printbed aan het begin van de print als dit is ingeschakeld." msgstr "Alle extruders worden afgeveegd aan de voorzijde van het printbed aan het begin van de print als dit is ingeschakeld."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Sluitingsradius van de gap" msgstr "Sluitingsradius van de gap"
@@ -15198,6 +15264,45 @@ msgstr "Dikte bovenkant"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Het aantal bovenste solide lagen wordt verhoogd tijdens het slicen als de totale dikte van de bovenste lagen lager is dan deze waarde. Dit zorgt ervoor dat de schaal niet te dun is bij een lage laaghoogte. 0 betekend dat deze instelling niet actief is en dat de dikte van de bovenkant bepaald wordt door het aantal bodem lagen." msgstr "Het aantal bovenste solide lagen wordt verhoogd tijdens het slicen als de totale dikte van de bovenste lagen lager is dan deze waarde. Dit zorgt ervoor dat de schaal niet te dun is bij een lage laaghoogte. 0 betekend dat deze instelling niet actief is en dat de dikte van de bovenkant bepaald wordt door het aantal bodem lagen."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Dit is de snelheid waarmee verplaatsingen zullen worden gedaan." msgstr "Dit is de snelheid waarmee verplaatsingen zullen worden gedaan."
@@ -19114,6 +19219,13 @@ msgstr ""
"Kromtrekken voorkomen\n" "Kromtrekken voorkomen\n"
"Wist je dat bij het printen van materialen die gevoelig zijn voor kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het warmtebed de kans op kromtrekken kan verkleinen?" "Wist je dat bij het printen van materialen die gevoelig zijn voor kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het warmtebed de kans op kromtrekken kan verkleinen?"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Annuleren"
#~ msgid "in"
#~ msgstr "in"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Objectcoördinaten" #~ msgstr "Objectcoördinaten"
@@ -20317,10 +20429,6 @@ msgstr ""
#~ msgid "Thick bridges" #~ msgid "Thick bridges"
#~ msgstr "Dikke bruggen" #~ msgstr "Dikke bruggen"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Schalen"
#~ msgid "Z-hop when retract" #~ msgid "Z-hop when retract"
#~ msgstr "Z-hop tijdens terugtrekken (retraction)" #~ msgstr "Z-hop tijdens terugtrekken (retraction)"
+150 -36
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n" "Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -163,6 +163,13 @@ msgstr "Wypełnienie"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Wypełnienie szczelin" msgstr "Wypełnienie szczelin"
# +++++++++++++++++++++
msgid "Vertical"
msgstr "Pionowa linia"
msgid "Horizontal"
msgstr "Pozioma linia"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Pozwala malować tylko na wybranych powierzchniach za pomocą: „%1%”" msgstr "Pozwala malować tylko na wybranych powierzchniach za pomocą: „%1%”"
@@ -258,13 +265,6 @@ msgstr "Trójkąt"
msgid "Height Range" msgid "Height Range"
msgstr "Przedział" msgstr "Przedział"
# +++++++++++++++++++++
msgid "Vertical"
msgstr "Pionowa linia"
msgid "Horizontal"
msgstr "Pozioma linia"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Usuń pomalowany kolor" msgstr "Usuń pomalowany kolor"
@@ -329,6 +329,7 @@ msgstr "Uchwyt-Obróć"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optymalizuj orientację" msgstr "Optymalizuj orientację"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Skaluj" msgstr "Skaluj"
@@ -338,8 +339,9 @@ msgstr "Uchwyt-Skaluj"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Błąd: Proszę najpierw zamknąć wszystkie paski narzędziowe" msgstr "Błąd: Proszę najpierw zamknąć wszystkie paski narzędziowe"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "cal" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -372,6 +374,9 @@ msgstr "Współczynniki skali"
msgid "Object operations" msgid "Object operations"
msgstr "Operacje na obiekcie" msgstr "Operacje na obiekcie"
msgid "Scale"
msgstr "Skaluj"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Operacje na objętości" msgstr "Operacje na objętości"
@@ -423,6 +428,10 @@ msgstr "Zresetuj bieżący obrót do wartości ustawionej przy otwarciu narzędz
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Zresetuj bieżący obrót do wartości zerowej." msgstr "Zresetuj bieżący obrót do wartości zerowej."
msgctxt "Noun"
msgid "Scale"
msgstr "Skaluj"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Rozmiar" msgstr "Rozmiar"
@@ -3648,7 +3657,7 @@ msgstr "Kalibracja zakończona. Proszę znaleźć na płycie roboczej, linie eks
msgid "Save" msgid "Save"
msgstr "Zapisz" msgstr "Zapisz"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Tył" msgstr "Tył"
@@ -5022,6 +5031,7 @@ msgstr "Zmiany narzędzi"
msgid "Color change" msgid "Color change"
msgstr "Zmiana koloru" msgstr "Zmiana koloru"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Drukuj" msgstr "Drukuj"
@@ -5185,11 +5195,15 @@ msgstr "Unikaj obszaru kalibracji ekstruzji"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Wyrównaj do osi Y" msgstr "Wyrównaj do osi Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Tył"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Lewy" msgstr "Lewy"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Prawy" msgstr "Prawy"
@@ -5517,6 +5531,10 @@ msgstr "Drukuj aktualną płytę"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Eksportuj plik G-code" msgstr "Eksportuj plik G-code"
msgctxt "Verb"
msgid "Print"
msgstr "Drukuj"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Eksportuj plik pociętej płyty" msgstr "Eksportuj plik pociętej płyty"
@@ -5690,15 +5708,6 @@ msgstr "Eksportuj bieżącą konfigurację do plików"
msgid "Export" msgid "Export"
msgstr "Eksportuj" msgstr "Eksportuj"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Zakończ" msgstr "Zakończ"
@@ -5815,6 +5824,15 @@ msgstr "Widok"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10307,12 +10325,8 @@ msgstr "Pomyślnie zsynchronizowano informacje o dyszy."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Pomyślnie zsynchronizowano dyszę z informacjami numeru AMS." msgstr "Pomyślnie zsynchronizowano dyszę z informacjami numeru AMS."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Kontynuuj aby zsynchronizować filamenty" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Anuluj"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "" msgstr ""
@@ -11632,7 +11646,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11646,7 +11660,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12355,6 +12369,42 @@ msgstr "Gęstość górnej powierzchni"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Wzór dolnej powierzchni" msgstr "Wzór dolnej powierzchni"
@@ -13005,12 +13055,12 @@ msgstr "Gęstość wypełnienia"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Gęstość wewnętrznego rzadkiego wypełnienia, 100% przekształca całe rzadkie wypełnienie w wypełnienie pełne, a użyty zostanie wzór wewnętrznego pełnego wypełnienia" msgstr "Gęstość wewnętrznego rzadkiego wypełnienia, 100% przekształca całe rzadkie wypełnienie w wypełnienie pełne, a użyty zostanie wzór wewnętrznego pełnego wypełnienia"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14737,6 +14787,10 @@ msgstr "Wyrównany"
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Tył"
msgid "Random" msgid "Random"
msgstr "Losowo" msgstr "Losowo"
@@ -15099,6 +15153,18 @@ msgstr "Wyczyść wszystkie używane ekstrudery"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Jeśli włączone, wszystkie extrudery do drukowania będą przygotowane na przedniej krawędzi stołu drukującego na początku druku." msgstr "Jeśli włączone, wszystkie extrudery do drukowania będą przygotowane na przedniej krawędzi stołu drukującego na początku druku."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Promień zamykania szpar" msgstr "Promień zamykania szpar"
@@ -15537,6 +15603,45 @@ msgstr "Grubość górnej powłoki"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Liczba górnych zwartych warstw jest zwiększana podczas cięcia, jeśli grubość obliczona przez górną warstwe powłoki jest cieńsza niż ta wartość. Można w ten sposób uniknąć zbyt cienkiej powłoki, gdy wysokość warstwy jest mała. 0 oznacza, że to ustawienie jest wyłączone, a grubość górnej powłoki jest absolutnie określona przez górne warstwy powłoki" msgstr "Liczba górnych zwartych warstw jest zwiększana podczas cięcia, jeśli grubość obliczona przez górną warstwe powłoki jest cieńsza niż ta wartość. Można w ten sposób uniknąć zbyt cienkiej powłoki, gdy wysokość warstwy jest mała. 0 oznacza, że to ustawienie jest wyłączone, a grubość górnej powłoki jest absolutnie określona przez górne warstwy powłoki"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Prędkość przemieszczania, która jest szybsza i bez ekstruzji" msgstr "Prędkość przemieszczania, która jest szybsza i bez ekstruzji"
@@ -19541,6 +19646,19 @@ msgstr ""
"Unikaj odkształceń\n" "Unikaj odkształceń\n"
"Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?" "Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Kontynuuj aby zsynchronizować filamenty"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Anuluj"
#~ msgid "Print"
#~ msgstr "Drukuj"
#~ msgid "in"
#~ msgstr "cal"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Koordynaty obiektu" #~ msgstr "Koordynaty obiektu"
@@ -20996,10 +21114,6 @@ msgstr ""
#~ msgid "Unselect" #~ msgid "Unselect"
#~ msgstr "Odznacz" #~ msgstr "Odznacz"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Skala"
#~ msgid "Lift Z Enforcement" #~ msgid "Lift Z Enforcement"
#~ msgstr "Wymuszenie podniesienia osi Z" #~ msgstr "Wymuszenie podniesienia osi Z"
+159 -33
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2026-07-04 11:51-0300\n" "PO-Revision-Date: 2026-07-04 11:51-0300\n"
"Last-Translator: Alexandre Folle de Menezes\n" "Last-Translator: Alexandre Folle de Menezes\n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
@@ -164,6 +164,12 @@ msgstr "Preencher"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Preencher vão" msgstr "Preencher vão"
msgid "Vertical"
msgstr "Vertical"
msgid "Horizontal"
msgstr "Horizontal"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Permite pintura apenas em facetas selecionadas por: \"%1%\"" msgstr "Permite pintura apenas em facetas selecionadas por: \"%1%\""
@@ -256,12 +262,6 @@ msgstr "Triângulo"
msgid "Height Range" msgid "Height Range"
msgstr "Intervalo de Altura" msgstr "Intervalo de Altura"
msgid "Vertical"
msgstr "Vertical"
msgid "Horizontal"
msgstr "Horizontal"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Remover cor pintada" msgstr "Remover cor pintada"
@@ -326,6 +326,7 @@ msgstr "Gizmo-Rotacionar"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Otimizar orientação" msgstr "Otimizar orientação"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Escala" msgstr "Escala"
@@ -335,8 +336,9 @@ msgstr "Gizmo-Dimensionar"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Erro: Por favor, feche todos os menus da barra de ferramentas primeiro" msgstr "Erro: Por favor, feche todos os menus da barra de ferramentas primeiro"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "pol" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -368,6 +370,9 @@ msgstr "Proporções de escala"
msgid "Object operations" msgid "Object operations"
msgstr "Operações de objeto" msgstr "Operações de objeto"
msgid "Scale"
msgstr "Escala"
msgid "Volume operations" msgid "Volume operations"
msgstr "Operações de volume" msgstr "Operações de volume"
@@ -413,6 +418,10 @@ msgstr "Redefinir rotação para o valor de abertura da ferramenta de rotação.
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Redefinir rotação atual para zeros reais." msgstr "Redefinir rotação atual para zeros reais."
msgctxt "Noun"
msgid "Scale"
msgstr "Escala"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Tamanho" msgstr "Tamanho"
@@ -3579,6 +3588,7 @@ msgstr "Calibração concluída. Por favor, encontre a linha de extrusão mais u
msgid "Save" msgid "Save"
msgstr "Salvar" msgstr "Salvar"
msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Atrás" msgstr "Atrás"
@@ -4939,6 +4949,7 @@ msgstr "Trocas de ferramenta"
msgid "Color change" msgid "Color change"
msgstr "Mudança de cor" msgstr "Mudança de cor"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Imprimir" msgstr "Imprimir"
@@ -5101,11 +5112,15 @@ msgstr "Evitar a região de calibração da extrusão"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Alinhar com o eixo Y" msgstr "Alinhar com o eixo Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Atrás"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Esquerda" msgstr "Esquerda"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Direita" msgstr "Direita"
@@ -5432,6 +5447,10 @@ msgstr "Imprimir placa"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Exportar arquivo G-code" msgstr "Exportar arquivo G-code"
msgctxt "Verb"
msgid "Print"
msgstr "Imprimir"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exportar arquivo de placa fatiada" msgstr "Exportar arquivo de placa fatiada"
@@ -5605,15 +5624,6 @@ msgstr "Exportar configuração atual para arquivos"
msgid "Export" msgid "Export"
msgstr "Exportar" msgstr "Exportar"
msgid "Sync Presets"
msgstr "Sincronizar Predefinições"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Baixar e aplicar as predefinições mais recentes do OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "Você precisa estar logado para sincronizar as predefinições da nuvem."
msgid "Quit" msgid "Quit"
msgstr "Sair" msgstr "Sair"
@@ -5730,6 +5740,15 @@ msgstr "Visualizar"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "Pacote de Predefinições" msgstr "Pacote de Predefinições"
msgid "Sync Presets"
msgstr "Sincronizar Predefinições"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "Baixar e aplicar as predefinições mais recentes do OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "Você precisa estar logado para sincronizar as predefinições da nuvem."
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "Sincronizando predefinições da nuvem…" msgstr "Sincronizando predefinições da nuvem…"
@@ -10228,12 +10247,8 @@ msgstr "Informações do bico sincronizadas com sucesso."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Informações do bico e do número de AMS sincronizadas com sucesso." msgstr "Informações do bico e do número de AMS sincronizadas com sucesso."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Continue a sincronizar os filamentos" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Cancelar"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Cor de filamento da impressora sincronizado com sucesso." msgstr "Cor de filamento da impressora sincronizado com sucesso."
@@ -11539,7 +11554,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11553,7 +11568,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12285,6 +12300,42 @@ msgstr "Densidade da superfície superior"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Densidade da camada superior. Um valor de 100% cria uma camada superior totalmente sólida e lisa. Reduzir esse valor resulta em uma superfície superior texturizada, de acordo com o padrão de superfície superior escolhido. Um valor de 0% resultará na criação apenas das paredes da camada superior. Destinado a fins estéticos ou funcionais, não para corrigir problemas como extrusão excessiva." msgstr "Densidade da camada superior. Um valor de 100% cria uma camada superior totalmente sólida e lisa. Reduzir esse valor resulta em uma superfície superior texturizada, de acordo com o padrão de superfície superior escolhido. Um valor de 0% resultará na criação apenas das paredes da camada superior. Destinado a fins estéticos ou funcionais, não para corrigir problemas como extrusão excessiva."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Padrão de superfície inferior" msgstr "Padrão de superfície inferior"
@@ -12934,15 +12985,13 @@ msgstr "Densidade do preenchimento esparso"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Densidade do preenchimento esparso interno, 100% transforma todo o preenchimento esparso em preenchimento sólido e será usado o padrão de preenchimento sólido interno." msgstr "Densidade do preenchimento esparso interno, 100% transforma todo o preenchimento esparso em preenchimento sólido e será usado o padrão de preenchimento sólido interno."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Alinhar direção do preenchimento ao modelo" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"Alinha as direções do preenchimento, das pontes, do alisamento e do preenchimento de superfícies à orientação do modelo na mesa de impressão.\n"
"Quando ativado, as direções giram com o modelo para manter características ideais de resistência."
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "Inserir camadas sólidas" msgstr "Inserir camadas sólidas"
@@ -14719,6 +14768,9 @@ msgstr "Alinhada"
msgid "Aligned back" msgid "Aligned back"
msgstr "Alinhada atrás" msgstr "Alinhada atrás"
msgid "Back"
msgstr "Atrás"
msgid "Random" msgid "Random"
msgstr "Aleatória" msgstr "Aleatória"
@@ -15085,6 +15137,18 @@ msgstr "Preparar todas as extrusoras de impressão"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Se ativado, todos as extrusoras de impressão serão preparados na borda frontal da mesa de impressão no início da impressão." msgstr "Se ativado, todos as extrusoras de impressão serão preparados na borda frontal da mesa de impressão no início da impressão."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Raio de fechamento de vãos de fatiamento" msgstr "Raio de fechamento de vãos de fatiamento"
@@ -15512,6 +15576,45 @@ msgstr "Espessura da casca do topo"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "O número de camadas sólidas superiores é aumentado ao fatiar se a espessura calculada pelas camadas da casca do topo for menor do que este valor. Isso pode evitar que a casca seja muito fina quando a altura da camada é pequena. 0 significa que esta configuração está desativada e a espessura da casca do topo é determinada apenas pelo número de camadas da casca do topo." msgstr "O número de camadas sólidas superiores é aumentado ao fatiar se a espessura calculada pelas camadas da casca do topo for menor do que este valor. Isso pode evitar que a casca seja muito fina quando a altura da camada é pequena. 0 significa que esta configuração está desativada e a espessura da casca do topo é determinada apenas pelo número de camadas da casca do topo."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Essa é a velocidade em que o deslocamento é feito." msgstr "Essa é a velocidade em que o deslocamento é feito."
@@ -19488,6 +19591,29 @@ msgstr ""
"Evitar empenamento\n" "Evitar empenamento\n"
"Você sabia que ao imprimir materiais propensos ao empenamento como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?" "Você sabia que ao imprimir materiais propensos ao empenamento como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Continue a sincronizar os filamentos"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Cancelar"
#~ msgid "Align infill direction to model"
#~ msgstr "Alinhar direção do preenchimento ao modelo"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "Alinha as direções do preenchimento, das pontes, do alisamento e do preenchimento de superfícies à orientação do modelo na mesa de impressão.\n"
#~ "Quando ativado, as direções giram com o modelo para manter características ideais de resistência."
#~ msgid "Print"
#~ msgstr "Imprimir"
#~ msgid "in"
#~ msgstr "pol"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Coordenadas do objeto" #~ msgstr "Coordenadas do objeto"
+154 -33
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OrcaSlicer V2.5.0\n" "Project-Id-Version: OrcaSlicer V2.5.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2026-02-25 13:38+0300\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n"
"Last-Translator: Felix14_v2\n" "Last-Translator: Felix14_v2\n"
"Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg <andylg@yandex.ru>\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg <andylg@yandex.ru>\n"
@@ -173,6 +173,12 @@ msgstr "Заливка"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Заливка вкраплений" msgstr "Заливка вкраплений"
msgid "Vertical"
msgstr "Вертикальная линия"
msgid "Horizontal"
msgstr "Горизонтальная линия"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Ограничить область работы инструмента настройкой «%1%»" msgstr "Ограничить область работы инструмента настройкой «%1%»"
@@ -267,12 +273,6 @@ msgstr "Треугольник"
msgid "Height Range" msgid "Height Range"
msgstr "Диапазон высот" msgstr "Диапазон высот"
msgid "Vertical"
msgstr "Вертикальная линия"
msgid "Horizontal"
msgstr "Горизонтальная линия"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Удаление окрашенного участка" msgstr "Удаление окрашенного участка"
@@ -337,6 +337,7 @@ msgstr "Инструмент вращения"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Оптимизация положения модели" msgstr "Оптимизация положения модели"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Масштаб" msgstr "Масштаб"
@@ -346,8 +347,9 @@ msgstr "Инструмент изменения размера"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Ошибка: сначала закройте текущий инструмент." msgstr "Ошибка: сначала закройте текущий инструмент."
msgctxt "inches"
msgid "in" msgid "in"
msgstr "дюйм" msgstr ""
msgid "mm" msgid "mm"
msgstr "мм" msgstr "мм"
@@ -379,6 +381,9 @@ msgstr "Коэф. масштаба"
msgid "Object operations" msgid "Object operations"
msgstr "Операции с моделями" msgstr "Операции с моделями"
msgid "Scale"
msgstr "Масштаб"
msgid "Volume operations" msgid "Volume operations"
msgstr "Булевы операции с телами" msgstr "Булевы операции с телами"
@@ -424,6 +429,10 @@ msgstr "Сбросить последние изменения ориентац
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Сбросить ориентацию до изначальной" msgstr "Сбросить ориентацию до изначальной"
msgctxt "Noun"
msgid "Scale"
msgstr "Масштаб"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Размер" msgstr "Размер"
@@ -3656,9 +3665,9 @@ msgstr "Калибровка завершена. Теперь найдите н
msgid "Save" msgid "Save"
msgstr "Сохранить" msgstr "Сохранить"
# Используется в нескольких местах: в 2 местах в значении расположения (шва и камеры), в одном – на кнопке "назад" (калибровка бамбу) msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Сзади" msgstr "Назад"
msgid "Example" msgid "Example"
msgstr "Пример" msgstr "Пример"
@@ -5064,6 +5073,7 @@ msgstr "Смена инструмента"
msgid "Color change" msgid "Color change"
msgstr "Смена цвета" msgstr "Смена цвета"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Печать" msgstr "Печать"
@@ -5226,11 +5236,15 @@ msgstr "Избегать зону калибровки экструзии"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Выравнивать по оси Y" msgstr "Выравнивать по оси Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Сзади"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Слева" msgstr "Слева"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Справа" msgstr "Справа"
@@ -5588,6 +5602,10 @@ msgstr "Распечатать стол"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Экспорт в G-код" msgstr "Экспорт в G-код"
msgctxt "Verb"
msgid "Print"
msgstr "Печать"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Экспорт стола в файл проекта" msgstr "Экспорт стола в файл проекта"
@@ -5763,15 +5781,6 @@ msgstr "Экспортировать текущую конфигурацию в
msgid "Export" msgid "Export"
msgstr "Экспорт" msgstr "Экспорт"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Выход" msgstr "Выход"
@@ -5886,6 +5895,15 @@ msgstr "Вид"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10424,12 +10442,8 @@ msgstr "Информация о сопле успешно синхронизир
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Информация о сопле и количестве AMS успешно синхронизирована." msgstr "Информация о сопле и количестве AMS успешно синхронизирована."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Продолжить синхронизацию филаментов" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Отмена"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Цвет материала успешно синхронизирован с принтером." msgstr "Цвет материала успешно синхронизирован с принтером."
@@ -11718,7 +11732,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11732,7 +11746,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12489,6 +12503,42 @@ msgstr "Плотность верхней поверхности"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Плотность верхней поверхности. Если установить 100%, поверхность будет сплошной и гладкой. Уменьшение этого параметра создаст текстурированную поверхность в соответствии с выбранным шаблоном заполнения верхней поверхности. При значении 0% останутся только стенки верхнего слоя. Эта функция предназначена для улучшения внешнего вида или функциональности объекта, но не для решения проблем, таких как чрезмерная экструзия." msgstr "Плотность верхней поверхности. Если установить 100%, поверхность будет сплошной и гладкой. Уменьшение этого параметра создаст текстурированную поверхность в соответствии с выбранным шаблоном заполнения верхней поверхности. При значении 0% останутся только стенки верхнего слоя. Эта функция предназначена для улучшения внешнего вида или функциональности объекта, но не для решения проблем, таких как чрезмерная экструзия."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Шаблон заполнения нижней поверхности" msgstr "Шаблон заполнения нижней поверхности"
@@ -13211,12 +13261,12 @@ msgstr "Плотность заполнения"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Плотность внутреннего заполнения, выраженная в процентах. 100% означает сплошное заполнение." msgstr "Плотность внутреннего заполнения, выраженная в процентах. 100% означает сплошное заполнение."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Вращать заполнение с моделью" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -15085,6 +15135,10 @@ msgstr "В углах"
msgid "Aligned back" msgid "Aligned back"
msgstr "В углах сзади" msgstr "В углах сзади"
# Используется в нескольких местах: в 2 местах в значении расположения (шва и камеры), в одном – на кнопке "назад" (калибровка бамбу)
msgid "Back"
msgstr "Сзади"
msgid "Random" msgid "Random"
msgstr "Случайная" msgstr "Случайная"
@@ -15486,6 +15540,18 @@ msgstr "Подготовка всех печатающих экструдеро
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Если этот параметр включён, все печатающие экструдеры в начале печати будут подготавливаться на переднем крае стола." msgstr "Если этот параметр включён, все печатающие экструдеры в начале печати будут подготавливаться на переднем крае стола."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Радиус закрытия зазоров полигональной сетки" msgstr "Радиус закрытия зазоров полигональной сетки"
@@ -15969,6 +16035,45 @@ msgstr "Толщина оболочки сверху"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Минимальная толщина оболочки сверху в мм. Если толщина оболочки, рассчитанная по количеству сплошных слоёв сверху, меньше этого значения, количество сплошных слоёв сверху будет автоматически увеличено при нарезке, для удовлетворения минимальной толщины оболочки. Это позволяет избежать слишком тонкой оболочки при небольшой высоте слоя. 0 означает, что этот параметр отключён, а толщина оболочки сверху задаётся количеством сплошных слоёв сверху." msgstr "Минимальная толщина оболочки сверху в мм. Если толщина оболочки, рассчитанная по количеству сплошных слоёв сверху, меньше этого значения, количество сплошных слоёв сверху будет автоматически увеличено при нарезке, для удовлетворения минимальной толщины оболочки. Это позволяет избежать слишком тонкой оболочки при небольшой высоте слоя. 0 означает, что этот параметр отключён, а толщина оболочки сверху задаётся количеством сплошных слоёв сверху."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Ограничение скорости холостых перемещений печатающей головы." msgstr "Ограничение скорости холостых перемещений печатающей головы."
@@ -20095,6 +20200,22 @@ msgstr ""
"Предотвращение коробления материала\n" "Предотвращение коробления материала\n"
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Продолжить синхронизацию филаментов"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Отмена"
#~ msgid "Align infill direction to model"
#~ msgstr "Вращать заполнение с моделью"
#~ msgid "Print"
#~ msgstr "Печать"
#~ msgid "in"
#~ msgstr "дюйм"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Относительно модели" #~ msgstr "Относительно модели"
+145 -34
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"Language: sv\n" "Language: sv\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -159,6 +159,12 @@ msgstr "Fyll"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Gap Fyllning" msgstr "Gap Fyllning"
msgid "Vertical"
msgstr "Vertikal"
msgid "Horizontal"
msgstr "Horisontell"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Tillåter målning endast på fasetter som valts av: ”%1%”" msgstr "Tillåter målning endast på fasetter som valts av: ”%1%”"
@@ -254,12 +260,6 @@ msgstr "Triangel"
msgid "Height Range" msgid "Height Range"
msgstr "Höjd intervall" msgstr "Höjd intervall"
msgid "Vertical"
msgstr "Vertikal"
msgid "Horizontal"
msgstr "Horisontell"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Ta bort färgläggning" msgstr "Ta bort färgläggning"
@@ -324,6 +324,7 @@ msgstr ""
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Optimisera placering" msgstr "Optimisera placering"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Skala" msgstr "Skala"
@@ -333,8 +334,9 @@ msgstr ""
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "FEL: Stäng alla verktygsmenyer först" msgstr "FEL: Stäng alla verktygsmenyer först"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "i" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -367,6 +369,9 @@ msgstr "Skalnings förhållande"
msgid "Object operations" msgid "Object operations"
msgstr "Objekt Åtgärder" msgstr "Objekt Åtgärder"
msgid "Scale"
msgstr "Skala"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Volym Åtgärder" msgstr "Volym Åtgärder"
@@ -417,6 +422,10 @@ msgstr ""
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "" msgstr ""
msgctxt "Noun"
msgid "Scale"
msgstr "Skala"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Storlek" msgstr "Storlek"
@@ -3602,7 +3611,7 @@ msgstr "Kalibreringen klar. Vänligen hitta den mest enhetliga extruderingslinje
msgid "Save" msgid "Save"
msgstr "Spara" msgstr "Spara"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Tillbaka" msgstr "Tillbaka"
@@ -4960,6 +4969,7 @@ msgstr ""
msgid "Color change" msgid "Color change"
msgstr "Färg byte" msgstr "Färg byte"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Skriv ut" msgstr "Skriv ut"
@@ -5119,11 +5129,15 @@ msgstr "Undvik kalibrerings området"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Justera mot Y-axeln" msgstr "Justera mot Y-axeln"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Tillbaka"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Vänster" msgstr "Vänster"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Höger" msgstr "Höger"
@@ -5447,6 +5461,10 @@ msgstr "Skriv ut byggplattan"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Exportera G-kod filen" msgstr "Exportera G-kod filen"
msgctxt "Verb"
msgid "Print"
msgstr "Skriv ut"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Exportera byggplattans beredda fil" msgstr "Exportera byggplattans beredda fil"
@@ -5620,15 +5638,6 @@ msgstr "Exportera aktuell konfiguration till filer"
msgid "Export" msgid "Export"
msgstr "Exportera" msgstr "Exportera"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Avsluta" msgstr "Avsluta"
@@ -5745,6 +5754,15 @@ msgstr "Vy"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10163,13 +10181,9 @@ msgstr ""
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "" msgstr ""
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Avbryt"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "" msgstr ""
@@ -11463,7 +11477,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11477,7 +11491,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12119,6 +12133,42 @@ msgstr ""
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Botten ytans mönster" msgstr "Botten ytans mönster"
@@ -12734,12 +12784,12 @@ msgstr "Sparsam ifyllnads densitet"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "" msgstr ""
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14399,6 +14449,10 @@ msgstr "Linjerad"
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Tillbaka"
msgid "Random" msgid "Random"
msgstr "Slumpmässig" msgstr "Slumpmässig"
@@ -14742,6 +14796,18 @@ msgstr ""
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "" msgstr ""
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Bered spaltens stängningsradie" msgstr "Bered spaltens stängningsradie"
@@ -15169,6 +15235,45 @@ msgstr "Övre skalets tjocklek"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Antal solida övre lager ökas när tjockleken kalkyleras och övre skalet är tunnare än detta värde. Detta kan undvika att ha för tunt skal när lagerhöjden är liten. 0 betyder att den här inställningen är inaktiverad och tjockleken på det övre skalet bestäms av de övre skal lagerna" msgstr "Antal solida övre lager ökas när tjockleken kalkyleras och övre skalet är tunnare än detta värde. Detta kan undvika att ha för tunt skal när lagerhöjden är liten. 0 betyder att den här inställningen är inaktiverad och tjockleken på det övre skalet bestäms av de övre skal lagerna"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Förflyttnings hastighet" msgstr "Förflyttnings hastighet"
@@ -19054,6 +19159,16 @@ msgstr ""
"Undvik vridning\n" "Undvik vridning\n"
"Visste du att när du skriver ut material som är benägna att vrida, såsom ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten för vridning?" "Visste du att när du skriver ut material som är benägna att vrida, såsom ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten för vridning?"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Avbryt"
#~ msgid "Print"
#~ msgstr "Skriv ut"
#~ msgid "in"
#~ msgstr "i"
#~ msgid "World coordinates" #~ msgid "World coordinates"
#~ msgstr "Världskoordinater" #~ msgstr "Världskoordinater"
@@ -20224,10 +20339,6 @@ msgstr ""
#~ msgid "Thick bridges" #~ msgid "Thick bridges"
#~ msgstr "Tjocka bridges" #~ msgstr "Tjocka bridges"
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Skala"
#~ msgid "Z-hop when retract" #~ msgid "Z-hop when retract"
#~ msgstr "Z-hopp vid retraktion" #~ msgstr "Z-hopp vid retraktion"
+198 -49
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2026-06-19 13:40+0700\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n"
"Last-Translator: Icezaza\n" "Last-Translator: Icezaza\n"
"Language-Team: Thai\n" "Language-Team: Thai\n"
@@ -162,6 +162,12 @@ msgstr "เติม"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "เติมช่องว่าง" msgstr "เติมช่องว่าง"
msgid "Vertical"
msgstr "แนวตั้ง"
msgid "Horizontal"
msgstr "แนวนอน"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "อนุญาตให้วาดภาพเฉพาะด้านที่เลือกโดย: \"%1%\"" msgstr "อนุญาตให้วาดภาพเฉพาะด้านที่เลือกโดย: \"%1%\""
@@ -254,12 +260,6 @@ msgstr "สามเหลี่ยม"
msgid "Height Range" msgid "Height Range"
msgstr "ช่วงความสูง" msgstr "ช่วงความสูง"
msgid "Vertical"
msgstr "แนวตั้ง"
msgid "Horizontal"
msgstr "แนวนอน"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "ลบสีที่ทาสี" msgstr "ลบสีที่ทาสี"
@@ -324,6 +324,7 @@ msgstr "Gizmo-หมุน"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "ปรับการวางแนวให้เหมาะสม" msgstr "ปรับการวางแนวให้เหมาะสม"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "ปรับขนาด" msgstr "ปรับขนาด"
@@ -333,8 +334,9 @@ msgstr "Gizmo-ขนาด"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "ข้อผิดพลาด: โปรดปิดเมนูแถบเครื่องมือทั้งหมดก่อน" msgstr "ข้อผิดพลาด: โปรดปิดเมนูแถบเครื่องมือทั้งหมดก่อน"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "นิ้ว" msgstr ""
msgid "mm" msgid "mm"
msgstr "มม." msgstr "มม."
@@ -366,6 +368,9 @@ msgstr "อัตราส่วนการปรับขนาด"
msgid "Object operations" msgid "Object operations"
msgstr "การทำงานกับวัตถุ" msgstr "การทำงานกับวัตถุ"
msgid "Scale"
msgstr "ปรับขนาด"
msgid "Volume operations" msgid "Volume operations"
msgstr "การทำงานกับวอลลุ่ม" msgstr "การทำงานกับวอลลุ่ม"
@@ -411,6 +416,10 @@ msgstr "รีเซ็ตการหมุนปัจจุบันเป็
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "รีเซ็ตการหมุนปัจจุบันให้เป็นศูนย์จริง" msgstr "รีเซ็ตการหมุนปัจจุบันให้เป็นศูนย์จริง"
msgctxt "Noun"
msgid "Scale"
msgstr "ปรับขนาด"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "ขนาด" msgstr "ขนาด"
@@ -3558,6 +3567,7 @@ msgstr "การสอบเทียบเสร็จสิ้น โปร
msgid "Save" msgid "Save"
msgstr "บันทึก" msgstr "บันทึก"
msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "กลับ" msgstr "กลับ"
@@ -4906,6 +4916,7 @@ msgstr "การเปลี่ยนแปลงเครื่องมือ
msgid "Color change" msgid "Color change"
msgstr "เปลี่ยนสี" msgstr "เปลี่ยนสี"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "พิมพ์" msgstr "พิมพ์"
@@ -5065,11 +5076,15 @@ msgstr "หลีกเลี่ยงบริเวณการสอบเท
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "จัดแนวตามแกน Y" msgstr "จัดแนวตามแกน Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "กลับ"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "ซ้าย" msgstr "ซ้าย"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "ขวา" msgstr "ขวา"
@@ -5392,6 +5407,10 @@ msgstr "พิมพ์ฐานพิมพ์"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "ส่งออกไฟล์ G-code" msgstr "ส่งออกไฟล์ G-code"
msgctxt "Verb"
msgid "Print"
msgstr "พิมพ์"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "ส่งออกไฟล์แผ่นสไลซ์บาง ๆ" msgstr "ส่งออกไฟล์แผ่นสไลซ์บาง ๆ"
@@ -5565,15 +5584,6 @@ msgstr "ส่งออกการกำหนดค่าปัจจุบั
msgid "Export" msgid "Export"
msgstr "ส่งออก" msgstr "ส่งออก"
msgid "Sync Presets"
msgstr "ซิงค์พรีเซ็ต"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "ดึงและใช้ค่าที่ตั้งล่วงหน้าล่าสุดจาก OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "คุณต้องเข้าสู่ระบบเพื่อซิงค์ค่าที่ตั้งล่วงหน้าจากคลาวด์"
msgid "Quit" msgid "Quit"
msgstr "ออก" msgstr "ออก"
@@ -5688,6 +5698,15 @@ msgstr "มุมมอง"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "ชุดที่ตั้งไว้ล่วงหน้า" msgstr "ชุดที่ตั้งไว้ล่วงหน้า"
msgid "Sync Presets"
msgstr "ซิงค์พรีเซ็ต"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "ดึงและใช้ค่าที่ตั้งล่วงหน้าล่าสุดจาก OrcaCloud"
msgid "You must be logged in to sync presets from cloud."
msgstr "คุณต้องเข้าสู่ระบบเพื่อซิงค์ค่าที่ตั้งล่วงหน้าจากคลาวด์"
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "กำลังซิงค์ค่าที่ตั้งล่วงหน้าจากคลาวด์..." msgstr "กำลังซิงค์ค่าที่ตั้งล่วงหน้าจากคลาวด์..."
@@ -10122,12 +10141,8 @@ msgstr "ซิงโครไนซ์ข้อมูลหัวฉีดสำ
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "ซิงโครไนซ์ข้อมูลหัวฉีดและหมายเลข AMS เรียบร้อยแล้ว" msgstr "ซิงโครไนซ์ข้อมูลหัวฉีดและหมายเลข AMS เรียบร้อยแล้ว"
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "ทำการซิงค์ฟิลาเมนต์ต่อไป" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "ยกเลิก"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "ซิงโครไนซ์สีฟิลาเมนต์จากเครื่องพิมพ์สำเร็จแล้ว" msgstr "ซิงโครไนซ์สีฟิลาเมนต์จากเครื่องพิมพ์สำเร็จแล้ว"
@@ -11399,19 +11414,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"แทนที่มุมสะพานด้านนอก\n"
"หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n"
"มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n"
" - พิกัดสัมบูรณ์\n"
" - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n"
" - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n"
"\n"
"ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์"
msgid "Internal bridge infill direction" msgid "Internal bridge infill direction"
msgstr "ทิศทางไส้ในสะพานภายใน" msgstr "ทิศทางไส้ในสะพานภายใน"
@@ -11421,19 +11428,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"แทนที่มุมสะพานด้านใน\n"
"หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n"
"มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n"
" - พิกัดสัมบูรณ์\n"
" - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n"
" - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n"
"\n"
"ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์"
msgid "Relative bridge angle" msgid "Relative bridge angle"
msgstr "มุมสะพานแบบสัมพันธ์" msgstr "มุมสะพานแบบสัมพันธ์"
@@ -12203,6 +12202,42 @@ msgstr "ความหนาแน่นผิวด้านบน"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "ความหนาแน่นของชั้นผิวด้านบน ค่า 100% จะสร้างชั้นบนสุดที่เรียบและแข็งเต็มที่ การลดค่านี้ส่งผลให้พื้นผิวด้านบนมีพื้นผิวตามรูปแบบพื้นผิวด้านบนที่เลือก ค่า 0% จะส่งผลให้มีการสร้างเฉพาะผนังชั้นบนสุดเท่านั้น มีวัตถุประสงค์เพื่อความสวยงามหรือการใช้งาน ไม่ใช่เพื่อแก้ไขปัญหา เช่น การอัดขึ้นรูปมากเกินไป" msgstr "ความหนาแน่นของชั้นผิวด้านบน ค่า 100% จะสร้างชั้นบนสุดที่เรียบและแข็งเต็มที่ การลดค่านี้ส่งผลให้พื้นผิวด้านบนมีพื้นผิวตามรูปแบบพื้นผิวด้านบนที่เลือก ค่า 0% จะส่งผลให้มีการสร้างเฉพาะผนังชั้นบนสุดเท่านั้น มีวัตถุประสงค์เพื่อความสวยงามหรือการใช้งาน ไม่ใช่เพื่อแก้ไขปัญหา เช่น การอัดขึ้นรูปมากเกินไป"
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "รูปแบบผิวด้านล่าง" msgstr "รูปแบบผิวด้านล่าง"
@@ -12853,15 +12888,13 @@ msgstr "ความหนาแน่นไส้ในแบบโปร่ง
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "ความหนาแน่นของไส้ในแบบโปร่งภายใน 100% จะเปลี่ยนไส้ในแบบโปร่งทั้งหมดให้เป็นไส้ในแบบทึบ และจะใช้รูปแบบไส้ในแบบทึบภายใน" msgstr "ความหนาแน่นของไส้ในแบบโปร่งภายใน 100% จะเปลี่ยนไส้ในแบบโปร่งทั้งหมดให้เป็นไส้ในแบบทึบ และจะใช้รูปแบบไส้ในแบบทึบภายใน"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "จัดทิศทาง ไส้ใน ให้ตรงกับโมเดล" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"จัดทิศทางไส้ใน สะพาน การรีดเรียบ และการเติมผิวให้สอดคล้องกับการวางแนวของโมเดลบนฐานรองพิมพ์\n"
"เมื่อเปิดใช้งาน ทิศทางจะหมุนตามโมเดลเพื่อรักษาคุณสมบัติความแข็งแรงที่เหมาะสม"
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "แทรกชั้นทึบ" msgstr "แทรกชั้นทึบ"
@@ -14590,6 +14623,9 @@ msgstr "จัดตำแหน่ง"
msgid "Aligned back" msgid "Aligned back"
msgstr "จัดแนวกลับ" msgstr "จัดแนวกลับ"
msgid "Back"
msgstr "กลับ"
msgid "Random" msgid "Random"
msgstr "สุ่ม" msgstr "สุ่ม"
@@ -14947,6 +14983,18 @@ msgstr "ใช้ชุดดันเส้นการพิมพ์ทั้
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "หากเปิดใช้งาน ชุดดันเส้นการพิมพ์ทั้งหมดจะถูกลงสีพื้นที่ขอบด้านหน้าของฐานพิมพ์เมื่อเริ่มต้นการพิมพ์" msgstr "หากเปิดใช้งาน ชุดดันเส้นการพิมพ์ทั้งหมดจะถูกลงสีพื้นที่ขอบด้านหน้าของฐานพิมพ์เมื่อเริ่มต้นการพิมพ์"
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "รัศมีการปิดช่องว่างของ Slice" msgstr "รัศมีการปิดช่องว่างของ Slice"
@@ -15370,6 +15418,45 @@ msgstr "ความหนาผนังด้านบน"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "จำนวนชั้นทึบด้านบนจะเพิ่มขึ้นเมื่อสไลซ์หากความหนาที่คำนวณโดยชั้นเปลือกด้านบนบางกว่าค่านี้ วิธีนี้สามารถหลีกเลี่ยงไม่ให้เปลือกบางเกินไปเมื่อชั้นมีความสูงน้อย 0 หมายความว่าการตั้งค่านี้ถูกปิดใช้งาน และความหนาของเปลือกด้านบนถูกกำหนดโดยชั้นเปลือกด้านบนอย่างแน่นอน" msgstr "จำนวนชั้นทึบด้านบนจะเพิ่มขึ้นเมื่อสไลซ์หากความหนาที่คำนวณโดยชั้นเปลือกด้านบนบางกว่าค่านี้ วิธีนี้สามารถหลีกเลี่ยงไม่ให้เปลือกบางเกินไปเมื่อชั้นมีความสูงน้อย 0 หมายความว่าการตั้งค่านี้ถูกปิดใช้งาน และความหนาของเปลือกด้านบนถูกกำหนดโดยชั้นเปลือกด้านบนอย่างแน่นอน"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "ความเร็วที่ใช้ในการเคลื่อนที่แบบไม่อัดเส้น" msgstr "ความเร็วที่ใช้ในการเคลื่อนที่แบบไม่อัดเส้น"
@@ -19344,6 +19431,68 @@ msgstr ""
"หลีกเลี่ยงการบิดเบี้ยว\n" "หลีกเลี่ยงการบิดเบี้ยว\n"
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
#~ msgid "Continue to sync filaments"
#~ msgstr "ทำการซิงค์ฟิลาเมนต์ต่อไป"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "ยกเลิก"
#, no-c-format, no-boost-format
#~ msgid ""
#~ "External Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "แทนที่มุมสะพานด้านนอก\n"
#~ "หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n"
#~ "มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n"
#~ " - พิกัดสัมบูรณ์\n"
#~ " - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n"
#~ " - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n"
#~ "\n"
#~ "ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์"
#~ msgid ""
#~ "Internal Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "แทนที่มุมสะพานด้านใน\n"
#~ "หากปล่อยเป็นศูนย์ มุมสะพานจะคำนวณอัตโนมัติสำหรับสะพานแต่ละจุด\n"
#~ "มิฉะนั้นจะใช้มุมที่กำหนดตาม:\n"
#~ " - พิกัดสัมบูรณ์\n"
#~ " - พิกัดสัมบูรณ์ + การหมุนโมเดล: หากเปิดใช้งานจัดทิศทางไส้ในให้สอดคล้องกับโมเดล\n"
#~ " - มุมอัตโนมัติที่เหมาะสม + ค่านี้: หากเปิดใช้งาน 'มุมสะพานแบบสัมพันธ์'\n"
#~ "\n"
#~ "ใช้ 180° สำหรับมุมสัมบูรณ์ศูนย์"
#~ msgid "Align infill direction to model"
#~ msgstr "จัดทิศทาง ไส้ใน ให้ตรงกับโมเดล"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "จัดทิศทางไส้ใน สะพาน การรีดเรียบ และการเติมผิวให้สอดคล้องกับการวางแนวของโมเดลบนฐานรองพิมพ์\n"
#~ "เมื่อเปิดใช้งาน ทิศทางจะหมุนตามโมเดลเพื่อรักษาคุณสมบัติความแข็งแรงที่เหมาะสม"
#~ msgid "Print"
#~ msgstr "พิมพ์"
#~ msgid "in"
#~ msgstr "นิ้ว"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "พิกัดวัตถุ" #~ msgstr "พิกัดวัตถุ"
+153 -32
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2026-04-08 23:59+0300\n" "PO-Revision-Date: 2026-04-08 23:59+0300\n"
"Last-Translator: GlauTech\n" "Last-Translator: GlauTech\n"
"Language-Team: \n" "Language-Team: \n"
@@ -162,6 +162,12 @@ msgstr "Doldur"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Boşluk doldurma" msgstr "Boşluk doldurma"
msgid "Vertical"
msgstr "Dikey"
msgid "Horizontal"
msgstr "Yatay"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Yalnızca şu kişi tarafından seçilen yüzeylerde boyamaya izin verir: \"%1%\"" msgstr "Yalnızca şu kişi tarafından seçilen yüzeylerde boyamaya izin verir: \"%1%\""
@@ -257,12 +263,6 @@ msgstr "Üçgen"
msgid "Height Range" msgid "Height Range"
msgstr "Yükseklik Aralığı" msgstr "Yükseklik Aralığı"
msgid "Vertical"
msgstr "Dikey"
msgid "Horizontal"
msgstr "Yatay"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Boyalı rengi kaldır" msgstr "Boyalı rengi kaldır"
@@ -327,6 +327,7 @@ msgstr "Gizmo-Döndür"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Yönü optimize edin" msgstr "Yönü optimize edin"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Ölçeklendir" msgstr "Ölçeklendir"
@@ -336,8 +337,9 @@ msgstr "Gizmo-Ölçeklendir"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Hata: Lütfen önce tüm araç çubuğu menülerini kapatın" msgstr "Hata: Lütfen önce tüm araç çubuğu menülerini kapatın"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "in" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -370,6 +372,9 @@ msgstr "Ölçek oranları"
msgid "Object operations" msgid "Object operations"
msgstr "Nesne İşlemleri" msgstr "Nesne İşlemleri"
msgid "Scale"
msgstr "Ölçeklendir"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Hacim İşlemleri" msgstr "Hacim İşlemleri"
@@ -421,6 +426,10 @@ msgstr "Döndürme aracını açtığınızda mevcut döndürme değerini sıfı
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Mevcut dönüşü gerçek sıfırlara sıfırla." msgstr "Mevcut dönüşü gerçek sıfırlara sıfırla."
msgctxt "Noun"
msgid "Scale"
msgstr "Ölçeklendir"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Boyut" msgstr "Boyut"
@@ -3643,7 +3652,7 @@ msgstr "Kalibrasyon tamamlandı. Lütfen sıcak yatağınızdaki en düzgün eks
msgid "Save" msgid "Save"
msgstr "Kaydet" msgstr "Kaydet"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Arka" msgstr "Arka"
@@ -5026,6 +5035,7 @@ msgstr "Takım değişiklikleri"
msgid "Color change" msgid "Color change"
msgstr "Renk değişimi" msgstr "Renk değişimi"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Yazdır" msgstr "Yazdır"
@@ -5189,11 +5199,15 @@ msgstr "Ekstrüzyon kalibrasyon bölgesinden kaçın"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Y eksenine hizala" msgstr "Y eksenine hizala"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Arka"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Sol" msgstr "Sol"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Sağ" msgstr "Sağ"
@@ -5521,6 +5535,10 @@ msgstr "Plakayı Yazdır"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "G-kod dosyasını dışa aktar" msgstr "G-kod dosyasını dışa aktar"
msgctxt "Verb"
msgid "Print"
msgstr "Yazdır"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Dilimlenmiş plaka dosyasını dışa aktar" msgstr "Dilimlenmiş plaka dosyasını dışa aktar"
@@ -5694,15 +5712,6 @@ msgstr "Geçerli yapılandırmayı dosyalara aktar"
msgid "Export" msgid "Export"
msgstr "Dışa Aktar" msgstr "Dışa Aktar"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Çıkış" msgstr "Çıkış"
@@ -5819,6 +5828,15 @@ msgstr "Görünüm"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10307,12 +10325,8 @@ msgstr "Püskürtme ucu bilgileri başarıyla senkronize edildi."
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "Nozul ve AMS numarası bilgileri başarıyla senkronize edildi." msgstr "Nozul ve AMS numarası bilgileri başarıyla senkronize edildi."
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "Filamentleri senkronize etmeye devam edin" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "İptal etmek"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "Filament rengi yazıcıdan başarıyla senkronize edildi." msgstr "Filament rengi yazıcıdan başarıyla senkronize edildi."
@@ -11637,7 +11651,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11651,7 +11665,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12377,6 +12391,42 @@ msgstr "Üst yüzey yoğunluğu"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Üst yüzey katmanının yoğunluğu. %100 değeri, tamamen sağlam ve pürüzsüz bir üst katman oluşturur. Bu değerin düşürülmesi, seçilen üst yüzey desenine göre dokulu bir üst yüzey elde edilmesini sağlar. %0 değeri ise yalnızca üst katmandaki duvarların oluşturulmasını sağlar. Estetik veya işlevsel amaçlar için tasarlanmıştır, aşırı ekstrüzyon gibi sorunları gidermek için değildir." msgstr "Üst yüzey katmanının yoğunluğu. %100 değeri, tamamen sağlam ve pürüzsüz bir üst katman oluşturur. Bu değerin düşürülmesi, seçilen üst yüzey desenine göre dokulu bir üst yüzey elde edilmesini sağlar. %0 değeri ise yalnızca üst katmandaki duvarların oluşturulmasını sağlar. Estetik veya işlevsel amaçlar için tasarlanmıştır, aşırı ekstrüzyon gibi sorunları gidermek için değildir."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Alt yüzey deseni" msgstr "Alt yüzey deseni"
@@ -13039,12 +13089,12 @@ msgstr "Dolgu yoğunluğu"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya dönüştürür ve iç katı dolgu modeli kullanılacaktır." msgstr "İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya dönüştürür ve iç katı dolgu modeli kullanılacaktır."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Dolgu yönünü modele hizalayın" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14775,6 +14825,10 @@ msgstr "Hizalı"
msgid "Aligned back" msgid "Aligned back"
msgstr "Arkaya hizalı" msgstr "Arkaya hizalı"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Arka"
msgid "Random" msgid "Random"
msgstr "Rastgele" msgstr "Rastgele"
@@ -15135,6 +15189,18 @@ msgstr "Tüm ekstruderleri temizle"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Etkinleştirilirse, tüm baskı ekstruderleri baskının başlangıcında baskı yatağının ön kenarında temizlenecektir." msgstr "Etkinleştirilirse, tüm baskı ekstruderleri baskının başlangıcında baskı yatağının ön kenarında temizlenecektir."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Dilim aralığı kapanma yarıçapı" msgstr "Dilim aralığı kapanma yarıçapı"
@@ -15580,6 +15646,45 @@ msgstr "Üst katman kalınlığı"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu ayarın devre dışı olduğu ve üst kabuğun kalınlığının kesinlikle üst kabuk katmanları tarafından belirlendiği anlamına gelir." msgstr "Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu ayarın devre dışı olduğu ve üst kabuğun kalınlığının kesinlikle üst kabuk katmanları tarafından belirlendiği anlamına gelir."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Daha hızlı ve ekstrüzyonsuz seyahat hızı." msgstr "Daha hızlı ve ekstrüzyonsuz seyahat hızı."
@@ -19609,6 +19714,22 @@ msgstr ""
"Eğilmeyi önleyin\n" "Eğilmeyi önleyin\n"
"ABS gibi bükülmeye yatkın malzemelere baskı yaparken, ısıtma yatağı sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını azaltabileceğini biliyor muydunuz?" "ABS gibi bükülmeye yatkın malzemelere baskı yaparken, ısıtma yatağı sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını azaltabileceğini biliyor muydunuz?"
#~ msgid "Continue to sync filaments"
#~ msgstr "Filamentleri senkronize etmeye devam edin"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "İptal etmek"
#~ msgid "Align infill direction to model"
#~ msgstr "Dolgu yönünü modele hizalayın"
#~ msgid "Print"
#~ msgstr "Yazdır"
#~ msgid "in"
#~ msgstr "in"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Nesne koordinatları" #~ msgstr "Nesne koordinatları"
+145 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: orcaslicerua\n" "Project-Id-Version: orcaslicerua\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2025-03-07 09:30+0200\n" "PO-Revision-Date: 2025-03-07 09:30+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Ukrainian\n" "Language-Team: Ukrainian\n"
@@ -167,6 +167,12 @@ msgstr "Заповнення"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Заповнення прогалин" msgstr "Заповнення прогалин"
msgid "Vertical"
msgstr "Вертикальний"
msgid "Horizontal"
msgstr "Горизонтальний"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Малювання лише на вибраних гранях: \"%1%\"" msgstr "Малювання лише на вибраних гранях: \"%1%\""
@@ -262,12 +268,6 @@ msgstr "Трикутник"
msgid "Height Range" msgid "Height Range"
msgstr "Діапазон висот" msgstr "Діапазон висот"
msgid "Vertical"
msgstr "Вертикальний"
msgid "Horizontal"
msgstr "Горизонтальний"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Видалити зафарбований колір" msgstr "Видалити зафарбований колір"
@@ -332,6 +332,7 @@ msgstr "Gizmo обертання"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Оптимізувати орієнтацію" msgstr "Оптимізувати орієнтацію"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Масштаб" msgstr "Масштаб"
@@ -341,8 +342,9 @@ msgstr "Gizmo масштабування"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Помилка: будь ласка, спочатку закрийте все меню панелі інструментів" msgstr "Помилка: будь ласка, спочатку закрийте все меню панелі інструментів"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "в" msgstr ""
msgid "mm" msgid "mm"
msgstr "мм" msgstr "мм"
@@ -375,6 +377,9 @@ msgstr "Коефіцієнти масштабування"
msgid "Object operations" msgid "Object operations"
msgstr "Операції з об'єктами" msgstr "Операції з об'єктами"
msgid "Scale"
msgstr "Масштаб"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Операції з об’ємом" msgstr "Операції з об’ємом"
@@ -426,6 +431,10 @@ msgstr "Скинути поточне обертання до значення
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Скинути поточне обертання до нульових значень." msgstr "Скинути поточне обертання до нульових значень."
msgctxt "Noun"
msgid "Scale"
msgstr "Масштаб"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Розмір" msgstr "Розмір"
@@ -3659,7 +3668,7 @@ msgstr "Калібрування завершено. Тепер знайдіть
msgid "Save" msgid "Save"
msgstr "Зберегти" msgstr "Зберегти"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Ззаду" msgstr "Ззаду"
@@ -5029,6 +5038,7 @@ msgstr "Зміна інструменту"
msgid "Color change" msgid "Color change"
msgstr "Зміна кольору" msgstr "Зміна кольору"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "Друк" msgstr "Друк"
@@ -5190,11 +5200,15 @@ msgstr "Уникайте області калібрування екструз
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Розташувати вздовж осі Y" msgstr "Розташувати вздовж осі Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Ззаду"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Ліво" msgstr "Ліво"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Право" msgstr "Право"
@@ -5522,6 +5536,10 @@ msgstr "Друкувати пластину"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Експорт файлу G-коду" msgstr "Експорт файлу G-коду"
msgctxt "Verb"
msgid "Print"
msgstr "Друк"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Експортувати файл нарізки пластини" msgstr "Експортувати файл нарізки пластини"
@@ -5695,15 +5713,6 @@ msgstr "Експорт поточної конфігурації до файлі
msgid "Export" msgid "Export"
msgstr "Експорт" msgstr "Експорт"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Вихід" msgstr "Вихід"
@@ -5820,6 +5829,15 @@ msgstr "Вид"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10313,13 +10331,9 @@ msgstr ""
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "" msgstr ""
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Скасувати"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "" msgstr ""
@@ -11647,7 +11661,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11661,7 +11675,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12362,6 +12376,42 @@ msgstr ""
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "" msgstr ""
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Шаблон нижньої поверхні" msgstr "Шаблон нижньої поверхні"
@@ -13021,12 +13071,12 @@ msgstr "Щільність часткового заповнення"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Щільність внутрішнього часткового заповнення, 100% перетворює все часткове заповнення на суцільне заповнення, і буде застосовано шаблон внутрішнього суцільного заповнення" msgstr "Щільність внутрішнього часткового заповнення, 100% перетворює все часткове заповнення на суцільне заповнення, і буде застосовано шаблон внутрішнього суцільного заповнення"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14752,6 +14802,10 @@ msgstr "Вирівняне"
msgid "Aligned back" msgid "Aligned back"
msgstr "" msgstr ""
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Ззаду"
msgid "Random" msgid "Random"
msgstr "Випадкове" msgstr "Випадкове"
@@ -15116,6 +15170,18 @@ msgstr "Підготовка всіх друкуючих екструдерів"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Якщо увімкнено, усі друкуючі екструдери будуть отестовані на передньому краї друкарського столу перед початком друку." msgstr "Якщо увімкнено, усі друкуючі екструдери будуть отестовані на передньому краї друкарського столу перед початком друку."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Радіус закриття пробілів під час нарізування" msgstr "Радіус закриття пробілів під час нарізування"
@@ -15557,6 +15623,45 @@ msgstr "Товщина верхньої оболонки"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Кількість верхніх суцільних шарів збільшується при розрізанні, якщо товщина, обчислена шарами верхньої оболонки, тонша за це значення. Це дозволяє уникнути занадто тонкої оболонки при невеликій висоті шару. 0 означає, що це налаштування вимкнено і товщина верхньої оболонки повністюобмежена верхніми шарами оболонки" msgstr "Кількість верхніх суцільних шарів збільшується при розрізанні, якщо товщина, обчислена шарами верхньої оболонки, тонша за це значення. Це дозволяє уникнути занадто тонкої оболонки при невеликій висоті шару. 0 означає, що це налаштування вимкнено і товщина верхньої оболонки повністюобмежена верхніми шарами оболонки"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Швидкість переміщення, яка є швидше і без екструзії" msgstr "Швидкість переміщення, яка є швидше і без екструзії"
@@ -19553,6 +19658,16 @@ msgstr ""
"Уникнення деформації\n" "Уникнення деформації\n"
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури гарячого ліжка може зменшити ймовірність деформації?" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури гарячого ліжка може зменшити ймовірність деформації?"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Скасувати"
#~ msgid "Print"
#~ msgstr "Друк"
#~ msgid "in"
#~ msgstr "в"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Координати об'єкта" #~ msgstr "Координати об'єкта"
+149 -31
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2025-10-02 17:43+0700\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: hainguyen.ts13@gmail.com\n" "Language-Team: hainguyen.ts13@gmail.com\n"
@@ -163,6 +163,12 @@ msgstr "Tô"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "Lấp khe" msgstr "Lấp khe"
msgid "Vertical"
msgstr "Dọc"
msgid "Horizontal"
msgstr "Ngang"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "Chỉ cho phép vẽ trên mặt được chọn bởi: \"%1%\"" msgstr "Chỉ cho phép vẽ trên mặt được chọn bởi: \"%1%\""
@@ -258,12 +264,6 @@ msgstr "Tam giác"
msgid "Height Range" msgid "Height Range"
msgstr "Phạm vi chiều cao" msgstr "Phạm vi chiều cao"
msgid "Vertical"
msgstr "Dọc"
msgid "Horizontal"
msgstr "Ngang"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "Xóa màu đã vẽ" msgstr "Xóa màu đã vẽ"
@@ -328,6 +328,7 @@ msgstr "Gizmo - Xoay"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "Tối ưu định hướng" msgstr "Tối ưu định hướng"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "Tỷ lệ" msgstr "Tỷ lệ"
@@ -337,8 +338,9 @@ msgstr "Gizmo - Tỷ lệ"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "Lỗi: Vui lòng đóng tất cả menu thanh công cụ trước" msgstr "Lỗi: Vui lòng đóng tất cả menu thanh công cụ trước"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "in" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -371,6 +373,9 @@ msgstr "Tỷ lệ co giãn"
msgid "Object operations" msgid "Object operations"
msgstr "Thao tác vật thể" msgstr "Thao tác vật thể"
msgid "Scale"
msgstr "Tỷ lệ"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "Thao tác thể tích" msgstr "Thao tác thể tích"
@@ -422,6 +427,10 @@ msgstr "Đặt lại xoay hiện tại về giá trị khi mở công cụ xoay.
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "Đặt lại xoay hiện tại về số không thực." msgstr "Đặt lại xoay hiện tại về số không thực."
msgctxt "Noun"
msgid "Scale"
msgstr "Tỷ lệ"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "Kích thước" msgstr "Kích thước"
@@ -3629,7 +3638,7 @@ msgstr "Hiệu chỉnh hoàn tất. Vui lòng tìm đường đùn đồng đề
msgid "Save" msgid "Save"
msgstr "Lưu" msgstr "Lưu"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "Sau" msgstr "Sau"
@@ -5000,6 +5009,7 @@ msgstr ""
msgid "Color change" msgid "Color change"
msgstr "Đổi màu" msgstr "Đổi màu"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "In" msgstr "In"
@@ -5161,11 +5171,15 @@ msgstr "Tránh vùng hiệu chỉnh đùn"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "Căn theo trục Y" msgstr "Căn theo trục Y"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "Sau"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "Trái" msgstr "Trái"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "Phải" msgstr "Phải"
@@ -5489,6 +5503,10 @@ msgstr "In plate"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "Xuất file G-code" msgstr "Xuất file G-code"
msgctxt "Verb"
msgid "Print"
msgstr "In"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "Xuất file plate đã slice" msgstr "Xuất file plate đã slice"
@@ -5662,15 +5680,6 @@ msgstr "Xuất cấu hình hiện tại ra file"
msgid "Export" msgid "Export"
msgstr "Xuất" msgstr "Xuất"
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Quit" msgid "Quit"
msgstr "Thoát" msgstr "Thoát"
@@ -5787,6 +5796,15 @@ msgstr "Xem"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "" msgstr ""
msgid "Sync Presets"
msgstr ""
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr ""
msgid "You must be logged in to sync presets from cloud."
msgstr ""
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "" msgstr ""
@@ -10230,13 +10248,9 @@ msgstr ""
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "" msgstr ""
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "Hủy"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "" msgstr ""
@@ -11560,7 +11574,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -11574,7 +11588,7 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
@@ -12273,6 +12287,42 @@ msgstr "Mật độ bề mặt trên"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "Mật độ lớp bề mặt trên. Giá trị 100% tạo ra lớp trên hoàn toàn đặc, mịn . Giảm giá trị này dẫn đến bề mặt trên có kết cấu, theo mẫu bề mặt trên được chọn. Giá trị 0% sẽ dẫn đến chỉ thành trên lớp trên được tạo. Dành cho mục đích thẩm mỹ hoặc chức năng , không phải để sửa các vấn đề như đùn dư." msgstr "Mật độ lớp bề mặt trên. Giá trị 100% tạo ra lớp trên hoàn toàn đặc, mịn . Giảm giá trị này dẫn đến bề mặt trên có kết cấu, theo mẫu bề mặt trên được chọn. Giá trị 0% sẽ dẫn đến chỉ thành trên lớp trên được tạo. Dành cho mục đích thẩm mỹ hoặc chức năng , không phải để sửa các vấn đề như đùn dư."
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "Mẫu bề mặt dưới" msgstr "Mẫu bề mặt dưới"
@@ -12933,12 +12983,12 @@ msgstr "Mật độ infill thưa"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "Mật độ của infill thưa bên trong, 100% biến tất cả infill thưa thành infill đặc và mẫu infill đặc bên trong sẽ được sử dụng." msgstr "Mật độ của infill thưa bên trong, 100% biến tất cả infill thưa thành infill đặc và mẫu infill đặc bên trong sẽ được sử dụng."
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "Căn chỉnh hướng infill với model" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
msgid "Insert solid layers" msgid "Insert solid layers"
@@ -14667,6 +14717,10 @@ msgstr "Căn chỉnh"
msgid "Aligned back" msgid "Aligned back"
msgstr "Căn chỉnh sau" msgstr "Căn chỉnh sau"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "Sau"
msgid "Random" msgid "Random"
msgstr "Ngẫu nhiên" msgstr "Ngẫu nhiên"
@@ -15027,6 +15081,18 @@ msgstr "Nạp tất cả extruder in"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "Nếu được bật, tất cả extruder in sẽ được nạp ở mép trước của bàn in lúc bắt đầu in." msgstr "Nếu được bật, tất cả extruder in sẽ được nạp ở mép trước của bàn in lúc bắt đầu in."
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "Bán kính đóng khe slice" msgstr "Bán kính đóng khe slice"
@@ -15468,6 +15534,45 @@ msgstr "Độ dày vỏ trên"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "Số lượng lớp đặc trên được tăng lên khi slice nếu độ dày được tính bởi lớp vỏ trên mỏng hơn giá trị này. Điều này có thể tránh vỏ quá mỏng khi chiều cao lớp nhỏ. 0 có nghĩa là cài đặt này bị tắt và độ dày vỏ trên được xác định tuyệt đối bởi lớp vỏ trên." msgstr "Số lượng lớp đặc trên được tăng lên khi slice nếu độ dày được tính bởi lớp vỏ trên mỏng hơn giá trị này. Điều này có thể tránh vỏ quá mỏng khi chiều cao lớp nhỏ. 0 có nghĩa là cài đặt này bị tắt và độ dày vỏ trên được xác định tuyệt đối bởi lớp vỏ trên."
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "Tốc độ di chuyển nhanh hơn và không có đùn." msgstr "Tốc độ di chuyển nhanh hơn và không có đùn."
@@ -19474,6 +19579,19 @@ msgstr ""
"Tránh cong vênh\n" "Tránh cong vênh\n"
"Bạn có biết rằng khi in vật liệu dễ cong vênh như ABS, tăng nhiệt độ bàn nóng một cách thích hợp có thể giảm xác suất cong vênh không?" "Bạn có biết rằng khi in vật liệu dễ cong vênh như ABS, tăng nhiệt độ bàn nóng một cách thích hợp có thể giảm xác suất cong vênh không?"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "Hủy"
#~ msgid "Align infill direction to model"
#~ msgstr "Căn chỉnh hướng infill với model"
#~ msgid "Print"
#~ msgstr "In"
#~ msgid "in"
#~ msgstr "in"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "Tọa độ vật thể" #~ msgstr "Tọa độ vật thể"
+199 -50
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Slic3rPE\n" "Project-Id-Version: Slic3rPE\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2026-06-11 12:37-0300\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n"
"Last-Translator: Handle <mail@bysb.net>\n" "Last-Translator: Handle <mail@bysb.net>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -165,6 +165,12 @@ msgstr "填充"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "缝隙填充" msgstr "缝隙填充"
msgid "Vertical"
msgstr "垂直"
msgid "Horizontal"
msgstr "水平"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "绘制仅对由%1%选中的面片生效" msgstr "绘制仅对由%1%选中的面片生效"
@@ -260,12 +266,6 @@ msgstr "三角形"
msgid "Height Range" msgid "Height Range"
msgstr "高度范围" msgstr "高度范围"
msgid "Vertical"
msgstr "垂直"
msgid "Horizontal"
msgstr "水平"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "移除已绘制的颜色" msgstr "移除已绘制的颜色"
@@ -330,6 +330,7 @@ msgstr "Gizmo-旋转"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "优化朝向" msgstr "优化朝向"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "缩放" msgstr "缩放"
@@ -339,8 +340,9 @@ msgstr "缩放工具"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "错误:请先关闭所有工具栏菜单" msgstr "错误:请先关闭所有工具栏菜单"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "在" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -373,6 +375,9 @@ msgstr "缩放比例"
msgid "Object operations" msgid "Object operations"
msgstr "对象操作" msgstr "对象操作"
msgid "Scale"
msgstr "缩放"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "零件操作" msgstr "零件操作"
@@ -424,6 +429,10 @@ msgstr "重置当前旋转为打开旋转工具时的值"
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "重置当前旋转为真实零位" msgstr "重置当前旋转为真实零位"
msgctxt "Noun"
msgid "Scale"
msgstr "缩放"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "大小" msgstr "大小"
@@ -3638,7 +3647,7 @@ msgstr "校准完成。如下图中的示例,请在您的热床上找到最均
msgid "Save" msgid "Save"
msgstr "保存" msgstr "保存"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "背面" msgstr "背面"
@@ -5013,6 +5022,7 @@ msgstr "工具更换"
msgid "Color change" msgid "Color change"
msgstr "颜色更换" msgstr "颜色更换"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "打印" msgstr "打印"
@@ -5177,11 +5187,15 @@ msgstr "避开挤出校准区域"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "对齐到Y轴" msgstr "对齐到Y轴"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "背面"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "左" msgstr "左"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "右" msgstr "右"
@@ -5509,6 +5523,10 @@ msgstr "打印单盘"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "导出G-code文件" msgstr "导出G-code文件"
msgctxt "Verb"
msgid "Print"
msgstr "打印"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "导出单盘切片文件" msgstr "导出单盘切片文件"
@@ -5682,15 +5700,6 @@ msgstr "导出当前选择的预设"
msgid "Export" msgid "Export"
msgstr "导出" msgstr "导出"
msgid "Sync Presets"
msgstr "同步预设"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "从 OrcaCloud 拉取并应用最新的预设"
msgid "You must be logged in to sync presets from cloud."
msgstr "您必须登录后才能从云端同步预设。"
msgid "Quit" msgid "Quit"
msgstr "退出程序" msgstr "退出程序"
@@ -5807,6 +5816,15 @@ msgstr "视图"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "预设包" msgstr "预设包"
msgid "Sync Presets"
msgstr "同步预设"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "从 OrcaCloud 拉取并应用最新的预设"
msgid "You must be logged in to sync presets from cloud."
msgstr "您必须登录后才能从云端同步预设。"
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "正在从云端同步预设…" msgstr "正在从云端同步预设…"
@@ -10310,12 +10328,8 @@ msgstr "成功同步喷嘴信息。"
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "已成功同步喷嘴和 AMS 编号信息。" msgstr "已成功同步喷嘴和 AMS 编号信息。"
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "继续同步耗材丝" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "取消"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "已成功同步打印机的耗材丝颜色。" msgstr "已成功同步打印机的耗材丝颜色。"
@@ -11643,19 +11657,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"外部桥接角度覆盖。\n"
"如果保持为零,每个具体桥接的桥接角度都会自动计算。\n"
"否则将按以下方式使用所提供的角度:\n"
" - 绝对坐标\n"
" - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n"
" - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n"
"\n"
"使用 180° 表示绝对角度为零。"
msgid "Internal bridge infill direction" msgid "Internal bridge infill direction"
msgstr "内部桥接填充方向" msgstr "内部桥接填充方向"
@@ -11665,19 +11671,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"内部桥接角度覆盖。\n"
"如果保持为零,每个具体桥接的桥接角度都会自动计算。\n"
"否则将按以下方式使用所提供的角度:\n"
" - 绝对坐标\n"
" - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n"
" - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n"
"\n"
"使用 180° 表示绝对角度为零。"
msgid "Relative bridge angle" msgid "Relative bridge angle"
msgstr "相对桥接角度" msgstr "相对桥接角度"
@@ -12436,6 +12434,42 @@ msgstr ""
"100% 的值会创建一个完全实心、平滑的顶面。降低此值会根据所选的顶面图案生成有纹理的顶面。0% 的值将只生成顶层的墙。\n" "100% 的值会创建一个完全实心、平滑的顶面。降低此值会根据所选的顶面图案生成有纹理的顶面。0% 的值将只生成顶层的墙。\n"
"此选项仅为美观或功能性目的,而不是为了解决过量挤出等问题。" "此选项仅为美观或功能性目的,而不是为了解决过量挤出等问题。"
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "底面图案" msgstr "底面图案"
@@ -13109,15 +13143,13 @@ msgstr "稀疏填充密度"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "内部稀疏填充的密度,100%会将所有稀疏填充变为实心填充,并将使用内部实心填充图案。" msgstr "内部稀疏填充的密度,100%会将所有稀疏填充变为实心填充,并将使用内部实心填充图案。"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "对齐填充方向到模型" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"使填充、桥接、熨烫和表面填充的方向跟随模型在打印板上的朝向。\n"
"启用后,这些方向会随模型一起旋转,以保持最佳的强度特性。"
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "插入实心层" msgstr "插入实心层"
@@ -14895,6 +14927,10 @@ msgstr "对齐"
msgid "Aligned back" msgid "Aligned back"
msgstr "背部对齐" msgstr "背部对齐"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "背面"
msgid "Random" msgid "Random"
msgstr "随机" msgstr "随机"
@@ -15261,6 +15297,18 @@ msgstr "所有挤出机画线"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "如果启用,所有挤出机将在打印开始时在床前画线" msgstr "如果启用,所有挤出机将在打印开始时在床前画线"
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "切片间隙闭合半径" msgstr "切片间隙闭合半径"
@@ -15703,6 +15751,45 @@ msgstr "顶部壳体厚度"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "如果由顶部壳体层数算出的厚度小于这个数值,那么切片时将自动增加顶部壳体层数。这能够避免当层高很小时,顶部壳体过薄。0 表示关闭这个设置,同时顶部壳体的厚度完全由顶部壳体层数决定" msgstr "如果由顶部壳体层数算出的厚度小于这个数值,那么切片时将自动增加顶部壳体层数。这能够避免当层高很小时,顶部壳体过薄。0 表示关闭这个设置,同时顶部壳体的厚度完全由顶部壳体层数决定"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "空驶的速度。空驶是无挤出量的快速移动。" msgstr "空驶的速度。空驶是无挤出量的快速移动。"
@@ -19736,6 +19823,68 @@ msgstr ""
"避免翘曲\n" "避免翘曲\n"
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
#~ msgid "Continue to sync filaments"
#~ msgstr "继续同步耗材丝"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "取消"
#, no-c-format, no-boost-format
#~ msgid ""
#~ "External Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "外部桥接角度覆盖。\n"
#~ "如果保持为零,每个具体桥接的桥接角度都会自动计算。\n"
#~ "否则将按以下方式使用所提供的角度:\n"
#~ " - 绝对坐标\n"
#~ " - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n"
#~ " - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n"
#~ "\n"
#~ "使用 180° 表示绝对角度为零。"
#~ msgid ""
#~ "Internal Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "内部桥接角度覆盖。\n"
#~ "如果保持为零,每个具体桥接的桥接角度都会自动计算。\n"
#~ "否则将按以下方式使用所提供的角度:\n"
#~ " - 绝对坐标\n"
#~ " - 绝对坐标 + 模型旋转:如果启用了“对齐填充方向到模型”\n"
#~ " - 最佳自动角度 + 此值:如果启用了“相对桥接角度”\n"
#~ "\n"
#~ "使用 180° 表示绝对角度为零。"
#~ msgid "Align infill direction to model"
#~ msgstr "对齐填充方向到模型"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "使填充、桥接、熨烫和表面填充的方向跟随模型在打印板上的朝向。\n"
#~ "启用后,这些方向会随模型一起旋转,以保持最佳的强度特性。"
#~ msgid "Print"
#~ msgstr "打印"
#~ msgid "in"
#~ msgstr "在"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "物体坐标" #~ msgstr "物体坐标"
+199 -50
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-06 12:57-0300\n" "POT-Creation-Date: 2026-07-12 12:27-0300\n"
"PO-Revision-Date: 2025-11-28 13:48-0600\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n"
"Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -168,6 +168,12 @@ msgstr "填充"
msgid "Gap Fill" msgid "Gap Fill"
msgstr "縫隙填充" msgstr "縫隙填充"
msgid "Vertical"
msgstr "垂直"
msgid "Horizontal"
msgstr "水平"
#, boost-format #, boost-format
msgid "Allows painting only on facets selected by: \"%1%\"" msgid "Allows painting only on facets selected by: \"%1%\""
msgstr "僅允許在由以下條件選擇的平面上進行繪製:「%1%」" msgstr "僅允許在由以下條件選擇的平面上進行繪製:「%1%」"
@@ -263,12 +269,6 @@ msgstr "三角形"
msgid "Height Range" msgid "Height Range"
msgstr "高度範圍" msgstr "高度範圍"
msgid "Vertical"
msgstr "垂直"
msgid "Horizontal"
msgstr "水平"
msgid "Remove painted color" msgid "Remove painted color"
msgstr "移除已繪製的顏色" msgstr "移除已繪製的顏色"
@@ -333,6 +333,7 @@ msgstr "Gizmo-旋轉"
msgid "Optimize orientation" msgid "Optimize orientation"
msgstr "最佳化方向" msgstr "最佳化方向"
msgctxt "Verb"
msgid "Scale" msgid "Scale"
msgstr "縮放" msgstr "縮放"
@@ -342,8 +343,9 @@ msgstr "Gizmo 比例"
msgid "Error: Please close all toolbar menus first" msgid "Error: Please close all toolbar menus first"
msgstr "錯誤:請先關閉所有工具欄選單" msgstr "錯誤:請先關閉所有工具欄選單"
msgctxt "inches"
msgid "in" msgid "in"
msgstr "在" msgstr ""
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
@@ -376,6 +378,9 @@ msgstr "縮放比例"
msgid "Object operations" msgid "Object operations"
msgstr "物件操作" msgstr "物件操作"
msgid "Scale"
msgstr "縮放"
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "Volume operations" msgid "Volume operations"
msgstr "零件操作" msgstr "零件操作"
@@ -427,6 +432,10 @@ msgstr "重設旋轉角度為開啟旋轉工具時的狀態。"
msgid "Reset current rotation to real zeros." msgid "Reset current rotation to real zeros."
msgstr "將旋轉角度歸零" msgstr "將旋轉角度歸零"
msgctxt "Noun"
msgid "Scale"
msgstr "縮放"
#. TRN - Input label. Be short as possible #. TRN - Input label. Be short as possible
msgid "Size" msgid "Size"
msgstr "尺寸" msgstr "尺寸"
@@ -3649,7 +3658,7 @@ msgstr "校正完成。如下圖中的範例,請在您的熱床上找到最均
msgid "Save" msgid "Save"
msgstr "儲存" msgstr "儲存"
# TODO: Review, changed by lang refactor. PR 14254 msgctxt "Navigation"
msgid "Back" msgid "Back"
msgstr "背面" msgstr "背面"
@@ -5055,6 +5064,7 @@ msgstr "取代工具"
msgid "Color change" msgid "Color change"
msgstr "顏色更換" msgstr "顏色更換"
msgctxt "Noun"
msgid "Print" msgid "Print"
msgstr "列印" msgstr "列印"
@@ -5219,11 +5229,15 @@ msgstr "避開擠出校正區域"
msgid "Align to Y axis" msgid "Align to Y axis"
msgstr "與 Y 軸對齊" msgstr "與 Y 軸對齊"
msgctxt "Camera" msgctxt "Camera View"
msgid "Back"
msgstr "背面"
msgctxt "Camera View"
msgid "Left" msgid "Left"
msgstr "左" msgstr "左"
msgctxt "Camera" msgctxt "Camera View"
msgid "Right" msgid "Right"
msgstr "右" msgstr "右"
@@ -5552,6 +5566,10 @@ msgstr "列印單一列印板"
msgid "Export G-code file" msgid "Export G-code file"
msgstr "匯出 G-code 檔案" msgstr "匯出 G-code 檔案"
msgctxt "Verb"
msgid "Print"
msgstr "列印"
msgid "Export plate sliced file" msgid "Export plate sliced file"
msgstr "匯出單一列印板切片檔案" msgstr "匯出單一列印板切片檔案"
@@ -5725,15 +5743,6 @@ msgstr "匯出目前選擇的設定檔"
msgid "Export" msgid "Export"
msgstr "匯出" msgstr "匯出"
msgid "Sync Presets"
msgstr "同步預設"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "從 OrcaCloud 拉取並套用最新的預設"
msgid "You must be logged in to sync presets from cloud."
msgstr "您必須登入才能從雲端同步預設。"
msgid "Quit" msgid "Quit"
msgstr "結束" msgstr "結束"
@@ -5850,6 +5859,15 @@ msgstr "視角"
msgid "Preset Bundle" msgid "Preset Bundle"
msgstr "設定檔組" msgstr "設定檔組"
msgid "Sync Presets"
msgstr "同步預設"
msgid "Pull and apply the latest presets from OrcaCloud"
msgstr "從 OrcaCloud 拉取並套用最新的預設"
msgid "You must be logged in to sync presets from cloud."
msgstr "您必須登入才能從雲端同步預設。"
msgid "Syncing presets from cloud…" msgid "Syncing presets from cloud…"
msgstr "正在從雲端同步預設…" msgstr "正在從雲端同步預設…"
@@ -10374,12 +10392,8 @@ msgstr "成功同步噴嘴資訊。"
msgid "Successfully synchronized nozzle and AMS number information." msgid "Successfully synchronized nozzle and AMS number information."
msgstr "成功同步噴嘴和 AMS 數量資訊。" msgstr "成功同步噴嘴和 AMS 數量資訊。"
msgid "Continue to sync filaments" msgid "Do you want to continue to sync filaments?"
msgstr "繼續同步線材" msgstr ""
msgctxt "Sync_Nozzle_AMS"
msgid "Cancel"
msgstr "取消"
msgid "Successfully synchronized filament color from printer." msgid "Successfully synchronized filament color from printer."
msgstr "成功從列印設備同步線材顏色。" msgstr "成功從列印設備同步線材顏色。"
@@ -11710,19 +11724,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"外部橋接角度覆蓋。\n"
"若保持為零,將為每個特定橋接自動計算橋接角度。\n"
"否則將依下列方式使用所提供的角度:\n"
" - 絕對座標\n"
" - 絕對座標 + 模型旋轉:若已啟用「對齊填充方向至模型」\n"
" - 最佳自動角度 + 此數值:若已啟用「相對橋接角度」\n"
"\n"
"若要設定絕對角度為零,請使用 180°。"
msgid "Internal bridge infill direction" msgid "Internal bridge infill direction"
msgstr "內部橋接結構的填充方向" msgstr "內部橋接結構的填充方向"
@@ -11732,19 +11738,11 @@ msgid ""
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
"\n" "\n"
"Use 180° for zero absolute angle." "Use 180° for zero absolute angle."
msgstr "" msgstr ""
"內部橋接角度覆寫。\n"
"若保持為零,將為每個特定橋接自動計算橋接角度。\n"
"否則將依照下列方式使用所提供的角度:\n"
" - 絕對座標\n"
" - 絕對座標 + 模型旋轉:若啟用「將填充方向對齊模型」\n"
" - 最佳自動角度 + 此值:若啟用「相對橋接角度」\n"
"\n"
"使用 180° 表示零絕對角度。"
msgid "Relative bridge angle" msgid "Relative bridge angle"
msgstr "相對橋接角度" msgstr "相對橋接角度"
@@ -12503,6 +12501,42 @@ msgstr "頂面密度"
msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion."
msgstr "頂面層的密度。100% 將建立完全實心且平滑的頂層。降低此數值會根據所選的頂面圖案產生紋理表面。0% 則只會建立頂層的牆體。此功能旨在實現美觀或功能需求,而非修正過擠等問題" msgstr "頂面層的密度。100% 將建立完全實心且平滑的頂層。降低此數值會根據所選的頂面圖案產生紋理表面。0% 則只會建立頂層的牆體。此功能旨在實現美觀或功能需求,而非修正過擠等問題"
msgid "Top surface expansion"
msgstr ""
msgid ""
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane.Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top.The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection."
msgstr ""
msgid "Top expansion wall margin"
msgstr ""
msgid ""
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark."
msgstr ""
msgid "Top expansion direction"
msgstr ""
msgid ""
"Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both."
msgstr ""
msgid "Inward and Outward"
msgstr ""
msgid "Inward"
msgstr ""
msgid "Outward"
msgstr ""
msgid "Bottom surface pattern" msgid "Bottom surface pattern"
msgstr "底面圖案" msgstr "底面圖案"
@@ -13163,15 +13197,13 @@ msgstr "稀疏填充密度"
msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used."
msgstr "設定內部稀疏填充的密度,當密度為 100% 時,所有稀疏填充將變為實心填充,並套用內部實心填充的圖案" msgstr "設定內部稀疏填充的密度,當密度為 100% 時,所有稀疏填充將變為實心填充,並套用內部實心填充的圖案"
msgid "Align infill direction to model" msgid "Align directions to model"
msgstr "對齊填充方向至模型" msgstr ""
msgid "" msgid ""
"Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics." "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed."
msgstr "" msgstr ""
"使填充、橋接、熨燙與表面填充的方向對齊,以跟隨模型在列印板上的方向。\n"
"啟用後,方向會隨模型一同旋轉,以維持最佳的強度特性。"
msgid "Insert solid layers" msgid "Insert solid layers"
msgstr "插入實心層" msgstr "插入實心層"
@@ -14956,6 +14988,10 @@ msgstr "對齊"
msgid "Aligned back" msgid "Aligned back"
msgstr "背部對齊" msgstr "背部對齊"
# TODO: Review, changed by lang refactor. PR 14254
msgid "Back"
msgstr "背面"
msgid "Random" msgid "Random"
msgstr "隨機" msgstr "隨機"
@@ -15311,6 +15347,18 @@ msgstr "所有擠出機畫線"
msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."
msgstr "如果啟用,所有擠出機將在列印開始時在列印板前方畫線。" msgstr "如果啟用,所有擠出機將在列印開始時在列印板前方畫線。"
msgid "Toolchange ordering"
msgstr ""
msgid ""
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
msgstr ""
msgid "Cyclic"
msgstr ""
msgid "Slice gap closing radius" msgid "Slice gap closing radius"
msgstr "切片間隙閉合半徑" msgstr "切片間隙閉合半徑"
@@ -15751,6 +15799,45 @@ msgstr "頂部外殼厚度"
msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers."
msgstr "當切片時,如果通過頂部殼層計算的厚度小於設定值,將自動增加頂部實心層的數量,以避免層高較小時頂部殼層過薄。若設為 0,則停用此功能,頂部殼層厚度完全由設定的頂部殼層數決定" msgstr "當切片時,如果通過頂部殼層計算的厚度小於設定值,將自動增加頂部實心層的數量,以避免層高較小時頂部殼層過薄。若設為 0,則停用此功能,頂部殼層厚度完全由設定的頂部殼層數決定"
msgid "Anisotropic surfaces"
msgstr ""
msgid ""
"Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time."
msgstr ""
msgid "Separated infills"
msgstr ""
msgid ""
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected."
msgstr ""
msgid "Center surface pattern on"
msgstr ""
msgid ""
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly."
msgstr ""
msgid "Each Surface"
msgstr ""
msgid "Each Model"
msgstr ""
msgid "Each Assembly"
msgstr ""
# TODO: Review, changed by lang refactor. PR 14254 # TODO: Review, changed by lang refactor. PR 14254
msgid "This is the speed at which traveling is done." msgid "This is the speed at which traveling is done."
msgstr "空駛的速度。空駛是無擠出量的快速移動" msgstr "空駛的速度。空駛是無擠出量的快速移動"
@@ -19807,6 +19894,68 @@ msgstr ""
"您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n"
"可以降低翹曲的機率。" "可以降低翹曲的機率。"
#~ msgid "Continue to sync filaments"
#~ msgstr "繼續同步線材"
#~ msgctxt "Sync_Nozzle_AMS"
#~ msgid "Cancel"
#~ msgstr "取消"
#, no-c-format, no-boost-format
#~ msgid ""
#~ "External Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "外部橋接角度覆蓋。\n"
#~ "若保持為零,將為每個特定橋接自動計算橋接角度。\n"
#~ "否則將依下列方式使用所提供的角度:\n"
#~ " - 絕對座標\n"
#~ " - 絕對座標 + 模型旋轉:若已啟用「對齊填充方向至模型」\n"
#~ " - 最佳自動角度 + 此數值:若已啟用「相對橋接角度」\n"
#~ "\n"
#~ "若要設定絕對角度為零,請使用 180°。"
#~ msgid ""
#~ "Internal Bridging angle override.\n"
#~ "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
#~ "Otherwise the provided angle will be used according to:\n"
#~ " - The absolute coordinates\n"
#~ " - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n"
#~ " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n"
#~ "\n"
#~ "Use 180° for zero absolute angle."
#~ msgstr ""
#~ "內部橋接角度覆寫。\n"
#~ "若保持為零,將為每個特定橋接自動計算橋接角度。\n"
#~ "否則將依照下列方式使用所提供的角度:\n"
#~ " - 絕對座標\n"
#~ " - 絕對座標 + 模型旋轉:若啟用「將填充方向對齊模型」\n"
#~ " - 最佳自動角度 + 此值:若啟用「相對橋接角度」\n"
#~ "\n"
#~ "使用 180° 表示零絕對角度。"
#~ msgid "Align infill direction to model"
#~ msgstr "對齊填充方向至模型"
#~ msgid ""
#~ "Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n"
#~ "When enabled, directions rotate with the model to maintain optimal strength characteristics."
#~ msgstr ""
#~ "使填充、橋接、熨燙與表面填充的方向對齊,以跟隨模型在列印板上的方向。\n"
#~ "啟用後,方向會隨模型一同旋轉,以維持最佳的強度特性。"
#~ msgid "Print"
#~ msgstr "列印"
#~ msgid "in"
#~ msgstr "在"
#~ msgid "Object coordinates" #~ msgid "Object coordinates"
#~ msgstr "物件座標" #~ msgstr "物件座標"
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,3 +1,3 @@
<svg width="19" height="20" viewBox="0 0 19 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="19" height="20" viewBox="0 0 19 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.9742 9.65669C13.2353 9.91782 13.2353 10.3401 12.9742 10.5984L7.64038 15.935C7.37924 16.1961 6.95698 16.1961 6.69863 15.935C6.44027 15.6739 6.43749 15.2516 6.69863 14.9933L11.5602 10.1317L6.69585 5.26742C6.43472 5.00628 6.43472 4.58403 6.69585 4.32567C6.95698 4.06731 7.37924 4.06454 7.6376 4.32567L12.9742 9.65669Z" fill="#009688"/> <path d="M12.9742 9.65669C13.2353 9.91782 13.2353 10.3401 12.9742 10.5984L7.64038 15.935C7.37924 16.1961 6.95698 16.1961 6.69863 15.935C6.44027 15.6739 6.43749 15.2516 6.69863 14.9933L11.5602 10.1317L6.69585 5.26742C6.43472 5.00628 6.43472 4.58403 6.69585 4.32567C6.95698 4.06731 7.37924 4.06454 7.6376 4.32567L12.9742 9.65669Z" fill="#949494"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 449 B

+1 -1
View File
@@ -1,3 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.5084 13.1962C10.2472 13.4574 9.82496 13.4574 9.5666 13.1962L4.23003 7.86242C3.9689 7.60129 3.9689 7.17903 4.23003 6.92068C4.49116 6.66232 4.91342 6.65954 5.17178 6.92068L10.0333 11.7822L14.8976 6.9179C15.1588 6.65676 15.581 6.65676 15.8394 6.9179C16.0977 7.17903 16.1005 7.60129 15.8394 7.85965L10.5084 13.1962Z" fill="#009688"/> <path d="M10.5084 13.1962C10.2472 13.4574 9.82496 13.4574 9.5666 13.1962L4.23003 7.86242C3.9689 7.60129 3.9689 7.17903 4.23003 6.92068C4.49116 6.66232 4.91342 6.65954 5.17178 6.92068L10.0333 11.7822L14.8976 6.9179C15.1588 6.65676 15.581 6.65676 15.8394 6.9179C16.0977 7.17903 16.1005 7.60129 15.8394 7.85965L10.5084 13.1962Z" fill="#949494"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 446 B

After

Width:  |  Height:  |  Size: 446 B

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18"><line x1="2.5" y1="14.5" x2="16.5" y2="14.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="2.5" y1="16.5" x2="16.5" y2="16.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="16.5" y1="12.5" x2="2.67" y2="12.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="16.5" y1="10.5" x2="3.19" y2="10.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="4.11" y1="8.5" x2="16.5" y2="8.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="16.5" y1="6.5" x2="5.56" y2="6.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="7.87" y1="4.5" x2="16.5" y2="4.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="12.92" y1="2.5" x2="16.5" y2="2.5" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-miterlimit:10;"/><path d="M.5,16.5v-2C.5,6.77,6.77.5,14.5.5h2" style="fill:none; stroke:#009688; stroke-linecap:square; stroke-miterlimit:10;"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+43 -3
View File
@@ -50,6 +50,15 @@ uniform PrintVolumeDetection print_volume;
uniform float z_far; uniform float z_far;
uniform float z_near; uniform float z_near;
// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it.
uniform sampler2D shadow_map;
uniform mat4 shadow_light_vp;
uniform float shadow_intensity;
uniform float shadow_map_texel;
// LIGHT_TOP_DIR in eye space (matches the diffuse light used for shading in gouraud.vs).
const vec3 SHADOW_LIGHT_DIR = vec3(-0.4574957, 0.4574957, 0.7624929);
varying vec3 clipping_planes_dots; varying vec3 clipping_planes_dots;
varying float color_clip_plane_dot; varying float color_clip_plane_dot;
@@ -125,6 +134,35 @@ float DetectSilho(vec2 fragCoord)
); );
} }
// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is
// occluded from the light in the shadow map. 3x3 PCF softens the edges.
float shadow_shade()
{
if (shadow_intensity <= 0.0)
return 1.0;
vec4 lp = shadow_light_vp * world_pos;
vec3 proj = lp.xyz / lp.w;
proj = proj * 0.5 + 0.5;
if (proj.z > 1.0)
return 1.0;
// Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This
// suppresses self-shadow acne without discarding real shadows cast by other objects onto
// back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow).
float NdotL = dot(normalize(eye_normal), SHADOW_LIGHT_DIR);
float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0));
// 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne.
float sum = 0.0;
for (int x = -2; x <= 2; ++x) {
for (int y = -2; y <= 2; ++y) {
float closest = texture2D(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r;
sum += (proj.z - bias > closest) ? 1.0 : 0.0;
}
}
return 1.0 - shadow_intensity * (sum / 25.0);
}
void main() void main()
{ {
if (any(lessThan(clipping_planes_dots, ZERO))) if (any(lessThan(clipping_planes_dots, ZERO)))
@@ -166,9 +204,11 @@ void main()
} }
color.rgb = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color.rgb, ZERO, 0.3333) : color.rgb; color.rgb = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color.rgb, ZERO, 0.3333) : color.rgb;
float shade = shadow_shade();
//BBS: add outline_color //BBS: add outline_color
if (is_outline) { if (is_outline) {
color = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); color = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a);
vec2 fragCoord = gl_FragCoord.xy; vec2 fragCoord = gl_FragCoord.xy;
float s = DetectSilho(fragCoord); float s = DetectSilho(fragCoord);
// Makes silhouettes thicker. // Makes silhouettes thicker.
@@ -181,8 +221,8 @@ void main()
} }
#ifdef ENABLE_ENVIRONMENT_MAP #ifdef ENABLE_ENVIRONMENT_MAP
else if (use_environment_tex) else if (use_environment_tex)
gl_FragColor = vec4(0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x, color.a); gl_FragColor = vec4((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x) * shade, color.a);
#endif #endif
else else
gl_FragColor = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); gl_FragColor = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a);
} }
+40 -3
View File
@@ -65,6 +65,12 @@ uniform float z_far;
uniform float z_near; uniform float z_near;
uniform bool enable_ssao; uniform bool enable_ssao;
// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it.
uniform sampler2D shadow_map;
uniform mat4 shadow_light_vp;
uniform float shadow_intensity;
uniform float shadow_map_texel;
varying vec3 clipping_planes_dots; varying vec3 clipping_planes_dots;
varying float color_clip_plane_dot; varying float color_clip_plane_dot;
@@ -171,6 +177,35 @@ vec3 compute_window_reflection(vec3 normal, vec3 view_dir)
return vec3(intensity); return vec3(intensity);
} }
// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is
// occluded from the light in the shadow map. 3x3 PCF softens the edges.
float shadow_shade()
{
if (shadow_intensity <= 0.0)
return 1.0;
vec4 lp = shadow_light_vp * world_pos;
vec3 proj = lp.xyz / lp.w;
proj = proj * 0.5 + 0.5;
if (proj.z > 1.0)
return 1.0;
// Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This
// suppresses self-shadow acne without discarding real shadows cast by other objects onto
// back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow).
float NdotL = dot(normalize(eye_normal), LIGHT_TOP_DIR);
float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0));
// 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne.
float sum = 0.0;
for (int x = -2; x <= 2; ++x) {
for (int y = -2; y <= 2; ++y) {
float closest = texture2D(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r;
sum += (proj.z - bias > closest) ? 1.0 : 0.0;
}
}
return 1.0 - shadow_intensity * (sum / 25.0);
}
void main() void main()
{ {
if (any(lessThan(clipping_planes_dots, ZERO))) if (any(lessThan(clipping_planes_dots, ZERO)))
@@ -226,8 +261,10 @@ void main()
// SSAO is applied in post-process pass. Keep base lighting unchanged here. // SSAO is applied in post-process pass. Keep base lighting unchanged here.
float shade = shadow_shade();
if (is_outline) { if (is_outline) {
vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS; vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade;
vec4 shaded_color = vec4(clamp(shaded_rgb, vec3(0.0), vec3(1.0)), color.a); vec4 shaded_color = vec4(clamp(shaded_rgb, vec3(0.0), vec3(1.0)), color.a);
vec2 fragCoord = gl_FragCoord.xy; vec2 fragCoord = gl_FragCoord.xy;
float s = DetectSilho(fragCoord); float s = DetectSilho(fragCoord);
@@ -240,8 +277,8 @@ void main()
} }
#ifdef ENABLE_ENVIRONMENT_MAP #ifdef ENABLE_ENVIRONMENT_MAP
else if (use_environment_tex) else if (use_environment_tex)
gl_FragColor = vec4(clamp((0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); gl_FragColor = vec4(clamp((0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a);
#endif #endif
else else
gl_FragColor = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); gl_FragColor = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a);
} }
+40
View File
@@ -0,0 +1,40 @@
#version 110
// Draws the build-plate as a receiver of the same depth shadow map used for object/self shadows,
// so the plate, objects, and self-shadows all come from one unified technique.
uniform sampler2D shadow_map;
uniform mat4 shadow_light_vp;
uniform float shadow_intensity;
uniform float shadow_map_texel;
varying vec4 world_pos;
// Fraction of the 5x5 PCF kernel occluded from the light. Matches the object shadow shader.
float shadow_occlusion()
{
vec4 lp = shadow_light_vp * world_pos;
vec3 proj = lp.xyz / lp.w;
proj = proj * 0.5 + 0.5;
if (proj.z > 1.0)
return 0.0;
// The plate is a pure receiver (never rendered into the shadow map), so a tiny constant
// bias for numerical safety is enough here.
float bias = 0.0004;
float sum = 0.0;
for (int x = -2; x <= 2; ++x) {
for (int y = -2; y <= 2; ++y) {
float closest = texture2D(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r;
sum += (proj.z - bias > closest) ? 1.0 : 0.0;
}
}
return sum / 25.0;
}
void main()
{
float occ = shadow_occlusion();
if (occ <= 0.0)
discard;
gl_FragColor = vec4(0.0, 0.0, 0.0, shadow_intensity * occ);
}
+16
View File
@@ -0,0 +1,16 @@
#version 110
uniform mat4 view_model_matrix;
uniform mat4 projection_matrix;
attribute vec3 v_position;
// The plate mask quad is authored directly in world coordinates (z = 0 plane),
// so v_position is already the world position of the fragment.
varying vec4 world_pos;
void main()
{
world_pos = vec4(v_position, 1.0);
gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
}
+43 -3
View File
@@ -49,6 +49,15 @@ uniform PrintVolumeDetection print_volume;
uniform float z_far; uniform float z_far;
uniform float z_near; uniform float z_near;
// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it.
uniform sampler2D shadow_map;
uniform mat4 shadow_light_vp;
uniform float shadow_intensity;
uniform float shadow_map_texel;
// LIGHT_TOP_DIR in eye space (matches the diffuse light used for shading in gouraud.vs).
const vec3 SHADOW_LIGHT_DIR = vec3(-0.4574957, 0.4574957, 0.7624929);
in vec3 clipping_planes_dots; in vec3 clipping_planes_dots;
in float color_clip_plane_dot; in float color_clip_plane_dot;
@@ -124,6 +133,35 @@ float DetectSilho(vec2 fragCoord)
); );
} }
// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is
// occluded from the light in the shadow map. 3x3 PCF softens the edges.
float shadow_shade()
{
if (shadow_intensity <= 0.0)
return 1.0;
vec4 lp = shadow_light_vp * world_pos;
vec3 proj = lp.xyz / lp.w;
proj = proj * 0.5 + 0.5;
if (proj.z > 1.0)
return 1.0;
// Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This
// suppresses self-shadow acne without discarding real shadows cast by other objects onto
// back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow).
float NdotL = dot(normalize(eye_normal), SHADOW_LIGHT_DIR);
float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0));
// 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne.
float sum = 0.0;
for (int x = -2; x <= 2; ++x) {
for (int y = -2; y <= 2; ++y) {
float closest = texture(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r;
sum += (proj.z - bias > closest) ? 1.0 : 0.0;
}
}
return 1.0 - shadow_intensity * (sum / 25.0);
}
out vec4 out_color; out vec4 out_color;
void main() void main()
@@ -167,9 +205,11 @@ void main()
} }
color.rgb = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color.rgb, ZERO, 0.3333) : color.rgb; color.rgb = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color.rgb, ZERO, 0.3333) : color.rgb;
float shade = shadow_shade();
//BBS: add outline_color //BBS: add outline_color
if (is_outline) { if (is_outline) {
color = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); color = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a);
vec2 fragCoord = gl_FragCoord.xy; vec2 fragCoord = gl_FragCoord.xy;
float s = DetectSilho(fragCoord); float s = DetectSilho(fragCoord);
// Makes silhouettes thicker. // Makes silhouettes thicker.
@@ -182,8 +222,8 @@ void main()
} }
#ifdef ENABLE_ENVIRONMENT_MAP #ifdef ENABLE_ENVIRONMENT_MAP
else if (use_environment_tex) else if (use_environment_tex)
out_color = vec4(0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x, color.a); out_color = vec4((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color.rgb * intensity.x) * shade, color.a);
#endif #endif
else else
out_color = vec4(vec3(intensity.y) + color.rgb * intensity.x, color.a); out_color = vec4((vec3(intensity.y) + color.rgb * intensity.x) * shade, color.a);
} }
+40 -3
View File
@@ -65,6 +65,12 @@ uniform float z_far;
uniform float z_near; uniform float z_near;
uniform bool enable_ssao; uniform bool enable_ssao;
// Depth-based shadow map (object-on-object and self shadows). shadow_intensity == 0 disables it.
uniform sampler2D shadow_map;
uniform mat4 shadow_light_vp;
uniform float shadow_intensity;
uniform float shadow_map_texel;
in vec3 clipping_planes_dots; in vec3 clipping_planes_dots;
in float color_clip_plane_dot; in float color_clip_plane_dot;
@@ -175,6 +181,35 @@ vec3 compute_window_reflection(vec3 normal, vec3 view_dir)
return vec3(intensity); return vec3(intensity);
} }
// Returns a lighting multiplier in [1 - shadow_intensity, 1]: < 1 where the fragment is
// occluded from the light in the shadow map. 3x3 PCF softens the edges.
float shadow_shade()
{
if (shadow_intensity <= 0.0)
return 1.0;
vec4 lp = shadow_light_vp * world_pos;
vec3 proj = lp.xyz / lp.w;
proj = proj * 0.5 + 0.5;
if (proj.z > 1.0)
return 1.0;
// Slope-scaled depth bias: larger where the surface grazes / faces away from the light. This
// suppresses self-shadow acne without discarding real shadows cast by other objects onto
// back-facing surfaces (e.g. the shaded back/tip of a cone sitting inside a larger shadow).
float NdotL = dot(normalize(eye_normal), LIGHT_TOP_DIR);
float bias = mix(0.0004, 0.004, clamp(1.0 - NdotL, 0.0, 1.0));
// 5x5 PCF: softens shadow edges into a smooth penumbra and blurs residual facet acne.
float sum = 0.0;
for (int x = -2; x <= 2; ++x) {
for (int y = -2; y <= 2; ++y) {
float closest = texture(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r;
sum += (proj.z - bias > closest) ? 1.0 : 0.0;
}
}
return 1.0 - shadow_intensity * (sum / 25.0);
}
void main() void main()
{ {
if (any(lessThan(clipping_planes_dots, ZERO))) if (any(lessThan(clipping_planes_dots, ZERO)))
@@ -230,8 +265,10 @@ void main()
// SSAO is applied in post-process pass. Keep base lighting unchanged here. // SSAO is applied in post-process pass. Keep base lighting unchanged here.
float shade = shadow_shade();
if (is_outline) { if (is_outline) {
vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS; vec3 shaded_rgb = (vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade;
vec4 shaded_color = vec4(clamp(shaded_rgb, vec3(0.0), vec3(1.0)), color.a); vec4 shaded_color = vec4(clamp(shaded_rgb, vec3(0.0), vec3(1.0)), color.a);
vec2 fragCoord = gl_FragCoord.xy; vec2 fragCoord = gl_FragCoord.xy;
float s = DetectSilho(fragCoord); float s = DetectSilho(fragCoord);
@@ -244,8 +281,8 @@ void main()
} }
#ifdef ENABLE_ENVIRONMENT_MAP #ifdef ENABLE_ENVIRONMENT_MAP
else if (use_environment_tex) else if (use_environment_tex)
out_color = vec4(clamp((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); out_color = vec4(clamp((0.45 * texture(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + window_reflection + 0.8 * color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a);
#endif #endif
else else
out_color = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS, vec3(0.0), vec3(1.0)), color.a); out_color = vec4(clamp((vec3(specular) + window_reflection + color.rgb * diffuse) * PHONG_BRIGHTNESS * shade, vec3(0.0), vec3(1.0)), color.a);
} }
+42
View File
@@ -0,0 +1,42 @@
#version 140
// Draws the build-plate as a receiver of the same depth shadow map used for object/self shadows,
// so the plate, objects, and self-shadows all come from one unified technique.
uniform sampler2D shadow_map;
uniform mat4 shadow_light_vp;
uniform float shadow_intensity;
uniform float shadow_map_texel;
in vec4 world_pos;
out vec4 out_color;
// Fraction of the 5x5 PCF kernel occluded from the light. Matches the object shadow shader.
float shadow_occlusion()
{
vec4 lp = shadow_light_vp * world_pos;
vec3 proj = lp.xyz / lp.w;
proj = proj * 0.5 + 0.5;
if (proj.z > 1.0)
return 0.0;
// The plate is a pure receiver (never rendered into the shadow map), so a tiny constant
// bias for numerical safety is enough here.
float bias = 0.0004;
float sum = 0.0;
for (int x = -2; x <= 2; ++x) {
for (int y = -2; y <= 2; ++y) {
float closest = texture(shadow_map, proj.xy + vec2(float(x), float(y)) * shadow_map_texel).r;
sum += (proj.z - bias > closest) ? 1.0 : 0.0;
}
}
return sum / 25.0;
}
void main()
{
float occ = shadow_occlusion();
if (occ <= 0.0)
discard;
out_color = vec4(0.0, 0.0, 0.0, shadow_intensity * occ);
}
+16
View File
@@ -0,0 +1,16 @@
#version 140
uniform mat4 view_model_matrix;
uniform mat4 projection_matrix;
in vec3 v_position;
// The plate mask quad is authored directly in world coordinates (z = 0 plane),
// so v_position is already the world position of the fragment.
out vec4 world_pos;
void main()
{
world_pos = vec4(v_position, 1.0);
gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
}
+1 -1
View File
@@ -23,7 +23,7 @@ if %FULL_MODE%==1 (
call :prepareGettextList "%list_file%" "%filtered_list%" "%missing_list%" call :prepareGettextList "%list_file%" "%filtered_list%" "%missing_list%"
if "!has_sources!"=="1" ( if "!has_sources!"=="1" (
if not exist "%generated_i18n%" mkdir "%generated_i18n%" if not exist "%generated_i18n%" mkdir "%generated_i18n%"
.\tools\xgettext.exe --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost --no-wrap -f "%filtered_list%" -o "%generated_pot%" .\tools\xgettext.exe --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_CTX:1,2c --keyword=_CTX_utf8:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost --no-wrap -f "%filtered_list%" -o "%generated_pot%"
if errorlevel 1 ( if errorlevel 1 (
set "script_exit_code=1" set "script_exit_code=1"
) else ( ) else (
+1 -1
View File
@@ -85,7 +85,7 @@ if $FULL_MODE; then
generated_pot_file="${generated_i18n_dir}/OrcaSlicer.pot" generated_pot_file="${generated_i18n_dir}/OrcaSlicer.pot"
mkdir -p "$generated_i18n_dir" mkdir -p "$generated_i18n_dir"
xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost --no-wrap -f "$filtered_list" -o "$generated_pot_file" xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_CTX:1,2c --keyword=_CTX_utf8:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost --no-wrap -f "$filtered_list" -o "$generated_pot_file"
python3 scripts/HintsToPot.py ./resources "$generated_i18n_dir" python3 scripts/HintsToPot.py ./resources "$generated_i18n_dir"
if [ -f "$pot_file" ] && files_equal_ignoring_pot_date "$pot_file" "$generated_pot_file"; then if [ -f "$pot_file" ] && files_equal_ignoring_pot_date "$pot_file" "$generated_pot_file"; then
+11 -1
View File
@@ -4,11 +4,21 @@
# It should only require the directories build/tests, scripts/, and tests/ to function, # It should only require the directories build/tests, scripts/, and tests/ to function,
# and cmake (with ctest) installed. # and cmake (with ctest) installed.
# (otherwise, update the workflow too, but try to avoid to keep things self-contained) # (otherwise, update the workflow too, but try to avoid to keep things self-contained)
#
# Usage: run_unit_tests.sh [TEST_DIR] [BUILD_CONFIG]
# TEST_DIR directory containing the built tests (default: build/tests)
# BUILD_CONFIG configuration to run; required for multi-config generators
# (Windows/macOS), harmless/omitted for single-config (Linux).
ROOT_DIR="$(dirname "$0")/.." ROOT_DIR="$(dirname "$0")/.."
cd "${ROOT_DIR}" || exit 1 cd "${ROOT_DIR}" || exit 1
TEST_DIR="${1:-build/tests}"
BUILD_CONFIG="${2:-}"
# Run the whole suite, excluding tests tagged [NotWorking]. # Run the whole suite, excluding tests tagged [NotWorking].
# --no-tests=error fails the job if the filter matches nothing (instead of passing green). # --no-tests=error fails the job if the filter matches nothing (instead of passing green).
ctest --test-dir build/tests -LE "NotWorking" --no-tests=error --output-junit "$(pwd)/ctest_results.xml" --output-on-failure -j args=(--test-dir "${TEST_DIR}" -LE "NotWorking" --no-tests=error --output-junit "$(pwd)/ctest_results.xml" --output-on-failure -j)
[ -n "${BUILD_CONFIG}" ] && args+=(--build-config "${BUILD_CONFIG}")
ctest "${args[@]}"
+1 -1
View File
@@ -7359,7 +7359,7 @@ bool CLI::export_project(Model *model, std::string& path, PlateDataPtrs &partpla
bool success = false; bool success = false;
StoreParams store_params; StoreParams store_params;
store_params.path = path.c_str(); store_params.path = path;
store_params.model = model; store_params.model = model;
store_params.plate_data_list = partplate_data; store_params.plate_data_list = partplate_data;
store_params.project_presets = project_presets; store_params.project_presets = project_presets;
@@ -1660,7 +1660,7 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(edge_t* edge_to_peak, ptr
} }
SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right, coord_t switching_radius) const SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right, coord_t switching_radius)
{ {
assert(ratio_left_to_whole >= 0.0 && ratio_left_to_whole <= 1.0); assert(ratio_left_to_whole >= 0.0 && ratio_left_to_whole <= 1.0);
Beading ret = interpolate(left, ratio_left_to_whole, right); Beading ret = interpolate(left, ratio_left_to_whole, right);
@@ -1684,6 +1684,12 @@ SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beadin
{ // We cant adjust to fit the next edge because there is no previous one?! { // We cant adjust to fit the next edge because there is no previous one?!
return ret; return ret;
} }
// ret follows the thicker of left/right, which can hold fewer insets than left when bead
// count and thickness disagree; skip the adjustment rather than index ret past its end.
if (next_inset_idx >= coord_t(ret.toolpath_locations.size()))
{
return ret;
}
assert(next_inset_idx < coord_t(left.toolpath_locations.size())); assert(next_inset_idx < coord_t(left.toolpath_locations.size()));
assert(left.toolpath_locations[next_inset_idx] <= switching_radius); assert(left.toolpath_locations[next_inset_idx] <= switching_radius);
assert(left.toolpath_locations[next_inset_idx + 1] >= switching_radius); assert(left.toolpath_locations[next_inset_idx + 1] >= switching_radius);
@@ -1703,7 +1709,7 @@ SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beadin
} }
SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right) const SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right)
{ {
assert(ratio_left_to_whole >= 0.0 && ratio_left_to_whole <= 1.0); assert(ratio_left_to_whole >= 0.0 && ratio_left_to_whole <= 1.0);
float ratio_right_to_whole = 1.0 - ratio_left_to_whole; float ratio_right_to_whole = 1.0 - ratio_left_to_whole;
@@ -488,7 +488,7 @@ protected:
* beads. * beads.
* \return The beading at the interpolated location. * \return The beading at the interpolated location.
*/ */
Beading interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right, coord_t switching_radius) const; static Beading interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right, coord_t switching_radius);
/*! /*!
* Subroutine of \ref interpolate(const Beading&, Ratio, const Beading&, coord_t) * Subroutine of \ref interpolate(const Beading&, Ratio, const Beading&, coord_t)
@@ -501,7 +501,7 @@ protected:
* \param right One of the beadings to interpolate between. * \param right One of the beadings to interpolate between.
* \return The beading at the interpolated location. * \return The beading at the interpolated location.
*/ */
Beading interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right) const; static Beading interpolate(const Beading& left, double ratio_left_to_whole, const Beading& right);
/*! /*!
* Get the beading at a certain node of the skeletal graph, or create one if * Get the beading at a certain node of the skeletal graph, or create one if
+1
View File
@@ -221,6 +221,7 @@ set(lisbslic3r_sources
GCode/FanMover.hpp GCode/FanMover.hpp
GCode/GCodeProcessor.cpp GCode/GCodeProcessor.cpp
GCode/GCodeProcessor.hpp GCode/GCodeProcessor.hpp
GCode/ElegooGCodeProcessorHelper.cpp
GCode.hpp GCode.hpp
GCode/PchipInterpolatorHelper.cpp GCode/PchipInterpolatorHelper.cpp
GCode/PchipInterpolatorHelper.hpp GCode/PchipInterpolatorHelper.hpp
+12
View File
@@ -188,6 +188,18 @@ ExPolygons offset_ex_2(const ExPolygons &expolygons, double delta)
return results; return results;
} }
ExPolygons offset_ex_2(const ExPolygons &expolygons, double delta, Clipper2Lib::JoinType joinType)
{
Clipper2Lib::Paths64 subject = Slic3rExPolygons_to_Paths64(expolygons);
Clipper2Lib::ClipperOffset offsetter;
offsetter.AddPaths(subject, joinType, Clipper2Lib::EndType::Polygon);
Clipper2Lib::PolyPath64 polytree;
offsetter.Execute(delta, polytree);
ExPolygons results = PolyTreeToExPolygons(std::move(polytree));
return results;
}
ExPolygons offset2_ex_2(const ExPolygons& expolygons, double delta1, double delta2) ExPolygons offset2_ex_2(const ExPolygons& expolygons, double delta1, double delta2)
{ {
// 1st offset // 1st offset
+1
View File
@@ -15,6 +15,7 @@ Slic3r::Polylines diff_pl_2(const Slic3r::Polylines& subject, const Slic3r::Pol
ExPolygons union_ex_2(const Polygons &expolygons); ExPolygons union_ex_2(const Polygons &expolygons);
ExPolygons union_ex_2(const ExPolygons &expolygons); ExPolygons union_ex_2(const ExPolygons &expolygons);
ExPolygons offset_ex_2(const ExPolygons &expolygons, double delta); ExPolygons offset_ex_2(const ExPolygons &expolygons, double delta);
ExPolygons offset_ex_2(const ExPolygons &expolygons, double delta, Clipper2Lib::JoinType joinType);
ExPolygons offset2_ex_2(const ExPolygons &expolygons, double delta1, double delta2); ExPolygons offset2_ex_2(const ExPolygons &expolygons, double delta1, double delta2);
} }
+27
View File
@@ -363,6 +363,7 @@ public:
virtual void set_with_restore(const ConfigOptionVectorBase* rhs, std::vector<int>& restore_index, int stride) = 0; virtual void set_with_restore(const ConfigOptionVectorBase* rhs, std::vector<int>& restore_index, int stride) = 0;
virtual void set_with_restore_2(const ConfigOptionVectorBase* rhs, std::vector<int>& restore_index, int start, int len, bool skip_error = false) = 0; virtual void set_with_restore_2(const ConfigOptionVectorBase* rhs, std::vector<int>& restore_index, int start, int len, bool skip_error = false) = 0;
virtual void set_only_diff(const ConfigOptionVectorBase* rhs, std::vector<int>& diff_index, int stride) = 0; virtual void set_only_diff(const ConfigOptionVectorBase* rhs, std::vector<int>& diff_index, int stride) = 0;
virtual void set_to_index(const ConfigOptionVectorBase* rhs, std::vector<int>& dest_index, int stride) = 0;
virtual void set_with_nil(const ConfigOptionVectorBase* rhs, const ConfigOptionVectorBase* inherits, int stride) = 0; virtual void set_with_nil(const ConfigOptionVectorBase* rhs, const ConfigOptionVectorBase* inherits, int stride) = 0;
// Resize the vector of values, copy the newly added values from opt_default if provided. // Resize the vector of values, copy the newly added values from opt_default if provided.
virtual void resize(size_t n, const ConfigOption *opt_default = nullptr) = 0; virtual void resize(size_t n, const ConfigOption *opt_default = nullptr) = 0;
@@ -586,6 +587,32 @@ public:
throw ConfigurationError("ConfigOptionVector::set_only_diff(): Assigning an incompatible type"); throw ConfigurationError("ConfigOptionVector::set_only_diff(): Assigning an incompatible type");
} }
//set a item related with extruder variants when apply static config with dynamic config
//rhs: item from dynamic config
//dest_index: which index in this vector need to be used
virtual void set_to_index(const ConfigOptionVectorBase* rhs, std::vector<int>& dest_index, int stride) override
{
if (rhs->type() == this->type()) {
// Assign the first value of the rhs vector.
auto other = static_cast<const ConfigOptionVector<T>*>(rhs);
T v = other->values.front();
this->values.resize(dest_index.size() * stride, v);
for (size_t i = 0; i < dest_index.size(); i++) {
if (dest_index[i] < 0)
continue;
for (size_t j = 0; j < size_t(stride); j++)
{
const size_t src_idx = size_t(dest_index[i]) * size_t(stride) + j;
if (src_idx < other->values.size() && !other->is_nil(size_t(dest_index[i]) * size_t(stride)))
this->values[i * size_t(stride) + j] = other->values[src_idx];
}
}
}
else
throw ConfigurationError("ConfigOptionVector::set_to_index(): Assigning an incompatible type");
}
//set a item related with extruder variants when saving user config, set the non-diff value of some extruder to nill //set a item related with extruder variants when saving user config, set the non-diff value of some extruder to nill
//this item has different value with inherit config //this item has different value with inherit config
//rhs: item from userconfig //rhs: item from userconfig
+61 -2
View File
@@ -272,6 +272,10 @@ struct SurfaceFillParams
// For Gyroid: when true, use the parameterized "optimized" wave. // For Gyroid: when true, use the parameterized "optimized" wave.
bool gyroid_optimized = false; bool gyroid_optimized = false;
bool anisotropic_surfaces{false};
CenterOfSurfacePattern center_of_surface_pattern{CenterOfSurfacePattern::Each_Surface};
bool separated_infills{false};
bool operator<(const SurfaceFillParams &rhs) const { bool operator<(const SurfaceFillParams &rhs) const {
#define RETURN_COMPARE_NON_EQUAL(KEY) if (this->KEY < rhs.KEY) return true; if (this->KEY > rhs.KEY) return false; #define RETURN_COMPARE_NON_EQUAL(KEY) if (this->KEY < rhs.KEY) return true; if (this->KEY > rhs.KEY) return false;
#define RETURN_COMPARE_NON_EQUAL_TYPED(TYPE, KEY) if (TYPE(this->KEY) < TYPE(rhs.KEY)) return true; if (TYPE(this->KEY) > TYPE(rhs.KEY)) return false; #define RETURN_COMPARE_NON_EQUAL_TYPED(TYPE, KEY) if (TYPE(this->KEY) < TYPE(rhs.KEY)) return true; if (TYPE(this->KEY) > TYPE(rhs.KEY)) return false;
@@ -301,8 +305,12 @@ struct SurfaceFillParams
RETURN_COMPARE_NON_EQUAL(lateral_lattice_angle_2); RETURN_COMPARE_NON_EQUAL(lateral_lattice_angle_2);
RETURN_COMPARE_NON_EQUAL(symmetric_infill_y_axis); RETURN_COMPARE_NON_EQUAL(symmetric_infill_y_axis);
RETURN_COMPARE_NON_EQUAL(infill_lock_depth); RETURN_COMPARE_NON_EQUAL(infill_lock_depth);
RETURN_COMPARE_NON_EQUAL(skin_infill_depth); RETURN_COMPARE_NON_EQUAL(infill_overhang_angle); RETURN_COMPARE_NON_EQUAL(skin_infill_depth);
RETURN_COMPARE_NON_EQUAL(infill_overhang_angle);
RETURN_COMPARE_NON_EQUAL(gyroid_optimized); RETURN_COMPARE_NON_EQUAL(gyroid_optimized);
RETURN_COMPARE_NON_EQUAL(anisotropic_surfaces);
RETURN_COMPARE_NON_EQUAL(center_of_surface_pattern);
RETURN_COMPARE_NON_EQUAL(separated_infills);
return false; return false;
} }
@@ -329,6 +337,9 @@ struct SurfaceFillParams
this->infill_lock_depth == rhs.infill_lock_depth && this->infill_lock_depth == rhs.infill_lock_depth &&
this->skin_infill_depth == rhs.skin_infill_depth && this->skin_infill_depth == rhs.skin_infill_depth &&
this->infill_overhang_angle == rhs.infill_overhang_angle && this->infill_overhang_angle == rhs.infill_overhang_angle &&
this->anisotropic_surfaces == rhs.anisotropic_surfaces &&
this->center_of_surface_pattern == rhs.center_of_surface_pattern &&
this->separated_infills == rhs.separated_infills &&
this->gyroid_optimized == rhs.gyroid_optimized; this->gyroid_optimized == rhs.gyroid_optimized;
} }
}; };
@@ -868,6 +879,9 @@ std::vector<SurfaceFill> group_fills(const Layer &layer, LockRegionParam &lock_p
params.lateral_lattice_angle_1 = region_config.lateral_lattice_angle_1; params.lateral_lattice_angle_1 = region_config.lateral_lattice_angle_1;
params.lateral_lattice_angle_2 = region_config.lateral_lattice_angle_2; params.lateral_lattice_angle_2 = region_config.lateral_lattice_angle_2;
params.infill_overhang_angle = region_config.infill_overhang_angle; params.infill_overhang_angle = region_config.infill_overhang_angle;
params.anisotropic_surfaces = region_config.anisotropic_surfaces;
params.center_of_surface_pattern = region_config.center_of_surface_pattern;
params.separated_infills = region_config.separated_infills;
if (params.pattern == ipLockedZag) { if (params.pattern == ipLockedZag) {
params.infill_lock_depth = scale_(region_config.infill_lock_depth); params.infill_lock_depth = scale_(region_config.infill_lock_depth);
params.skin_infill_depth = scale_(region_config.skin_infill_depth); params.skin_infill_depth = scale_(region_config.skin_infill_depth);
@@ -1309,6 +1323,22 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
params.config = &region_config; params.config = &region_config;
params.pattern = surface_fill.params.pattern; params.pattern = surface_fill.params.pattern;
// Orca: Checking the filling of a centered surface by drawing for each model parts
bool is_top_or_bottom = params.extrusion_role == erTopSolidInfill || params.extrusion_role == erBottomSurface;
bool is_centered_infill = surface_fill.params.pattern == ipArchimedeanChords || surface_fill.params.pattern == ipOctagramSpiral;
if (is_top_or_bottom) {
params.is_anisotropic = surface_fill.params.anisotropic_surfaces; // Orca: anisotropic surfaces
params.center_of_surface_pattern = surface_fill.params.center_of_surface_pattern; // Orca: center of surface pattern
}
// Orca: Each_Model centers the pattern on each model part's bbox; Each_Surface / Each_Assembly
// fall through to the default (whole-object) bounding box below.
bool is_per_model_center = is_top_or_bottom && params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model && is_centered_infill;
bool is_separate_infill = !is_top_or_bottom && surface_fill.params.separated_infills &&
(
is_separable_infill_pattern(surface_fill.params.pattern) ||
params.config->solid_infill_rotate_template != "" ||
params.config->sparse_infill_rotate_template != "" );
if( surface_fill.params.pattern == ipLockedZag ) { if( surface_fill.params.pattern == ipLockedZag ) {
params.locked_zag = true; params.locked_zag = true;
params.infill_lock_depth = surface_fill.params.infill_lock_depth; params.infill_lock_depth = surface_fill.params.infill_lock_depth;
@@ -1332,7 +1362,36 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
params.can_reverse = false; params.can_reverse = false;
for (ExPolygon& expoly : surface_fill.expolygons) { for (ExPolygon& expoly : surface_fill.expolygons) {
f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}, ApplySafetyOffset::Yes); // Orca: separate infill / per-model pattern centering.
//
// Center the pattern on each connected body of the object independently, so every piece
// is filled exactly as if it were sliced on its own: touching/overlapping parts merge
// into one body sharing a center, while separate parts and disconnected islands (even
// interleaved-but-not-touching ones, e.g. chain links) each get their own. The body each
// island belongs to, and its full bounding box, were resolved in 3D by PrintObject::
// infill() (lslices_separated_component_bboxes, aligned with this layer's lslices). We
// match this fill region to the island it overlaps most, then re-use the whole-object
// bounding box (origin-centered — identical extent to the default, so coverage and cost
// are unchanged) re-centered on that body.
if (is_per_model_center || is_separate_infill) {
double best_overlap = 0.;
BoundingBox best_component;
for (size_t r = 0; r < this->lslices.size() && r < this->lslices_separated_component_bboxes.size(); ++ r) {
const double overlap = area(intersection_ex(this->lslices[r], expoly));
if (overlap > best_overlap) {
best_overlap = overlap;
best_component = this->lslices_separated_component_bboxes[r];
}
}
if (best_component.defined) {
const Point c = best_component.center();
BoundingBox part_bbox = bbox; // origin-centered, whole-object extent (from above)
part_bbox.translate(c.x(), c.y()); // re-center on this body
f->set_bounding_box(part_bbox);
}
} // - End: separate infill / per-model pattern centering
f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}, ApplySafetyOffset::Yes);
if (params.symmetric_infill_y_axis) { if (params.symmetric_infill_y_axis) {
params.symmetric_y_axis = f->extended_object_bounding_box().center().x(); params.symmetric_y_axis = f->extended_object_bounding_box().center().x();
expoly.symmetric_y(params.symmetric_y_axis); expoly.symmetric_y(params.symmetric_y_axis);
+3 -2
View File
@@ -165,7 +165,7 @@ void Fill::fill_surface_extrusion(const Surface* surface, const FillParams& para
// ORCA: special flag for flow rate calibration // ORCA: special flag for flow rate calibration
auto is_flow_calib = params.extrusion_role == erTopSolidInfill && this->print_object_config->has("calib_flowrate_topinfill_special_order") && auto is_flow_calib = params.extrusion_role == erTopSolidInfill && this->print_object_config->has("calib_flowrate_topinfill_special_order") &&
this->print_object_config->option("calib_flowrate_topinfill_special_order")->getBool(); this->print_object_config->option("calib_flowrate_topinfill_special_order")->getBool();
if (is_flow_calib) { if (is_flow_calib || params.is_anisotropic) { // Orca: disable sorting while anisotropic surfaces
eec->no_sort = true; eec->no_sort = true;
} }
size_t idx = eec->entities.size(); size_t idx = eec->entities.size();
@@ -186,7 +186,8 @@ void Fill::fill_surface_extrusion(const Surface* surface, const FillParams& para
} }
// Orca: run gap fill // Orca: run gap fill
this->_create_gap_fill(surface, params, eec); if (!(params.is_anisotropic)) // Orca: Disable gap filling while anisotropic
this->_create_gap_fill(surface, params, eec);
} }
} }
+2
View File
@@ -106,6 +106,8 @@ struct FillParams
bool locked_zag{false}; bool locked_zag{false};
float infill_lock_depth{0.0}; float infill_lock_depth{0.0};
float skin_infill_depth{0.0}; float skin_infill_depth{0.0};
bool is_anisotropic{false};
CenterOfSurfacePattern center_of_surface_pattern{CenterOfSurfacePattern::Each_Surface};
}; };
static_assert(IsTriviallyCopyable<FillParams>::value, "FillParams class is not POD (and it should be - see constructor)."); static_assert(IsTriviallyCopyable<FillParams>::value, "FillParams class is not POD (and it should be - see constructor).");
+53 -35
View File
@@ -77,20 +77,24 @@ void FillPlanePath::_fill_surface_single(
//FIXME Vojtech: We are not sure whether the user expects the fill patterns on visible surfaces to be aligned across all the islands of a single layer. //FIXME Vojtech: We are not sure whether the user expects the fill patterns on visible surfaces to be aligned across all the islands of a single layer.
// One may align for this->centered() to align the patterns for Archimedean Chords and Octagram Spiral patterns. // One may align for this->centered() to align the patterns for Archimedean Chords and Octagram Spiral patterns.
const bool align = params.density < 0.995; // Orca: the old implementation became obsolete when it became possible to change the density of the top and bottom surfaces
bool align = params.extrusion_role == ExtrusionRole::erInternalInfill;
BoundingBox bounding_box;
BoundingBox snug_bounding_box = get_extents(expolygon).inflated(SCALED_EPSILON); BoundingBox snug_bounding_box = get_extents(expolygon).inflated(SCALED_EPSILON);
// Expand the bounding box to avoid artifacts at the edges // Expand the bounding box to avoid artifacts at the edges
snug_bounding_box.offset(scale_(this->spacing)*params.multiline); snug_bounding_box.offset(scale_(this->spacing)*params.multiline);
// Rotated bounding box of the area to fill in with the pattern. // Sparse infill (or Internal where align == true) needs to be aligned across layers. Align infill across layers using the object's bounding box.
BoundingBox bounding_box = align ? // Solid infill does not need to be aligned across layers, generate the infill pattern around the clipping expolygon only.
// Sparse infill needs to be aligned across layers. Align infill across layers using the object's bounding box. if (align)
this->bounding_box.rotated(-direction.first) : bounding_box = this->bounding_box.rotated(-direction.first);
// Solid infill does not need to be aligned across layers, generate the infill pattern else if (params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Surface)
// around the clipping expolygon only. bounding_box = snug_bounding_box;
snug_bounding_box; else if (params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model)
bounding_box = this->bounding_box.rotated(-direction.first);
else
bounding_box = extended_object_bounding_box();
Point shift = this->centered() ? Point shift = this->centered() ?
bounding_box.center() : bounding_box.center() :
@@ -129,35 +133,49 @@ void FillPlanePath::_fill_surface_single(
polylines = intersection_pl(std::move(polylines), expolygon); polylines = intersection_pl(std::move(polylines), expolygon);
if (!polylines.empty()) { if (!polylines.empty()) {
Polylines chained; Polylines chained;
if (params.dont_connect() || params.density > 0.5) { if (!params.is_anisotropic) { // Orca: not anisotropic surface
// ORCA: special flag for flow rate calibration if ((params.dont_connect() || params.density > 0.5)) {
auto is_flow_calib = params.extrusion_role == erTopSolidInfill && // ORCA: special flag for flow rate calibration
this->print_object_config->has("calib_flowrate_topinfill_special_order") && auto is_flow_calib = params.extrusion_role == erTopSolidInfill &&
this->print_object_config->option("calib_flowrate_topinfill_special_order")->getBool() && this->print_object_config->has("calib_flowrate_topinfill_special_order") &&
dynamic_cast<FillArchimedeanChords*>(this); this->print_object_config->option("calib_flowrate_topinfill_special_order")->getBool() &&
if (is_flow_calib) { dynamic_cast<FillArchimedeanChords*>(this);
// We want the spiral part to be printed inside-out if (is_flow_calib) {
// Find the center spiral line first, by looking for the longest one // We want the spiral part to be printed inside-out
auto it = std::max_element(polylines.begin(), polylines.end(), // Find the center spiral line first, by looking for the longest one
[](const Polyline& a, const Polyline& b) { return a.length() < b.length(); }); auto it = std::max_element(polylines.begin(), polylines.end(),
Polyline center_spiral = std::move(*it); [](const Polyline& a, const Polyline& b) { return a.length() < b.length(); });
Polyline center_spiral = std::move(*it);
// Ensure the spiral is printed from inside to out // Ensure the spiral is printed from inside to out
if (center_spiral.first_point().squaredNorm() > center_spiral.last_point().squaredNorm()) { if ((center_spiral.first_point().squaredNorm() > center_spiral.last_point().squaredNorm())) {
center_spiral.reverse(); center_spiral.reverse();
}
// Chain the other polylines
polylines.erase(it);
chained = chain_polylines(std::move(polylines), nullptr);
// Then add the center spiral back
chained.push_back(std::move(center_spiral));
} else {
chained = chain_polylines(std::move(polylines), nullptr);
} }
} else
// Chain the other polylines connect_infill(std::move(polylines), expolygon, chained, this->spacing, params);
polylines.erase(it); } else { // Orca: anisotropic surface
chained = chain_polylines(std::move(polylines)); const Point _center(0., 0.);
for (Polyline& segment : polylines) { // sort paths by its direction
// Then add the center spiral back if (segment.size() > 1) { // need at least two points to evaluate direction
chained.push_back(std::move(center_spiral)); if (segment.first_point().ccw(segment.points[1], _center) < 0)
} else { segment.reverse();
chained = chain_polylines(std::move(polylines)); }
chained.emplace_back(std::move(segment));
} }
} else std::sort(chained.begin(), chained.end(), [&_center](const Polyline& a, const Polyline& b) { // just sort polylines from center to outside
connect_infill(std::move(polylines), expolygon, chained, this->spacing, params); return a.distance_to(_center) < b.distance_to(_center);
});
}
// paths must be repositioned and rotated back // paths must be repositioned and rotated back
for (Polyline& pl : chained) { for (Polyline& pl : chained) {
pl.translate(shift.x(), shift.y()); pl.translate(shift.x(), shift.y());
+31 -8
View File
@@ -2739,13 +2739,19 @@ static void polylines_from_paths(const std::vector<MonotonicRegionLink> &path, c
// The extended bounding box of the whole object that covers any rotation of every layer. // The extended bounding box of the whole object that covers any rotation of every layer.
BoundingBox FillRectilinear::extended_object_bounding_box() const { BoundingBox FillRectilinear::extended_object_bounding_box() const {
// Build the extension around the box center. The transpose merge and the sqrt(2.) scaling
// (which covers any possible rotation) are both defined about the origin, so a box that is not
// origin-centered — e.g. a separated-infill box re-centered on a single assembly part — would be
// distorted. Shift to the origin first and back afterwards; for the default origin-centered box
// the two translations cancel and this is identical to the original behavior.
const Point c = this->bounding_box.center();
BoundingBox out = this->bounding_box; BoundingBox out = this->bounding_box;
out.translate(-c.x(), -c.y());
out.merge(Point(out.min.y(), out.min.x())); out.merge(Point(out.min.y(), out.min.x()));
out.merge(Point(out.max.y(), out.max.x())); out.merge(Point(out.max.y(), out.max.x()));
out = out.scaled(sqrt(2.));
// The bounding box is scaled by sqrt(2.) to ensure that the bounding box out.translate(c.x(), c.y());
// covers any possible rotations. return out;
return out.scaled(sqrt(2.));
} }
bool FillRectilinear::fill_surface_by_lines(const Surface *surface, const FillParams &params, float angleBase, float pattern_shift, Polylines &polylines_out) bool FillRectilinear::fill_surface_by_lines(const Surface *surface, const FillParams &params, float angleBase, float pattern_shift, Polylines &polylines_out)
@@ -3098,8 +3104,11 @@ bool FillRectilinear::fill_surface_trapezoidal(
const coord_t d2 = coord_t(0.5 * period - d1); const coord_t d2 = coord_t(0.5 * period - d1);
// Align bounding box to the grid // Align bounding box to the grid, phased through the box center so separated infills align
bb.merge(align_to_grid(bb.min, Point(period, period))); // each part on itself (grid_center is the origin for a standalone object / feature off).
// Captured before the merge, which grows bb and would otherwise shift its center.
const Point grid_center = bb.center();
bb.merge(align_to_grid(bb.min, Point(period, period), grid_center));
const coord_t xmin = bb.min.x(); const coord_t xmin = bb.min.x();
const coord_t xmax = bb.max.x(); const coord_t xmax = bb.max.x();
const coord_t ymin = bb.min.y(); const coord_t ymin = bb.min.y();
@@ -3146,11 +3155,17 @@ bool FillRectilinear::fill_surface_trapezoidal(
flip_vertical = !flip_vertical; flip_vertical = !flip_vertical;
} }
// transpose points for odd infill layers (taking infill combination into account) // transpose points for odd infill layers (taking infill combination into account).
// Orca: mirror across the diagonal through grid_center (not the origin), so the swapped
// layers stay aligned with the center-phased grid. For a standalone object / feature off,
// grid_center is the origin and this is a plain x/y swap.
if (infill_layer_id % 2 == 1) { if (infill_layer_id % 2 == 1) {
for (Polyline& pl : polylines) { for (Polyline& pl : polylines) {
for (Point& p : pl.points) { for (Point& p : pl.points) {
std::swap(p.x(), p.y()); const coord_t dx = p.x() - grid_center.x();
const coord_t dy = p.y() - grid_center.y();
p.x() = grid_center.x() + dy;
p.y() = grid_center.y() + dx;
} }
} }
} }
@@ -3341,6 +3356,14 @@ bool FillRectilinear::fill_surface_trapezoidal(
break; break;
} }
// Orca: cases 1 & 2 build the pattern symmetrically around the origin, so on their own they
// phase to the global origin and every part shares one grid. Shift the pattern onto the box
// center this->bounding_box carries, so separated infills align each part on itself. The center
// is the origin for a standalone object (or when the feature is off), making this a no-op there.
if (Pattern_type != 0)
for (Polyline &pl : polylines)
pl.translate(rotate_vector.second);
// Apply multiline fill // Apply multiline fill
multiline_fill(polylines, params, spacing); multiline_fill(polylines, params, spacing);
+2 -2
View File
@@ -5949,7 +5949,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result)
m_thumbnail_middle = iter->second; m_thumbnail_middle = iter->second;
} }
boost::system::error_code ec; boost::system::error_code ec;
std::string filename = std::string(store_params.path); std::string filename = store_params.path;
boost::filesystem::remove(filename + ".tmp", ec); boost::filesystem::remove(filename + ".tmp", ec);
bool result = _save_model_to_file(filename + ".tmp", *store_params.model, store_params.plate_data_list, store_params.project_presets, store_params.config, bool result = _save_model_to_file(filename + ".tmp", *store_params.model, store_params.plate_data_list, store_params.project_presets, store_params.config,
@@ -8988,7 +8988,7 @@ bool store_bbs_3mf(StoreParams& store_params)
// All export should use "C" locales for number formatting. // All export should use "C" locales for number formatting.
CNumericLocalesSetter locales_setter; CNumericLocalesSetter locales_setter;
if (store_params.path == nullptr || store_params.model == nullptr) if (store_params.path.empty() || store_params.model == nullptr)
return false; return false;
_BBS_3MF_Exporter exporter; _BBS_3MF_Exporter exporter;
+1 -1
View File
@@ -226,7 +226,7 @@ typedef std::map<int, PlateData*> PlateDataMaps;
struct StoreParams struct StoreParams
{ {
const char* path; std::string path;
Model* model = nullptr; Model* model = nullptr;
PlateDataPtrs plate_data_list; PlateDataPtrs plate_data_list;
int export_plate_idx = -1; int export_plate_idx = -1;
+2 -1
View File
@@ -6215,7 +6215,8 @@ std::string GCode::extrude_support(const ExtrusionEntityCollection &support_fill
static constexpr const char* support_transition_label = "support transition"; static constexpr const char* support_transition_label = "support transition";
static constexpr const char* support_ironing_label = "support ironing"; static constexpr const char* support_ironing_label = "support ironing";
static const auto speed_for_path = [&](double length, ExtrusionRole role, double default_speed = -1.0) { // Not static: it captures `this` by reference.
const auto speed_for_path = [&](double length, ExtrusionRole role, double default_speed = -1.0) {
if (!is_support(role) || length > SMALL_PERIMETER_LENGTH(NOZZLE_CONFIG(small_support_perimeter_threshold))) if (!is_support(role) || length > SMALL_PERIMETER_LENGTH(NOZZLE_CONFIG(small_support_perimeter_threshold)))
return default_speed; return default_speed;
@@ -0,0 +1,190 @@
#include "GCodeProcessor.hpp"
#include "libslic3r/libslic3r.h"
#include <algorithm>
#include <cctype>
#include <cmath>
#include <string_view>
namespace Slic3r {
namespace {
bool equals_case_insensitive(std::string_view lhs, std::string_view rhs)
{
return lhs.size() == rhs.size() && std::equal(lhs.begin(), lhs.end(), rhs.begin(), [](unsigned char l, unsigned char r) {
return std::tolower(l) == std::tolower(r);
});
}
float get_clamped_param(const GCodeReader::GCodeLine& line, char axis, float default_value, float min_value, float max_value)
{
float value = default_value;
line.has_value(axis, value);
return std::clamp(value, min_value, max_value);
}
float extrusion_time(float e_length, float feedrate)
{
return feedrate > 0.0f && e_length > 0.0f ? e_length / feedrate * 60.0f : 0.0f;
}
float retract_time(float e_length)
{
static constexpr float retract_feedrate = 1800.0f;
return extrusion_time(std::max(e_length, 0.0f), retract_feedrate);
}
float s819_time(float e_length, float feedrate)
{
static constexpr float s819_tail_flush_length = 10.0f;
static constexpr float s819_tail_feedrate = 400.0f;
const float tail_length = std::min(std::max(e_length, 0.0f), s819_tail_flush_length);
const float main_length = std::max(e_length - tail_length, 0.0f);
return extrusion_time(main_length, feedrate) + extrusion_time(tail_length, s819_tail_feedrate);
}
float estimate_M6211_time_for_centauri_carbon(const GCodeReader::GCodeLine& line, float length, double current_x,
double current_y)
{
static constexpr float max_segment_length = 73.0f;
static constexpr float wipe_after_flush_time = 2.8f;
static constexpr float main_feedrate = 500.0f;
static constexpr float tail_feedrate = 400.0f;
static constexpr float travel_feedrate = 5000.0f;
static constexpr double parking_x = 256.0;
static constexpr double parking_y = 0.0;
const float flush_length = std::clamp(length, 10.0f, 1000.0f);
const float cool_time = get_clamped_param(line, 'P', 5000.0f, 0.0f, 20000.0f) * 0.001f;
const float travel_time = static_cast<float>(std::abs(current_y - parking_y) + std::abs(current_x - parking_x)) /
travel_feedrate * 60.0f;
// Initial time, including: material change, heating, etc.
float m6211_time = 18.2f + travel_time;
float remaining_flush_length = std::max(flush_length, 0.0f);
while (remaining_flush_length > 0.0f) {
const float segment_length = std::min(remaining_flush_length, max_segment_length);
remaining_flush_length -= segment_length;
if (segment_length >= max_segment_length) {
// Full segment: 3-phase extrusion (30+35+10=75mm) + retract
m6211_time += extrusion_time(30.0f, main_feedrate) + extrusion_time(35.0f, main_feedrate) +
extrusion_time(10.0f, tail_feedrate) + extrusion_time(2.0f, tail_feedrate) + cool_time +
wipe_after_flush_time;
} else {
// Partial last segment: simple extrude at F500 + retract at F400
m6211_time += extrusion_time(segment_length, main_feedrate) + extrusion_time(2.0f, tail_feedrate) + cool_time +
wipe_after_flush_time;
}
}
return m6211_time;
}
float estimate_M6211_time_for_centauri_carbon_2(const GCodeReader::GCodeLine& line, float length, float new_extruder_temp)
{
const float flush_length = std::clamp(length, 10.0f, 1000.0f);
const float flush_length_single = get_clamped_param(line, 'K', 75.0f, 10.0f, 300.0f);
const float old_filament_e_feedrate = get_clamped_param(line, 'M', 300.0f, 10.0f, 600.0f);
const float new_filament_e_feedrate = get_clamped_param(line, 'N', 300.0f, 10.0f, 600.0f);
const float cool_time = get_clamped_param(line, 'P', 3000.0f, 0.0f, 20000.0f) * 0.001f;
// The flush length of the old material, unit: mm
static constexpr float e_flush_dist = 15.0f;
// Wipe time after flush, in seconds
static constexpr float wipe_after_flush_time = 5.0f;
const float flush_length_after_start = std::max(flush_length - e_flush_dist, 0.0f);
const int flush_times = std::max(1, static_cast<int>(std::ceil(flush_length_after_start / flush_length_single)));
const float flush_length_actual = flush_length_single;
// Initial time, including: material change, heating, moving, etc.
float m6211_time = 31.0f;
m6211_time += extrusion_time(std::min(e_flush_dist, flush_length), old_filament_e_feedrate);
const int intermediate_flush_times = flush_times - 1;
const float intermediate_flush_time = s819_time(flush_length_actual, new_filament_e_feedrate) + retract_time(6.0f) + cool_time +
wipe_after_flush_time;
m6211_time += static_cast<float>(intermediate_flush_times) * intermediate_flush_time;
m6211_time += s819_time(flush_length_actual, new_filament_e_feedrate * 0.8f) + retract_time(4.0f) + cool_time + wipe_after_flush_time;
static constexpr float cooling_rate = 1.36f;
const float r_temp = get_clamped_param(line, 'R', new_extruder_temp + 20.0f, 185.0f, 350.0f);
const float s_temp = get_clamped_param(line, 'S', 250.0f, 185.0f, 350.0f);
if (s_temp < r_temp)
m6211_time += (r_temp - s_temp) / cooling_rate;
return m6211_time;
}
float estimate_M6211_time(const GCodeReader::GCodeLine& line, std::string_view printer_model, float length, float new_extruder_temp, double current_x, double current_y)
{
if (equals_case_insensitive(printer_model, "Elegoo Centauri Carbon") || equals_case_insensitive(printer_model, "Elegoo Centauri")) {
return estimate_M6211_time_for_centauri_carbon(line, length, current_x, current_y);
} else if (equals_case_insensitive(printer_model, "Elegoo Centauri Carbon 2") ||
equals_case_insensitive(printer_model, "Elegoo Centauri 2")) {
return estimate_M6211_time_for_centauri_carbon_2(line, length, new_extruder_temp);
}
return 0.0f;
}
} // namespace
void GCodeProcessor::process_elegoo_M6211(const GCodeReader::GCodeLine& line)
{
float length = 0.0f;
if (!line.has_value('L', length) || length <= 0.0f)
return;
float t = -1.0f;
if (!line.has_value('T', t) || t < 0.0f)
return;
const int filament_id = static_cast<int>(std::round(t));
if (filament_id < 0 || filament_id >= m_result.filaments_count)
return;
const int extruder_id = m_filament_maps[filament_id];
float new_extruder_temp = 0.0f;
if (line.has_value('S', new_extruder_temp)) {
if (extruder_id >= 0 && static_cast<size_t>(extruder_id) < m_extruder_temps.size())
m_extruder_temps[static_cast<size_t>(extruder_id)] = new_extruder_temp;
}
const float m6211_time = estimate_M6211_time(line, m_printer_model, length, new_extruder_temp,
m_start_position[X], m_start_position[Y]);
const int curr_filament_id = get_filament_id(false);
const bool is_first_extrusion = (curr_filament_id == -1) || (filament_id == curr_filament_id);
m_time_processor.filament_unload_times = 0;
m_time_processor.filament_load_times = m6211_time;
process_filament_change(filament_id);
if (extruder_id >= 0 && static_cast<size_t>(extruder_id) < m_remaining_volume.size()) {
const float remaining_volume = static_cast<size_t>(extruder_id) < m_nozzle_volume.size() ?
m_nozzle_volume[extruder_id] :
0.0f;
const float filament_diameter = static_cast<size_t>(filament_id) < m_result.filament_diameters.size() ?
m_result.filament_diameters[filament_id] :
m_result.filament_diameters.back();
const float area_filament_cross_section = static_cast<float>(M_PI) * sqr(0.5f * filament_diameter);
const float volume_flushed_filament = area_filament_cross_section * length;
if (volume_flushed_filament >= remaining_volume) {
if (!is_first_extrusion)
m_used_filaments.update_flush_per_filament(curr_filament_id, remaining_volume);
m_used_filaments.update_flush_per_filament(filament_id, volume_flushed_filament - remaining_volume);
m_remaining_volume[extruder_id] = 0.0f;
} else {
m_used_filaments.update_flush_per_filament(filament_id, volume_flushed_filament);
m_remaining_volume[extruder_id] -= volume_flushed_filament;
}
}
}
} // namespace Slic3r
+13 -1
View File
@@ -1839,7 +1839,8 @@ void GCodeProcessor::register_commands()
{"VM104", [this](const GCodeReader::GCodeLine& line) { process_VM104(line); }}, {"VM104", [this](const GCodeReader::GCodeLine& line) { process_VM104(line); }},
{"VM109", [this](const GCodeReader::GCodeLine& line) { process_VM109(line); }}, {"VM109", [this](const GCodeReader::GCodeLine& line) { process_VM109(line); }},
{"M622", [this](const GCodeReader::GCodeLine& line) { process_M622(line);}}, {"M622", [this](const GCodeReader::GCodeLine& line) { process_M622(line);}},
{"M623", [this](const GCodeReader::GCodeLine& line) { process_M623(line);}} {"M623", [this](const GCodeReader::GCodeLine& line) { process_M623(line);}},
{"M6211", [this](const GCodeReader::GCodeLine& line) { process_M6211(line); }}
}; };
std::unordered_set<std::string>early_quit_commands = { std::unordered_set<std::string>early_quit_commands = {
@@ -1863,6 +1864,12 @@ void GCodeProcessor::register_commands()
} }
} }
void GCodeProcessor::process_M6211(const GCodeReader::GCodeLine& line)
{
if (boost::algorithm::istarts_with(m_printer_model, "elegoo"))
process_elegoo_M6211(line);
}
bool GCodeProcessor::check_multi_extruder_gcode_valid(const int extruder_size, bool GCodeProcessor::check_multi_extruder_gcode_valid(const int extruder_size,
const Pointfs plate_printable_area, const Pointfs plate_printable_area,
const double plate_printable_height, const double plate_printable_height,
@@ -2027,6 +2034,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config)
m_parser.apply_config(config); m_parser.apply_config(config);
m_flavor = config.gcode_flavor; m_flavor = config.gcode_flavor;
m_printer_model = config.printer_model.value;
m_single_extruder_multi_material = config.single_extruder_multi_material; m_single_extruder_multi_material = config.single_extruder_multi_material;
@@ -2213,6 +2221,10 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
if (printer_settings_id != nullptr) if (printer_settings_id != nullptr)
m_result.settings_ids.printer = printer_settings_id->value; m_result.settings_ids.printer = printer_settings_id->value;
const ConfigOptionString* printer_model = config.option<ConfigOptionString>("printer_model");
if (printer_model != nullptr)
m_printer_model = printer_model->value;
// BBS // BBS
m_result.filaments_count = config.option<ConfigOptionFloats>("filament_diameter")->values.size(); m_result.filaments_count = config.option<ConfigOptionFloats>("filament_diameter")->values.size();
+5
View File
@@ -846,6 +846,7 @@ class Print;
float m_preheat_time; float m_preheat_time;
int m_preheat_steps; int m_preheat_steps;
bool m_disable_m73; bool m_disable_m73;
std::string m_printer_model;
enum class EProducer enum class EProducer
{ {
@@ -1084,6 +1085,10 @@ class Print;
// Unload the current filament into the MK3 MMU2 unit at the end of print. // Unload the current filament into the MK3 MMU2 unit at the end of print.
void process_M702(const GCodeReader::GCodeLine& line); void process_M702(const GCodeReader::GCodeLine& line);
//Used for Elegoo printer to change tool head
void process_M6211(const GCodeReader::GCodeLine& line);
void process_elegoo_M6211(const GCodeReader::GCodeLine& line);
void process_SYNC(const GCodeReader::GCodeLine& line); void process_SYNC(const GCodeReader::GCodeLine& line);
// Processes T line (Select Tool) // Processes T line (Select Tool)
+62 -18
View File
@@ -138,7 +138,8 @@ static double calc_max_layer_height(const PrintConfig &config, double max_object
{ {
double max_layer_height = std::numeric_limits<double>::max(); double max_layer_height = std::numeric_limits<double>::max();
for (size_t i = 0; i < config.nozzle_diameter.values.size(); ++ i) { for (size_t i = 0; i < config.nozzle_diameter.values.size(); ++ i) {
double mlh = config.max_layer_height.values[i]; // max_layer_height may be shorter than the extruder count; get_at() clamps.
double mlh = config.max_layer_height.get_at(i);
if (mlh == 0.) if (mlh == 0.)
mlh = 0.75 * config.nozzle_diameter.values[i]; mlh = 0.75 * config.nozzle_diameter.values[i];
max_layer_height = std::min(max_layer_height, mlh); max_layer_height = std::min(max_layer_height, mlh);
@@ -187,6 +188,10 @@ static void apply_first_layer_order(const DynamicPrintConfig* config, std::vecto
void ToolOrdering::handle_dontcare_extruder(const std::vector<unsigned int>& tool_order_layer0) void ToolOrdering::handle_dontcare_extruder(const std::vector<unsigned int>& tool_order_layer0)
{ {
const PrintConfig* print_config = m_print_config_ptr;
if (!print_config && m_print_object_ptr)
print_config = &m_print_object_ptr->print()->config();
if(m_layer_tools.empty() || tool_order_layer0.empty()) if(m_layer_tools.empty() || tool_order_layer0.empty())
return; return;
@@ -221,6 +226,8 @@ void ToolOrdering::handle_dontcare_extruder(const std::vector<unsigned int>& too
for (int i = 1; i < m_layer_tools.size(); i++) { for (int i = 1; i < m_layer_tools.size(); i++) {
LayerTools& lt = m_layer_tools[i]; LayerTools& lt = m_layer_tools[i];
// Extruders in lt.extruders are already sorted.
if (lt.extruders.empty()) if (lt.extruders.empty())
continue; continue;
if (lt.extruders.size() == 1 && lt.extruders.front() == 0) if (lt.extruders.size() == 1 && lt.extruders.front() == 0)
@@ -229,14 +236,23 @@ void ToolOrdering::handle_dontcare_extruder(const std::vector<unsigned int>& too
if (lt.extruders.front() == 0) if (lt.extruders.front() == 0)
// Pop the "don't care" extruder, the "don't care" region will be merged with the next one. // Pop the "don't care" extruder, the "don't care" region will be merged with the next one.
lt.extruders.erase(lt.extruders.begin()); lt.extruders.erase(lt.extruders.begin());
// Reorder the extruders to start with the last one.
for (size_t i = 1; i < lt.extruders.size(); ++i) if (print_config == nullptr
if (lt.extruders[i] == last_extruder_id) { || print_config->toolchange_ordering == ToolChangeOrderingType::Default)
// Move the last extruder to the front. {
memmove(lt.extruders.data() + 1, lt.extruders.data(), i * sizeof(unsigned int)); // Reorder the extruders to start with the last one.
lt.extruders.front() = last_extruder_id; for (size_t i = 1; i < lt.extruders.size(); ++i) {
break; if (lt.extruders[i] == last_extruder_id) {
// Move the last extruder to the front.
std::rotate(
lt.extruders.begin(),
lt.extruders.begin() + i,
lt.extruders.begin() + i + 1
);
break;
}
} }
}
} }
last_extruder_id = lt.extruders.back(); last_extruder_id = lt.extruders.back();
} }
@@ -252,6 +268,10 @@ void ToolOrdering::handle_dontcare_extruder(const std::vector<unsigned int>& too
void ToolOrdering::handle_dontcare_extruder(unsigned int last_extruder_id) void ToolOrdering::handle_dontcare_extruder(unsigned int last_extruder_id)
{ {
const PrintConfig* print_config = m_print_config_ptr;
if (!print_config && m_print_object_ptr)
print_config = &m_print_object_ptr->print()->config();
if(m_layer_tools.empty()) if(m_layer_tools.empty())
return; return;
if(last_extruder_id == (unsigned int)-1){ if(last_extruder_id == (unsigned int)-1){
@@ -275,6 +295,8 @@ void ToolOrdering::handle_dontcare_extruder(unsigned int last_extruder_id)
} }
for (LayerTools &lt : m_layer_tools) { for (LayerTools &lt : m_layer_tools) {
// Extruders in lt.extruders are already sorted.
if (lt.extruders.empty()) if (lt.extruders.empty())
continue; continue;
if (lt.extruders.size() == 1 && lt.extruders.front() == 0) if (lt.extruders.size() == 1 && lt.extruders.front() == 0)
@@ -283,21 +305,30 @@ void ToolOrdering::handle_dontcare_extruder(unsigned int last_extruder_id)
if (lt.extruders.front() == 0) if (lt.extruders.front() == 0)
// Pop the "don't care" extruder, the "don't care" region will be merged with the next one. // Pop the "don't care" extruder, the "don't care" region will be merged with the next one.
lt.extruders.erase(lt.extruders.begin()); lt.extruders.erase(lt.extruders.begin());
// Reorder the extruders to start with the last one.
for (size_t i = 1; i < lt.extruders.size(); ++ i) if (print_config == nullptr
if (lt.extruders[i] == last_extruder_id) { || print_config->toolchange_ordering == ToolChangeOrderingType::Default)
// Move the last extruder to the front. {
memmove(lt.extruders.data() + 1, lt.extruders.data(), i * sizeof(unsigned int)); // Reorder the extruders to start with the last one.
lt.extruders.front() = last_extruder_id; for (size_t i = 1; i < lt.extruders.size(); ++i) {
break; if (lt.extruders[i] == last_extruder_id) {
// Move the last extruder to the front.
std::rotate(
lt.extruders.begin(),
lt.extruders.begin() + i,
lt.extruders.begin() + i + 1
);
break;
}
} }
}
if (lt == m_layer_tools[0]) { if (lt == m_layer_tools[0]) {
// On first layer with wipe tower, prefer a soluble extruder // On first layer with wipe tower, prefer a soluble extruder
// at the beginning, so it is not wiped on the first layer. // at the beginning, so it is not wiped on the first layer.
if (m_print_config_ptr && m_print_config_ptr->enable_prime_tower) { if (print_config && print_config->enable_prime_tower) {
for (size_t i = 0; i<lt.extruders.size(); ++i) for (size_t i = 0; i<lt.extruders.size(); ++i)
if (m_print_config_ptr->filament_soluble.get_at(lt.extruders[i]-1)) { // 1-based... if (print_config->filament_soluble.get_at(lt.extruders[i]-1)) { // 1-based...
std::swap(lt.extruders[i], lt.extruders.front()); std::swap(lt.extruders[i], lt.extruders.front());
break; break;
} }
@@ -396,6 +427,7 @@ void ToolOrdering::sort_and_build_data(const PrintObject& object , unsigned int
ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material) ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material)
{ {
m_print_full_config = &object.print()->full_print_config(); m_print_full_config = &object.print()->full_print_config();
m_print_config_ptr = &object.print()->config();
m_print_object_ptr = &object; m_print_object_ptr = &object;
m_print = const_cast<Print*>(object.print()); m_print = const_cast<Print*>(object.print());
if (object.layers().empty()) if (object.layers().empty())
@@ -1329,8 +1361,11 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first
if (!m_layer_tools.empty()) if (!m_layer_tools.empty())
first_layer_filaments = m_layer_tools[0].extruders; first_layer_filaments = m_layer_tools[0].extruders;
const bool use_cyclic_ordering =
(print_config->toolchange_ordering == ToolChangeOrderingType::Cyclic);
// other_layers_seq: the layer_idx and extruder_idx are base on 1 // other_layers_seq: the layer_idx and extruder_idx are base on 1
auto get_custom_seq = [&other_layers_seqs, &reorder_first_layer, &first_layer_filaments](int layer_idx, std::vector<int>& out_seq) -> bool { auto get_custom_seq = [&other_layers_seqs, &reorder_first_layer, &first_layer_filaments, &layer_filaments, use_cyclic_ordering](int layer_idx, std::vector<int>& out_seq) -> bool {
if (!reorder_first_layer && layer_idx == 0) { if (!reorder_first_layer && layer_idx == 0) {
out_seq.resize(first_layer_filaments.size()); out_seq.resize(first_layer_filaments.size());
std::transform(first_layer_filaments.begin(), first_layer_filaments.end(), out_seq.begin(), [](auto item) {return item + 1; }); std::transform(first_layer_filaments.begin(), first_layer_filaments.end(), out_seq.begin(), [](auto item) {return item + 1; });
@@ -1343,6 +1378,15 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first
return true; return true;
} }
} }
if (use_cyclic_ordering && layer_idx >= 0 && size_t(layer_idx) < layer_filaments.size()) {
std::vector<unsigned int> ordered = layer_filaments[size_t(layer_idx)];
std::sort(ordered.begin(), ordered.end());
out_seq.resize(ordered.size());
std::transform(ordered.begin(), ordered.end(), out_seq.begin(), [](auto item) { return int(item) + 1; });
return true;
}
return false; return false;
}; };
+13 -10
View File
@@ -110,6 +110,7 @@ void GCodeWriter::set_extruders(std::vector<unsigned int> extruder_ids)
m_filament_extruders.clear(); m_filament_extruders.clear();
//ORCA: Reset current extruder ID and clear pointers to prevent dangling pointers when extruders are recreated. //ORCA: Reset current extruder ID and clear pointers to prevent dangling pointers when extruders are recreated.
m_curr_extruder_id = -1; m_curr_extruder_id = -1;
m_cached_extruder_idx = 0;
std::fill(m_curr_filament_extruder.begin(), m_curr_filament_extruder.end(), nullptr); std::fill(m_curr_filament_extruder.begin(), m_curr_filament_extruder.end(), nullptr);
m_filament_extruders.reserve(extruder_ids.size()); m_filament_extruders.reserve(extruder_ids.size());
for (unsigned int extruder_id : extruder_ids) for (unsigned int extruder_id : extruder_ids)
@@ -617,6 +618,7 @@ std::string GCodeWriter::toolchange(unsigned int filament_id)
assert(filament_extruder_iter != m_filament_extruders.end() && filament_extruder_iter->id() == filament_id); assert(filament_extruder_iter != m_filament_extruders.end() && filament_extruder_iter->id() == filament_id);
m_curr_extruder_id = filament_extruder_iter->extruder_id(); m_curr_extruder_id = filament_extruder_iter->extruder_id();
m_curr_filament_extruder[m_curr_extruder_id] = &*filament_extruder_iter; m_curr_filament_extruder[m_curr_extruder_id] = &*filament_extruder_iter;
m_cached_extruder_idx = get_extruder_index(this->config, filament_id);
// return the toolchange command // return the toolchange command
// if we are running a single-extruder setup, just set the extruder and return nothing // if we are running a single-extruder setup, just set the extruder and return nothing
@@ -658,7 +660,7 @@ std::string GCodeWriter::travel_to_xy(const Vec2d &point, const std::string &com
GCodeG1Formatter w; GCodeG1Formatter w;
w.emit_xy(point_on_plate); w.emit_xy(point_on_plate);
auto speed = m_is_first_layer auto speed = m_is_first_layer
? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) : this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx) : this->config.travel_speed.get_at(m_cached_extruder_idx);
w.emit_f(speed * 60.0); w.emit_f(speed * 60.0);
//BBS //BBS
w.emit_comment(GCodeWriter::full_gcode_comment, comment); w.emit_comment(GCodeWriter::full_gcode_comment, comment);
@@ -744,7 +746,7 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co
// BBS // BBS
Vec3d dest_point = point; Vec3d dest_point = point;
auto travel_speed = auto travel_speed =
m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) : this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx) : this->config.travel_speed.get_at(m_cached_extruder_idx);
//BBS: a z_hop need to be handle when travel //BBS: a z_hop need to be handle when travel
if (std::abs(m_to_lift) > EPSILON) { if (std::abs(m_to_lift) > EPSILON) {
assert(std::abs(m_lifted) < EPSILON); assert(std::abs(m_lifted) < EPSILON);
@@ -841,13 +843,13 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co
{ {
//force to move xy first then z after filament change //force to move xy first then z after filament change
w.emit_xy(Vec2d(point_on_plate.x(), point_on_plate.y())); w.emit_xy(Vec2d(point_on_plate.x(), point_on_plate.y()));
w.emit_f(this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())) * 60.0); w.emit_f(this->config.travel_speed.get_at(m_cached_extruder_idx) * 60.0);
w.emit_comment(GCodeWriter::full_gcode_comment, comment); w.emit_comment(GCodeWriter::full_gcode_comment, comment);
out_string = w.string() + _travel_to_z(point_on_plate.z(), comment); out_string = w.string() + _travel_to_z(point_on_plate.z(), comment);
} else { } else {
GCodeG1Formatter w; GCodeG1Formatter w;
w.emit_xyz(point_on_plate); w.emit_xyz(point_on_plate);
w.emit_f(this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())) * 60.0); w.emit_f(this->config.travel_speed.get_at(m_cached_extruder_idx) * 60.0);
w.emit_comment(GCodeWriter::full_gcode_comment, comment); w.emit_comment(GCodeWriter::full_gcode_comment, comment);
out_string = w.string(); out_string = w.string();
} }
@@ -880,10 +882,10 @@ std::string GCodeWriter::_travel_to_z(double z, const std::string &comment)
{ {
m_pos(2) = z; m_pos(2) = z;
double speed = this->config.travel_speed_z.get_at(get_extruder_index(this->config, filament()->id())); double speed = this->config.travel_speed_z.get_at(m_cached_extruder_idx);
if (speed == 0.) { if (speed == 0.) {
speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx)
: this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); : this->config.travel_speed.get_at(m_cached_extruder_idx);
} }
GCodeG1Formatter w; GCodeG1Formatter w;
@@ -897,11 +899,11 @@ std::string GCodeWriter::_travel_to_z(double z, const std::string &comment)
std::string GCodeWriter::_spiral_travel_to_z(double z, const Vec2d &ij_offset, const std::string &comment) std::string GCodeWriter::_spiral_travel_to_z(double z, const Vec2d &ij_offset, const std::string &comment)
{ {
std::string output; std::string output;
double speed = this->config.travel_speed_z.get_at(get_extruder_index(this->config, filament()->id())); double speed = this->config.travel_speed_z.get_at(m_cached_extruder_idx);
if (speed == 0.) { if (speed == 0.) {
speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", get_extruder_index(this->config, filament()->id())) speed = m_is_first_layer ? this->config.get_abs_value_at("initial_layer_travel_speed", m_cached_extruder_idx)
: this->config.travel_speed.get_at(get_extruder_index(this->config, filament()->id())); : this->config.travel_speed.get_at(m_cached_extruder_idx);
} }
if (!this->config.enable_arc_fitting) { // Orca: if arc fitting is disabled, approximate the arc with small linear segments if (!this->config.enable_arc_fitting) { // Orca: if arc fitting is disabled, approximate the arc with small linear segments
@@ -1261,6 +1263,7 @@ void GCodeWriter::init_extruder(unsigned int filament_id)
assert(filament_extruder_iter != m_filament_extruders.end() && filament_extruder_iter->id() == filament_id); assert(filament_extruder_iter != m_filament_extruders.end() && filament_extruder_iter->id() == filament_id);
m_curr_extruder_id = filament_extruder_iter->extruder_id(); m_curr_extruder_id = filament_extruder_iter->extruder_id();
m_curr_filament_extruder[m_curr_extruder_id] = &*filament_extruder_iter; m_curr_filament_extruder[m_curr_extruder_id] = &*filament_extruder_iter;
m_cached_extruder_idx = get_extruder_index(this->config, filament_id);
} }
} }
+3
View File
@@ -19,6 +19,7 @@ public:
GCodeWriter() : GCodeWriter() :
multiple_extruders(false), m_curr_filament_extruder(MAXIMUM_EXTRUDER_NUMBER, nullptr), multiple_extruders(false), m_curr_filament_extruder(MAXIMUM_EXTRUDER_NUMBER, nullptr),
m_curr_extruder_id (-1), m_curr_extruder_id (-1),
m_cached_extruder_idx(0),
m_single_extruder_multi_material(false), m_single_extruder_multi_material(false),
m_last_acceleration(0), m_max_acceleration(0),m_last_travel_acceleration(0), m_max_travel_acceleration(0), m_last_acceleration(0), m_max_acceleration(0),m_last_travel_acceleration(0), m_max_travel_acceleration(0),
m_last_jerk(0), m_max_jerk_x(0), m_max_jerk_y(0), m_last_jerk(0), m_max_jerk_x(0), m_max_jerk_y(0),
@@ -135,6 +136,8 @@ public:
bool m_single_extruder_multi_material; bool m_single_extruder_multi_material;
std::vector<Extruder*> m_curr_filament_extruder; std::vector<Extruder*> m_curr_filament_extruder;
int m_curr_extruder_id; int m_curr_extruder_id;
// Motion uses the global/base process variant until a filament becomes active.
size_t m_cached_extruder_idx;
unsigned int m_last_acceleration; unsigned int m_last_acceleration;
unsigned int m_last_travel_acceleration; unsigned int m_last_travel_acceleration;
std::vector<unsigned int> m_max_travel_acceleration; std::vector<unsigned int> m_max_travel_acceleration;
+4
View File
@@ -157,6 +157,10 @@ public:
ExPolygons lslices; ExPolygons lslices;
ExPolygons lslices_extrudable; // BBS: the extrudable part of lslices used for tree support ExPolygons lslices_extrudable; // BBS: the extrudable part of lslices used for tree support
std::vector<BoundingBox> lslices_bboxes; std::vector<BoundingBox> lslices_bboxes;
// Orca: for separated infills / per-model centering. Aligned with lslices: for each island, the
// full bounding box of the 3D connected body (across all layers) it belongs to. Populated by
// PrintObject::infill() only when the feature is used; empty otherwise.
std::vector<BoundingBox> lslices_separated_component_bboxes;
// BBS // BBS
ExPolygons loverhangs; ExPolygons loverhangs;
+17 -10
View File
@@ -920,6 +920,13 @@ public:
// Extruder ID is only valid for FFF. Returns -1 for SLA or if the extruder ID is not applicable (support volumes). // Extruder ID is only valid for FFF. Returns -1 for SLA or if the extruder ID is not applicable (support volumes).
int extruder_id() const; int extruder_id() const;
//Orca: cache clearing procedure to ensure that the shape is positioned accurately when manipulating it
void clear_cache() {
m_cached_trans_matrix = Transform3d::Identity().inverse(); // get unvelivable matrix
m_convex_hull_2d.clear();
m_cached_2d_polygon.clear();
};
bool is_splittable() const; bool is_splittable() const;
// BBS // BBS
@@ -966,34 +973,34 @@ public:
static std::string type_to_string(const ModelVolumeType t); static std::string type_to_string(const ModelVolumeType t);
const Geometry::Transformation& get_transformation() const { return m_transformation; } const Geometry::Transformation& get_transformation() const { return m_transformation; }
void set_transformation(const Geometry::Transformation& transformation) { m_transformation = transformation; } void set_transformation(const Geometry::Transformation& transformation) { clear_cache(); m_transformation = transformation; }
void set_transformation(const Transform3d& trafo) { m_transformation.set_matrix(trafo); } void set_transformation(const Transform3d& trafo) { clear_cache(); m_transformation.set_matrix(trafo); }
Vec3d get_offset() const { return m_transformation.get_offset(); } Vec3d get_offset() const { return m_transformation.get_offset(); }
double get_offset(Axis axis) const { return m_transformation.get_offset(axis); } double get_offset(Axis axis) const { return m_transformation.get_offset(axis); }
void set_offset(const Vec3d& offset) { m_transformation.set_offset(offset); } void set_offset(const Vec3d& offset) { clear_cache(); m_transformation.set_offset(offset); }
void set_offset(Axis axis, double offset) { m_transformation.set_offset(axis, offset); } void set_offset(Axis axis, double offset) { clear_cache(); m_transformation.set_offset(axis, offset); }
Vec3d get_rotation() const { return m_transformation.get_rotation(); } Vec3d get_rotation() const { return m_transformation.get_rotation(); }
double get_rotation(Axis axis) const { return m_transformation.get_rotation(axis); } double get_rotation(Axis axis) const { return m_transformation.get_rotation(axis); }
void set_rotation(const Vec3d& rotation) { m_transformation.set_rotation(rotation); } void set_rotation(const Vec3d& rotation) { clear_cache(); m_transformation.set_rotation(rotation); }
void set_rotation(Axis axis, double rotation) { m_transformation.set_rotation(axis, rotation); } void set_rotation(Axis axis, double rotation) { clear_cache(); m_transformation.set_rotation(axis, rotation); }
Vec3d get_scaling_factor() const { return m_transformation.get_scaling_factor(); } Vec3d get_scaling_factor() const { return m_transformation.get_scaling_factor(); }
double get_scaling_factor(Axis axis) const { return m_transformation.get_scaling_factor(axis); } double get_scaling_factor(Axis axis) const { return m_transformation.get_scaling_factor(axis); }
void set_scaling_factor(const Vec3d& scaling_factor) { m_transformation.set_scaling_factor(scaling_factor); } void set_scaling_factor(const Vec3d& scaling_factor) { clear_cache(); m_transformation.set_scaling_factor(scaling_factor); }
void set_scaling_factor(Axis axis, double scaling_factor) { m_transformation.set_scaling_factor(axis, scaling_factor); } void set_scaling_factor(Axis axis, double scaling_factor) {clear_cache(); m_transformation.set_scaling_factor(axis, scaling_factor); }
Vec3d get_mirror() const { return m_transformation.get_mirror(); } Vec3d get_mirror() const { return m_transformation.get_mirror(); }
double get_mirror(Axis axis) const { return m_transformation.get_mirror(axis); } double get_mirror(Axis axis) const { return m_transformation.get_mirror(axis); }
bool is_left_handed() const { return m_transformation.is_left_handed(); } bool is_left_handed() const { return m_transformation.is_left_handed(); }
void set_mirror(const Vec3d& mirror) { m_transformation.set_mirror(mirror); } void set_mirror(const Vec3d& mirror) { clear_cache(); m_transformation.set_mirror(mirror); }
void set_mirror(Axis axis, double mirror) { m_transformation.set_mirror(axis, mirror); } void set_mirror(Axis axis, double mirror) { clear_cache(); m_transformation.set_mirror(axis, mirror); }
void convert_from_imperial_units(); void convert_from_imperial_units();
void convert_from_meters(); void convert_from_meters();
+16
View File
@@ -571,6 +571,19 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p
return extrusion_coll; return extrusion_coll;
} }
// ORCA: only_one_wall_top detects the top as "slice − upper", so a feature rising from the middle of a
// top surface becomes an enclosed hole that gets ringed with extra inner walls. Fill those holes back
// into the top. Only holes that are both covered by the upper layer (excludes bridges) and backed by
// solid material (excludes voids) are filled.
static ExPolygons fill_enclosed_top_feature_holes(const ExPolygons &top, const Polygons &covered_by_upper, const ExPolygons &solid)
{
ExPolygons filled = top;
for (ExPolygon &ex : filled)
ex.holes.clear();
const ExPolygons feature_holes = intersection_ex(intersection_ex(diff_ex(filled, top), covered_by_upper), solid);
return feature_holes.empty() ? top : union_ex(top, feature_holes);
}
void PerimeterGenerator::split_top_surfaces(const ExPolygons &orig_polygons, ExPolygons &top_fills, void PerimeterGenerator::split_top_surfaces(const ExPolygons &orig_polygons, ExPolygons &top_fills,
ExPolygons &non_top_polygons, ExPolygons &fill_clip) const { ExPolygons &non_top_polygons, ExPolygons &fill_clip) const {
// other perimeters // other perimeters
@@ -636,6 +649,8 @@ void PerimeterGenerator::split_top_surfaces(const ExPolygons &orig_polygons, ExP
ExPolygons delete_bridge = diff_ex(orig_polygons, bridge_checker, ApplySafetyOffset::Yes); ExPolygons delete_bridge = diff_ex(orig_polygons, bridge_checker, ApplySafetyOffset::Yes);
ExPolygons top_polygons = diff_ex(delete_bridge, upper_polygons_series_clipped, ApplySafetyOffset::Yes); ExPolygons top_polygons = diff_ex(delete_bridge, upper_polygons_series_clipped, ApplySafetyOffset::Yes);
top_polygons = fill_enclosed_top_feature_holes(top_polygons, upper_polygons_series_clipped, orig_polygons);
// get the not-top surface, from the "real top" but enlarged by external_infill_margin (and the // get the not-top surface, from the "real top" but enlarged by external_infill_margin (and the
// min_width_top_surface we removed a bit before) // min_width_top_surface we removed a bit before)
ExPolygons temp_gap = diff_ex(top_polygons, fill_clip); ExPolygons temp_gap = diff_ex(top_polygons, fill_clip);
@@ -2194,6 +2209,7 @@ void PerimeterGenerator::process_arachne()
upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, infill_contour_bbox); upper_slices_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*upper_slices, infill_contour_bbox);
top_expolygons = diff_ex(infill_contour, upper_slices_clipped); top_expolygons = diff_ex(infill_contour, upper_slices_clipped);
top_expolygons = fill_enclosed_top_feature_holes(top_expolygons, upper_slices_clipped, infill_contour);
if (!top_expolygons.empty()) { if (!top_expolygons.empty()) {
if (lower_slices != nullptr) { if (lower_slices != nullptr) {
+23
View File
@@ -712,6 +712,26 @@ namespace client
static void regex_matches (expr &lhs, IteratorRange &rhs) { return regex_op(lhs, rhs, '=', lhs); } static void regex_matches (expr &lhs, IteratorRange &rhs) { return regex_op(lhs, rhs, '=', lhs); }
static void regex_doesnt_match(expr &lhs, IteratorRange &rhs) { return regex_op(lhs, rhs, '!', lhs); } static void regex_doesnt_match(expr &lhs, IteratorRange &rhs) { return regex_op(lhs, rhs, '!', lhs); }
// Replace every match of the regular expression 'pattern' in the string 'subject' with 'replacement'.
// The replacement may reference capture groups ($1, $2, ...). Store the result into subject.
static void regex_replace(expr &subject, IteratorRange &pattern, expr &replacement)
{
if (subject.type() == TYPE_EMPTY)
// Inside an if / else block to be skipped
return;
if (subject.type() != TYPE_STRING)
subject.throw_exception("regex_replace() first parameter must be a string.");
try {
std::string re(++ pattern.begin(), -- pattern.end());
std::string result = SLIC3R_REGEX_NAMESPACE::regex_replace(subject.s(), SLIC3R_REGEX_NAMESPACE::regex(re), replacement.to_string());
subject.set_s(std::move(result));
} catch (SLIC3R_REGEX_NAMESPACE::regex_error &ex) {
// Syntax error in the regular expression
boost::throw_exception(qi::expectation_failure<Iterator>(
pattern.begin(), pattern.end(), spirit::info(std::string("*Regular expression compilation failed: ") + ex.what())));
}
}
static void one_of_test_init(expr &out) { static void one_of_test_init(expr &out) {
out.set_b(false); out.set_b(false);
} }
@@ -2323,6 +2343,8 @@ namespace client
[ px::bind(&expr::digits<false>, _val, _2, _3) ] [ px::bind(&expr::digits<false>, _val, _2, _3) ]
| (kw["zdigits"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > conditional_expression(_r1) > optional_parameter(_r1)) | (kw["zdigits"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > conditional_expression(_r1) > optional_parameter(_r1))
[ px::bind(&expr::digits<true>, _val, _2, _3) ] [ px::bind(&expr::digits<true>, _val, _2, _3) ]
| (kw["regex_replace"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > regular_expression > ',' > conditional_expression(_r1) > ')')
[ px::bind(&expr::regex_replace, _val, _2, _3) ]
| (kw["int"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::to_int, _1, _val) ] | (kw["int"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::to_int, _1, _val) ]
| (kw["round"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::round, _1, _val) ] | (kw["round"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::round, _1, _val) ]
| (kw["ceil"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::ceil, _1, _val) ] | (kw["ceil"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::ceil, _1, _val) ]
@@ -2404,6 +2426,7 @@ namespace client
("min") ("min")
("max") ("max")
("random") ("random")
("regex_replace")
("filament_change") ("filament_change")
("repeat") ("repeat")
("round") ("round")
+15 -10
View File
@@ -892,12 +892,11 @@ std::string Preset::get_printer_type(PresetBundle *preset_bundle)
{ {
if (preset_bundle) { if (preset_bundle) {
auto config = &preset_bundle->printers.get_edited_preset().config; auto config = &preset_bundle->printers.get_edited_preset().config;
std::string vendor_name; const auto& printer_model = config->opt_string("printer_model");
for (auto vendor_profile : preset_bundle->vendors) { for (const auto& vendor_profile : preset_bundle->vendors) {
for (auto vendor_model : vendor_profile.second.models) for (const auto& vendor_model : vendor_profile.second.models)
if (vendor_model.name == config->opt_string("printer_model")) if (vendor_model.name == printer_model)
{ {
vendor_name = vendor_profile.first;
return vendor_model.model_id; return vendor_model.model_id;
} }
} }
@@ -909,11 +908,10 @@ std::string Preset::get_current_printer_type(PresetBundle *preset_bundle)
{ {
if (preset_bundle) { if (preset_bundle) {
auto config = &(this->config); auto config = &(this->config);
std::string vendor_name; const auto& printer_model = config->opt_string("printer_model");
for (auto vendor_profile : preset_bundle->vendors) { for (const auto& vendor_profile : preset_bundle->vendors) {
for (auto vendor_model : vendor_profile.second.models) for (const auto& vendor_model : vendor_profile.second.models)
if (vendor_model.name == config->opt_string("printer_model")) { if (vendor_model.name == printer_model) {
vendor_name = vendor_profile.first;
return vendor_model.model_id; return vendor_model.model_id;
} }
} }
@@ -1046,6 +1044,9 @@ static std::vector<std::string> s_Preset_print_options{
"lightning_prune_angle", "lightning_prune_angle",
"lightning_straightening_angle", "lightning_straightening_angle",
"top_surface_pattern", "top_surface_pattern",
"top_surface_expansion",
"top_surface_expansion_margin",
"top_surface_expansion_direction",
"bottom_surface_pattern", "bottom_surface_pattern",
"infill_direction", "infill_direction",
"solid_infill_direction", "solid_infill_direction",
@@ -1062,6 +1063,9 @@ static std::vector<std::string> s_Preset_print_options{
"skin_infill_density", "skin_infill_density",
"align_infill_direction_to_model", "align_infill_direction_to_model",
"extra_solid_infills", "extra_solid_infills",
"anisotropic_surfaces",
"center_of_surface_pattern",
"separated_infills",
"minimum_sparse_infill_area", "minimum_sparse_infill_area",
"reduce_infill_retraction", "reduce_infill_retraction",
"internal_solid_infill_pattern", "internal_solid_infill_pattern",
@@ -1274,6 +1278,7 @@ static std::vector<std::string> s_Preset_print_options{
"wipe_tower_bridging", "wipe_tower_bridging",
"wipe_tower_extra_flow", "wipe_tower_extra_flow",
"single_extruder_multi_material_priming", "single_extruder_multi_material_priming",
"toolchange_ordering",
"wipe_tower_rotation_angle", "wipe_tower_rotation_angle",
"tree_support_branch_distance_organic", "tree_support_branch_distance_organic",
"tree_support_branch_diameter_organic", "tree_support_branch_diameter_organic",
+4
View File
@@ -209,6 +209,9 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
"chamber_minimal_temperature", "chamber_minimal_temperature",
"thumbnails", "thumbnails",
"thumbnails_format", "thumbnails_format",
"anisotropic_surfaces",
"center_of_surface_pattern",
"separated_infills",
"seam_gap", "seam_gap",
"role_based_wipe_speed", "role_based_wipe_speed",
"wipe_speed", "wipe_speed",
@@ -330,6 +333,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
|| opt_key == "first_layer_print_sequence" || opt_key == "first_layer_print_sequence"
|| opt_key == "other_layers_print_sequence" || opt_key == "other_layers_print_sequence"
|| opt_key == "other_layers_print_sequence_nums" || opt_key == "other_layers_print_sequence_nums"
|| opt_key == "toolchange_ordering"
|| opt_key == "extruder_ams_count" || opt_key == "extruder_ams_count"
|| opt_key == "filament_map_mode" || opt_key == "filament_map_mode"
|| opt_key == "filament_map" || opt_key == "filament_map"
+2 -2
View File
@@ -418,7 +418,7 @@ public:
// (layer height, first layer height, raft settings, print nozzle diameter etc). // (layer height, first layer height, raft settings, print nozzle diameter etc).
const SlicingParameters& slicing_parameters() const { return m_slicing_params; } const SlicingParameters& slicing_parameters() const { return m_slicing_params; }
// Orca: XYZ shrinkage compensation has introduced the const Vec3d &object_shrinkage_compensation parameter to the function below // Orca: XYZ shrinkage compensation has introduced the const Vec3d &object_shrinkage_compensation parameter to the function below
static SlicingParameters slicing_parameters(const DynamicPrintConfig &full_config, const ModelObject &model_object, float object_max_z, const Vec3d &object_shrinkage_compensation); static SlicingParameters slicing_parameters(const DynamicPrintConfig &full_config, const ModelObject &model_object, float object_max_z, const Vec3d &object_shrinkage_compensation, std::vector<int> variant_index = std::vector<int>());
size_t num_printing_regions() const throw() { return m_shared_regions->all_regions.size(); } size_t num_printing_regions() const throw() { return m_shared_regions->all_regions.size(); }
const PrintRegion& printing_region(size_t idx) const throw() { return *m_shared_regions->all_regions[idx].get(); } const PrintRegion& printing_region(size_t idx) const throw() { return *m_shared_regions->all_regions[idx].get(); }
@@ -489,7 +489,7 @@ public:
// If ! m_slicing_params.valid, recalculate. // If ! m_slicing_params.valid, recalculate.
void update_slicing_parameters(); void update_slicing_parameters();
static PrintObjectConfig object_config_from_model_object(const PrintObjectConfig &default_object_config, const ModelObject &object, size_t num_extruders); static PrintObjectConfig object_config_from_model_object(const PrintObjectConfig &default_object_config, const ModelObject &object, size_t num_extruders, std::vector<int>& variant_index);
private: private:
void make_perimeters(); void make_perimeters();
+17 -12
View File
@@ -724,7 +724,7 @@ PrintObjectRegions::BoundingBox find_modifier_volume_extents(const PrintObjectRe
return out; return out;
} }
PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &default_or_parent_region_config, const DynamicPrintConfig *layer_range_config, const ModelVolume &volume, size_t num_extruders); PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &default_or_parent_region_config, const DynamicPrintConfig *layer_range_config, const ModelVolume &volume, size_t num_extruders, std::vector<int>& variant_index);
void print_region_ref_inc(PrintRegion &r) { ++ r.m_ref_cnt; } void print_region_ref_inc(PrintRegion &r) { ++ r.m_ref_cnt; }
void print_region_ref_reset(PrintRegion &r) { r.m_ref_cnt = 0; } void print_region_ref_reset(PrintRegion &r) { r.m_ref_cnt = 0; }
@@ -738,7 +738,8 @@ bool verify_update_print_object_regions(
const PrintRegionConfig &default_region_config, const PrintRegionConfig &default_region_config,
size_t num_extruders, size_t num_extruders,
PrintObjectRegions &print_object_regions, PrintObjectRegions &print_object_regions,
const std::function<void(const PrintRegionConfig&, const PrintRegionConfig&, const t_config_option_keys&)> &callback_invalidate) const std::function<void(const PrintRegionConfig&, const PrintRegionConfig&, const t_config_option_keys&)> &callback_invalidate,
std::vector<int>& variant_index)
{ {
// Sort by ModelVolume ID. // Sort by ModelVolume ID.
model_volumes_sort_by_id(model_volumes); model_volumes_sort_by_id(model_volumes);
@@ -783,7 +784,7 @@ bool verify_update_print_object_regions(
} else if (PrintObjectRegions::BoundingBox parent_bbox = find_modifier_volume_extents(layer_range, parent_region_id); parent_bbox.intersects(*bbox)) } else if (PrintObjectRegions::BoundingBox parent_bbox = find_modifier_volume_extents(layer_range, parent_region_id); parent_bbox.intersects(*bbox))
// Such parent region does not exist. If it is needed, then we need to reslice. // Such parent region does not exist. If it is needed, then we need to reslice.
// Only create new region for a modifier, which actually modifies config of it's parent. // Only create new region for a modifier, which actually modifies config of it's parent.
if (PrintRegionConfig config = region_config_from_model_volume(parent_region.region->config(), nullptr, **it_model_volume, num_extruders); if (PrintRegionConfig config = region_config_from_model_volume(parent_region.region->config(), nullptr, **it_model_volume, num_extruders, variant_index);
config != parent_region.region->config()) config != parent_region.region->config())
// This modifier newly overrides a region, which it did not before. We need to reslice. // This modifier newly overrides a region, which it did not before. We need to reslice.
return false; return false;
@@ -791,8 +792,8 @@ bool verify_update_print_object_regions(
} }
} }
PrintRegionConfig cfg = region.parent == -1 ? PrintRegionConfig cfg = region.parent == -1 ?
region_config_from_model_volume(default_region_config, layer_range.config, **it_model_volume, num_extruders) : region_config_from_model_volume(default_region_config, layer_range.config, **it_model_volume, num_extruders, variant_index) :
region_config_from_model_volume(layer_range.volume_regions[region.parent].region->config(), nullptr, **it_model_volume, num_extruders); region_config_from_model_volume(layer_range.volume_regions[region.parent].region->config(), nullptr, **it_model_volume, num_extruders, variant_index);
if (cfg != region.region->config()) { if (cfg != region.region->config()) {
// Region configuration changed. // Region configuration changed.
if (print_region_ref_cnt(*region.region) == 0) { if (print_region_ref_cnt(*region.region) == 0) {
@@ -964,6 +965,7 @@ static PrintObjectRegions* generate_print_object_regions(
size_t num_extruders, size_t num_extruders,
const float xy_contour_compensation, const float xy_contour_compensation,
const std::vector<unsigned int> &painting_extruders, const std::vector<unsigned int> &painting_extruders,
std::vector<int> &variant_index,
const bool has_painted_fuzzy_skin) const bool has_painted_fuzzy_skin)
{ {
// Reuse the old object or generate a new one. // Reuse the old object or generate a new one.
@@ -1022,7 +1024,7 @@ static PrintObjectRegions* generate_print_object_regions(
// Add a model volume, assign an existing region or generate a new one. // Add a model volume, assign an existing region or generate a new one.
layer_range.volume_regions.push_back({ layer_range.volume_regions.push_back({
&volume, -1, &volume, -1,
get_create_region(region_config_from_model_volume(default_region_config, layer_range.config, volume, num_extruders)), get_create_region(region_config_from_model_volume(default_region_config, layer_range.config, volume, num_extruders, variant_index)),
bbox bbox
}); });
} else if (volume.is_negative_volume()) { } else if (volume.is_negative_volume()) {
@@ -1039,7 +1041,7 @@ static PrintObjectRegions* generate_print_object_regions(
if (parent_volume.is_model_part() || parent_volume.is_modifier()) if (parent_volume.is_model_part() || parent_volume.is_modifier())
if (PrintObjectRegions::BoundingBox parent_bbox = find_modifier_volume_extents(layer_range, parent_region_id); parent_bbox.intersects(*bbox)) { if (PrintObjectRegions::BoundingBox parent_bbox = find_modifier_volume_extents(layer_range, parent_region_id); parent_bbox.intersects(*bbox)) {
// Only create new region for a modifier, which actually modifies config of it's parent. // Only create new region for a modifier, which actually modifies config of it's parent.
if (PrintRegionConfig config = region_config_from_model_volume(parent_region.region->config(), nullptr, volume, num_extruders); if (PrintRegionConfig config = region_config_from_model_volume(parent_region.region->config(), nullptr, volume, num_extruders, variant_index);
config != parent_region.region->config()) { config != parent_region.region->config()) {
added = true; added = true;
layer_range.volume_regions.push_back({ &volume, parent_region_id, get_create_region(std::move(config)), bbox }); layer_range.volume_regions.push_back({ &volume, parent_region_id, get_create_region(std::move(config)), bbox });
@@ -1162,12 +1164,13 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
} }
//apply extruder related values //apply extruder related values
std::vector<int> print_variant_index;
if (!extruder_applied) { if (!extruder_applied) {
// variant_2 must be processed first, because variant_1 will make `printer_extruder_id` and `printer_extruder_variant` half of the size that makes `get_index_for_extruder` no longer work properly // variant_2 must be processed first, because variant_1 will make `printer_extruder_id` and `printer_extruder_variant` half of the size that makes `get_index_for_extruder` no longer work properly
new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2); new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2);
new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant"); new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant");
//update print config related with variants //update print config related with variants
new_full_config.update_values_to_printer_extruders(new_full_config, print_options_with_variant, "print_extruder_id", "print_extruder_variant"); print_variant_index = new_full_config.update_values_to_printer_extruders(new_full_config, print_options_with_variant, "print_extruder_id", "print_extruder_variant");
m_ori_full_print_config = new_full_config; m_ori_full_print_config = new_full_config;
new_full_config.update_values_to_printer_extruders_for_multiple_filaments(new_full_config, filament_options_with_variant, "filament_self_index", "filament_extruder_variant"); new_full_config.update_values_to_printer_extruders_for_multiple_filaments(new_full_config, filament_options_with_variant, "filament_self_index", "filament_extruder_variant");
@@ -1475,7 +1478,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
if (object_config_changed) if (object_config_changed)
model_object.config.assign_config(model_object_new.config); model_object.config.assign_config(model_object_new.config);
if (! object_diff.empty() || object_config_changed || num_extruders_changed ) { if (! object_diff.empty() || object_config_changed || num_extruders_changed ) {
PrintObjectConfig new_config = PrintObject::object_config_from_model_object(m_default_object_config, model_object, num_extruders ); PrintObjectConfig new_config = PrintObject::object_config_from_model_object(m_default_object_config, model_object, num_extruders, print_variant_index);
for (const PrintObjectStatus &print_object_status : print_object_status_db.get_range(model_object)) { for (const PrintObjectStatus &print_object_status : print_object_status_db.get_range(model_object)) {
t_config_option_keys diff = print_object_status.print_object->config().diff(new_config); t_config_option_keys diff = print_object_status.print_object->config().diff(new_config);
if (! diff.empty()) { if (! diff.empty()) {
@@ -1541,10 +1544,10 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
// Generate a list of trafos and XY offsets for instances of a ModelObject // Generate a list of trafos and XY offsets for instances of a ModelObject
// Producing the config for PrintObject on demand, caching it at print_object_last. // Producing the config for PrintObject on demand, caching it at print_object_last.
const PrintObject *print_object_last = nullptr; const PrintObject *print_object_last = nullptr;
auto print_object_apply_config = [this, &print_object_last, model_object, num_extruders ](PrintObject *print_object) { auto print_object_apply_config = [this, &print_object_last, model_object, num_extruders, &print_variant_index](PrintObject *print_object) {
print_object->config_apply(print_object_last ? print_object->config_apply(print_object_last ?
print_object_last->config() : print_object_last->config() :
PrintObject::object_config_from_model_object(m_default_object_config, *model_object, num_extruders )); PrintObject::object_config_from_model_object(m_default_object_config, *model_object, num_extruders, print_variant_index));
print_object_last = print_object; print_object_last = print_object;
}; };
if (old.empty()) { if (old.empty()) {
@@ -1715,7 +1718,8 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
for (auto it = it_print_object; it != it_print_object_end; ++it) for (auto it = it_print_object; it != it_print_object_end; ++it)
if ((*it)->m_shared_regions != nullptr) if ((*it)->m_shared_regions != nullptr)
update_apply_status((*it)->invalidate_state_by_config_options(old_config, new_config, diff_keys)); update_apply_status((*it)->invalidate_state_by_config_options(old_config, new_config, diff_keys));
})) { },
print_variant_index)) {
// Regions are valid, just keep them. // Regions are valid, just keep them.
} else { } else {
// Regions were reshuffled. // Regions were reshuffled.
@@ -1737,6 +1741,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
num_extruders , num_extruders ,
print_object.is_mm_painted() ? 0.f : float(print_object.config().xy_contour_compensation.value), print_object.is_mm_painted() ? 0.f : float(print_object.config().xy_contour_compensation.value),
painting_extruders, painting_extruders,
print_variant_index,
print_object.is_fuzzy_skin_painted()); print_object.is_fuzzy_skin_painted());
} }
for (auto it = it_print_object; it != it_print_object_end; ++it) for (auto it = it_print_object; it != it_print_object_end; ++it)
+154 -10
View File
@@ -188,6 +188,12 @@ static t_config_enum_values s_keys_map_PowerLossRecoveryMode {
}; };
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PowerLossRecoveryMode) CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PowerLossRecoveryMode)
static t_config_enum_values s_keys_map_CenterOfSurfacePattern{
{"each_surface", int(CenterOfSurfacePattern::Each_Surface)},
{"each_model", int(CenterOfSurfacePattern::Each_Model)},
{"each_assembly", int(CenterOfSurfacePattern::Each_Assembly)}};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(CenterOfSurfacePattern)
static t_config_enum_values s_keys_map_FuzzySkinType { static t_config_enum_values s_keys_map_FuzzySkinType {
{ "none", int(FuzzySkinType::None) }, { "none", int(FuzzySkinType::None) },
{ "external", int(FuzzySkinType::External) }, { "external", int(FuzzySkinType::External) },
@@ -221,6 +227,13 @@ static t_config_enum_values s_keys_map_FuzzySkinMode {
}; };
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FuzzySkinMode) CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FuzzySkinMode)
static t_config_enum_values s_keys_map_TopSurfaceExpansionDirection {
{ "inward_and_outward", int(TopSurfaceExpansionDirection::InwardAndOutward) },
{ "inward", int(TopSurfaceExpansionDirection::Inward) },
{ "outward", int(TopSurfaceExpansionDirection::Outward) }
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TopSurfaceExpansionDirection)
static t_config_enum_values s_keys_map_InfillPattern { static t_config_enum_values s_keys_map_InfillPattern {
{ "monotonic", ipMonotonic }, { "monotonic", ipMonotonic },
{ "monotonicline", ipMonotonicLine }, { "monotonicline", ipMonotonicLine },
@@ -522,6 +535,12 @@ static t_config_enum_values s_keys_map_PerimeterGeneratorType{
}; };
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PerimeterGeneratorType) CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PerimeterGeneratorType)
static t_config_enum_values s_keys_map_ToolChangeOrderingType {
{ "default", int(ToolChangeOrderingType::Default) },
{ "cyclic", int(ToolChangeOrderingType::Cyclic) }
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(ToolChangeOrderingType)
static const t_config_enum_values s_keys_map_ZHopType = { static const t_config_enum_values s_keys_map_ZHopType = {
{ "Auto Lift", zhtAuto }, { "Auto Lift", zhtAuto },
{ "Normal Lift", zhtNormal }, { "Normal Lift", zhtNormal },
@@ -1236,7 +1255,7 @@ void PrintConfigDef::init_fff_params()
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n\n"
"Use 180° for zero absolute angle."); "Use 180° for zero absolute angle.");
def->sidetext = u8"°"; // degrees, don't need translation def->sidetext = u8"°"; // degrees, don't need translation
@@ -1253,7 +1272,7 @@ void PrintConfigDef::init_fff_params()
"If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n" "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
"Otherwise the provided angle will be used according to:\n" "Otherwise the provided angle will be used according to:\n"
" - The absolute coordinates\n" " - The absolute coordinates\n"
" - The absolute coordinates + Model rotation: If Align infill direction to model is enabled\n" " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
" - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n\n" " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n\n"
"Use 180° for zero absolute angle."); "Use 180° for zero absolute angle.");
def->sidetext = u8"°"; // degrees, don't need translation def->sidetext = u8"°"; // degrees, don't need translation
@@ -2117,6 +2136,47 @@ void PrintConfigDef::init_fff_params()
def->max = 100; def->max = 100;
def->set_default_value(new ConfigOptionPercent(100)); def->set_default_value(new ConfigOptionPercent(100));
def = this->add("top_surface_expansion", coFloat);
def->label = L("Top surface expansion");
def->category = L("Strength");
def->tooltip = L("Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
"Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane."
"Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top."
"The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection.");
def->sidetext = L("mm");
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def = this->add("top_surface_expansion_margin", coFloat);
def->label = L("Top expansion wall margin");
def->category = L("Strength");
def->tooltip = L("Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
"This can cause contraction marks (such as the hull line) on the outer walls.\n"
"By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark.");
def->sidetext = L("mm");
def->min = 0;
def->max = 10;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def = this->add("top_surface_expansion_direction", coEnum);
def->label = L("Top expansion direction");
def->category = L("Strength");
def->tooltip = L("Direction in which the top surface expansion grows.\n"
" - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
" - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
" - Inward and Outward does both.");
def->enum_keys_map = &ConfigOptionEnum<TopSurfaceExpansionDirection>::get_enum_values();
def->enum_values.push_back("inward_and_outward");
def->enum_values.push_back("inward");
def->enum_values.push_back("outward");
def->enum_labels.push_back(L("Inward and Outward"));
def->enum_labels.push_back(L("Inward"));
def->enum_labels.push_back(L("Outward"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionEnum<TopSurfaceExpansionDirection>(TopSurfaceExpansionDirection::InwardAndOutward));
def = this->add("bottom_surface_pattern", coEnum); def = this->add("bottom_surface_pattern", coEnum);
def->label = L("Bottom surface pattern"); def->label = L("Bottom surface pattern");
def->category = L("Strength"); def->category = L("Strength");
@@ -3037,10 +3097,11 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionPercent(20)); def->set_default_value(new ConfigOptionPercent(20));
def = this->add("align_infill_direction_to_model", coBool); def = this->add("align_infill_direction_to_model", coBool);
def->label = L("Align infill direction to model"); def->label = L("Align directions to model");
def->category = L("Strength"); def->category = L("Strength");
def->tooltip = L("Aligns infill, bridge, ironing and surface fill directions to follow the model's orientation on the build plate.\n" def->tooltip = L("Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
"When enabled, directions rotate with the model to maintain optimal strength characteristics."); "When enabled, these directions rotate together with the model so the printed features keep their intended orientation "
"relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed.");
def->mode = comAdvanced; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool(false)); def->set_default_value(new ConfigOptionBool(false));
@@ -6076,6 +6137,22 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool(false)); def->set_default_value(new ConfigOptionBool(false));
def = this->add("toolchange_ordering", coEnum);
def->label = L("Toolchange ordering");
def->category = L("Advanced");
def->tooltip = L(
"Determines the order of tool changes on each layer.\n"
"- Default: Starts with the last used extruder to minimize tool changes.\n"
"- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
);
def->mode = comAdvanced;
def->enum_keys_map = &ConfigOptionEnum<ToolChangeOrderingType>::get_enum_values();
def->enum_values.emplace_back("default");
def->enum_values.emplace_back("cyclic");
def->enum_labels.emplace_back(L("Default"));
def->enum_labels.emplace_back(L("Cyclic"));
def->set_default_value(new ConfigOptionEnum<ToolChangeOrderingType>(ToolChangeOrderingType::Default));
def = this->add("slice_closing_radius", coFloat); def = this->add("slice_closing_radius", coFloat);
def->label = L("Slice gap closing radius"); def->label = L("Slice gap closing radius");
def->category = L("Quality"); def->category = L("Quality");
@@ -6799,6 +6876,47 @@ void PrintConfigDef::init_fff_params()
def->min = 0; def->min = 0;
def->set_default_value(new ConfigOptionFloat(0.6)); def->set_default_value(new ConfigOptionFloat(0.6));
def = this->add("anisotropic_surfaces", coBool);
def->label = L("Anisotropic surfaces");
def->category = L("Strength");
def->tooltip = L("Anisotropic patterns on the top and bottom surfaces.\n"
"Co-directional printing mode will be applied. For certain patterns, omni-directional filling provides color "
"dispersion when using multi-colored or silk plastics.\n"
"This option disable the gap fill.\n"
"This option can increase a printing time.");
def->mode = comExpert;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("separated_infills", coBool);
def->label = L("Separated infills");
def->category = L("Strength");
def->tooltip = L("Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the "
"whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts "
"(or distinct 3D objects) each get their own.\n"
"Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
"Affects line and grid patterns and rotation-template infills.\n"
"Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected.");
def->mode = comExpert;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("center_of_surface_pattern", coEnum);
def->label = L("Center surface pattern on");
def->category = L("Strength");
def->tooltip = L("Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, "
"Octagram Spiral) is placed.\n"
" - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
" - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; "
"parts detached from the rest each get their own.\n"
" - Each Assembly: uses a single shared center for the whole object or assembly.");
def->enum_keys_map = &ConfigOptionEnum<CenterOfSurfacePattern>::get_enum_values();
def->enum_values.push_back("each_surface");
def->enum_values.push_back("each_model");
def->enum_values.push_back("each_assembly");
def->enum_labels.push_back(L("Each Surface"));
def->enum_labels.push_back(L("Each Model"));
def->enum_labels.push_back(L("Each Assembly"));
def->mode = comExpert;
def->set_default_value(new ConfigOptionEnum<CenterOfSurfacePattern>(CenterOfSurfacePattern::Each_Surface));
def = this->add("travel_speed", coFloats); def = this->add("travel_speed", coFloats);
def->label = L("Travel"); def->label = L("Travel");
@@ -9519,7 +9637,7 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector<st
bool has_value = false; bool has_value = false;
double target_value = std::numeric_limits<double>::max(); double target_value = std::numeric_limits<double>::max();
for(auto idx : indices){ for(auto idx : indices){
if(opt && !opt->is_nil(idx)){ if(opt && idx < opt->values.size() && !opt->is_nil(idx)){
has_value = true; has_value = true;
target_value = std::min(target_value, src_values[idx]); target_value = std::min(target_value, src_values[idx]);
} }
@@ -9706,10 +9824,12 @@ DynamicPrintConfig::get_filament_type() const
return std::string(); return std::string();
} }
void DynamicPrintConfig::update_values_to_printer_extruders(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name, unsigned int stride, unsigned int extruder_id) std::vector<int> DynamicPrintConfig::update_values_to_printer_extruders(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name, unsigned int stride, unsigned int extruder_id)
{ {
int extruder_count; int extruder_count;
bool different_extruder = printer_config.support_different_extruders(extruder_count); bool different_extruder = printer_config.support_different_extruders(extruder_count);
std::vector<int> variant_index;
if ((extruder_count > 1) || different_extruder) if ((extruder_count > 1) || different_extruder)
{ {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: different extruders processing")%__LINE__; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: different extruders processing")%__LINE__;
@@ -9720,9 +9840,9 @@ void DynamicPrintConfig::update_values_to_printer_extruders(DynamicPrintConfig&
auto opt_nozzle_volume_type = dynamic_cast<const ConfigOptionEnumsGeneric*>(printer_config.option("nozzle_volume_type")); auto opt_nozzle_volume_type = dynamic_cast<const ConfigOptionEnumsGeneric*>(printer_config.option("nozzle_volume_type"));
if (!opt_extruder_type || !opt_nozzle_volume_type) { if (!opt_extruder_type || !opt_nozzle_volume_type) {
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: extruder_type or nozzle_volume_type option not found, skipping")%__LINE__; BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: extruder_type or nozzle_volume_type option not found, skipping")%__LINE__;
return; return variant_index;
} }
std::vector<int> variant_index;
if (extruder_id > 0 && extruder_id <= static_cast<unsigned> (extruder_count)) { if (extruder_id > 0 && extruder_id <= static_cast<unsigned> (extruder_count)) {
variant_index.resize(1); variant_index.resize(1);
@@ -9761,7 +9881,7 @@ void DynamicPrintConfig::update_values_to_printer_extruders(DynamicPrintConfig&
const ConfigDef *config_def = this->def(); const ConfigDef *config_def = this->def();
if (!config_def) { if (!config_def) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(", Line %1%: can not find config define")%__LINE__; BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(", Line %1%: can not find config define")%__LINE__;
return; return variant_index;
} }
for (auto& key: key_set) for (auto& key: key_set)
{ {
@@ -9875,6 +9995,8 @@ void DynamicPrintConfig::update_values_to_printer_extruders(DynamicPrintConfig&
} }
} }
} }
return variant_index;
} }
void DynamicPrintConfig::update_values_to_printer_extruders_for_multiple_filaments(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name) void DynamicPrintConfig::update_values_to_printer_extruders_for_multiple_filaments(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name)
@@ -10407,6 +10529,28 @@ void compute_filament_override_value(const std::string& opt_key, const ConfigOpt
} }
void update_static_print_config_from_dynamic(ConfigBase& config, const DynamicPrintConfig& dest_config, std::vector<int> variant_index, std::set<std::string>& key_set1, int stride)
{
if (variant_index.size() > 0) {
const t_config_option_keys &keys = dest_config.keys();
for (auto& opt : keys) {
ConfigOption *opt_src = config.option(opt);
const ConfigOption *opt_dest = dest_config.option(opt);
if (opt_src && opt_dest && (*opt_src != *opt_dest)) {
if (opt_dest->is_scalar() || (key_set1.find(opt) == key_set1.end()))
opt_src->set(opt_dest);
else {
ConfigOptionVectorBase* opt_vec_src = static_cast<ConfigOptionVectorBase*>(opt_src);
const ConfigOptionVectorBase* opt_vec_dest = static_cast<const ConfigOptionVectorBase*>(opt_dest);
opt_vec_src->set_to_index(opt_vec_dest, variant_index, stride);
}
}
}
}
else
config.apply(dest_config, true);
}
//BBS: pass map to recording all invalid valies //BBS: pass map to recording all invalid valies
//FIXME localize this function. //FIXME localize this function.
std::map<std::string, std::string> validate(const FullPrintConfig &cfg, bool under_cli) std::map<std::string, std::string> validate(const FullPrintConfig &cfg, bool under_cli)
+58 -1
View File
@@ -62,6 +62,19 @@ enum class FuzzySkinMode {
Combined, Combined,
}; };
// ORCA: direction in which top_surface_expansion grows the top surfaces.
enum class TopSurfaceExpansionDirection {
InwardAndOutward,
Inward,
Outward,
};
enum class CenterOfSurfacePattern {
Each_Surface,
Each_Model,
Each_Assembly,
};
enum class NoiseType { enum class NoiseType {
Classic, Classic,
Perlin, Perlin,
@@ -97,6 +110,34 @@ enum InfillPattern : int {
ipCount, ipCount,
}; };
// Orca: Infill patterns whose alignment origin follows the fill bounding box, so the
// "separated_infills" option can re-center them per connected body. Patterns evaluated in
// absolute/global coordinates (Gyroid, TPMS, Honeycomb, CrossHatch, ...) or that are shape-relative
// (Concentric) ignore that bounding box and are therefore excluded.
inline bool is_separable_infill_pattern(InfillPattern pattern)
{
switch (pattern) {
case ipRectilinear:
case ipAlignedRectilinear:
case ipZigZag:
case ipCrossZag:
case ipLockedZag:
case ipGrid:
case ipTriangles:
case ipStars: // tri-hexagon
case ipCubic:
case ipQuarterCubic:
case ipLateralHoneycomb:
case ipLateralLattice:
case ipHilbertCurve:
case ipArchimedeanChords:
case ipOctagramSpiral:
return true;
default:
return false;
}
}
enum class IroningType { enum class IroningType {
NoIroning, NoIroning,
TopSurfaces, TopSurfaces,
@@ -300,6 +341,12 @@ enum class PerimeterGeneratorType
Arachne Arachne
}; };
enum class ToolChangeOrderingType
{
Default,
Cyclic,
};
// BBS // BBS
enum OverhangFanThreshold { enum OverhangFanThreshold {
Overhang_threshold_none = 0, Overhang_threshold_none = 0,
@@ -534,6 +581,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrinterTechnology)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(GCodeFlavor) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(GCodeFlavor)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinMode) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinMode)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(TopSurfaceExpansionDirection)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(WipeTowerType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(WipeTowerType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NoiseType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NoiseType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(InfillPattern) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(InfillPattern)
@@ -561,6 +609,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrintHostType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(AuthorizationType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(AuthorizationType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(WipeTowerWallType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(WipeTowerWallType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PerimeterGeneratorType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PerimeterGeneratorType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(ToolChangeOrderingType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PowerLossRecoveryMode) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PowerLossRecoveryMode)
#undef CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS #undef CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS
@@ -671,7 +720,7 @@ public:
bool is_using_different_extruders(); bool is_using_different_extruders();
bool support_different_extruders(int& extruder_count) const; bool support_different_extruders(int& extruder_count) const;
int get_index_for_extruder(int extruder_or_filament_id, std::string id_name, ExtruderType extruder_type, NozzleVolumeType nozzle_volume_type, std::string variant_name, unsigned int stride = 1) const; int get_index_for_extruder(int extruder_or_filament_id, std::string id_name, ExtruderType extruder_type, NozzleVolumeType nozzle_volume_type, std::string variant_name, unsigned int stride = 1) const;
void update_values_to_printer_extruders(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name, unsigned int stride = 1, unsigned int extruder_id = 0); std::vector<int> update_values_to_printer_extruders(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name, unsigned int stride = 1, unsigned int extruder_id = 0);
void update_values_to_printer_extruders_for_multiple_filaments(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name); void update_values_to_printer_extruders_for_multiple_filaments(DynamicPrintConfig& printer_config, std::set<std::string>& key_set, std::string id_name, std::string variant_name);
void update_non_diff_values_to_base_config(DynamicPrintConfig& new_config, const t_config_option_keys& keys, const std::set<std::string>& different_keys, std::string extruder_id_name, std::string extruder_variant_name, void update_non_diff_values_to_base_config(DynamicPrintConfig& new_config, const t_config_option_keys& keys, const std::set<std::string>& different_keys, std::string extruder_id_name, std::string extruder_variant_name,
@@ -700,6 +749,7 @@ extern std::set<std::string> empty_options;
extern std::set<std::string> filament_dev_options; extern std::set<std::string> filament_dev_options;
extern void update_static_print_config_from_dynamic(ConfigBase& config, const DynamicPrintConfig& dest_config, std::vector<int> variant_index, std::set<std::string>& key_set1, int stride = 1);
extern void compute_filament_override_value(const std::string& opt_key, const ConfigOption *opt_old_machine, const ConfigOption *opt_new_machine, const ConfigOption *opt_new_filament, const DynamicPrintConfig& new_full_config, extern void compute_filament_override_value(const std::string& opt_key, const ConfigOption *opt_old_machine, const ConfigOption *opt_new_machine, const ConfigOption *opt_new_filament, const DynamicPrintConfig& new_full_config,
t_config_option_keys& diff_keys, DynamicPrintConfig& filament_overrides, std::vector<int>& f_maps); t_config_option_keys& diff_keys, DynamicPrintConfig& filament_overrides, std::vector<int>& f_maps);
@@ -1124,6 +1174,9 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloat, lightning_prune_angle)) ((ConfigOptionFloat, lightning_prune_angle))
((ConfigOptionFloat, lightning_straightening_angle)) ((ConfigOptionFloat, lightning_straightening_angle))
((ConfigOptionBool, align_infill_direction_to_model)) ((ConfigOptionBool, align_infill_direction_to_model))
((ConfigOptionBool, anisotropic_surfaces))
((ConfigOptionEnum<CenterOfSurfacePattern>, center_of_surface_pattern))
((ConfigOptionBool, separated_infills))
((ConfigOptionString, extra_solid_infills)) ((ConfigOptionString, extra_solid_infills))
((ConfigOptionEnum<FuzzySkinType>, fuzzy_skin)) ((ConfigOptionEnum<FuzzySkinType>, fuzzy_skin))
((ConfigOptionFloat, fuzzy_skin_thickness)) ((ConfigOptionFloat, fuzzy_skin_thickness))
@@ -1189,6 +1242,9 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloatOrPercent, top_surface_line_width)) ((ConfigOptionFloatOrPercent, top_surface_line_width))
((ConfigOptionInt, top_shell_layers)) ((ConfigOptionInt, top_shell_layers))
((ConfigOptionFloat, top_shell_thickness)) ((ConfigOptionFloat, top_shell_thickness))
((ConfigOptionFloat, top_surface_expansion))
((ConfigOptionFloat, top_surface_expansion_margin))
((ConfigOptionEnum<TopSurfaceExpansionDirection>, top_surface_expansion_direction))
((ConfigOptionFloatsNullable, top_surface_speed)) ((ConfigOptionFloatsNullable, top_surface_speed))
//BBS //BBS
((ConfigOptionBoolsNullable, enable_overhang_speed)) ((ConfigOptionBoolsNullable, enable_overhang_speed))
@@ -1415,6 +1471,7 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionBool, single_extruder_multi_material)) ((ConfigOptionBool, single_extruder_multi_material))
((ConfigOptionBool, manual_filament_change)) ((ConfigOptionBool, manual_filament_change))
((ConfigOptionBool, single_extruder_multi_material_priming)) ((ConfigOptionBool, single_extruder_multi_material_priming))
((ConfigOptionEnum<ToolChangeOrderingType>, toolchange_ordering))
((ConfigOptionBool, wipe_tower_no_sparse_layers)) ((ConfigOptionBool, wipe_tower_no_sparse_layers))
((ConfigOptionString, change_filament_gcode)) ((ConfigOptionString, change_filament_gcode))
((ConfigOptionString, change_extrusion_role_gcode)) ((ConfigOptionString, change_extrusion_role_gcode))
+160 -14
View File
@@ -4,6 +4,7 @@
#include "Print.hpp" #include "Print.hpp"
#include "BoundingBox.hpp" #include "BoundingBox.hpp"
#include "ClipperUtils.hpp" #include "ClipperUtils.hpp"
#include "Clipper2Utils.hpp"
#include "ElephantFootCompensation.hpp" #include "ElephantFootCompensation.hpp"
#include "Geometry.hpp" #include "Geometry.hpp"
#include "I18N.hpp" #include "I18N.hpp"
@@ -704,6 +705,72 @@ void PrintObject::infill()
if (this->set_started(posInfill)) { if (this->set_started(posInfill)) {
m_print->set_status(35, L("Generating infill toolpath")); m_print->set_status(35, L("Generating infill toolpath"));
// Orca: precompute the object's 3D connected bodies for separated infills / per-model
// centering. Two islands belong to the same body when their slices overlap on adjacent
// layers; islands that only overlap in top-down projection but never touch (e.g. interleaved
// chain links) stay separate, matching "split to objects". Each layer island then records
// the full bounding box of its body, so its infill is centered on that body as if it were
// sliced alone. Done once here, before the parallel fill, and only when a region needs it.
bool needs_separated_components = false;
for (size_t i = 0; i < this->num_printing_regions(); ++ i) {
const PrintRegionConfig &rc = this->printing_region(i).config();
if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model) {
needs_separated_components = true;
break;
}
}
// Fast path: the feature only changes anything when the object is made of more than one
// connected body. Detect that cheaply the same way as "Split to objects" — more than one
// model part, or a single part whose mesh is splittable (is_splittable() is cached). A single
// body already shares the object center, i.e. the default, so skip the connectivity pass.
if (needs_separated_components) {
int parts = 0;
const ModelVolume *first_part = nullptr;
for (const ModelVolume *v : this->model_object()->volumes)
if (v->is_model_part()) { ++ parts; first_part = v; }
if (parts <= 1 && ! (first_part != nullptr && first_part->is_splittable()))
needs_separated_components = false;
}
for (Layer *layer : m_layers)
layer->lslices_separated_component_bboxes.clear();
if (needs_separated_components) {
const size_t nl = m_layers.size();
std::vector<size_t> offset(nl + 1, 0); // flat index of the first island of each layer
for (size_t i = 0; i < nl; ++ i)
offset[i + 1] = offset[i] + m_layers[i]->lslices.size();
const size_t nreg = offset[nl];
// Union-find over every (layer, island).
std::vector<size_t> parent(nreg);
for (size_t i = 0; i < nreg; ++ i) parent[i] = i;
auto find = [&parent](size_t x) {
while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; }
return x;
};
auto unite = [&](size_t a, size_t b) { a = find(a); b = find(b); if (a != b) parent[a] = b; };
// Join islands that overlap between two consecutive layers.
for (size_t i = 0; i + 1 < nl; ++ i) {
const Layer *la = m_layers[i], *lb = m_layers[i + 1];
for (size_t a = 0; a < la->lslices.size(); ++ a)
for (size_t b = 0; b < lb->lslices.size(); ++ b)
if (la->lslices_bboxes[a].overlap(lb->lslices_bboxes[b]) &&
! intersection_ex(la->lslices[a], lb->lslices[b]).empty())
unite(offset[i] + a, offset[i + 1] + b);
}
// Full bounding box of each body, indexed by its union-find root.
std::vector<BoundingBox> body_bbox(nreg);
for (size_t i = 0; i < nl; ++ i)
for (size_t a = 0; a < m_layers[i]->lslices.size(); ++ a)
body_bbox[find(offset[i] + a)].merge(m_layers[i]->lslices_bboxes[a]);
// Store the body bbox for every island.
for (size_t i = 0; i < nl; ++ i) {
Layer *layer = m_layers[i];
layer->lslices_separated_component_bboxes.resize(layer->lslices.size());
for (size_t a = 0; a < layer->lslices.size(); ++ a)
layer->lslices_separated_component_bboxes[a] = body_bbox[find(offset[i] + a)];
}
}
const auto& adaptive_fill_octree = this->m_adaptive_fill_octrees.first; const auto& adaptive_fill_octree = this->m_adaptive_fill_octrees.first;
const auto& support_fill_octree = this->m_adaptive_fill_octrees.second; const auto& support_fill_octree = this->m_adaptive_fill_octrees.second;
@@ -1297,6 +1364,9 @@ bool PrintObject::invalidate_state_by_config_options(
|| opt_key == "infill_combination_max_layer_height" || opt_key == "infill_combination_max_layer_height"
|| opt_key == "bottom_shell_thickness" || opt_key == "bottom_shell_thickness"
|| opt_key == "top_shell_thickness" || opt_key == "top_shell_thickness"
|| opt_key == "top_surface_expansion"
|| opt_key == "top_surface_expansion_margin"
|| opt_key == "top_surface_expansion_direction"
|| opt_key == "minimum_sparse_infill_area" || opt_key == "minimum_sparse_infill_area"
|| opt_key == "sparse_infill_filament_id" || opt_key == "sparse_infill_filament_id"
|| opt_key == "internal_solid_filament_id" || opt_key == "internal_solid_filament_id"
@@ -1330,6 +1400,9 @@ bool PrintObject::invalidate_state_by_config_options(
|| opt_key == "top_surface_line_width" || opt_key == "top_surface_line_width"
|| opt_key == "top_surface_density" || opt_key == "top_surface_density"
|| opt_key == "bottom_surface_density" || opt_key == "bottom_surface_density"
|| opt_key == "anisotropic_surfaces"
|| opt_key == "center_of_surface_pattern"
|| opt_key == "separated_infills"
|| opt_key == "initial_layer_line_width" || opt_key == "initial_layer_line_width"
|| opt_key == "small_area_infill_flow_compensation" || opt_key == "small_area_infill_flow_compensation"
|| opt_key == "lateral_lattice_angle_1" || opt_key == "lateral_lattice_angle_1"
@@ -1686,6 +1759,69 @@ void PrintObject::detect_surfaces_type()
} }
} }
// ORCA: Expand the top surfaces outward by top_surface_expansion in every direction. This
// enlarges the top solid infill and, in particular, grows it over the covered material left
// by features rising from the middle of a top surface (filling holes and joining tops so the
// features rest on it). The expansion stays inside the section it belongs to: each connected
// solid island has its own outer wall, so the top is grown within each island separately and
// clipped to it - growing one island's top across the gap into another island (which may have
// no top surface, leaving a partially filled layer) is never allowed. The top infill sits
// inside the perimeters, so the margin is measured from the walls: the island is inset by the
// band the walls consume (outer wall + inner walls) plus the configured margin, making that
// value the real clearance between the expanded top and the walls (avoiding a hull line). The
// original top is unioned back in, so where it already sits within that band it is kept as-is.
// Never claims a bottom surface.
const double top_expansion = layerm->region().config().top_surface_expansion.value;
if (top_expansion > 0. && ! top.empty()) {
const double d = scale_(top_expansion);
const auto jt = Clipper2Lib::JoinType::Miter;
const ExPolygons T = union_ex(to_expolygons(top));
const int wall_loops = layerm->region().config().wall_loops.value;
const double wall_band = wall_loops <= 0 ? 0. :
double(layerm->flow(frExternalPerimeter).scaled_width()) +
double(layerm->flow(frPerimeter).scaled_width()) * double(wall_loops - 1);
const double margin = scale_(layerm->region().config().top_surface_expansion_margin.value);
// minimum real top to act on: ignore anything thinner than ~2 top-infill lines
const float min_top = float(layerm->flow(frTopSolidInfill).scaled_width());
const auto direction = layerm->region().config().top_surface_expansion_direction.value;
ExPolygons grown;
for (const ExPolygon &island : union_ex(layerm_slices_surfaces)) {
// The top infill only exists inside the perimeters, so seed and measure from the infill
// region (the island minus the wall band), not the raw slice. A section whose only
// exposed top lies in the wall band - i.e. a layer where the top is just the walls
// themselves - has no infill here and is skipped, instead of being flooded inward by
// the expansion. Thin slivers inside the infill region are dropped by the opening too.
const ExPolygons infill_region = wall_band > 0. ? offset_ex(island, -float(wall_band)) : ExPolygons{ island };
const ExPolygons island_top = intersection_ex(T, infill_region);
if (opening_ex(island_top, min_top).empty())
continue; // no real top infill in this section - never expand into it
// grow by d, then keep only the part allowed by the configured direction: inward fills
// the holes/gaps left by features (clip the growth back to the top's own filled outline,
// which leaves the outer edge fixed), outward grows the outer edge toward the walls (drop
// the growth that fell into the original holes), and inward+outward keeps both.
ExPolygons expanded = offset_ex_2(island_top, d, jt);
if (direction != TopSurfaceExpansionDirection::InwardAndOutward) {
ExPolygons outline; // the top with its holes filled (same outer edge)
outline.reserve(island_top.size());
for (const ExPolygon &ex : island_top)
outline.emplace_back(ex.contour);
outline = union_ex(outline);
expanded = direction == TopSurfaceExpansionDirection::Inward ?
intersection_ex(expanded, outline) : // only growth into the holes
diff_ex(expanded, diff_ex(outline, island_top)); // only growth past the outer edge
}
// hold the expansion clear of the walls by the configured margin
const ExPolygons allowed = margin > 0. ? offset_ex(infill_region, -float(margin)) : infill_region;
append(grown, intersection_ex(expanded, allowed));
}
ExPolygons new_top = diff_ex(union_ex(T, grown), to_expolygons(bottom));
top.clear();
surfaces_append(top, std::move(new_top), stTop);
}
#ifdef SLIC3R_DEBUG_SLICE_PROCESSING #ifdef SLIC3R_DEBUG_SLICE_PROCESSING
{ {
static int iRun = 0; static int iRun = 0;
@@ -3575,13 +3711,13 @@ static void clamp_feature_filament_to_valid(ConfigOptionInt &opt, size_t num_ext
opt.value = 1; opt.value = 1;
} }
PrintObjectConfig PrintObject::object_config_from_model_object(const PrintObjectConfig &default_object_config, const ModelObject &object, size_t num_extruders) PrintObjectConfig PrintObject::object_config_from_model_object(const PrintObjectConfig &default_object_config, const ModelObject &object, size_t num_extruders, std::vector<int>& variant_index)
{ {
PrintObjectConfig config = default_object_config; PrintObjectConfig config = default_object_config;
{ {
DynamicPrintConfig src_normalized(object.config.get()); DynamicPrintConfig src_normalized(object.config.get());
src_normalized.normalize_fdm(); src_normalized.normalize_fdm();
config.apply(src_normalized, true); update_static_print_config_from_dynamic(config, src_normalized, variant_index, print_options_with_variant, 1);
} }
// Clamp invalid extruders to the default extruder (with index 1). // Clamp invalid extruders to the default extruder (with index 1).
clamp_exturder_to_default(config.support_filament, num_extruders); clamp_exturder_to_default(config.support_filament, num_extruders);
@@ -3609,7 +3745,7 @@ struct FeatureFilamentOverrideMask
bool inner_wall_filament_id = false; bool inner_wall_filament_id = false;
}; };
static void apply_to_print_region_config(PrintRegionConfig &out, const DynamicPrintConfig &in, FeatureFilamentOverrideMask &feature_overrides) static void apply_to_print_region_config(PrintRegionConfig &out, const DynamicPrintConfig &in, FeatureFilamentOverrideMask &feature_overrides, std::vector<int>& variant_index)
{ {
// 1) Explicit feature filament values take precedence over base extruder fallback. // 1) Explicit feature filament values take precedence over base extruder fallback.
auto *opt_extruder = in.opt<ConfigOptionInt>(key_extruder); auto *opt_extruder = in.opt<ConfigOptionInt>(key_extruder);
@@ -3650,8 +3786,18 @@ static void apply_to_print_region_config(PrintRegionConfig &out, const DynamicPr
else if (it->first == "inner_wall_filament_id") else if (it->first == "inner_wall_filament_id")
feature_overrides.inner_wall_filament_id = false; feature_overrides.inner_wall_filament_id = false;
} }
} else } else {
my_opt->set(it->second.get()); if (*my_opt != *(it->second)) {
if (my_opt->is_scalar() || variant_index.empty() || (print_options_with_variant.find(it->first) == print_options_with_variant.end()))
my_opt->set(it->second.get());
//my_opt->set(it->second.get());
else {
ConfigOptionVectorBase* opt_vec_src = static_cast<ConfigOptionVectorBase*>(my_opt);
const ConfigOptionVectorBase* opt_vec_dest = static_cast<const ConfigOptionVectorBase*>(it->second.get());
opt_vec_src->set_to_index(opt_vec_dest, variant_index, 1);
}
}
}
} }
// 3) Apply base extruder only to features that were not explicitly overridden. // 3) Apply base extruder only to features that were not explicitly overridden.
@@ -3671,7 +3817,7 @@ static void apply_to_print_region_config(PrintRegionConfig &out, const DynamicPr
} }
} }
PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &default_or_parent_region_config, const DynamicPrintConfig *layer_range_config, const ModelVolume &volume, size_t num_extruders) PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &default_or_parent_region_config, const DynamicPrintConfig *layer_range_config, const ModelVolume &volume, size_t num_extruders, std::vector<int>& variant_index)
{ {
PrintRegionConfig config = default_or_parent_region_config; PrintRegionConfig config = default_or_parent_region_config;
FeatureFilamentOverrideMask feature_overrides; FeatureFilamentOverrideMask feature_overrides;
@@ -3689,17 +3835,17 @@ PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &defau
if (volume.is_model_part()) { if (volume.is_model_part()) {
// default_or_parent_region_config contains the Print's PrintRegionConfig. // default_or_parent_region_config contains the Print's PrintRegionConfig.
// Override with ModelObject's PrintRegionConfig values. // Override with ModelObject's PrintRegionConfig values.
apply_to_print_region_config(config, volume.get_object()->config.get(), feature_overrides); apply_to_print_region_config(config, volume.get_object()->config.get(), feature_overrides, variant_index);
} else { } else {
// default_or_parent_region_config contains parent PrintRegion config, which already contains ModelVolume's config. // default_or_parent_region_config contains parent PrintRegion config, which already contains ModelVolume's config.
} }
apply_to_print_region_config(config, volume.config.get(), feature_overrides); apply_to_print_region_config(config, volume.config.get(), feature_overrides, variant_index);
if (! volume.material_id().empty()) if (! volume.material_id().empty())
apply_to_print_region_config(config, volume.material()->config.get(), feature_overrides); apply_to_print_region_config(config, volume.material()->config.get(), feature_overrides, variant_index);
if (layer_range_config != nullptr) { if (layer_range_config != nullptr) {
// Not applicable to modifiers. // Not applicable to modifiers.
assert(volume.is_model_part()); assert(volume.is_model_part());
apply_to_print_region_config(config, *layer_range_config, feature_overrides); apply_to_print_region_config(config, *layer_range_config, feature_overrides, variant_index);
} }
// Resolve feature defaults and clamp invalid extruders to index 1. // Resolve feature defaults and clamp invalid extruders to index 1.
clamp_feature_filament_to_valid(config.sparse_infill_filament_id, num_extruders); clamp_feature_filament_to_valid(config.sparse_infill_filament_id, num_extruders);
@@ -3749,7 +3895,7 @@ void PrintObject::update_slicing_parameters()
} }
// Orca: XYZ shrinkage compensation has introduced the const Vec3d &object_shrinkage_compensation parameter to the function below // Orca: XYZ shrinkage compensation has introduced the const Vec3d &object_shrinkage_compensation parameter to the function below
SlicingParameters PrintObject::slicing_parameters(const DynamicPrintConfig &full_config, const ModelObject &model_object, float object_max_z, const Vec3d &object_shrinkage_compensation) SlicingParameters PrintObject::slicing_parameters(const DynamicPrintConfig &full_config, const ModelObject &model_object, float object_max_z, const Vec3d &object_shrinkage_compensation, std::vector<int> variant_index)
{ {
PrintConfig print_config; PrintConfig print_config;
PrintObjectConfig object_config; PrintObjectConfig object_config;
@@ -3759,14 +3905,14 @@ SlicingParameters PrintObject::slicing_parameters(const DynamicPrintConfig &full
default_region_config.apply(full_config, true); default_region_config.apply(full_config, true);
// BBS // BBS
size_t filament_extruders = print_config.filament_diameter.size(); size_t filament_extruders = print_config.filament_diameter.size();
object_config = object_config_from_model_object(object_config, model_object, filament_extruders); object_config = object_config_from_model_object(object_config, model_object, filament_extruders, variant_index);
std::vector<unsigned int> object_extruders; std::vector<unsigned int> object_extruders;
for (const ModelVolume* model_volume : model_object.volumes) for (const ModelVolume* model_volume : model_object.volumes)
if (model_volume->is_model_part()) { if (model_volume->is_model_part()) {
PrintRegion::collect_object_printing_extruders( PrintRegion::collect_object_printing_extruders(
print_config, print_config,
region_config_from_model_volume(default_region_config, nullptr, *model_volume, filament_extruders), region_config_from_model_volume(default_region_config, nullptr, *model_volume, filament_extruders, variant_index),
object_config.brim_type != btNoBrim && object_config.brim_width > 0., object_config.brim_type != btNoBrim && object_config.brim_width > 0.,
object_extruders); object_extruders);
for (const std::pair<const t_layer_height_range, ModelConfig> &range_and_config : model_object.layer_config_ranges) for (const std::pair<const t_layer_height_range, ModelConfig> &range_and_config : model_object.layer_config_ranges)
@@ -3778,7 +3924,7 @@ SlicingParameters PrintObject::slicing_parameters(const DynamicPrintConfig &full
range_and_config.second.has("bottom_surface_filament_id")) range_and_config.second.has("bottom_surface_filament_id"))
PrintRegion::collect_object_printing_extruders( PrintRegion::collect_object_printing_extruders(
print_config, print_config,
region_config_from_model_volume(default_region_config, &range_and_config.second.get(), *model_volume, filament_extruders), region_config_from_model_volume(default_region_config, &range_and_config.second.get(), *model_volume, filament_extruders, variant_index),
object_config.brim_type != btNoBrim && object_config.brim_width > 0., object_config.brim_type != btNoBrim && object_config.brim_width > 0.,
object_extruders); object_extruders);
} }
+39
View File
@@ -1,6 +1,8 @@
#include <exception> #include <exception>
#include <cstdint>
#include "miniz_extension.hpp" #include "miniz_extension.hpp"
#include "Utils.hpp"
#if defined(_MSC_VER) || defined(__MINGW64__) #if defined(_MSC_VER) || defined(__MINGW64__)
#include "boost/nowide/cstdio.hpp" #include "boost/nowide/cstdio.hpp"
@@ -15,6 +17,33 @@
namespace Slic3r { namespace Slic3r {
namespace { namespace {
std::string decode_zip_unicode_path_extra_field(const std::string& extra, const std::string& path)
{
size_t offset = 0;
const mz_uint32 path_crc = mz_crc32(0, reinterpret_cast<const unsigned char*>(path.data()), path.size());
while (offset + 4 <= extra.size()) {
const unsigned char* field = reinterpret_cast<const unsigned char*>(extra.data() + offset);
const std::uint16_t len = field[2] | (static_cast<std::uint16_t>(field[3]) << 8);
if (offset + 4 + len > extra.size())
break;
if (field[0] == 0x75 && field[1] == 0x70 && len >= 5 && field[4] == 0x01) {
const mz_uint32 stored_crc =
static_cast<mz_uint32>(field[5]) |
(static_cast<mz_uint32>(field[6]) << 8) |
(static_cast<mz_uint32>(field[7]) << 16) |
(static_cast<mz_uint32>(field[8]) << 24);
if (stored_crc == path_crc)
return std::string(extra.data() + offset + 9, extra.data() + offset + 4 + len);
}
offset += 4 + len;
}
return Slic3r::decode_path(path.c_str());
}
bool open_zip(mz_zip_archive *zip, const char *fname, bool isread) bool open_zip(mz_zip_archive *zip, const char *fname, bool isread)
{ {
if (!zip) return false; if (!zip) return false;
@@ -76,6 +105,16 @@ bool open_zip_writer(mz_zip_archive *zip, const std::string &fname)
bool close_zip_reader(mz_zip_archive *zip) { return close_zip(zip, true); } bool close_zip_reader(mz_zip_archive *zip) { return close_zip(zip, true); }
bool close_zip_writer(mz_zip_archive *zip) { return close_zip(zip, false); } bool close_zip_writer(mz_zip_archive *zip) { return close_zip(zip, false); }
std::string decode_archive_entry_path(mz_zip_archive *zip, const mz_zip_archive_file_stat &stat)
{
if (stat.m_is_utf8)
return stat.m_filename;
std::string extra(1024, 0);
const size_t extra_size = mz_zip_reader_get_extra(zip, stat.m_file_index, extra.data(), extra.size());
return decode_zip_unicode_path_extra_field(extra.substr(0, extra_size > 0 ? extra_size - 1 : 0), stat.m_filename);
}
MZ_Archive::MZ_Archive() MZ_Archive::MZ_Archive()
{ {
mz_zip_zero_struct(&arch); mz_zip_zero_struct(&arch);
+1
View File
@@ -10,6 +10,7 @@ bool open_zip_reader(mz_zip_archive *zip, const std::string &fname_utf8);
bool open_zip_writer(mz_zip_archive *zip, const std::string &fname_utf8); bool open_zip_writer(mz_zip_archive *zip, const std::string &fname_utf8);
bool close_zip_reader(mz_zip_archive *zip); bool close_zip_reader(mz_zip_archive *zip);
bool close_zip_writer(mz_zip_archive *zip); bool close_zip_writer(mz_zip_archive *zip);
std::string decode_archive_entry_path(mz_zip_archive *zip, const mz_zip_archive_file_stat &stat);
class MZ_Archive { class MZ_Archive {
public: public:
+3 -1
View File
@@ -324,10 +324,12 @@ AboutDialog::AboutDialog()
m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size); m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
m_html->SetMinSize(wxSize(FromDIP(-1), FromDIP(16))); m_html->SetMinSize(wxSize(FromDIP(-1), FromDIP(16)));
m_html->SetBorders(2); m_html->SetBorders(2);
wxColour bgr_clr = GetBackgroundColour();
const auto bgr_clr_str = encode_color(ColorRGB(bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue()));
const auto text = from_u8( const auto text = from_u8(
(boost::format( (boost::format(
"<html>" "<html>"
"<body>" "<body bgcolor= \"" + bgr_clr_str + "\" >"
"<p style=\"text-align:left\"><a style=\"color:#009789\" href=\"https://www.orcaslicer.com\">https://www.orcaslicer.com</ a></p>" "<p style=\"text-align:left\"><a style=\"color:#009789\" href=\"https://www.orcaslicer.com\">https://www.orcaslicer.com</ a></p>"
"</body>" "</body>"
"</html>") "</html>")
+5 -5
View File
@@ -569,7 +569,7 @@ void MaterialSyncItem::doRender(wxDC &dc)
dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5); dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5);
if (m_selected) { if (m_selected) {
dc.SetPen(wxColour(0x00, 0xAE, 0x42)); dc.SetPen(wxColour("#009688")); // ORCA selected item border color
dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5); dc.DrawRoundedRectangle(1, 1, MATERIAL_ITEM_SIZE.x - 1, MATERIAL_ITEM_SIZE.y - 1, 5);
} }
@@ -580,7 +580,7 @@ void MaterialSyncItem::doRender(wxDC &dc)
dc.DrawRoundedRectangle(0, 0, MATERIAL_ITEM_SIZE.x, MATERIAL_ITEM_SIZE.y, 5); dc.DrawRoundedRectangle(0, 0, MATERIAL_ITEM_SIZE.x, MATERIAL_ITEM_SIZE.y, 5);
if (m_selected) { if (m_selected) {
dc.SetPen(wxPen(wxColour(0x00, 0xAE, 0x42), FromDIP(2))); dc.SetPen(wxPen(wxColour("#009688"), FromDIP(2))); // ORCA selected item border color
dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), MATERIAL_ITEM_SIZE.x - FromDIP(1), MATERIAL_ITEM_SIZE.y - FromDIP(1), 5); dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), MATERIAL_ITEM_SIZE.x - FromDIP(1), MATERIAL_ITEM_SIZE.y - FromDIP(1), 5);
} }
@@ -813,7 +813,7 @@ void AmsMapingPopup::msw_rescale()
m_split_left_line->SetMaxSize(wxSize(-1, 1)); m_split_left_line->SetMaxSize(wxSize(-1, 1));
sizer_split_ams->Add(0, 0, 0, wxEXPAND, 0); sizer_split_ams->Add(0, 0, 0, wxEXPAND, 0);
sizer_split_ams->Add(ams_title_text, 0, wxALIGN_CENTER, 0); sizer_split_ams->Add(ams_title_text, 0, wxALIGN_CENTER, 0);
sizer_split_ams->Add(m_split_left_line, 1, wxEXPAND, 0); sizer_split_ams->Add(m_split_left_line, 1, wxALIGN_CENTER, 0); // ORCA align line vertically
return sizer_split_ams; return sizer_split_ams;
} }
@@ -1420,7 +1420,7 @@ bool AmsMapingPopup::ProcessLeftDown(wxMouseEvent &event)
void AmsMapingPopup::paintEvent(wxPaintEvent &evt) void AmsMapingPopup::paintEvent(wxPaintEvent &evt)
{ {
wxPaintDC dc(this); wxPaintDC dc(this);
dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#009688")),FromDIP(2))); // ORCA use colorful border for separation
dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
} }
@@ -2281,7 +2281,7 @@ AmsRMGroup* AmsReplaceMaterialDialog::create_backup_group(wxString gname, std::m
void AmsReplaceMaterialDialog::paintEvent(wxPaintEvent& evt) void AmsReplaceMaterialDialog::paintEvent(wxPaintEvent& evt)
{ {
wxPaintDC dc(this); wxPaintDC dc(this);
dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); dc.SetPen(StateColor::darkModeColorFor(wxColour("#DBDBDB"))); // ORCA fix popup border color for dark mode
dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
} }
+26 -22
View File
@@ -30,6 +30,19 @@ BaseTransparentDPIFrame::BaseTransparentDPIFrame(
// SetBackgroundStyle(wxBackgroundStyle::wxBG_STYLE_TRANSPARENT); // SetBackgroundStyle(wxBackgroundStyle::wxBG_STYLE_TRANSPARENT);
SetTransparent(m_init_transparent); SetTransparent(m_init_transparent);
SetBackgroundColour(wxColour(23, 25, 22, 128)); SetBackgroundColour(wxColour(23, 25, 22, 128));
// ORCA add border
Bind(wxEVT_PAINT, [this](wxPaintEvent& evt) {
wxPaintDC dc(this);
dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#009688")), FromDIP(2)));
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
});
int window_padding = 15;
auto imgsize = 32;
auto imgright = 10;
//Adaptive Frame Width //Adaptive Frame Width
wxClientDC dc(parent); wxClientDC dc(parent);
wxSize msg_sz = dc.GetMultiLineTextExtent(ok_text); wxSize msg_sz = dc.GetMultiLineTextExtent(ok_text);
@@ -44,21 +57,16 @@ BaseTransparentDPIFrame::BaseTransparentDPIFrame(
m_sizer_main = new wxBoxSizer(wxVERTICAL); m_sizer_main = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *text_sizer = new wxBoxSizer(wxHORIZONTAL);
text_sizer->AddSpacer(FromDIP(20));
auto image_sizer = new wxBoxSizer(wxVERTICAL); auto completedimg = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("completed", this, imgsize), wxDefaultPosition, FromDIP(wxSize(imgsize, imgsize)), 0);
auto imgsize = FromDIP(25);
auto completedimg = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("completed", this, 25), wxDefaultPosition, wxSize(imgsize, imgsize), 0); text_sizer->Add(completedimg, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(imgright));
image_sizer->Add(completedimg, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(0));
image_sizer->AddStretchSpacer();
text_sizer->Add(image_sizer);
text_sizer->AddSpacer(FromDIP(5));
m_finish_text = new Label(this, win_text, LB_AUTO_WRAP); m_finish_text = new Label(this, win_text, LB_AUTO_WRAP);
m_finish_text->SetMinSize(wxSize(FromDIP(win_width - 64), -1)); m_finish_text->SetMinSize(wxSize(FromDIP(win_width - (window_padding * 2 + imgright + imgsize)), -1));
m_finish_text->SetMaxSize(wxSize(FromDIP(win_width - 64), -1)); m_finish_text->SetMaxSize(wxSize(FromDIP(win_width - (window_padding * 2 + imgright + imgsize)), -1));
m_finish_text->SetForegroundColour(wxColour(255, 255, 255, 255)); m_finish_text->SetForegroundColour(wxColour(255, 255, 255, 255));
text_sizer->Add(m_finish_text, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0); text_sizer->Add(m_finish_text, 0, wxALIGN_CENTER_VERTICAL);
text_sizer->AddSpacer(FromDIP(20)); m_sizer_main->Add(text_sizer, 0, wxALL, FromDIP(15));
m_sizer_main->Add(text_sizer, FromDIP(0), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxTOP, FromDIP(15));
wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL);
bSizer_button->SetMinSize(wxSize(FromDIP(100), -1)); bSizer_button->SetMinSize(wxSize(FromDIP(100), -1));
@@ -66,22 +74,18 @@ BaseTransparentDPIFrame::BaseTransparentDPIFrame(
bSizer_button->Add(m_checkbox, 0, wxALIGN_LEFT);*/ bSizer_button->Add(m_checkbox, 0, wxALIGN_LEFT);*/
bSizer_button->AddStretchSpacer(1); bSizer_button->AddStretchSpacer(1);
m_button_ok = new Button(this, ok_text); m_button_ok = new Button(this, ok_text);
m_button_ok->SetStyle(ButtonStyle::Confirm, ButtonType::Window); m_button_ok->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
m_button_ok->SetSize(wxSize(FromDIP(60), FromDIP(30))); bSizer_button->Add(m_button_ok, 0, wxALIGN_RIGHT | wxLEFT, FromDIP(10));
m_button_ok->SetMinSize(wxSize(FromDIP(90), FromDIP(30)));
bSizer_button->Add(m_button_ok, 0, wxALIGN_RIGHT | wxLEFT | wxTOP, FromDIP(10));
m_button_ok->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { deal_ok(); }); m_button_ok->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { deal_ok(); });
m_button_cancel = new Button(this, cancel_text); m_button_cancel = new Button(this, cancel_text);
m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Window); m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_cancel->SetSize(wxSize(FromDIP(65), FromDIP(30))); bSizer_button->Add(m_button_cancel, 0, wxALIGN_RIGHT | wxLEFT, FromDIP(10));
m_button_cancel->SetMinSize(wxSize(FromDIP(65), FromDIP(30)));
bSizer_button->Add(m_button_cancel, 0, wxALIGN_RIGHT | wxLEFT | wxTOP, FromDIP(10));
m_button_cancel->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { deal_cancel(); }); m_button_cancel->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxCommandEvent &e) { deal_cancel(); });
m_sizer_main->Add(bSizer_button, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(20)); m_sizer_main->Add(bSizer_button, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(window_padding));
Bind(wxEVT_CLOSE_WINDOW, [this](auto &e) { Bind(wxEVT_CLOSE_WINDOW, [this](auto &e) {
on_hide(); on_hide();
+14 -12
View File
@@ -8,7 +8,6 @@
#include <boost/nowide/convert.hpp> #include <boost/nowide/convert.hpp>
#include <wx/sizer.h> #include <wx/sizer.h>
#include <wx/button.h>
#include <wx/listctrl.h> #include <wx/listctrl.h>
#include <wx/stattext.h> #include <wx/stattext.h>
#include <wx/timer.h> #include <wx/timer.h>
@@ -20,6 +19,8 @@
#include "slic3r/GUI/format.hpp" #include "slic3r/GUI/format.hpp"
#include "slic3r/Utils/Bonjour.hpp" #include "slic3r/Utils/Bonjour.hpp"
#include "slic3r/GUI/Widgets/DialogButtons.hpp"
namespace Slic3r { namespace Slic3r {
@@ -63,30 +64,30 @@ BonjourDialog::BonjourDialog(wxWindow *parent, Slic3r::PrinterTechnology tech)
, timer_state(0) , timer_state(0)
, tech(tech) , tech(tech)
{ {
SetBackgroundColour(*wxWHITE);
const int em = GUI::wxGetApp().em_unit(); const int em = GUI::wxGetApp().em_unit();
list->SetMinSize(wxSize(80 * em, 30 * em)); list->SetMinSize(wxSize(80 * em, 30 * em));
wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL);
label->SetFont(Label::Body_14);
vsizer->Add(label, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, em); vsizer->Add(label, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, em);
list->SetSingleStyle(wxLC_SINGLE_SEL); list->SetSingleStyle(wxLC_SINGLE_SEL);
list->SetSingleStyle(wxLC_SORT_DESCENDING); list->SetSingleStyle(wxLC_SORT_DESCENDING);
list->AppendColumn(_(L("Address")), wxLIST_FORMAT_LEFT, 5 * em); list->AppendColumn(_(L("Address")), wxLIST_FORMAT_LEFT, 20 * em);
list->AppendColumn(_(L("Hostname")), wxLIST_FORMAT_LEFT, 10 * em); list->AppendColumn(_(L("Hostname")), wxLIST_FORMAT_LEFT, 10 * em);
list->AppendColumn(_(L("Service name")), wxLIST_FORMAT_LEFT, 20 * em); list->AppendColumn(_(L("Service name")), wxLIST_FORMAT_LEFT, 20 * em);
if (tech == ptFFF) { if (tech == ptFFF) {
list->AppendColumn(_(L("OctoPrint version")), wxLIST_FORMAT_LEFT, 5 * em); list->AppendColumn(_(L("OctoPrint version")), wxLIST_FORMAT_LEFT, 15 * em);
} }
vsizer->Add(list, 1, wxEXPAND | wxALL, em); vsizer->Add(list, 1, wxEXPAND | wxALL, em);
wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL); auto dlg_btns = new GUI::DialogButtons(this, {"OK", "Cancel"});
button_sizer->Add(new wxButton(this, wxID_OK, _L("OK")), 0, wxALL, em);
button_sizer->Add(new wxButton(this, wxID_CANCEL, _L("Cancel")), 0, wxALL, em);
// ^ Note: The Ok/Cancel labels are translated by wxWidgets
vsizer->Add(button_sizer, 0, wxALIGN_CENTER); vsizer->Add(dlg_btns, 0, wxEXPAND);
SetSizerAndFit(vsizer); SetSizerAndFit(vsizer);
Bind(EVT_BONJOUR_REPLY, &BonjourDialog::on_reply, this); Bind(EVT_BONJOUR_REPLY, &BonjourDialog::on_reply, this);
@@ -241,12 +242,15 @@ IPListDialog::IPListDialog(wxWindow* parent, const wxString& hostname, const std
, m_list(new wxListView(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxSIMPLE_BORDER)) , m_list(new wxListView(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxSIMPLE_BORDER))
, m_selected_index (selected_index) , m_selected_index (selected_index)
{ {
SetBackgroundColour(*wxWHITE);
const int em = GUI::wxGetApp().em_unit(); const int em = GUI::wxGetApp().em_unit();
m_list->SetMinSize(wxSize(40 * em, 30 * em)); m_list->SetMinSize(wxSize(40 * em, 30 * em));
wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL);
auto* label = new wxStaticText(this, wxID_ANY, GUI::format_wxstr(_L("There are several IP addresses resolving to hostname %1%.\nPlease select one that should be used."), hostname)); auto* label = new wxStaticText(this, wxID_ANY, GUI::format_wxstr(_L("There are several IP addresses resolving to hostname %1%.\nPlease select one that should be used."), hostname));
label->SetFont(Label::Body_14);
vsizer->Add(label, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, em); vsizer->Add(label, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, em);
m_list->SetSingleStyle(wxLC_SINGLE_SEL); m_list->SetSingleStyle(wxLC_SINGLE_SEL);
@@ -259,11 +263,9 @@ IPListDialog::IPListDialog(wxWindow* parent, const wxString& hostname, const std
vsizer->Add(m_list, 1, wxEXPAND | wxALL, em); vsizer->Add(m_list, 1, wxEXPAND | wxALL, em);
wxBoxSizer* button_sizer = new wxBoxSizer(wxHORIZONTAL); auto dlg_btns = new GUI::DialogButtons(this, {"OK", "Cancel"});
button_sizer->Add(new wxButton(this, wxID_OK, _L("OK")), 0, wxALL, em);
button_sizer->Add(new wxButton(this, wxID_CANCEL, _L("Cancel")), 0, wxALL, em);
vsizer->Add(button_sizer, 0, wxALIGN_CENTER); vsizer->Add(dlg_btns, 0, wxEXPAND);
SetSizerAndFit(vsizer); SetSizerAndFit(vsizer);
GUI::wxGetApp().UpdateDlgDarkUI(this); GUI::wxGetApp().UpdateDlgDarkUI(this);
+31 -1
View File
@@ -713,6 +713,36 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in
toggle_field("top_layer_direction", has_top_shell); toggle_field("top_layer_direction", has_top_shell);
toggle_field("bottom_layer_direction", has_bottom_shell); toggle_field("bottom_layer_direction", has_bottom_shell);
toggle_line("top_surface_expansion", has_top_shell);
toggle_line("top_surface_expansion_margin", has_top_shell);
bool has_top_surface_expansion = config->opt_float("top_surface_expansion") > 0;
toggle_field("top_surface_expansion_margin", has_top_surface_expansion);
toggle_line("top_surface_expansion_direction", has_top_shell);
toggle_field("top_surface_expansion_direction", has_top_surface_expansion);
// Orca: Archimedean Chords and Octagram Spiral are the centered surface patterns that the
// pattern-centering, anisotropic-surface and separated-infill features act on.
auto is_centered_pattern = [](InfillPattern p) {
return p == InfillPattern::ipArchimedeanChords || p == InfillPattern::ipOctagramSpiral;
};
bool is_top_centered = is_centered_pattern(config->option<ConfigOptionEnum<InfillPattern>>("top_surface_pattern")->value);
bool is_bottom_centered = is_centered_pattern(config->option<ConfigOptionEnum<InfillPattern>>("bottom_surface_pattern")->value);
bool has_centered_surface = (has_top_shell && is_top_centered) || (has_bottom_shell && is_bottom_centered);
// Orca: center of surface pattern / anisotropic surfaces
toggle_line("center_of_surface_pattern", has_centered_surface);
toggle_line("anisotropic_surfaces", has_centered_surface);
// Orca: separate infills
bool is_internal_infill_separable = is_separable_infill_pattern(config->option<ConfigOptionEnum<InfillPattern>>("sparse_infill_pattern")->value) ||
config->opt_string("sparse_infill_rotate_template") != "" ||
config->opt_string("solid_infill_rotate_template") != "";
toggle_line("separated_infills", is_internal_infill_separable);
// Orca: no need gaps
for (auto el : {"gap_fill_target", "filter_out_gap_fill"})
toggle_field(el, !config->opt_bool("anisotropic_surfaces"));
for (auto el : { "infill_direction", "sparse_infill_line_width", "gap_fill_target","filter_out_gap_fill","infill_wall_overlap", for (auto el : { "infill_direction", "sparse_infill_line_width", "gap_fill_target","filter_out_gap_fill","infill_wall_overlap",
"bridge_angle", "internal_bridge_angle", "relative_bridge_angle", "bridge_angle", "internal_bridge_angle", "relative_bridge_angle",
"solid_infill_direction", "solid_infill_rotate_template", "internal_solid_infill_pattern", "internal_solid_filament_id", "top_surface_filament_id", "bottom_surface_filament_id", "solid_infill_direction", "solid_infill_rotate_template", "internal_solid_infill_pattern", "internal_solid_filament_id", "top_surface_filament_id", "bottom_surface_filament_id",
@@ -916,7 +946,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in
toggle_line("wipe_tower_extra_rib_length", have_rib_wall); toggle_line("wipe_tower_extra_rib_length", have_rib_wall);
toggle_line("wipe_tower_rib_width", have_rib_wall); toggle_line("wipe_tower_rib_width", have_rib_wall);
toggle_line("wipe_tower_fillet_wall", have_rib_wall); toggle_line("wipe_tower_fillet_wall", have_rib_wall);
toggle_field("prime_tower_width", have_prime_tower && (supports_wipe_tower_2 || have_rib_wall)); toggle_field("prime_tower_width", have_prime_tower && !have_rib_wall);
toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && supports_wipe_tower_2); toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && supports_wipe_tower_2);
+1 -1
View File
@@ -239,7 +239,7 @@ void ExtrusionCalibration::create()
m_button_save_result->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); m_button_save_result->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
m_button_save_result->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_save, this); m_button_save_result->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_save, this);
m_button_last_step = new Button(m_step_2_panel, _L("Back")); // Back for english m_button_last_step = new Button(m_step_2_panel, _CTX("Back", "Navigation")); // Back for english
m_button_last_step->SetStyle(ButtonStyle::Regular, ButtonType::Choice); m_button_last_step->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_last_step->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_last, this); m_button_last_step->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_last, this);
+1
View File
@@ -936,6 +936,7 @@ bool TextCtrl::value_was_changed()
case coString: case coString:
case coStrings: case coStrings:
case coFloatOrPercent: case coFloatOrPercent:
case coFloatsOrPercents:
return boost::any_cast<std::string>(m_value) != boost::any_cast<std::string>(val); return boost::any_cast<std::string>(m_value) != boost::any_cast<std::string>(val);
default: default:
return true; return true;
+1 -10
View File
@@ -221,16 +221,7 @@ FileArchiveDialog::FileArchiveDialog(wxWindow* parent_window, mz_zip_archive* ar
std::vector<std::pair<boost::filesystem::path, size_t>> filtered_entries; // second is unzipped size std::vector<std::pair<boost::filesystem::path, size_t>> filtered_entries; // second is unzipped size
for (mz_uint i = 0; i < num_entries; ++i) { for (mz_uint i = 0; i < num_entries; ++i) {
if (mz_zip_reader_file_stat(archive, i, &stat)) { if (mz_zip_reader_file_stat(archive, i, &stat)) {
std::string extra(1024, 0); boost::filesystem::path path = Slic3r::decode_archive_entry_path(archive, stat);
boost::filesystem::path path;
size_t extra_size = mz_zip_reader_get_filename_from_extra(archive, i, extra.data(), extra.size());
if (extra_size > 0) {
path = boost::filesystem::path(extra.substr(0, extra_size));
} else {
wxString wname = boost::nowide::widen(stat.m_filename);
std::string name = into_u8(wname);
path = boost::filesystem::path(name);
}
assert(!path.empty()); assert(!path.empty());
if (!path.has_extension()) if (!path.has_extension())
continue; continue;
+12 -8
View File
@@ -489,7 +489,7 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode
const float main_row_h = 2.0f * text_h + item_spacing_y; // Two lines of text (position and detail) + spacing between them const float main_row_h = 2.0f * text_h + item_spacing_y; // Two lines of text (position and detail) + spacing between them
const float properties_h = static_cast<float>(properties_rows.size()) * (text_h + 2.0f * cell_pad_y) + 2.0f * cell_pad_y + 1.0f + item_spacing_y // table rows const float properties_h = static_cast<float>(properties_rows.size()) * (text_h + 2.0f * cell_pad_y) + 2.0f * cell_pad_y + 1.0f + item_spacing_y // table rows
+ item_spacing_y + show_button_h // Spacing() + Show/Hide button row + item_spacing_y + show_button_h // Spacing() + Show/Hide button row
+ item_spacing_y + 1.0f + style.FramePadding.y; // Spacing() + Separator() + Dummy() + item_spacing_y + 1.0f + style.WindowPadding.y; // Spacing() + Separator() + Dummy()
const float folded_window_h = std::ceil(window_pad_h + main_row_h); // Height of the window when properties are hidden, with padding, rounded up for better look const float folded_window_h = std::ceil(window_pad_h + main_row_h); // Height of the window when properties are hidden, with padding, rounded up for better look
const float unfolded_window_h = std::ceil(folded_window_h + properties_h); // Height of the window when properties are shown, with padding, rounded up for better look const float unfolded_window_h = std::ceil(folded_window_h + properties_h); // Height of the window when properties are shown, with padding, rounded up for better look
const float window_h = properties_shown ? unfolded_window_h : folded_window_h; // Final window height depending on whether properties are shown or not const float window_h = properties_shown ? unfolded_window_h : folded_window_h; // Final window height depending on whether properties are shown or not
@@ -615,9 +615,12 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode
ImGui::Spacing(); ImGui::Spacing();
ImGui::Separator(); ImGui::Separator();
ImGui::Dummy({0, style.FramePadding.y}); ImGui::Dummy({0, style.WindowPadding.y});
} }
float draw_area_height = ImGui::GetTextLineHeight() * 2.f + style.ItemSpacing.y;
ImGui::Dummy({10.f, draw_area_height}); // reserve area
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * m_scale);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(2.f, 2.f) * m_scale); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(2.f, 2.f) * m_scale);
ImGui::PushStyleColor(ImGuiCol_Button , ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_Button , ImVec4(0, 0, 0, 0));
@@ -625,6 +628,10 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode
ImGui::PushStyleColor(ImGuiCol_ButtonActive , ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive , ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f));
const float main_wnd_height = ImGui::GetWindowHeight(); const float main_wnd_height = ImGui::GetWindowHeight();
const float draw_start_y = main_wnd_height - draw_area_height - style.WindowPadding.y;
ImGui::SetCursorPos(ImVec2(style.WindowPadding.x, draw_start_y));
// ORCA use glyph based button for fixing button sizes changing depends on used font size on platform // ORCA use glyph based button for fixing button sizes changing depends on used font size on platform
const wchar_t foldIcon = properties_shown ? ImGui::UnfoldButtonIcon : ImGui::FoldButtonIcon; const wchar_t foldIcon = properties_shown ? ImGui::UnfoldButtonIcon : ImGui::FoldButtonIcon;
if (imgui.glyph_button(foldIcon, ImVec2(16.f, 16.f) * m_scale)) { if (imgui.glyph_button(foldIcon, ImVec2(16.f, 16.f) * m_scale)) {
@@ -640,10 +647,7 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode
ImGui::PopStyleColor(3); ImGui::PopStyleColor(3);
ImGui::PopStyleVar(2); ImGui::PopStyleVar(2);
ImGui::SameLine(); ImGui::SetCursorPos(ImVec2(style.WindowPadding.x + style.ItemSpacing.x + 24.f * m_scale, draw_start_y - 1.f * m_scale));
if(!properties_shown)
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - style.FramePadding.y); // aligns button with next group
ImGui::BeginGroup(); // group contents to make information area more compact ImGui::BeginGroup(); // group contents to make information area more compact
@@ -4258,7 +4262,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
}; };
auto append_print = [&imgui, imperial_units](const ColorRGBA& color, const std::array<float, 4>& offsets, const Times& times, std::pair<double, double> used_filament) { auto append_print = [&imgui, imperial_units](const ColorRGBA& color, const std::array<float, 4>& offsets, const Times& times, std::pair<double, double> used_filament) {
imgui.text(_u8L("Print")); imgui.text(_CTX_utf8("Print", "Noun"));
ImGui::SameLine(); ImGui::SameLine();
float icon_size = ImGui::GetTextLineHeight(); float icon_size = ImGui::GetTextLineHeight();
@@ -4292,7 +4296,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
for (const PartialTime& item : partial_times) { for (const PartialTime& item : partial_times) {
switch (item.type) switch (item.type)
{ {
case PartialTime::EType::Print: { labels.push_back(_u8L("Print")); break; } case PartialTime::EType::Print: { labels.push_back(_CTX_utf8("Print", "Noun")); break; }
case PartialTime::EType::Pause: { labels.push_back(_u8L("Pause")); break; } case PartialTime::EType::Pause: { labels.push_back(_u8L("Pause")); break; }
case PartialTime::EType::ColorChange: { labels.push_back(_u8L("Color change")); break; } case PartialTime::EType::ColorChange: { labels.push_back(_u8L("Color change")); break; }
} }
+248 -128
View File
@@ -1231,6 +1231,14 @@ GLCanvas3D::~GLCanvas3D()
glsafe(::glDeleteTextures(1, &m_ssao_depth_texture_id)); glsafe(::glDeleteTextures(1, &m_ssao_depth_texture_id));
m_ssao_depth_texture_id = 0; m_ssao_depth_texture_id = 0;
} }
if (m_shadow_map_texture_id != 0) {
glsafe(::glDeleteTextures(1, &m_shadow_map_texture_id));
m_shadow_map_texture_id = 0;
}
if (m_shadow_map_fbo != 0) {
glsafe(::glDeleteFramebuffers(1, &m_shadow_map_fbo));
m_shadow_map_fbo = 0;
}
m_plate_shadow_mask.reset(); m_plate_shadow_mask.reset();
} }
m_plate_shadow_mask_key.clear(); m_plate_shadow_mask_key.clear();
@@ -2033,6 +2041,9 @@ void GLCanvas3D::render(bool only_init)
// draw scene // draw scene
glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
// Invalidate the shadow map each frame; only the View3D path below rebuilds it. This keeps
// the Preview / Assemble canvases from sampling a stale map with an outdated light matrix.
m_shadow_map_valid = false;
_render_background(); _render_background();
//BBS add partplater rendering logic //BBS add partplater rendering logic
@@ -2057,7 +2068,8 @@ void GLCanvas3D::render(bool only_init)
_render_platelist(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), only_current, only_body, hover_id, true, show_grid); _render_platelist(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), only_current, only_body, hover_id, true, show_grid);
//BBS: add outline logic //BBS: add outline logic
_render_cast_shadows_on_plate(camera.get_view_matrix(), camera.get_projection_matrix()); // Depth pass for object-on-object and self shadows; consumed by the gouraud shader below.
_render_shadows(camera.get_view_matrix(), camera.get_projection_matrix());
_render_objects(GLVolumeCollection::ERenderType::Opaque, !m_gizmos.is_running()); _render_objects(GLVolumeCollection::ERenderType::Opaque, !m_gizmos.is_running());
_render_sla_slices(); _render_sla_slices();
_render_selection(); _render_selection();
@@ -6036,11 +6048,11 @@ void GLCanvas3D::_render_3d_navigator()
strcpy(style.AxisLabels[ImGuizmo::Axis::Axis_Y], "Z"); // ORCA use uppercase to match text on tranform widgets strcpy(style.AxisLabels[ImGuizmo::Axis::Axis_Y], "Z"); // ORCA use uppercase to match text on tranform widgets
strcpy(style.AxisLabels[ImGuizmo::Axis::Axis_Z], "X"); // ORCA use uppercase to match text on tranform widgets strcpy(style.AxisLabels[ImGuizmo::Axis::Axis_Z], "X"); // ORCA use uppercase to match text on tranform widgets
strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_FRONT], _utf8("Front").c_str()); strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_FRONT], _utf8("Front").c_str());
strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_BACK], _utf8("Back").c_str()); strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_BACK], _CTX_utf8("Back", "Camera View").c_str());
strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_TOP], _utf8("Top").c_str()); strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_TOP], _utf8("Top").c_str());
strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_BOTTOM], _utf8("Bottom").c_str()); strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_BOTTOM], _utf8("Bottom").c_str());
strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_LEFT], _CTX_utf8(L_CONTEXT("Left", "Camera"), "Camera").c_str()); strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_LEFT], _CTX_utf8("Left", "Camera View").c_str());
strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_RIGHT], _CTX_utf8(L_CONTEXT("Right", "Camera"), "Camera").c_str()); strcpy(style.FaceLabels[ImGuizmo::FACES::FACE_RIGHT], _CTX_utf8("Right", "Camera View").c_str());
float sc = get_scale(); float sc = get_scale();
#ifdef WIN32 #ifdef WIN32
@@ -7858,9 +7870,8 @@ void GLCanvas3D::_render_platelist(const Transform3d& view_matrix, const Transfo
wxGetApp().plater()->get_partplate_list().render(view_matrix, projection_matrix, bottom, only_current, only_body, hover_id, render_cali, show_grid); wxGetApp().plater()->get_partplate_list().render(view_matrix, projection_matrix, bottom, only_current, only_body, hover_id, render_cali, show_grid);
} }
void GLCanvas3D::_render_cast_shadows_on_plate(const Transform3d& view_matrix, const Transform3d& projection_matrix) void GLCanvas3D::_render_shadows(const Transform3d& view_matrix, const Transform3d& projection_matrix)
{ {
// Check if shadow rendering is enabled in configuration
if (wxGetApp().app_config == nullptr) if (wxGetApp().app_config == nullptr)
return; return;
if (!wxGetApp().app_config->get_bool(SETTING_OPENGL_REALISTIC_MODE)) if (!wxGetApp().app_config->get_bool(SETTING_OPENGL_REALISTIC_MODE))
@@ -7874,54 +7885,181 @@ void GLCanvas3D::_render_cast_shadows_on_plate(const Transform3d& view_matrix, c
if (shader == nullptr) if (shader == nullptr)
return; return;
// Fixed light direction (pointing downward at an angle) if (OpenGLManager::get_framebuffers_type() == OpenGLManager::EFramebufferType::Arb) {
// Drive shadow direction from current view angle: define light in eye-space,
// then transform it to world-space with inverse view rotation.
const Vec3d light_dir_eye = Vec3d(-0.4574957, 0.4574957, 0.7624929).normalized();
const Matrix3d view_rot = view_matrix.matrix().block<3, 3>(0, 0);
const Vec3d light_dir_to_light = (view_rot.transpose() * light_dir_eye).normalized();
const Vec3d ray_dir = -light_dir_to_light; // Direction of shadow projection
if (std::abs(ray_dir.z()) < 1e-6) // Light direction (same as used in shading and plate shading)
const Vec3d light_dir_eye = Vec3d(-0.4574957, 0.4574957, 0.7624929).normalized();
const Matrix3d view_rot = view_matrix.matrix().block<3, 3>(0, 0);
const Vec3d dir_to_light = (view_rot.transpose() * light_dir_eye).normalized();
// Bounding box of the printable objects (the shadow casters).
BoundingBoxf3 obj_bb;
for (const GLVolume* volume : m_volumes.volumes) {
if (volume == nullptr || !volume->is_active || !volume->printable || volume->is_modifier || volume->is_wipe_tower)
continue;
obj_bb.merge(volume->transformed_bounding_box());
}
if (!obj_bb.defined)
return; // no objects to cast shadows
// Orthographic light-space basis (z points toward the light).
const Vec3d up = (std::abs(dir_to_light.z()) > 0.99) ? Vec3d::UnitY() : Vec3d::UnitZ();
const Vec3d z_axis = dir_to_light;
const Vec3d x_axis = up.cross(z_axis).normalized();
const Vec3d y_axis = z_axis.cross(x_axis).normalized();
// Fit the frustum to the object AABB *and* the object's shadow projected onto the plate
// (clamped to the plate footprint). This keeps the map tight/high-res for short shadows
// while still covering long shadows at grazing light angles, which previously fell outside
// the map and were clipped.
const Vec3d ray_dir = -dir_to_light; // direction the shadow travels
const BoundingBoxf3 plate_bb = m_bed.build_volume().valid() ? m_bed.build_volume().bounding_volume() : obj_bb;
Vec3d lmin(DBL_MAX, DBL_MAX, DBL_MAX);
Vec3d lmax(-DBL_MAX, -DBL_MAX, -DBL_MAX);
auto enclose = [&](const Vec3d& p) {
const Vec3d lp(x_axis.dot(p), y_axis.dot(p), z_axis.dot(p));
lmin = lmin.cwiseMin(lp);
lmax = lmax.cwiseMax(lp);
};
for (int i = 0; i < 8; ++i) {
const Vec3d corner((i & 1) ? obj_bb.max.x() : obj_bb.min.x(),
(i & 2) ? obj_bb.max.y() : obj_bb.min.y(),
(i & 4) ? obj_bb.max.z() : obj_bb.min.z());
enclose(corner);
// Where this corner's shadow lands on z = 0, clamped to the plate so a grazing angle
// (t -> infinity) stays bounded.
if (ray_dir.z() < -1e-6) {
const double t = -corner.z() / ray_dir.z();
Vec3d s = corner + t * ray_dir;
s.x() = std::min(std::max(s.x(), plate_bb.min.x()), plate_bb.max.x());
s.y() = std::min(std::max(s.y(), plate_bb.min.y()), plate_bb.max.y());
s.z() = 0.0;
enclose(s);
}
}
// Light "camera" placed just past the nearest enclosed point, looking toward the scene.
const double range = lmax.z() - lmin.z();
const double margin = std::max(1.0, 0.05 * range);
const double cx = 0.5 * (lmin.x() + lmax.x());
const double cy = 0.5 * (lmin.y() + lmax.y());
const Vec3d eye = x_axis * cx + y_axis * cy + z_axis * (lmax.z() + margin);
Matrix4d light_view = Matrix4d::Identity();
light_view.block<1, 3>(0, 0) = x_axis.transpose();
light_view.block<1, 3>(1, 0) = y_axis.transpose();
light_view.block<1, 3>(2, 0) = z_axis.transpose();
light_view(0, 3) = -x_axis.dot(eye);
light_view(1, 3) = -y_axis.dot(eye);
light_view(2, 3) = -z_axis.dot(eye);
// Ortho fit to the light-space extent (symmetric in X/Y around cx,cy; +2% edge padding).
const double halfx = std::max(0.5 * (lmax.x() - lmin.x()), 1.0) * 1.02;
const double halfy = std::max(0.5 * (lmax.y() - lmin.y()), 1.0) * 1.02;
const double near_z = margin * 0.5;
const double far_z = range + margin * 1.5;
Matrix4d light_proj = Matrix4d::Identity();
light_proj(0, 0) = 1.0 / halfx;
light_proj(1, 1) = 1.0 / halfy;
light_proj(2, 2) = -2.0 / (far_z - near_z);
light_proj(2, 3) = -(far_z + near_z) / (far_z - near_z);
m_shadow_light_vp = Transform3d(light_proj * light_view);
// Create / resize the depth texture and FBO
const unsigned int size = 2048;
if (m_shadow_map_texture_id == 0) {
glsafe(::glGenTextures(1, &m_shadow_map_texture_id));
glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER));
glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER));
const float border[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
glsafe(::glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border));
m_shadow_map_size = 0;
}
if (m_shadow_map_size != size) {
glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id));
glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, size, size, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr));
m_shadow_map_size = size;
}
if (m_shadow_map_fbo == 0)
glsafe(::glGenFramebuffers(1, &m_shadow_map_fbo));
// Save OpenGL state that we will modify
GLint prev_viewport[4] = { 0, 0, 0, 0 };
glsafe(::glGetIntegerv(GL_VIEWPORT, prev_viewport));
GLint prev_fbo = 0;
glsafe(::glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prev_fbo));
GLboolean prev_color_mask[4] = { GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE };
glsafe(::glGetBooleanv(GL_COLOR_WRITEMASK, prev_color_mask));
const GLboolean prev_cull = ::glIsEnabled(GL_CULL_FACE);
GLint prev_depth_func = GL_LESS;
glsafe(::glGetIntegerv(GL_DEPTH_FUNC, &prev_depth_func));
GLboolean prev_depth_mask = GL_TRUE;
glsafe(::glGetBooleanv(GL_DEPTH_WRITEMASK, &prev_depth_mask));
glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, m_shadow_map_fbo));
glsafe(::glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_shadow_map_texture_id, 0));
glsafe(::glDrawBuffer(GL_NONE));
glsafe(::glReadBuffer(GL_NONE));
if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, static_cast<GLuint>(prev_fbo)));
m_shadow_map_valid = false;
} else {
glsafe(::glViewport(0, 0, size, size));
glsafe(::glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE));
glsafe(::glEnable(GL_DEPTH_TEST));
glsafe(::glDepthMask(GL_TRUE));
glsafe(::glDepthFunc(GL_LESS));
glsafe(::glClear(GL_DEPTH_BUFFER_BIT));
glsafe(::glEnable(GL_POLYGON_OFFSET_FILL));
glsafe(::glPolygonOffset(4.0f, 4.0f));
glsafe(::glDisable(GL_CULL_FACE));
shader->start_using();
shader->set_uniform("projection_matrix", Transform3d(light_proj));
for (GLVolume* volume : m_volumes.volumes) {
if (volume == nullptr || !volume->is_active || !volume->printable || volume->is_modifier || volume->is_wipe_tower)
continue;
const Transform3d view_model = Transform3d(light_view) * volume->world_matrix();
shader->set_uniform("view_model_matrix", view_model);
volume->model.render(shader);
}
shader->stop_using();
// Restore state
glsafe(::glDisable(GL_POLYGON_OFFSET_FILL));
glsafe(::glColorMask(prev_color_mask[0], prev_color_mask[1], prev_color_mask[2], prev_color_mask[3]));
if (prev_cull)
glsafe(::glEnable(GL_CULL_FACE));
else
glsafe(::glDisable(GL_CULL_FACE));
glsafe(::glDepthFunc(prev_depth_func));
glsafe(::glDepthMask(prev_depth_mask));
glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, static_cast<GLuint>(prev_fbo)));
glsafe(::glViewport(prev_viewport[0], prev_viewport[1], prev_viewport[2], prev_viewport[3]));
m_shadow_map_valid = true;
}
} else {
m_shadow_map_valid = false;
}
// ----------------------------------------------------------------------------------
// Unified plate shadow: draw the build-plate footprint and darken it wherever the same
// depth shadow map (built above) says the light is occluded. This replaces the old planar
// stencil projection so plate, object and self shadows all come from one technique.
// ----------------------------------------------------------------------------------
if (!m_shadow_map_valid)
return; return;
// Shadow projection matrix - flattens geometry onto Z=0 plane along light direction GLShaderProgram* plate_shader = wxGetApp().get_shader("printbed_shadow");
Matrix4d shadow_proj = Matrix4d::Identity(); if (plate_shader == nullptr)
shadow_proj(0, 2) = -ray_dir.x() / ray_dir.z(); return;
shadow_proj(1, 2) = -ray_dir.y() / ray_dir.z();
shadow_proj(2, 0) = 0.0;
shadow_proj(2, 1) = 0.0;
shadow_proj(2, 2) = 0.0;
shadow_proj(2, 3) = 0.01; // Bias to prevent shadow acne
// Save OpenGL state
GLint prev_depth_func = GL_LESS;
glsafe(::glGetIntegerv(GL_DEPTH_FUNC, &prev_depth_func));
GLboolean prev_depth_mask = GL_TRUE;
glsafe(::glGetBooleanv(GL_DEPTH_WRITEMASK, &prev_depth_mask));
GLint prev_stencil_mask = 0xFF;
glsafe(::glGetIntegerv(GL_STENCIL_WRITEMASK, &prev_stencil_mask));
GLboolean prev_stencil_test = GL_FALSE;
glsafe(::glGetBooleanv(GL_STENCIL_TEST, &prev_stencil_test));
// ============================================================
// PASS 0: Create stencil mask for the build plate (value = 1)
// ============================================================
glsafe(::glEnable(GL_STENCIL_TEST));
glsafe(::glStencilMask(0xFF));
glsafe(::glClearStencil(0));
glsafe(::glClear(GL_STENCIL_BUFFER_BIT));
glsafe(::glStencilFunc(GL_ALWAYS, 1, 0xFF));
glsafe(::glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE));
glsafe(::glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE));
glsafe(::glDisable(GL_DEPTH_TEST));
shader->start_using();
shader->set_uniform("projection_matrix", projection_matrix);
// Draw the build plate (cached model to avoid per-frame uploads)
if (const BuildVolume& build_volume = m_bed.build_volume(); build_volume.valid()) { if (const BuildVolume& build_volume = m_bed.build_volume(); build_volume.valid()) {
const std::string mask_key = build_volume.type() == BuildVolume_Type::Rectangle const std::string mask_key = build_volume.type() == BuildVolume_Type::Rectangle
? (boost::format("rect|%1$.5f|%2$.5f|%3$.5f|%4$.5f") ? (boost::format("rect|%1$.5f|%2$.5f|%3$.5f|%4$.5f")
@@ -7977,87 +8115,49 @@ void GLCanvas3D::_render_cast_shadows_on_plate(const Transform3d& view_matrix, c
} }
if (m_plate_shadow_mask.is_initialized()) { if (m_plate_shadow_mask.is_initialized()) {
shader->set_uniform("view_model_matrix", view_matrix); // Blend the shadow over the already-drawn plate. Depth test keeps it behind anything
m_plate_shadow_mask.render(shader); // already in front; depth writes are off, and a small negative polygon offset lifts it
// just above the bed to avoid z-fighting.
GLboolean prev_depth_mask = GL_TRUE;
glsafe(::glGetBooleanv(GL_DEPTH_WRITEMASK, &prev_depth_mask));
GLint prev_depth_func = GL_LESS;
glsafe(::glGetIntegerv(GL_DEPTH_FUNC, &prev_depth_func));
glsafe(::glEnable(GL_DEPTH_TEST));
glsafe(::glDepthMask(GL_FALSE));
glsafe(::glDepthFunc(GL_LEQUAL));
glsafe(::glEnable(GL_BLEND));
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
glsafe(::glEnable(GL_POLYGON_OFFSET_FILL));
glsafe(::glPolygonOffset(-1.0f, -1.0f));
glsafe(::glActiveTexture(GL_TEXTURE4));
glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id));
glsafe(::glActiveTexture(GL_TEXTURE0));
plate_shader->start_using();
plate_shader->set_uniform("view_model_matrix", view_matrix);
plate_shader->set_uniform("projection_matrix", projection_matrix);
plate_shader->set_uniform("shadow_map", 4);
plate_shader->set_uniform("shadow_light_vp", m_shadow_light_vp);
plate_shader->set_uniform("shadow_intensity", 0.35f);
plate_shader->set_uniform("shadow_map_texel", 1.0f / static_cast<float>(m_shadow_map_size));
m_plate_shadow_mask.render(plate_shader);
plate_shader->stop_using();
glsafe(::glActiveTexture(GL_TEXTURE4));
glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
glsafe(::glActiveTexture(GL_TEXTURE0));
glsafe(::glDisable(GL_POLYGON_OFFSET_FILL));
glsafe(::glDisable(GL_BLEND));
glsafe(::glDepthFunc(prev_depth_func));
glsafe(::glDepthMask(prev_depth_mask));
} }
} }
// ============================================================
// PASS 1: Project object shadows onto plate (increment stencil to 2)
// ============================================================
// Only render where plate exists (stencil == 1), then increment to 2
glsafe(::glStencilFunc(GL_EQUAL, 1, 0xFF));
glsafe(::glStencilOp(GL_KEEP, GL_KEEP, GL_INCR));
glsafe(::glDepthMask(GL_FALSE));
glsafe(::glEnable(GL_DEPTH_TEST));
glsafe(::glDepthFunc(GL_ALWAYS)); // Shadows don't need depth testing
glsafe(::glEnable(GL_POLYGON_OFFSET_FILL));
glsafe(::glPolygonOffset(-2.0f, -2.0f));
glsafe(::glDisable(GL_CULL_FACE));
// Render projected shadow geometry
for (GLVolume* volume : m_volumes.volumes) {
if (volume == nullptr || !volume->is_active || !volume->printable || volume->is_modifier || volume->is_wipe_tower)
continue;
// CRITICAL FIX: Apply shadow projection in object's local space, then to world, then to view
// This ensures shadows are cast from the object's actual position
Matrix4d world_matrix = volume->world_matrix().matrix();
// Project the shadow - this flattens the geometry onto Z=0 in WORLD space
Matrix4d shadow_world_matrix = shadow_proj * world_matrix;
// Transform to view space for rendering
Matrix4d view_shadow_matrix = view_matrix.matrix() * shadow_world_matrix;
shader->set_uniform("view_model_matrix", view_shadow_matrix);
shader->set_uniform("projection_matrix", projection_matrix);
volume->model.render(shader);
}
// ============================================================
// PASS 2: Draw shadow color where stencil == 2
// ============================================================
glsafe(::glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE));
glsafe(::glStencilFunc(GL_EQUAL, 2, 0xFF));
glsafe(::glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP));
glsafe(::glStencilMask(0x00));
glsafe(::glDepthFunc(GL_ALWAYS));
glsafe(::glEnable(GL_BLEND));
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
// Draw shadow fill
shader->set_uniform("view_model_matrix", Transform3d::Identity());
shader->set_uniform("projection_matrix", Transform3d::Identity());
const ColorRGBA shadow_fill_color(0.0f, 0.0f, 0.0f, 0.4f); // Darker shadow for visibility
const ColorRGBA prev_bg_color = m_background.get_geometry().color;
m_background.set_color(shadow_fill_color);
shader->set_uniform("uniform_color", shadow_fill_color);
m_background.render(shader);
m_background.set_color(prev_bg_color);
shader->set_uniform("uniform_color", prev_bg_color);
shader->stop_using();
// ============================================================
// RESTORE STATE
// ============================================================
glsafe(::glEnable(GL_DEPTH_TEST));
glsafe(::glDepthMask(prev_depth_mask));
glsafe(::glDepthFunc(prev_depth_func));
glsafe(::glEnable(GL_CULL_FACE));
glsafe(::glDisable(GL_POLYGON_OFFSET_FILL));
glsafe(::glDisable(GL_BLEND));
if (!prev_stencil_test)
glsafe(::glDisable(GL_STENCIL_TEST));
glsafe(::glStencilMask(prev_stencil_mask));
} }
void GLCanvas3D::_render_plane() const void GLCanvas3D::_render_plane() const
{ {
;//TODO render assemble plane ;//TODO render assemble plane
@@ -8142,6 +8242,20 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with
const bool phong_ssao = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_PHONG_SSAO); const bool phong_ssao = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_PHONG_SSAO);
shader->set_uniform("enable_ssao", phong_ssao); shader->set_uniform("enable_ssao", phong_ssao);
// Object-on-object and self shadows: sample the depth map built in _render_shadow_map_pass().
// shadow_intensity == 0 disables the effect entirely (unchanged behavior when off / unsupported).
if (m_shadow_map_valid && m_shadow_map_texture_id != 0) {
glsafe(::glActiveTexture(GL_TEXTURE4));
glsafe(::glBindTexture(GL_TEXTURE_2D, m_shadow_map_texture_id));
glsafe(::glActiveTexture(GL_TEXTURE0));
shader->set_uniform("shadow_map", 4);
shader->set_uniform("shadow_light_vp", m_shadow_light_vp);
shader->set_uniform("shadow_map_texel", 1.0f / static_cast<float>(m_shadow_map_size));
shader->set_uniform("shadow_intensity", 0.35f);
}
else
shader->set_uniform("shadow_intensity", 0.0f);
const Size& cvn_size = get_canvas_size(); const Size& cvn_size = get_canvas_size();
{ {
const Camera& camera = wxGetApp().plater()->get_camera(); const Camera& camera = wxGetApp().plater()->get_camera();
@@ -8233,6 +8347,12 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with
shader->set_uniform("show_wireframe", false); shader->set_uniform("show_wireframe", false);
}*/ }*/
if (m_shadow_map_valid && m_shadow_map_texture_id != 0) {
glsafe(::glActiveTexture(GL_TEXTURE4));
glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
glsafe(::glActiveTexture(GL_TEXTURE0));
}
shader->stop_using(); shader->stop_using();
} }
@@ -9324,7 +9444,7 @@ void GLCanvas3D::_render_canvas_toolbar()
); );
create_menu_item( _utf8(L("Realistic View")), create_menu_item( _utf8(L("Realistic View")),
true, m_canvas_type != ECanvasType::CanvasPreview, // not work on preview
cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE), cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE),
[this, &cfg]{ [this, &cfg]{
cfg->set_bool(SETTING_OPENGL_REALISTIC_MODE, !cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE)); cfg->set_bool(SETTING_OPENGL_REALISTIC_MODE, !cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE));
+9 -1
View File
@@ -732,6 +732,12 @@ public:
std::array<unsigned int, 2> m_ssao_texture_size{ { 0, 0 } }; std::array<unsigned int, 2> m_ssao_texture_size{ { 0, 0 } };
GLModel m_plate_shadow_mask; GLModel m_plate_shadow_mask;
std::string m_plate_shadow_mask_key; std::string m_plate_shadow_mask_key;
// Depth-based shadow map used to cast object shadows onto other objects and themselves.
unsigned int m_shadow_map_fbo{ 0 };
unsigned int m_shadow_map_texture_id{ 0 };
unsigned int m_shadow_map_size{ 0 };
Transform3d m_shadow_light_vp{ Transform3d::Identity() };
bool m_shadow_map_valid{ false };
public: public:
explicit GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed); explicit GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed);
~GLCanvas3D(); ~GLCanvas3D();
@@ -1251,7 +1257,9 @@ private:
void _render_ssao_pass(unsigned int width, unsigned int height); void _render_ssao_pass(unsigned int width, unsigned int height);
void _render_background(); void _render_background();
void _render_bed(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_axes); void _render_bed(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool show_axes);
void _render_cast_shadows_on_plate(const Transform3d& view_matrix, const Transform3d& projection_matrix); // Build the light-space depth shadow map (consumed by gouraud/phong for object & self shadows)
// and cast it onto the build plate. Realistic view only.
void _render_shadows(const Transform3d& view_matrix, const Transform3d& projection_matrix);
//BBS: add part plate related logic //BBS: add part plate related logic
void _render_platelist(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body = false, int hover_id = -1, bool render_cali = false, bool show_grid = true); void _render_platelist(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body = false, int hover_id = -1, bool render_cali = false, bool show_grid = true);
//BBS: add outline drawing logic //BBS: add outline drawing logic
+1 -2
View File
@@ -457,10 +457,9 @@ void GLModel::init_from(const indexed_triangle_set& its)
data.reserve_indices(3 * its.indices.size()); data.reserve_indices(3 * its.indices.size());
// Read user preference: smooth normals enabled // Read user preference: smooth normals enabled
const bool realistic_mode = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_REALISTIC_MODE);
const bool smooth_normals_enabled = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_PHONG_SMOOTH_NORMALS); const bool smooth_normals_enabled = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_PHONG_SMOOTH_NORMALS);
if (realistic_mode && smooth_normals_enabled) { if (smooth_normals_enabled) {
// Use per-corner smooth normals (via IGL) // Use per-corner smooth normals (via IGL)
using MapMatrixXfUnaligned = Eigen::Map<const Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor | Eigen::DontAlign>>; using MapMatrixXfUnaligned = Eigen::Map<const Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor | Eigen::DontAlign>>;
using MapMatrixXiUnaligned = Eigen::Map<const Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor | Eigen::DontAlign>>; using MapMatrixXiUnaligned = Eigen::Map<const Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor | Eigen::DontAlign>>;
+4
View File
@@ -68,6 +68,10 @@ std::pair<bool, std::string> GLShadersManager::init()
valid &= append_shader("thumbnail", { prefix + "thumbnail.vs", prefix + "thumbnail.fs"}); valid &= append_shader("thumbnail", { prefix + "thumbnail.vs", prefix + "thumbnail.fs"});
// used to render printbed // used to render printbed
valid &= append_shader("printbed", { prefix + "printbed.vs", prefix + "printbed.fs" }); valid &= append_shader("printbed", { prefix + "printbed.vs", prefix + "printbed.fs" });
#if !SLIC3R_OPENGL_ES
// used to cast the object shadow map onto the build plate (realistic view)
valid &= append_shader("printbed_shadow", { prefix + "printbed_shadow.vs", prefix + "printbed_shadow.fs" });
#endif // !SLIC3R_OPENGL_ES
valid &= append_shader("hotbed", {prefix + "hotbed.vs", prefix + "hotbed.fs"}); valid &= append_shader("hotbed", {prefix + "hotbed.vs", prefix + "hotbed.fs"});
// used to render options in gcode preview // used to render options in gcode preview
if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 3)) { if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 3)) {
+18 -2
View File
@@ -6965,6 +6965,10 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
// finishFn tears down the progress dialog (and clears the re-entrancy guard), so it // finishFn tears down the progress dialog (and clears the re-entrancy guard), so it
// must run on every exit path — otherwise an early bail-out would leak the modal // must run on every exit path — otherwise an early bail-out would leak the modal
// dialog and leave the guard stuck, blocking all later manual syncs. // dialog and leave the guard stuck, blocking all later manual syncs.
// Guard the whole thread body: an uncaught exception here (e.g. a transient
// boost::filesystem error while scanning the preset folder) would otherwise
// propagate out of the thread and terminate the entire application.
try {
if (!m_agent) { finishFn(false); return; } if (!m_agent) { finishFn(false); return; }
// One-time scan for orphaned .info files left over from offline deletions; queues HTTP DELETEs. // One-time scan for orphaned .info files left over from offline deletions; queues HTTP DELETEs.
@@ -7206,6 +7210,11 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
boost::this_thread::sleep_for(boost::chrono::milliseconds(500)); boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
} }
} }
} catch (const std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "user preset sync thread terminated by exception: " << e.what();
} catch (...) {
BOOST_LOG_TRIVIAL(error) << "user preset sync thread terminated by unknown exception";
}
}); });
} }
@@ -8526,8 +8535,13 @@ void GUI_App::scan_orphaned_info_files()
if (!fs::exists(type_dir)) if (!fs::exists(type_dir))
continue; continue;
// Iterate through all .info files // Iterate through all .info files. Use the error_code-based iterator so a transient
for (auto& entry : boost::filesystem::directory_iterator(type_dir)) { // directory-read failure (e.g. macOS readdir returning ENOTSUP) is logged and skipped
// instead of throwing an uncaught exception that would terminate the app from the
// background sync thread this runs on.
boost::system::error_code ec;
for (boost::filesystem::directory_iterator it(type_dir, ec), end; !ec && it != end; it.increment(ec)) {
const auto& entry = *it;
if (entry.path().extension() != ".info") if (entry.path().extension() != ".info")
continue; continue;
@@ -8546,6 +8560,8 @@ void GUI_App::scan_orphaned_info_files()
} }
} }
} }
if (ec)
BOOST_LOG_TRIVIAL(warning) << "scan_orphaned_info_files: failed to scan " << type_dir.string() << ": " << ec.message();
} }
} }
+4 -1
View File
@@ -132,6 +132,9 @@ std::map<std::string, std::vector<SimpleSettingData>> SettingsFactory::PART_CATE
{"infill_anchor", "", 1}, {"infill_anchor", "", 1},
{"infill_anchor_max", "", 1}, {"infill_anchor_max", "", 1},
{"top_surface_pattern", "", 1}, {"top_surface_pattern", "", 1},
{"top_surface_expansion", "", 1},
{"top_surface_expansion_margin", "", 1},
{"top_surface_expansion_direction", "", 1},
{"bottom_surface_pattern", "", 1}, {"bottom_surface_pattern", "", 1},
{"internal_solid_infill_pattern", "", 1}, {"internal_solid_infill_pattern", "", 1},
{"align_infill_direction_to_model", "", 1}, {"align_infill_direction_to_model", "", 1},
@@ -187,7 +190,7 @@ std::vector<SimpleSettingData> SettingsFactory::get_visible_options(const std::s
//Quality //Quality
"wall_infill_order", "ironing_type", "inner_wall_line_width", "outer_wall_line_width", "top_surface_line_width", "wall_infill_order", "ironing_type", "inner_wall_line_width", "outer_wall_line_width", "top_surface_line_width",
//Shell //Shell
"wall_loops", "top_shell_layers", "bottom_shell_layers", "top_shell_thickness", "bottom_shell_thickness", "wall_loops", "top_shell_layers", "bottom_shell_layers", "top_shell_thickness", "bottom_shell_thickness", "top_surface_expansion", "top_surface_expansion_margin", "top_surface_expansion_direction",
//Infill //Infill
"sparse_infill_density", "sparse_infill_pattern", "top_surface_pattern", "bottom_surface_pattern", "infill_combination", "infill_direction", "infill_wall_overlap", "sparse_infill_density", "sparse_infill_pattern", "top_surface_pattern", "bottom_surface_pattern", "infill_combination", "infill_direction", "infill_wall_overlap",
//speed //speed
+1 -1
View File
@@ -1905,7 +1905,7 @@ bool GLGizmoAdvancedCut::render_slider_double_input(const std::string &label, fl
mean_size *= float(units_mm_to_in); mean_size *= float(units_mm_to_in);
min_size *= float(units_mm_to_in); min_size *= float(units_mm_to_in);
} }
std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _u8L("in") : "%.2f " + _u8L("mm"); std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _CTX_utf8("in", "inches") : "%.2f " + _u8L("mm");
m_imgui->bbl_slider_float_style(("##" + label).c_str(), &value, min_size, mean_size, format.c_str()); m_imgui->bbl_slider_float_style(("##" + label).c_str(), &value, min_size, mean_size, format.c_str());
+5 -5
View File
@@ -241,7 +241,7 @@ std::string GLGizmoCut3D::get_tooltip() const
std::string tooltip; std::string tooltip;
if (m_hover_id == Z || (m_dragging && m_hover_id == CutPlane)) { if (m_hover_id == Z || (m_dragging && m_hover_id == CutPlane)) {
double koef = m_imperial_units ? GizmoObjectManipulation::mm_to_in : 1.0; double koef = m_imperial_units ? GizmoObjectManipulation::mm_to_in : 1.0;
std::string unit_str = " " + (m_imperial_units ? _u8L("in") : _u8L("mm")); std::string unit_str = " " + (m_imperial_units ? _CTX_utf8("in", "inches") : _u8L("mm"));
const BoundingBoxf3& tbb = m_transformed_bounding_box; const BoundingBoxf3& tbb = m_transformed_bounding_box;
const std::string name = m_keep_as_parts ? _u8L("Part") : _u8L("Object"); const std::string name = m_keep_as_parts ? _u8L("Part") : _u8L("Object");
@@ -541,7 +541,7 @@ bool GLGizmoCut3D::render_double_input(const std::string& label, double& value_i
ImGui::InputDouble(("##" + label).c_str(), &value, 0.0f, 0.0f, "%.2f", ImGuiInputTextFlags_CharsDecimal); ImGui::InputDouble(("##" + label).c_str(), &value, 0.0f, 0.0f, "%.2f", ImGuiInputTextFlags_CharsDecimal);
ImGui::SameLine(); ImGui::SameLine();
m_imgui->text(m_imperial_units ? _L("in") : _L("mm")); m_imgui->text(m_imperial_units ? _CTX("in", "inches") : _L("mm"));
value_in = value * (m_imperial_units ? GizmoObjectManipulation::in_to_mm : 1.0); value_in = value * (m_imperial_units ? GizmoObjectManipulation::in_to_mm : 1.0);
return !is_approx(old_val, value); return !is_approx(old_val, value);
@@ -582,7 +582,7 @@ bool GLGizmoCut3D::render_slider_two_input(const std::string& label, float& valu
if (m_imperial_units) { if (m_imperial_units) {
min_size *= f_mm_to_in; min_size *= f_mm_to_in;
} }
std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _u8L("in") : "%.2f " + _u8L("mm"); std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _CTX_utf8("in", "inches") : "%.2f " + _u8L("mm");
m_imgui->bbl_slider_float_style(("##" + label).c_str(), &value, min_size, mean_size, format.c_str()); m_imgui->bbl_slider_float_style(("##" + label).c_str(), &value, min_size, mean_size, format.c_str());
@@ -653,7 +653,7 @@ bool GLGizmoCut3D::render_slider_input(const std::string& label, float& value_in
if (m_imperial_units) { if (m_imperial_units) {
min_size *= f_mm_to_in; min_size *= f_mm_to_in;
} }
std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _u8L("in") : "%.2f " + _u8L("mm"); std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _CTX_utf8("in", "inches") : "%.2f " + _u8L("mm");
m_imgui->bbl_slider_float_style(("##" + label).c_str(), &value, min_size, max_value, format.c_str()); m_imgui->bbl_slider_float_style(("##" + label).c_str(), &value, min_size, max_value, format.c_str());
@@ -2472,7 +2472,7 @@ void GLGizmoCut3D::render_connectors_input_window(CutConnectors &connectors, flo
void GLGizmoCut3D::render_build_size() void GLGizmoCut3D::render_build_size()
{ {
double koef = m_imperial_units ? GizmoObjectManipulation::mm_to_in : 1.0; double koef = m_imperial_units ? GizmoObjectManipulation::mm_to_in : 1.0;
wxString unit_str = m_imperial_units ? _L("in") : _L("mm"); wxString unit_str = m_imperial_units ? _CTX("in", "inches") : _L("mm");
Vec3d tbb_sz = m_transformed_bounding_box.size() * koef; // ORCA Vec3d tbb_sz = m_transformed_bounding_box.size() * koef; // ORCA
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
+1 -1
View File
@@ -1951,7 +1951,7 @@ void GLGizmoEmboss::draw_model_type()
float minimum_spacing_x = 8.0f; float minimum_spacing_x = 8.0f;
float minimum_offset_x = ImGui::GetCursorPosX() + minimum_spacing_x; float minimum_offset_x = ImGui::GetCursorPosX() + minimum_spacing_x;
float offset_x = std::max(m_gui_cfg->input_offset, minimum_offset_x); float offset_x = std::max(m_gui_cfg->input_offset, minimum_offset_x);
ImGui::SameLine(offset_x); ImGui::SameLine();
ImGuiWrapper::push_radio_style(m_parent.get_scale()); // ORCA ImGuiWrapper::push_radio_style(m_parent.get_scale()); // ORCA
if (ImGui::RadioButton(_u8L("Join").c_str(), type == part)) if (ImGui::RadioButton(_u8L("Join").c_str(), type == part))
@@ -315,6 +315,17 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l
ImGui::SameLine(drag_left_width + sliders_left_width); ImGui::SameLine(drag_left_width + sliders_left_width);
ImGui::PushItemWidth(1.5 * slider_icon_width); ImGui::PushItemWidth(1.5 * slider_icon_width);
ImGui::BBLDragFloat("##cursor_radius_input", &m_cursor_radius, 0.05f, 0.0f, 0.0f, "%.2f"); ImGui::BBLDragFloat("##cursor_radius_input", &m_cursor_radius, 0.05f, 0.0f, 0.0f, "%.2f");
if (m_imgui->bbl_checkbox(_L("Vertical"), m_vertical_only)) {
if (m_vertical_only) {
m_horizontal_only = false;
}
}
if (m_imgui->bbl_checkbox(_L("Horizontal"), m_horizontal_only)) {
if (m_horizontal_only) {
m_vertical_only = false;
}
}
} else if (m_current_tool == ImGui::SphereButtonIcon) { } else if (m_current_tool == ImGui::SphereButtonIcon) {
m_cursor_type = TriangleSelector::CursorType::SPHERE; m_cursor_type = TriangleSelector::CursorType::SPHERE;
m_tool_type = ToolType::BRUSH; m_tool_type = ToolType::BRUSH;
@@ -327,6 +338,17 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l
ImGui::SameLine(drag_left_width + sliders_left_width); ImGui::SameLine(drag_left_width + sliders_left_width);
ImGui::PushItemWidth(1.5 * slider_icon_width); ImGui::PushItemWidth(1.5 * slider_icon_width);
ImGui::BBLDragFloat("##cursor_radius_input", &m_cursor_radius, 0.05f, 0.0f, 0.0f, "%.2f"); ImGui::BBLDragFloat("##cursor_radius_input", &m_cursor_radius, 0.05f, 0.0f, 0.0f, "%.2f");
if (m_imgui->bbl_checkbox(_L("Vertical"), m_vertical_only)) {
if (m_vertical_only) {
m_horizontal_only = false;
}
}
if (m_imgui->bbl_checkbox(_L("Horizontal"), m_horizontal_only)) {
if (m_horizontal_only) {
m_vertical_only = false;
}
}
} else if (m_current_tool == ImGui::FillButtonIcon) { } else if (m_current_tool == ImGui::FillButtonIcon) {
m_cursor_type = TriangleSelector::CursorType::POINTER; m_cursor_type = TriangleSelector::CursorType::POINTER;
m_tool_type = ToolType::SMART_FILL; m_tool_type = ToolType::SMART_FILL;
+3 -3
View File
@@ -1252,7 +1252,7 @@ void GLGizmoMeasure::render_dimensioning()
const bool use_inches = wxGetApp().app_config->get_bool("use_inches"); const bool use_inches = wxGetApp().app_config->get_bool("use_inches");
const double curr_value = use_inches ? GizmoObjectManipulation::mm_to_in * distance : distance; const double curr_value = use_inches ? GizmoObjectManipulation::mm_to_in * distance : distance;
const std::string curr_value_str = format_double(curr_value); const std::string curr_value_str = format_double(curr_value);
const std::string units = use_inches ? _u8L("in") : _u8L("mm"); const std::string units = use_inches ? _CTX_utf8("in", "inches") : _u8L("mm");
const float value_str_width = 20.0f + ImGui::CalcTextSize(curr_value_str.c_str()).x; const float value_str_width = 20.0f + ImGui::CalcTextSize(curr_value_str.c_str()).x;
static double edit_value = 0.0; static double edit_value = 0.0;
@@ -1303,7 +1303,7 @@ void GLGizmoMeasure::render_dimensioning()
return; return;
const double ratio = new_value / old_value; const double ratio = new_value / old_value;
wxGetApp().plater()->take_snapshot(_u8L("Scale"), UndoRedo::SnapshotType::GizmoAction); wxGetApp().plater()->take_snapshot(_CTX_utf8("Scale", "Verb"), UndoRedo::SnapshotType::GizmoAction);
// apply scale // apply scale
TransformationType type; TransformationType type;
type.set_world(); type.set_world();
@@ -2130,7 +2130,7 @@ void GLGizmoMeasure::show_face_face_assembly_senior()
void GLGizmoMeasure::init_render_input_window() void GLGizmoMeasure::init_render_input_window()
{ {
m_use_inches = wxGetApp().app_config->get_bool("use_inches"); m_use_inches = wxGetApp().app_config->get_bool("use_inches");
m_units = m_use_inches ? " " + _u8L("in") : " " + _u8L("mm"); m_units = " " + (m_use_inches ? _CTX_utf8("in", "inches") : _u8L("mm"));
m_space_size = ImGui::CalcTextSize(" ").x * 2; m_space_size = ImGui::CalcTextSize(" ").x * 2;
m_input_size_max = ImGui::CalcTextSize("-100.00").x * 1.2; m_input_size_max = ImGui::CalcTextSize("-100.00").x * 1.2;
m_same_model_object = is_two_volume_in_same_model_object(); m_same_model_object = is_two_volume_in_same_model_object();

Some files were not shown because too many files have changed in this diff Show More