mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-29 03:41:31 +00:00
Merge branch 'main' into feature/protobuf_config_and_dynamic_ui
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -160,8 +160,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
|
||||||
@@ -354,11 +372,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
|
||||||
@@ -471,26 +506,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
|
||||||
|
|||||||
@@ -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 }}
|
||||||
|
|
||||||
|
|||||||
@@ -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 }}
|
||||||
@@ -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
|
||||||
;;
|
;;
|
||||||
* )
|
* )
|
||||||
@@ -216,13 +216,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..."
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -154,10 +160,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
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:50-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"
|
||||||
@@ -325,6 +325,7 @@ msgstr ""
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -368,6 +369,9 @@ msgstr ""
|
|||||||
msgid "Object operations"
|
msgid "Object operations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Scale"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Volume operations"
|
msgid "Volume operations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -413,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 ""
|
||||||
@@ -3499,6 +3507,7 @@ msgstr ""
|
|||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "Navigation"
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4781,6 +4790,7 @@ msgstr ""
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4936,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 ""
|
||||||
|
|
||||||
@@ -5257,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 ""
|
||||||
|
|
||||||
@@ -13920,6 +13938,9 @@ msgstr ""
|
|||||||
msgid "Aligned back"
|
msgid "Aligned back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Random"
|
msgid "Random"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -376,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"
|
||||||
@@ -427,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"
|
||||||
@@ -3652,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"
|
||||||
|
|
||||||
@@ -5035,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"
|
||||||
|
|
||||||
@@ -5198,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"
|
||||||
|
|
||||||
@@ -5531,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"
|
||||||
|
|
||||||
@@ -14808,6 +14825,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"
|
||||||
|
|
||||||
@@ -19647,6 +19668,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Imprimir"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "polç"
|
#~ msgstr "polç"
|
||||||
|
|
||||||
@@ -21103,10 +21127,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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -371,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í"
|
||||||
@@ -422,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"
|
||||||
@@ -3651,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"
|
||||||
|
|
||||||
@@ -5032,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"
|
||||||
|
|
||||||
@@ -5195,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ý"
|
||||||
|
|
||||||
@@ -5527,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"
|
||||||
|
|
||||||
@@ -14855,6 +14872,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ě"
|
||||||
|
|
||||||
@@ -19681,6 +19702,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Tisk"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "v"
|
#~ msgstr "v"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -371,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"
|
||||||
@@ -422,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"
|
||||||
@@ -3654,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"
|
||||||
|
|
||||||
@@ -5036,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"
|
||||||
|
|
||||||
@@ -5199,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"
|
||||||
|
|
||||||
@@ -5529,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"
|
||||||
|
|
||||||
@@ -14962,6 +14979,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"
|
||||||
|
|
||||||
@@ -19822,6 +19843,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "aktuelle Platte drucken"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "in"
|
#~ msgstr "in"
|
||||||
|
|
||||||
@@ -21730,10 +21754,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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -321,6 +321,7 @@ msgstr ""
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -364,6 +365,9 @@ msgstr ""
|
|||||||
msgid "Object operations"
|
msgid "Object operations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Scale"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Volume operations"
|
msgid "Volume operations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -409,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 ""
|
||||||
@@ -3495,6 +3503,7 @@ msgstr ""
|
|||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "Navigation"
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4777,6 +4786,7 @@ msgstr ""
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -4932,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 ""
|
||||||
|
|
||||||
@@ -5253,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 ""
|
||||||
|
|
||||||
@@ -13916,6 +13934,9 @@ msgstr ""
|
|||||||
msgid "Aligned back"
|
msgid "Aligned back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Random"
|
msgid "Random"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -332,7 +333,7 @@ msgstr "Error: Por favor, cierre primero todos los menús de la barra de herrami
|
|||||||
|
|
||||||
msgctxt "inches"
|
msgctxt "inches"
|
||||||
msgid "in"
|
msgid "in"
|
||||||
msgstr ""
|
msgstr "\""
|
||||||
|
|
||||||
msgid "mm"
|
msgid "mm"
|
||||||
msgstr "mm"
|
msgstr "mm"
|
||||||
@@ -364,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"
|
||||||
|
|
||||||
@@ -409,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"
|
||||||
@@ -3580,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"
|
||||||
|
|
||||||
@@ -4709,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"
|
||||||
@@ -4930,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"
|
||||||
@@ -5089,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"
|
||||||
|
|
||||||
@@ -5416,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"
|
||||||
|
|
||||||
@@ -5488,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"
|
||||||
@@ -9190,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."
|
||||||
@@ -10896,7 +10914,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"
|
||||||
@@ -12750,7 +12768,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"
|
||||||
@@ -14657,6 +14675,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"
|
||||||
|
|
||||||
@@ -19429,6 +19450,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Imprimir"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "pulg"
|
#~ msgstr "pulg"
|
||||||
|
|
||||||
@@ -21012,10 +21036,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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -367,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"
|
||||||
|
|
||||||
@@ -412,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"
|
||||||
@@ -3569,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"
|
||||||
|
|
||||||
@@ -4916,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"
|
||||||
|
|
||||||
@@ -5075,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"
|
||||||
|
|
||||||
@@ -5402,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"
|
||||||
|
|
||||||
@@ -14628,6 +14646,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"
|
||||||
|
|
||||||
@@ -19397,6 +19418,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Imprimer"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "dans"
|
#~ msgstr "dans"
|
||||||
|
|
||||||
@@ -21107,10 +21131,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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -368,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"
|
||||||
@@ -419,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"
|
||||||
@@ -3645,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"
|
||||||
|
|
||||||
@@ -5026,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"
|
||||||
|
|
||||||
@@ -5189,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"
|
||||||
|
|
||||||
@@ -5521,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"
|
||||||
|
|
||||||
@@ -14880,6 +14897,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û"
|
||||||
|
|
||||||
@@ -19712,6 +19733,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Nyomtatás"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "in"
|
#~ msgstr "in"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-0300\n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: \n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -371,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"
|
||||||
@@ -422,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"
|
||||||
@@ -3646,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"
|
||||||
|
|
||||||
@@ -5027,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"
|
||||||
|
|
||||||
@@ -5190,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"
|
||||||
|
|
||||||
@@ -5522,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"
|
||||||
|
|
||||||
@@ -14854,6 +14871,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"
|
||||||
|
|
||||||
@@ -19692,6 +19713,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Stampa"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "in"
|
#~ msgstr "in"
|
||||||
|
|
||||||
@@ -21208,10 +21232,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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-0300\n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: \n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
@@ -327,6 +327,7 @@ msgstr "ギズモ-回転"
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr "向きを最適化"
|
msgstr "向きを最適化"
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr "スケール"
|
msgstr "スケール"
|
||||||
|
|
||||||
@@ -371,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 "操作"
|
||||||
@@ -422,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 "サイズ"
|
||||||
@@ -3629,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 "背面"
|
||||||
|
|
||||||
@@ -5000,6 +5008,7 @@ msgstr "ツールチェンジ"
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr "色変更"
|
msgstr "色変更"
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr "造形する"
|
msgstr "造形する"
|
||||||
|
|
||||||
@@ -5163,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 "右"
|
||||||
|
|
||||||
@@ -5489,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 "エクスポート"
|
||||||
|
|
||||||
@@ -14502,6 +14519,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 "ランダム"
|
||||||
|
|
||||||
@@ -19160,6 +19181,9 @@ msgstr ""
|
|||||||
"反りを避ける\n"
|
"反りを避ける\n"
|
||||||
"ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?"
|
"ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "造形する"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "に"
|
#~ msgstr "に"
|
||||||
|
|
||||||
@@ -20106,10 +20130,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方向調整"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -331,6 +331,7 @@ msgstr "변형도구 - 회전"
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr "방향 최적화"
|
msgstr "방향 최적화"
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr "배율"
|
msgstr "배율"
|
||||||
|
|
||||||
@@ -375,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 "용량 작업"
|
||||||
@@ -426,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 "크기"
|
||||||
@@ -3644,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 "뒷면"
|
||||||
|
|
||||||
@@ -5026,6 +5034,7 @@ msgstr ""
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr "색 변경"
|
msgstr "색 변경"
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr "출력"
|
msgstr "출력"
|
||||||
|
|
||||||
@@ -5189,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 "오른쪽"
|
||||||
|
|
||||||
@@ -5517,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 "플레이트 슬라이스 파일 내보내기"
|
||||||
|
|
||||||
@@ -14720,6 +14737,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 "무작위"
|
||||||
|
|
||||||
@@ -19528,6 +19549,9 @@ msgstr ""
|
|||||||
"뒤틀림 방지\n"
|
"뒤틀림 방지\n"
|
||||||
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
|
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "출력"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "인치"
|
#~ msgstr "인치"
|
||||||
|
|
||||||
@@ -21019,10 +21043,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 올리기"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -369,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 ""
|
||||||
|
|
||||||
@@ -414,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"
|
||||||
@@ -3576,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"
|
||||||
|
|
||||||
@@ -4906,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"
|
||||||
|
|
||||||
@@ -5069,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ė"
|
||||||
|
|
||||||
@@ -5396,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ą"
|
||||||
|
|
||||||
@@ -14604,6 +14622,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ė"
|
||||||
|
|
||||||
@@ -19346,6 +19367,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Spausdinti"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "col."
|
#~ msgstr "col."
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-0300\n"
|
||||||
"PO-Revision-Date: \n"
|
"PO-Revision-Date: \n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -371,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"
|
||||||
@@ -422,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"
|
||||||
@@ -3611,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"
|
||||||
|
|
||||||
@@ -4971,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 ""
|
||||||
|
|
||||||
@@ -5129,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"
|
||||||
|
|
||||||
@@ -5457,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"
|
||||||
|
|
||||||
@@ -14427,6 +14444,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"
|
||||||
|
|
||||||
@@ -20321,10 +20342,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)"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -373,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"
|
||||||
@@ -424,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"
|
||||||
@@ -3649,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ł"
|
||||||
|
|
||||||
@@ -5023,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"
|
||||||
|
|
||||||
@@ -5186,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"
|
||||||
|
|
||||||
@@ -5518,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"
|
||||||
|
|
||||||
@@ -14738,6 +14755,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"
|
||||||
|
|
||||||
@@ -19542,6 +19563,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Drukuj"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "cal"
|
#~ msgstr "cal"
|
||||||
|
|
||||||
@@ -21000,10 +21024,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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -369,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"
|
||||||
|
|
||||||
@@ -414,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"
|
||||||
@@ -3580,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"
|
||||||
|
|
||||||
@@ -4940,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"
|
||||||
|
|
||||||
@@ -5102,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"
|
||||||
|
|
||||||
@@ -5433,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"
|
||||||
|
|
||||||
@@ -14720,6 +14738,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"
|
||||||
|
|
||||||
@@ -19489,6 +19510,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Imprimir"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "pol"
|
#~ msgstr "pol"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -337,6 +337,7 @@ msgstr "Инструмент вращения"
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr "Оптимизация положения модели"
|
msgstr "Оптимизация положения модели"
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr "Масштаб"
|
msgstr "Масштаб"
|
||||||
|
|
||||||
@@ -380,6 +381,9 @@ msgstr "Коэф. масштаба"
|
|||||||
msgid "Object operations"
|
msgid "Object operations"
|
||||||
msgstr "Операции с моделями"
|
msgstr "Операции с моделями"
|
||||||
|
|
||||||
|
msgid "Scale"
|
||||||
|
msgstr "Масштаб"
|
||||||
|
|
||||||
msgid "Volume operations"
|
msgid "Volume operations"
|
||||||
msgstr "Булевы операции с телами"
|
msgstr "Булевы операции с телами"
|
||||||
|
|
||||||
@@ -425,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 "Размер"
|
||||||
@@ -3657,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 "Пример"
|
||||||
@@ -5065,6 +5073,7 @@ msgstr "Смена инструмента"
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr "Смена цвета"
|
msgstr "Смена цвета"
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr "Печать"
|
msgstr "Печать"
|
||||||
|
|
||||||
@@ -5227,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 "Справа"
|
||||||
|
|
||||||
@@ -5589,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 "Экспорт стола в файл проекта"
|
||||||
|
|
||||||
@@ -15086,6 +15103,10 @@ msgstr "В углах"
|
|||||||
msgid "Aligned back"
|
msgid "Aligned back"
|
||||||
msgstr "В углах сзади"
|
msgstr "В углах сзади"
|
||||||
|
|
||||||
|
# Используется в нескольких местах: в 2 местах в значении расположения (шва и камеры), в одном – на кнопке "назад" (калибровка бамбу)
|
||||||
|
msgid "Back"
|
||||||
|
msgstr "Сзади"
|
||||||
|
|
||||||
msgid "Random"
|
msgid "Random"
|
||||||
msgstr "Случайная"
|
msgstr "Случайная"
|
||||||
|
|
||||||
@@ -20096,6 +20117,9 @@ msgstr ""
|
|||||||
"Предотвращение коробления материала\n"
|
"Предотвращение коробления материала\n"
|
||||||
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
|
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "Печать"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "дюйм"
|
#~ msgstr "дюйм"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -368,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"
|
||||||
@@ -418,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"
|
||||||
@@ -3603,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"
|
||||||
|
|
||||||
@@ -4961,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"
|
||||||
|
|
||||||
@@ -5120,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"
|
||||||
|
|
||||||
@@ -5448,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"
|
||||||
|
|
||||||
@@ -14400,6 +14417,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"
|
||||||
|
|
||||||
@@ -19055,6 +19076,9 @@ 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?"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "Skriv ut"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "i"
|
#~ msgstr "i"
|
||||||
|
|
||||||
@@ -20228,10 +20252,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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -324,6 +324,7 @@ msgstr "Gizmo-หมุน"
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr "ปรับการวางแนวให้เหมาะสม"
|
msgstr "ปรับการวางแนวให้เหมาะสม"
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr "ปรับขนาด"
|
msgstr "ปรับขนาด"
|
||||||
|
|
||||||
@@ -367,6 +368,9 @@ msgstr "อัตราส่วนการปรับขนาด"
|
|||||||
msgid "Object operations"
|
msgid "Object operations"
|
||||||
msgstr "การทำงานกับวัตถุ"
|
msgstr "การทำงานกับวัตถุ"
|
||||||
|
|
||||||
|
msgid "Scale"
|
||||||
|
msgstr "ปรับขนาด"
|
||||||
|
|
||||||
msgid "Volume operations"
|
msgid "Volume operations"
|
||||||
msgstr "การทำงานกับวอลลุ่ม"
|
msgstr "การทำงานกับวอลลุ่ม"
|
||||||
|
|
||||||
@@ -412,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 "ขนาด"
|
||||||
@@ -3559,6 +3567,7 @@ msgstr "การสอบเทียบเสร็จสิ้น โปร
|
|||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr "บันทึก"
|
msgstr "บันทึก"
|
||||||
|
|
||||||
|
msgctxt "Navigation"
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
msgstr "กลับ"
|
msgstr "กลับ"
|
||||||
|
|
||||||
@@ -4907,6 +4916,7 @@ msgstr "การเปลี่ยนแปลงเครื่องมือ
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr "เปลี่ยนสี"
|
msgstr "เปลี่ยนสี"
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr "พิมพ์"
|
msgstr "พิมพ์"
|
||||||
|
|
||||||
@@ -5066,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 "ขวา"
|
||||||
|
|
||||||
@@ -5393,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 "ส่งออกไฟล์แผ่นสไลซ์บาง ๆ"
|
||||||
|
|
||||||
@@ -14591,6 +14609,9 @@ msgstr "จัดตำแหน่ง"
|
|||||||
msgid "Aligned back"
|
msgid "Aligned back"
|
||||||
msgstr "จัดแนวกลับ"
|
msgstr "จัดแนวกลับ"
|
||||||
|
|
||||||
|
msgid "Back"
|
||||||
|
msgstr "กลับ"
|
||||||
|
|
||||||
msgid "Random"
|
msgid "Random"
|
||||||
msgstr "สุ่ม"
|
msgstr "สุ่ม"
|
||||||
|
|
||||||
@@ -19345,6 +19366,9 @@ msgstr ""
|
|||||||
"หลีกเลี่ยงการบิดเบี้ยว\n"
|
"หลีกเลี่ยงการบิดเบี้ยว\n"
|
||||||
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
|
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "พิมพ์"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "นิ้ว"
|
#~ msgstr "นิ้ว"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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"
|
||||||
|
|
||||||
@@ -371,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"
|
||||||
@@ -422,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"
|
||||||
@@ -3644,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"
|
||||||
|
|
||||||
@@ -5027,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"
|
||||||
|
|
||||||
@@ -5190,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ğ"
|
||||||
|
|
||||||
@@ -5522,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"
|
||||||
|
|
||||||
@@ -14776,6 +14793,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"
|
||||||
|
|
||||||
@@ -19610,6 +19631,9 @@ 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 "Print"
|
||||||
|
#~ msgstr "Yazdır"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "in"
|
#~ msgstr "in"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -332,6 +332,7 @@ msgstr "Gizmo обертання"
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr "Оптимізувати орієнтацію"
|
msgstr "Оптимізувати орієнтацію"
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr "Масштаб"
|
msgstr "Масштаб"
|
||||||
|
|
||||||
@@ -376,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 "Операції з об’ємом"
|
||||||
@@ -427,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 "Розмір"
|
||||||
@@ -3660,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 "Ззаду"
|
||||||
|
|
||||||
@@ -5030,6 +5038,7 @@ msgstr "Зміна інструменту"
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr "Зміна кольору"
|
msgstr "Зміна кольору"
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr "Друк"
|
msgstr "Друк"
|
||||||
|
|
||||||
@@ -5191,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 "Право"
|
||||||
|
|
||||||
@@ -5523,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 "Експортувати файл нарізки пластини"
|
||||||
|
|
||||||
@@ -14753,6 +14770,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 "Випадкове"
|
||||||
|
|
||||||
@@ -19554,6 +19575,9 @@ msgstr ""
|
|||||||
"Уникнення деформації\n"
|
"Уникнення деформації\n"
|
||||||
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури гарячого ліжка може зменшити ймовірність деформації?"
|
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури гарячого ліжка може зменшити ймовірність деформації?"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "Друк"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "в"
|
#~ msgstr "в"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -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ệ"
|
||||||
|
|
||||||
@@ -372,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"
|
||||||
@@ -423,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"
|
||||||
@@ -3630,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"
|
||||||
|
|
||||||
@@ -5001,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"
|
||||||
|
|
||||||
@@ -5162,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"
|
||||||
|
|
||||||
@@ -5490,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"
|
||||||
|
|
||||||
@@ -14668,6 +14685,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"
|
||||||
|
|
||||||
@@ -19475,6 +19496,9 @@ 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?"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "In"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "in"
|
#~ msgstr "in"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -330,6 +330,7 @@ msgstr "Gizmo-旋转"
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr "优化朝向"
|
msgstr "优化朝向"
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr "缩放"
|
msgstr "缩放"
|
||||||
|
|
||||||
@@ -374,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 "零件操作"
|
||||||
@@ -425,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 "大小"
|
||||||
@@ -3639,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 "背面"
|
||||||
|
|
||||||
@@ -5014,6 +5022,7 @@ msgstr "工具更换"
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr "颜色更换"
|
msgstr "颜色更换"
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr "打印"
|
msgstr "打印"
|
||||||
|
|
||||||
@@ -5178,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 "右"
|
||||||
|
|
||||||
@@ -5510,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 "导出单盘切片文件"
|
||||||
|
|
||||||
@@ -14896,6 +14913,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 "随机"
|
||||||
|
|
||||||
@@ -19737,6 +19758,9 @@ msgstr ""
|
|||||||
"避免翘曲\n"
|
"避免翘曲\n"
|
||||||
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
|
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "打印"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "在"
|
#~ msgstr "在"
|
||||||
|
|
||||||
|
|||||||
@@ -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-07 10:05-0300\n"
|
"POT-Creation-Date: 2026-07-07 16:46-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"
|
||||||
@@ -333,6 +333,7 @@ msgstr "Gizmo-旋轉"
|
|||||||
msgid "Optimize orientation"
|
msgid "Optimize orientation"
|
||||||
msgstr "最佳化方向"
|
msgstr "最佳化方向"
|
||||||
|
|
||||||
|
msgctxt "Verb"
|
||||||
msgid "Scale"
|
msgid "Scale"
|
||||||
msgstr "縮放"
|
msgstr "縮放"
|
||||||
|
|
||||||
@@ -377,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 "零件操作"
|
||||||
@@ -428,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 "尺寸"
|
||||||
@@ -3650,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 "背面"
|
||||||
|
|
||||||
@@ -5056,6 +5064,7 @@ msgstr "取代工具"
|
|||||||
msgid "Color change"
|
msgid "Color change"
|
||||||
msgstr "顏色更換"
|
msgstr "顏色更換"
|
||||||
|
|
||||||
|
msgctxt "Noun"
|
||||||
msgid "Print"
|
msgid "Print"
|
||||||
msgstr "列印"
|
msgstr "列印"
|
||||||
|
|
||||||
@@ -5220,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 "右"
|
||||||
|
|
||||||
@@ -5553,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 "匯出單一列印板切片檔案"
|
||||||
|
|
||||||
@@ -14957,6 +14974,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 "隨機"
|
||||||
|
|
||||||
@@ -19808,6 +19829,9 @@ msgstr ""
|
|||||||
"您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n"
|
"您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n"
|
||||||
"可以降低翹曲的機率。"
|
"可以降低翹曲的機率。"
|
||||||
|
|
||||||
|
#~ msgid "Print"
|
||||||
|
#~ msgstr "列印"
|
||||||
|
|
||||||
#~ msgid "in"
|
#~ msgid "in"
|
||||||
#~ msgstr "在"
|
#~ msgstr "在"
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 = ®ion_config;
|
params.config = ®ion_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_centered_infill ||
|
||||||
|
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,65 @@ 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.
|
||||||
|
//
|
||||||
|
// First assign this fill region to the model part whose slice at this layer overlaps it
|
||||||
|
// the most. A strict "contains" test is ambiguous for assemblies whose parts overlap (a
|
||||||
|
// region may sit inside several parts, or straddle a boundary and be inside none), so we
|
||||||
|
// pick by intersection area instead.
|
||||||
|
//
|
||||||
|
// The center must belong to an *overlap group*, not a single part: parts that
|
||||||
|
// touch/overlap form one connected physical body that shares a single center, while a
|
||||||
|
// part detached from the rest of the assembly gets its own. This holds for both
|
||||||
|
// separated infills and Each_Model surface centering (Each_Model == per connected body).
|
||||||
|
// firstLayerObjGroups() already holds these connected components, so we widen the chosen
|
||||||
|
// part's bbox to the whole group it belongs to.
|
||||||
|
if (is_per_model_center || is_separate_infill) {
|
||||||
|
double best_overlap = 0.;
|
||||||
|
ObjectID best_vol_id;
|
||||||
|
const PrintInstance* best_instance = nullptr;
|
||||||
|
for (const auto& instance : this->object()->instances()) {
|
||||||
|
for (const auto& volume : instance.print_object->firstLayerObjSlice()) {
|
||||||
|
if (f->layer_id >= volume.slices.size())
|
||||||
|
continue;
|
||||||
|
const double overlap = area(intersection_ex(volume.slices[f->layer_id], ExPolygons{expoly}));
|
||||||
|
if (overlap > best_overlap) {
|
||||||
|
best_overlap = overlap;
|
||||||
|
best_vol_id = volume.volume_id;
|
||||||
|
best_instance = &instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (best_instance) {
|
||||||
|
const Transform3d matrix = best_instance->model_instance->get_matrix();
|
||||||
|
Point shift = best_instance->shift; // get_volume_bbox takes a non-const ref
|
||||||
|
auto& volumes = best_instance->model_instance->get_object()->volumes;
|
||||||
|
|
||||||
|
// Volume ids to center on: the whole overlap group the winning part belongs to,
|
||||||
|
// falling back to just that part if it isn't part of any group.
|
||||||
|
std::vector<ObjectID> center_ids;
|
||||||
|
for (const auto& group : best_instance->print_object->firstLayerObjGroups()) {
|
||||||
|
bool in_group = false;
|
||||||
|
for (const ObjectID& vid : group.volume_ids)
|
||||||
|
if (vid == best_vol_id) { in_group = true; break; }
|
||||||
|
if (in_group) { center_ids = group.volume_ids; break; }
|
||||||
|
}
|
||||||
|
if (center_ids.empty())
|
||||||
|
center_ids.push_back(best_vol_id);
|
||||||
|
|
||||||
|
BoundingBox bbox;
|
||||||
|
for (const ObjectID& vid : center_ids)
|
||||||
|
for (auto model_volume : volumes)
|
||||||
|
if (vid.id == model_volume->id().id) {
|
||||||
|
bbox.merge(model_volume->get_volume_bbox(matrix, shift, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (bbox.defined)
|
||||||
|
f->set_bounding_box(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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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).");
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -187,6 +187,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 +225,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 +235,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 +267,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 +294,8 @@ void ToolOrdering::handle_dontcare_extruder(unsigned int last_extruder_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (LayerTools < : m_layer_tools) {
|
for (LayerTools < : 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 +304,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 +426,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 +1360,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 +1377,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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2708,6 +2708,23 @@ const TriangleMesh& ModelVolume::get_convex_hull() const
|
|||||||
return *m_convex_hull.get();
|
return *m_convex_hull.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Orca: get volume bbox for separate infill
|
||||||
|
static std::mutex mtx_model;
|
||||||
|
BoundingBox ModelVolume::get_volume_bbox(const Transform3d &matrix, Point &shift, bool apply_cache = false) {
|
||||||
|
std::unique_lock l(mtx_model); // locks function here
|
||||||
|
// Orca: the cache is keyed by the instance transform/shift; a ModelVolume is shared
|
||||||
|
// across instances, so returning the cache blindly would hand back another instance's bbox.
|
||||||
|
if (m_cached_volume_bbox.defined && apply_cache
|
||||||
|
&& matrix.isApprox(m_cached_volume_bbox_matrix)
|
||||||
|
&& shift == m_cached_volume_bbox_shift)
|
||||||
|
return m_cached_volume_bbox;
|
||||||
|
auto hull = get_convex_hull_2d(matrix);
|
||||||
|
hull.translate(-shift);
|
||||||
|
m_cached_volume_bbox_matrix = matrix;
|
||||||
|
m_cached_volume_bbox_shift = shift;
|
||||||
|
return m_cached_volume_bbox = hull.bounding_box().polygon().bounding_box();
|
||||||
|
}
|
||||||
|
|
||||||
//BBS: refine the model part names
|
//BBS: refine the model part names
|
||||||
ModelVolumeType ModelVolume::type_from_string(const std::string &s)
|
ModelVolumeType ModelVolume::type_from_string(const std::string &s)
|
||||||
{
|
{
|
||||||
|
|||||||
+24
-10
@@ -920,6 +920,14 @@ 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_cached_volume_bbox.reset();
|
||||||
|
m_convex_hull_2d.clear();
|
||||||
|
m_cached_2d_polygon.clear();
|
||||||
|
};
|
||||||
|
|
||||||
bool is_splittable() const;
|
bool is_splittable() const;
|
||||||
|
|
||||||
// BBS
|
// BBS
|
||||||
@@ -961,39 +969,42 @@ public:
|
|||||||
// Get count of errors in the mesh
|
// Get count of errors in the mesh
|
||||||
int get_repaired_errors_count() const;
|
int get_repaired_errors_count() const;
|
||||||
|
|
||||||
|
BoundingBox get_volume_bbox(const Transform3d &matrix, Point &shift, bool apply_cache);
|
||||||
|
void reset_volume_bbox() { m_cached_volume_bbox.reset(); };
|
||||||
|
|
||||||
// Helpers for loading / storing into AMF / 3MF files.
|
// Helpers for loading / storing into AMF / 3MF files.
|
||||||
static ModelVolumeType type_from_string(const std::string &s);
|
static ModelVolumeType type_from_string(const std::string &s);
|
||||||
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();
|
||||||
|
|
||||||
@@ -1048,6 +1059,9 @@ private:
|
|||||||
mutable Transform3d m_cached_trans_matrix; //BBS, used for convex_hell_2d acceleration
|
mutable Transform3d m_cached_trans_matrix; //BBS, used for convex_hell_2d acceleration
|
||||||
mutable Polygon m_cached_2d_polygon; //BBS, used for convex_hell_2d acceleration
|
mutable Polygon m_cached_2d_polygon; //BBS, used for convex_hell_2d acceleration
|
||||||
Geometry::Transformation m_transformation;
|
Geometry::Transformation m_transformation;
|
||||||
|
mutable BoundingBox m_cached_volume_bbox; //Orca: used for separated infills
|
||||||
|
mutable Transform3d m_cached_volume_bbox_matrix{Transform3d::Identity()}; //Orca: cache key for m_cached_volume_bbox
|
||||||
|
mutable Point m_cached_volume_bbox_shift{Point(0, 0)}; //Orca: cache key for m_cached_volume_bbox
|
||||||
|
|
||||||
//BBS: add convex_hell_2d related logic
|
//BBS: add convex_hell_2d related logic
|
||||||
void calculate_convex_hull_2d(const Geometry::Transformation &transformation) const;
|
void calculate_convex_hull_2d(const Geometry::Transformation &transformation) const;
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 },
|
||||||
|
|||||||
@@ -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,
|
||||||
@@ -300,6 +313,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 +553,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 +581,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
|
||||||
@@ -1122,6 +1143,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))
|
||||||
@@ -1187,6 +1211,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))
|
||||||
@@ -1413,6 +1440,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))
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -562,6 +563,11 @@ void PrintObject::prepare_infill()
|
|||||||
{
|
{
|
||||||
if (! this->set_started(posPrepareInfill))
|
if (! this->set_started(posPrepareInfill))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Orca: clear all volume bbox caches
|
||||||
|
for (auto volume : this->model_object()->volumes)
|
||||||
|
volume->reset_volume_bbox();
|
||||||
|
|
||||||
m_print->set_status(25, L("Generating infill regions"));
|
m_print->set_status(25, L("Generating infill regions"));
|
||||||
if (m_typed_slices) {
|
if (m_typed_slices) {
|
||||||
// To improve robustness of detect_surfaces_type() when reslicing (working with typed slices), see GH issue #7442.
|
// To improve robustness of detect_surfaces_type() when reslicing (working with typed slices), see GH issue #7442.
|
||||||
@@ -1297,6 +1303,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 +1339,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 +1698,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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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_centered = is_centered_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_centered);
|
||||||
|
|
||||||
|
// 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",
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -4258,7 +4258,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 +4292,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; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6036,11 +6036,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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -143,9 +143,9 @@ bool GLGizmoScale3D::on_init()
|
|||||||
std::string GLGizmoScale3D::on_get_name() const
|
std::string GLGizmoScale3D::on_get_name() const
|
||||||
{
|
{
|
||||||
if (!on_is_activable() && m_state == EState::Off) {
|
if (!on_is_activable() && m_state == EState::Off) {
|
||||||
return _u8L("Scale") + ":\n" + _u8L("Please select at least one object.");
|
return _CTX_utf8("Scale", "Verb") + ":\n" + _u8L("Please select at least one object.");
|
||||||
} else {
|
} else {
|
||||||
return _u8L("Scale");
|
return _CTX_utf8("Scale", "Verb");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1161,7 +1161,7 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w
|
|||||||
imgui_wrapper->calc_text_size(_L("Part")).x
|
imgui_wrapper->calc_text_size(_L("Part")).x
|
||||||
}) + imgui_wrapper->calc_text_size("xxx"sv).x + imgui_wrapper->scaled(3.5f);
|
}) + imgui_wrapper->calc_text_size("xxx"sv).x + imgui_wrapper->scaled(3.5f);
|
||||||
float label_max = std::max({
|
float label_max = std::max({
|
||||||
imgui_wrapper->calc_text_size(_L("Scale")).x,
|
imgui_wrapper->calc_text_size(_CTX("Scale", "Noun")).x,
|
||||||
imgui_wrapper->calc_text_size(_L("Size")).x
|
imgui_wrapper->calc_text_size(_L("Size")).x
|
||||||
});
|
});
|
||||||
float caption_max = std::max(label_max, coord_combo_width - 3 * space_size);
|
float caption_max = std::max(label_max, coord_combo_width - 3 * space_size);
|
||||||
@@ -1218,7 +1218,7 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w
|
|||||||
|
|
||||||
//ImGui::PushItemWidth(unit_size * 2);
|
//ImGui::PushItemWidth(unit_size * 2);
|
||||||
ImGui::AlignTextToFramePadding();
|
ImGui::AlignTextToFramePadding();
|
||||||
imgui_wrapper->text(_L("Scale"));
|
imgui_wrapper->text(_CTX("Scale", "Noun"));
|
||||||
ImGui::SameLine(caption_max + space_size);
|
ImGui::SameLine(caption_max + space_size);
|
||||||
ImGui::PushItemWidth(unit_size);
|
ImGui::PushItemWidth(unit_size);
|
||||||
ImGui::BBLInputDouble(label_scale_values[0][0], &scale[0], 0.0f, 0.0f, "%.2f");
|
ImGui::BBLInputDouble(label_scale_values[0][0], &scale[0], 0.0f, 0.0f, "%.2f");
|
||||||
|
|||||||
@@ -644,7 +644,7 @@ void Slic3r::GUI::ImageGrid::renderContent1(wxDC &dc, wxPoint const &pt, int ind
|
|||||||
if (m_file_sys->GetFileType() == PrinterFileSystem::F_MODEL) {
|
if (m_file_sys->GetFileType() == PrinterFileSystem::F_MODEL) {
|
||||||
if (secondAction != _L("Play"))
|
if (secondAction != _L("Play"))
|
||||||
thirdAction = secondAction;
|
thirdAction = secondAction;
|
||||||
secondAction = _L("Print");
|
secondAction = _CTX("Print", "Verb");
|
||||||
}
|
}
|
||||||
// Draw buttons on hovered item
|
// Draw buttons on hovered item
|
||||||
wxRect rect{pt.x, pt.y + m_content_rect.GetBottom() - m_buttons_background.GetHeight(), m_content_rect.GetWidth(), m_buttons_background.GetHeight()};
|
wxRect rect{pt.x, pt.y + m_content_rect.GetBottom() - m_buttons_background.GetHeight(), m_content_rect.GetWidth(), m_buttons_background.GetHeight()};
|
||||||
|
|||||||
@@ -2013,10 +2013,10 @@ wxBoxSizer* MainFrame::create_side_tools()
|
|||||||
});
|
});
|
||||||
|
|
||||||
// upload and print
|
// upload and print
|
||||||
SideButton* send_gcode_btn = new SideButton(p, _L("Print"), "");
|
SideButton* send_gcode_btn = new SideButton(p, _CTX("Print", "Verb"), "");
|
||||||
send_gcode_btn->SetCornerRadius(0);
|
send_gcode_btn->SetCornerRadius(0);
|
||||||
send_gcode_btn->Bind(wxEVT_BUTTON, [this, p](wxCommandEvent&) {
|
send_gcode_btn->Bind(wxEVT_BUTTON, [this, p](wxCommandEvent&) {
|
||||||
m_print_btn->SetLabel(_L("Print"));
|
m_print_btn->SetLabel(_CTX("Print", "Verb"));
|
||||||
m_print_select = eSendGcode;
|
m_print_select = eSendGcode;
|
||||||
m_print_enable = get_enable_print_status();
|
m_print_enable = get_enable_print_status();
|
||||||
m_print_btn->Enable(m_print_enable);
|
m_print_btn->Enable(m_print_enable);
|
||||||
@@ -2662,9 +2662,9 @@ static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame,
|
|||||||
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||||
append_menu_item(view_menu, wxID_ANY, _L("Rear") + "\t" + ctrl + "4", _L("Rear View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("rear"); },
|
append_menu_item(view_menu, wxID_ANY, _L("Rear") + "\t" + ctrl + "4", _L("Rear View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("rear"); },
|
||||||
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||||
append_menu_item(view_menu, wxID_ANY, _CTX(L_CONTEXT("Left", "Camera"), "Camera") + "\t" + ctrl + "5", _L("Left View"),[mainFrame](wxCommandEvent &) {mainFrame->select_view("left"); },
|
append_menu_item(view_menu, wxID_ANY, _CTX("Left", "Camera View") + "\t" + ctrl + "5", _L("Left View"),[mainFrame](wxCommandEvent &) {mainFrame->select_view("left"); },
|
||||||
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||||
append_menu_item(view_menu, wxID_ANY, _CTX(L_CONTEXT("Right", "Camera"), "Camera") + "\t" + ctrl + "6", _L("Right View"),[mainFrame](wxCommandEvent &) { mainFrame->select_view("right"); },
|
append_menu_item(view_menu, wxID_ANY, _CTX("Right", "Camera View") + "\t" + ctrl + "6", _L("Right View"),[mainFrame](wxCommandEvent &) { mainFrame->select_view("right"); },
|
||||||
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
"", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4040,7 +4040,7 @@ void MainFrame::set_print_button_to_default(PrintSelectType select_type)
|
|||||||
m_print_btn->Enable(m_print_enable);
|
m_print_btn->Enable(m_print_enable);
|
||||||
this->Layout();
|
this->Layout();
|
||||||
} else if (select_type == PrintSelectType::eSendGcode) {
|
} else if (select_type == PrintSelectType::eSendGcode) {
|
||||||
m_print_btn->SetLabel(_L("Print"));
|
m_print_btn->SetLabel(_CTX("Print", "Verb"));
|
||||||
m_print_select = eSendGcode;
|
m_print_select = eSendGcode;
|
||||||
if (m_print_enable)
|
if (m_print_enable)
|
||||||
m_print_enable = get_enable_print_status() && can_send_gcode();
|
m_print_enable = get_enable_print_status() && can_send_gcode();
|
||||||
|
|||||||
@@ -556,7 +556,7 @@ void MediaFilePanel::doAction(size_t index, int action)
|
|||||||
} else if (action == 1) {
|
} else if (action == 1) {
|
||||||
if (fs->GetFileType() == PrinterFileSystem::F_MODEL) {
|
if (fs->GetFileType() == PrinterFileSystem::F_MODEL) {
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
auto dlg = new MediaProgressDialog(_L("Print"), this, [fs] { fs->FetchModelCancel(); });
|
auto dlg = new MediaProgressDialog(_CTX("Print", "Verb"), this, [fs] { fs->FetchModelCancel(); });
|
||||||
dlg->Update(0, _L("Fetching model information..."));
|
dlg->Update(0, _L("Fetching model information..."));
|
||||||
fs->FetchModel(index, [this, fs, dlg, index](int result, std::string const &data) {
|
fs->FetchModel(index, [this, fs, dlg, index](int result, std::string const &data) {
|
||||||
dlg->Destroy();
|
dlg->Destroy();
|
||||||
@@ -566,7 +566,7 @@ void MediaFilePanel::doAction(size_t index, int action)
|
|||||||
wxString msg = data.empty() ? _L("Failed to fetch model information from printer.") :
|
wxString msg = data.empty() ? _L("Failed to fetch model information from printer.") :
|
||||||
from_u8(data);
|
from_u8(data);
|
||||||
CallAfter([this, msg] {
|
CallAfter([this, msg] {
|
||||||
MessageDialog(this, msg, _L("Print"), wxOK).ShowModal();
|
MessageDialog(this, msg, _CTX("Print", "Verb"), wxOK).ShowModal();
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -579,7 +579,7 @@ void MediaFilePanel::doAction(size_t index, int action)
|
|||||||
|| plate_data_list.empty()) {
|
|| plate_data_list.empty()) {
|
||||||
MessageDialog(this,
|
MessageDialog(this,
|
||||||
_L("Failed to parse model information."),
|
_L("Failed to parse model information."),
|
||||||
_L("Print"), wxOK).ShowModal();
|
_CTX("Print", "Verb"), wxOK).ShowModal();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13113,6 +13113,9 @@ void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, i
|
|||||||
_obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f));
|
_obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f));
|
||||||
_obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45));
|
_obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45));
|
||||||
_obj->config.set_key_value("solid_infill_direction", new ConfigOptionFloat(135));
|
_obj->config.set_key_value("solid_infill_direction", new ConfigOptionFloat(135));
|
||||||
|
_obj->config.set_key_value("anisotropic_surfaces", new ConfigOptionBool(false));
|
||||||
|
_obj->config.set_key_value("center_of_surface_pattern", new ConfigOptionEnum<CenterOfSurfacePattern>(CenterOfSurfacePattern::Each_Surface));
|
||||||
|
_obj->config.set_key_value("separated_infills", new ConfigOptionBool(false));
|
||||||
_obj->config.set_key_value("align_infill_direction_to_model", new ConfigOptionBool(true));
|
_obj->config.set_key_value("align_infill_direction_to_model", new ConfigOptionBool(true));
|
||||||
_obj->config.set_key_value("ironing_type", new ConfigOptionEnum<IroningType>(IroningType::NoIroning));
|
_obj->config.set_key_value("ironing_type", new ConfigOptionEnum<IroningType>(IroningType::NoIroning));
|
||||||
_obj->config.set_key_value("internal_solid_infill_speed", new ConfigOptionFloatsNullable(internal_solid_speeds));
|
_obj->config.set_key_value("internal_solid_infill_speed", new ConfigOptionFloatsNullable(internal_solid_speeds));
|
||||||
@@ -13923,17 +13926,9 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path)
|
|||||||
if (mz_zip_reader_file_stat(&archive, i, &stat)) {
|
if (mz_zip_reader_file_stat(&archive, i, &stat)) {
|
||||||
if (size != stat.m_uncomp_size) // size must fit
|
if (size != stat.m_uncomp_size) // size must fit
|
||||||
continue;
|
continue;
|
||||||
wxString wname = boost::nowide::widen(stat.m_filename);
|
std::string name = Slic3r::decode_archive_entry_path(&archive, stat);
|
||||||
std::string name = into_u8(wname);
|
|
||||||
fs::path archive_path(name);
|
fs::path archive_path(name);
|
||||||
|
|
||||||
std::string extra(1024, 0);
|
|
||||||
size_t extra_size = mz_zip_reader_get_filename_from_extra(&archive, i, extra.data(), extra.size());
|
|
||||||
if (extra_size > 0) {
|
|
||||||
archive_path = fs::path(extra.substr(0, extra_size));
|
|
||||||
name = archive_path.string();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (archive_path.empty())
|
if (archive_path.empty())
|
||||||
continue;
|
continue;
|
||||||
if (path != archive_path)
|
if (path != archive_path)
|
||||||
@@ -15750,7 +15745,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy
|
|||||||
std::vector<Preset*> project_presets = preset_bundle.get_current_project_embedded_presets();
|
std::vector<Preset*> project_presets = preset_bundle.get_current_project_embedded_presets();
|
||||||
|
|
||||||
StoreParams store_params;
|
StoreParams store_params;
|
||||||
store_params.path = path_u8.c_str();
|
store_params.path = path_u8;
|
||||||
store_params.model = &p->model;
|
store_params.model = &p->model;
|
||||||
store_params.plate_data_list = plate_data_list;
|
store_params.plate_data_list = plate_data_list;
|
||||||
store_params.export_plate_idx = export_plate_idx;
|
store_params.export_plate_idx = export_plate_idx;
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
|
|||||||
|
|
||||||
/*mode switch*/
|
/*mode switch*/
|
||||||
/*auto m_sizer_mode_switch = new wxBoxSizer(wxHORIZONTAL);
|
/*auto m_sizer_mode_switch = new wxBoxSizer(wxHORIZONTAL);
|
||||||
m_mode_print = new SendModeSwitchButton(scroll_area, _L("Print"), true);
|
m_mode_print = new SendModeSwitchButton(scroll_area, _CTX("Print", "Verb"), true);
|
||||||
m_mode_send = new SendModeSwitchButton(scroll_area,_L("Save to printer"), false);
|
m_mode_send = new SendModeSwitchButton(scroll_area,_L("Save to printer"), false);
|
||||||
m_sizer_mode_switch->Add(m_mode_print, 0, wxALIGN_CENTER, 0);
|
m_sizer_mode_switch->Add(m_mode_print, 0, wxALIGN_CENTER, 0);
|
||||||
m_sizer_mode_switch->Add(0, 0, 0, wxLEFT, FromDIP(8));
|
m_sizer_mode_switch->Add(0, 0, 0, wxLEFT, FromDIP(8));
|
||||||
|
|||||||
@@ -6694,7 +6694,7 @@ bool Tab::validate_filament_temperature_pairs()
|
|||||||
|
|
||||||
RichMessageDialog dialog(parent(), msg_text, _L("Temperature Safety Check"), wxYES | wxNO | wxICON_WARNING);
|
RichMessageDialog dialog(parent(), msg_text, _L("Temperature Safety Check"), wxYES | wxNO | wxICON_WARNING);
|
||||||
dialog.SetButtonLabel(wxID_YES, _L("Continue"), true);
|
dialog.SetButtonLabel(wxID_YES, _L("Continue"), true);
|
||||||
dialog.SetButtonLabel(wxID_NO, _L("Back"));
|
dialog.SetButtonLabel(wxID_NO, _CTX("Back", "Navigation"));
|
||||||
dialog.ShowCheckBox(_L("Don't warn again for this preset"));
|
dialog.ShowCheckBox(_L("Don't warn again for this preset"));
|
||||||
const int answer = dialog.ShowModal();
|
const int answer = dialog.ShowModal();
|
||||||
// Session-only suppression (does not modify/save filament preset data).
|
// Session-only suppression (does not modify/save filament preset data).
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ WebViewPanel::WebViewPanel(wxWindow *parent)
|
|||||||
// Create the button
|
// Create the button
|
||||||
bSizer_toolbar = new wxBoxSizer(wxHORIZONTAL);
|
bSizer_toolbar = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
m_button_back = new wxButton(this, wxID_ANY, _L("Back"), wxDefaultPosition, wxDefaultSize, 0);
|
m_button_back = new wxButton(this, wxID_ANY, _CTX("Back", "Navigation"), wxDefaultPosition, wxDefaultSize, 0);
|
||||||
m_button_back->Enable(false);
|
m_button_back->Enable(false);
|
||||||
bSizer_toolbar->Add(m_button_back, 0, wxALL, 5);
|
bSizer_toolbar->Add(m_button_back, 0, wxALL, 5);
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "../GUI/PartPlate.hpp"
|
#include "../GUI/PartPlate.hpp"
|
||||||
#include "libslic3r/CutUtils.hpp"
|
#include "libslic3r/CutUtils.hpp"
|
||||||
#include "libslic3r/ClipperUtils.hpp"
|
#include "libslic3r/ClipperUtils.hpp"
|
||||||
|
#include "libslic3r/Utils.hpp"
|
||||||
|
|
||||||
#include "libslic3r/Model.hpp"
|
#include "libslic3r/Model.hpp"
|
||||||
#include "slic3r/GUI/Jobs/BoostThreadWorker.hpp"
|
#include "slic3r/GUI/Jobs/BoostThreadWorker.hpp"
|
||||||
@@ -27,11 +28,19 @@ const double MIN_PA_K_VALUE = 0.0;
|
|||||||
const double MAX_PA_K_VALUE = 2.0;
|
const double MAX_PA_K_VALUE = 2.0;
|
||||||
|
|
||||||
std::unique_ptr<Worker> CalibUtils::print_worker;
|
std::unique_ptr<Worker> CalibUtils::print_worker;
|
||||||
wxString wxstr_temp_dir = fs::path(fs::temp_directory_path() / "calib").wstring();
|
|
||||||
static const std::string temp_dir = wxstr_temp_dir.utf8_string();
|
// Built lazily so temporary_dir() is read on first use, after set_temporary_dir()
|
||||||
static const std::string temp_gcode_path = temp_dir + "/temp.gcode";
|
// has run at startup (it isolates the temp root per user to avoid cross-user collisions).
|
||||||
static const std::string path = temp_dir + "/test.3mf";
|
static const std::string& calib_temp_dir()
|
||||||
static const std::string config_3mf_path = temp_dir + "/test_config.3mf";
|
{
|
||||||
|
static const std::string dir = temporary_dir() + "/calib";
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
static std::string calib_temp_file(const std::string& name) { return calib_temp_dir() + "/" + name; }
|
||||||
|
|
||||||
|
static const std::string gcode_filename = "temp.gcode";
|
||||||
|
static const std::string model_filename = "test.3mf";
|
||||||
|
static const std::string config_filename = "test_config.3mf";
|
||||||
|
|
||||||
static std::string MachineBedTypeString[7] = {
|
static std::string MachineBedTypeString[7] = {
|
||||||
"auto",
|
"auto",
|
||||||
@@ -1599,7 +1608,7 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f
|
|||||||
part_plate->update_slice_result_valid_state(true);
|
part_plate->update_slice_result_valid_state(true);
|
||||||
|
|
||||||
gcode_result->reset();
|
gcode_result->reset();
|
||||||
fff_print->export_gcode(temp_gcode_path, gcode_result, nullptr);
|
fff_print->export_gcode(calib_temp_file(gcode_filename), gcode_result, nullptr);
|
||||||
|
|
||||||
std::vector<ThumbnailData*> thumbnails;
|
std::vector<ThumbnailData*> thumbnails;
|
||||||
PlateDataPtrs plate_data_list;
|
PlateDataPtrs plate_data_list;
|
||||||
@@ -1618,7 +1627,7 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (auto plate_data : plate_data_list) {
|
for (auto plate_data : plate_data_list) {
|
||||||
plate_data->gcode_file = temp_gcode_path;
|
plate_data->gcode_file = calib_temp_file(gcode_filename);
|
||||||
plate_data->is_sliced_valid = true;
|
plate_data->is_sliced_valid = true;
|
||||||
plate_data->printer_model_id = obj_->printer_type;
|
plate_data->printer_model_id = obj_->printer_type;
|
||||||
FilamentInfo& filament_info = plate_data->slice_filaments_info.front();
|
FilamentInfo& filament_info = plate_data->slice_filaments_info.front();
|
||||||
@@ -1681,7 +1690,7 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f
|
|||||||
}
|
}
|
||||||
|
|
||||||
StoreParams store_params;
|
StoreParams store_params;
|
||||||
store_params.path = path.c_str();
|
store_params.path = calib_temp_file(model_filename);
|
||||||
store_params.model = model;
|
store_params.model = model;
|
||||||
store_params.plate_data_list = plate_data_list;
|
store_params.plate_data_list = plate_data_list;
|
||||||
store_params.config = &new_print_config;
|
store_params.config = &new_print_config;
|
||||||
@@ -1695,7 +1704,7 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f
|
|||||||
bool success = Slic3r::store_bbs_3mf(store_params);
|
bool success = Slic3r::store_bbs_3mf(store_params);
|
||||||
|
|
||||||
store_params.strategy = SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithSliceInfo | SaveStrategy::SkipAuxiliary;
|
store_params.strategy = SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithSliceInfo | SaveStrategy::SkipAuxiliary;
|
||||||
store_params.path = config_3mf_path.c_str();
|
store_params.path = calib_temp_file(config_filename);
|
||||||
success = Slic3r::store_bbs_3mf(store_params);
|
success = Slic3r::store_bbs_3mf(store_params);
|
||||||
|
|
||||||
release_PlateData_list(plate_data_list);
|
release_PlateData_list(plate_data_list);
|
||||||
@@ -1784,9 +1793,9 @@ void CalibUtils::send_to_print(const CalibInfo &calib_info, wxString &error_mess
|
|||||||
PrintPrepareData job_data;
|
PrintPrepareData job_data;
|
||||||
job_data.is_from_plater = false;
|
job_data.is_from_plater = false;
|
||||||
job_data.plate_idx = 0;
|
job_data.plate_idx = 0;
|
||||||
job_data._3mf_config_path = config_3mf_path;
|
job_data._3mf_config_path = calib_temp_file(config_filename);
|
||||||
job_data._3mf_path = path;
|
job_data._3mf_path = calib_temp_file(model_filename);
|
||||||
job_data._temp_path = temp_dir;
|
job_data._temp_path = calib_temp_dir();
|
||||||
|
|
||||||
PlateListData plate_data;
|
PlateListData plate_data;
|
||||||
plate_data.is_valid = true;
|
plate_data.is_valid = true;
|
||||||
@@ -1889,9 +1898,9 @@ void CalibUtils::send_to_print(const std::vector<CalibInfo> &calib_infos, wxStri
|
|||||||
PrintPrepareData job_data;
|
PrintPrepareData job_data;
|
||||||
job_data.is_from_plater = false;
|
job_data.is_from_plater = false;
|
||||||
job_data.plate_idx = 0;
|
job_data.plate_idx = 0;
|
||||||
job_data._3mf_config_path = config_3mf_path;
|
job_data._3mf_config_path = calib_temp_file(config_filename);
|
||||||
job_data._3mf_path = path;
|
job_data._3mf_path = calib_temp_file(model_filename);
|
||||||
job_data._temp_path = temp_dir;
|
job_data._temp_path = calib_temp_dir();
|
||||||
|
|
||||||
PlateListData plate_data;
|
PlateListData plate_data;
|
||||||
plate_data.is_valid = true;
|
plate_data.is_valid = true;
|
||||||
|
|||||||
@@ -93,3 +93,14 @@ SCENARIO("Support layer Z honors contact distance", "[SupportMaterial]")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extrude_support once held a `static` lambda capturing `this`, so a second export in the
|
||||||
|
// same process dereferenced a returned stack frame (ASan: stack-use-after-return).
|
||||||
|
TEST_CASE("Support G-code emission survives a second slice in the same process", "[SupportMaterial][Regression]")
|
||||||
|
{
|
||||||
|
const std::string first = slice({ TestMesh::overhang }, { { "enable_support", 1 } });
|
||||||
|
REQUIRE(! layers_with_role(first, "support").empty());
|
||||||
|
|
||||||
|
const std::string second = slice({ TestMesh::overhang }, { { "enable_support", 1 } });
|
||||||
|
REQUIRE(! layers_with_role(second, "support").empty());
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <catch2/catch_all.hpp>
|
#include <catch2/catch_all.hpp>
|
||||||
|
|
||||||
#include "libslic3r/Arachne/WallToolPaths.hpp"
|
#include "libslic3r/Arachne/WallToolPaths.hpp"
|
||||||
|
#include "libslic3r/Arachne/SkeletalTrapezoidation.hpp"
|
||||||
#include "libslic3r/Arachne/utils/ExtrusionLine.hpp"
|
#include "libslic3r/Arachne/utils/ExtrusionLine.hpp"
|
||||||
#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp"
|
#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp"
|
||||||
#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp"
|
#include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp"
|
||||||
@@ -265,3 +266,46 @@ TEST_CASE("Arachne widening keeps two beads in transition band (#14376)", "[Arac
|
|||||||
for (const coord_t w : beading.bead_widths)
|
for (const coord_t w : beading.bead_widths)
|
||||||
CHECK(w <= inner_width);
|
CHECK(w <= inner_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
// Exposes the protected static interpolate() for a focused unit test.
|
||||||
|
struct InterpolateProbe : SkeletalTrapezoidation {
|
||||||
|
using SkeletalTrapezoidation::interpolate;
|
||||||
|
};
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
// interpolate() indexes the merged beading with an index derived from `left`. The merged beading
|
||||||
|
// follows the thicker of left/right, so when the thicker side has fewer insets the index runs past
|
||||||
|
// its end.
|
||||||
|
TEST_CASE("Beading interpolation tolerates a thicker side with fewer insets", "[Arachne][Regression]") {
|
||||||
|
using Beading = BeadingStrategy::Beading;
|
||||||
|
|
||||||
|
// Thicker side (right) has fewer insets, so the merged beading holds only 2 toolpath locations.
|
||||||
|
const coord_t w = scaled<coord_t>(0.42);
|
||||||
|
Beading left;
|
||||||
|
left.total_thickness = scaled<coord_t>(1.0);
|
||||||
|
left.bead_widths = { w, w, w, w };
|
||||||
|
left.toolpath_locations = { scaled<coord_t>(0.1), scaled<coord_t>(0.3), scaled<coord_t>(0.5), scaled<coord_t>(0.7) };
|
||||||
|
left.left_over = 0;
|
||||||
|
|
||||||
|
Beading right;
|
||||||
|
right.total_thickness = scaled<coord_t>(2.0);
|
||||||
|
right.bead_widths = { w, w };
|
||||||
|
right.toolpath_locations = { scaled<coord_t>(0.1), scaled<coord_t>(0.3) };
|
||||||
|
right.left_over = 0;
|
||||||
|
|
||||||
|
// Just past left's location [2] (0.5), so the derived index is 2, past the end of the 2-inset merged beading.
|
||||||
|
const coord_t switching_radius = scaled<coord_t>(0.6);
|
||||||
|
|
||||||
|
Beading result;
|
||||||
|
REQUIRE_NOTHROW(result = InterpolateProbe::interpolate(left, 0.5, right, switching_radius));
|
||||||
|
|
||||||
|
// With the guard the adjustment is skipped, so the result is the plain interpolation.
|
||||||
|
const Beading expected = InterpolateProbe::interpolate(left, 0.5, right);
|
||||||
|
REQUIRE(result.toolpath_locations.size() == expected.toolpath_locations.size());
|
||||||
|
REQUIRE(result.bead_widths.size() == expected.bead_widths.size());
|
||||||
|
for (size_t i = 0; i < expected.toolpath_locations.size(); ++i) {
|
||||||
|
CHECK(result.toolpath_locations[i] == expected.toolpath_locations[i]);
|
||||||
|
CHECK(result.bead_widths[i] == expected.bead_widths[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -52,6 +52,11 @@ SCENARIO("Placeholder parser scripting", "[PlaceholderParser]") {
|
|||||||
SECTION("math: round(-13.4)") { REQUIRE(parser.process("{round(-13.4)}") == "-13"); }
|
SECTION("math: round(-13.4)") { REQUIRE(parser.process("{round(-13.4)}") == "-13"); }
|
||||||
SECTION("math: round(13.6)") { REQUIRE(parser.process("{round(13.6)}") == "14"); }
|
SECTION("math: round(13.6)") { REQUIRE(parser.process("{round(13.6)}") == "14"); }
|
||||||
SECTION("math: round(-13.6)") { REQUIRE(parser.process("{round(-13.6)}") == "-14"); }
|
SECTION("math: round(-13.6)") { REQUIRE(parser.process("{round(-13.6)}") == "-14"); }
|
||||||
|
SECTION("math: round(13.5)") { REQUIRE(parser.process("{round(13.5)}") == "14"); }
|
||||||
|
SECTION("math: floor(13.9)") { REQUIRE(parser.process("{floor(13.9)}") == "13"); }
|
||||||
|
SECTION("math: floor(-13.1)") { REQUIRE(parser.process("{floor(-13.1)}") == "-14"); }
|
||||||
|
SECTION("math: ceil(13.1)") { REQUIRE(parser.process("{ceil(13.1)}") == "14"); }
|
||||||
|
SECTION("math: ceil(-13.9)") { REQUIRE(parser.process("{ceil(-13.9)}") == "-13"); }
|
||||||
SECTION("math: digits(5, 15)") { REQUIRE(parser.process("{digits(5, 15)}") == " 5"); }
|
SECTION("math: digits(5, 15)") { REQUIRE(parser.process("{digits(5, 15)}") == " 5"); }
|
||||||
SECTION("math: digits(5., 15)") { REQUIRE(parser.process("{digits(5., 15)}") == " 5"); }
|
SECTION("math: digits(5., 15)") { REQUIRE(parser.process("{digits(5., 15)}") == " 5"); }
|
||||||
SECTION("math: zdigits(5, 15)") { REQUIRE(parser.process("{zdigits(5, 15)}") == "000000000000005"); }
|
SECTION("math: zdigits(5, 15)") { REQUIRE(parser.process("{zdigits(5, 15)}") == "000000000000005"); }
|
||||||
@@ -65,6 +70,8 @@ SCENARIO("Placeholder parser scripting", "[PlaceholderParser]") {
|
|||||||
SECTION("math: interpolate_table(13.84375892476, (0, 0), (20, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(13.84375892476, (0, 0), (20, 20))}")) == Catch::Approx(13.84375892476)); }
|
SECTION("math: interpolate_table(13.84375892476, (0, 0), (20, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(13.84375892476, (0, 0), (20, 20))}")) == Catch::Approx(13.84375892476)); }
|
||||||
SECTION("math: interpolate_table(13, (0, 0), (20, 20), (30, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(13, (0, 0), (20, 20), (30, 20))}")) == Catch::Approx(13.)); }
|
SECTION("math: interpolate_table(13, (0, 0), (20, 20), (30, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(13, (0, 0), (20, 20), (30, 20))}")) == Catch::Approx(13.)); }
|
||||||
SECTION("math: interpolate_table(25, (0, 0), (20, 20), (30, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(25, (0, 0), (20, 20), (30, 20))}")) == Catch::Approx(20.)); }
|
SECTION("math: interpolate_table(25, (0, 0), (20, 20), (30, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(25, (0, 0), (20, 20), (30, 20))}")) == Catch::Approx(20.)); }
|
||||||
|
// Only the grammar's built-in functions are callable; any other name is an undefined variable and throws.
|
||||||
|
SECTION("math: a non-built-in function name throws") { REQUIRE_THROWS(parser.process("{sqrt(16)}")); }
|
||||||
|
|
||||||
// regex_replace(subject, /pattern/, replacement): the string-transform primitive.
|
// regex_replace(subject, /pattern/, replacement): the string-transform primitive.
|
||||||
SECTION("regex_replace: strips a file extension") { REQUIRE(parser.process("{regex_replace(\"part.stl\", /\\.[^.]*$/, \"\")}") == "part"); }
|
SECTION("regex_replace: strips a file extension") { REQUIRE(parser.process("{regex_replace(\"part.stl\", /\\.[^.]*$/, \"\")}") == "part"); }
|
||||||
|
|||||||
Reference in New Issue
Block a user