Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3a5195b0a0 | |||
| ee6b85605a | |||
| aa1fe28ddf | |||
| 5b0eb08473 | |||
| 9df8837d43 | |||
| 409ab1ed45 | |||
| 5e03fe2f4b | |||
| 37a586dd61 | |||
| a79f40a711 | |||
| b5728f284b | |||
| 5965439a15 | |||
| 586a358ed4 | |||
| 7770f8982d | |||
| 72ad6383ef | |||
| 0537623a75 | |||
| 65d288227e | |||
| fedb3bcdb1 | |||
| 097b8b7550 | |||
| af7ca3a8a2 | |||
| 27ddb725c7 | |||
| a06bdf5cfc | |||
| 33fdcdb3a0 | |||
| c07ab5f8f9 | |||
| fea32f8aac | |||
| 4927214976 | |||
| b621819c0c | |||
| ec552a5300 | |||
| e0cc740cc3 | |||
| 5de48e916d | |||
| 80af7bbe3e | |||
| 191e983423 | |||
| 2b9445b049 | |||
| 7ddf48ca16 | |||
| d2f6848377 | |||
| 0b6d6fecd8 | |||
| fa691707c2 | |||
| b9a55c74e2 | |||
| 2bb9c81069 | |||
| cedb51b8ea | |||
| 66d13059dd | |||
| 800ea40c0d | |||
| 20442eecd3 | |||
| 22d1cd7032 | |||
| 6a0dc18655 | |||
| e006dbf1af | |||
| 8241a750fa | |||
| 41779cf7bb | |||
| b01b9689c8 | |||
| 4426da6f5d | |||
| 5ead82e627 | |||
| c29b0d2f13 | |||
| 480fd8d517 | |||
| 4c09fa5355 |
@@ -1,9 +1,14 @@
|
||||
# cargo-mutants (docs/mutation-testing.md). Mutants are judged by the black-box suites that will
|
||||
# outlive the kernel backend: the reference tests (tests/oracle, through the oracle_cases test).
|
||||
# The kernel's own unit tests are left out on purpose: a mutant only they catch is a behaviour the
|
||||
# outlive the kernel backend: the reference tests (tests/oracle, through the oracle_cases test)
|
||||
# and the pull-request sample of the robustness goldens (every 8th seed, as ci.yml). The
|
||||
# kernel's own unit tests are left out on purpose: a mutant only they catch is a behaviour the
|
||||
# backend-neutral suites would miss when the kernel is swapped.
|
||||
profile = "mutants"
|
||||
additional_cargo_test_args = [
|
||||
"--test", "oracle_cases", "--", "--include-ignored",
|
||||
"--test", "oracle_cases", "--lib", "--", "--include-ignored",
|
||||
"oracle_suite",
|
||||
"robustness_goldens::seed_00", "robustness_goldens::seed_08", "robustness_goldens::seed_16",
|
||||
"robustness_goldens::seed_24", "robustness_goldens::seed_32", "robustness_goldens::seed_40",
|
||||
"robustness_goldens::seed_48", "robustness_goldens::seed_56", "robustness_goldens::seed_64",
|
||||
"robustness_goldens::seed_72", "robustness_goldens::seed_80", "robustness_goldens::seed_88",
|
||||
]
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
|
||||
reviews:
|
||||
auto_review:
|
||||
# Dependabot bumps are checked by CI; skip CodeRabbit reviews on them.
|
||||
ignore_usernames:
|
||||
- "dependabot[bot]"
|
||||
path_instructions:
|
||||
- path: "**"
|
||||
instructions: |
|
||||
Project rule: don't change anyone's existing defaults unless the change is purely additive and belongs in the application.
|
||||
Flag any change to something a user already relies on: a default setting or preference value, what a command or tool does when used the usual way, the UI's default layout or behaviour, a keyboard or mouse shortcut, or the result an existing saved design rebuilds to.
|
||||
Don't flag purely additive changes: a new command, a new setting whose default keeps today's behaviour, or a new option that appears only when someone chooses it. Don't flag bug fixes that only turn a crash or an error into the result the feature always promised.
|
||||
When you flag one, start the comment with "Changes a default:", say what a user sees before and after, whether a setting keeps the old behaviour, and whether the PR description's `Changes a default:` line says so.
|
||||
pre_merge_checks:
|
||||
custom_checks:
|
||||
- name: "Existing defaults unchanged"
|
||||
mode: "warning"
|
||||
instructions: |
|
||||
Pass if the pull request changes no default a user already relies on (default setting or preference values, what a command or tool does when used the usual way, the UI's default layout or behaviour, shortcuts, or the result an existing saved design rebuilds to), or if its changes are purely additive.
|
||||
Fail otherwise, naming each changed default and what a user sees before and after. Also fail if the description says `Changes a default: no` while the code changes one.
|
||||
@@ -12,6 +12,7 @@ not (
|
||||
(package(solidcraft-engine) & (
|
||||
test(=tests::hostile_params_never_panic)
|
||||
| test(/^tests::robustness::/)
|
||||
| test(/^tests::robustness_goldens::seed_/)
|
||||
| test(=pattern_suppress_tests::enclosure_arc_extinction_keeps_a_real_sharp_inner_lip_after_resize_and_reopen)
|
||||
| test(=pattern_suppress_tests::enclosure_datums_follow_wall_height_and_board_depth_with_material_proofs)
|
||||
| test(=cmd::plastic::tests::enclosure_snap_fit_follows_resized_front_wall)
|
||||
@@ -43,12 +44,13 @@ threads-required = 12
|
||||
priority = 100
|
||||
|
||||
# The slowest tests start first, so a shard does not end with one of them running alone on a
|
||||
# core while the others sit idle. Medians from the CI test timings (the junit artifacts), slowest
|
||||
# first; a test over ~100 s belongs here.
|
||||
# core while the others sit idle (seed_81 alone takes about 20 minutes under CI load). Medians
|
||||
# from the CI test timings (the junit artifacts), slowest first; a test over ~100 s belongs here.
|
||||
[[profile.ci.overrides]]
|
||||
filter = """
|
||||
(package(solidcraft-engine) & (
|
||||
test(/^tests::robustness::/)
|
||||
test(/^tests::robustness_goldens::seed_(81|45|20|24|95|02|57|40|18|48|32|46|85|61)$/)
|
||||
| test(/^tests::robustness::/)
|
||||
| test(=tests::hostile_params_never_panic)
|
||||
| test(=cmd::clearance::tests::distances_are_exact_on_edges_and_curved_faces)
|
||||
| test(=cmd::clipboard::tests::a_pasted_coil_joins_the_pasted_body)
|
||||
@@ -90,13 +92,14 @@ threads-required = "num-cpus"
|
||||
priority = 100
|
||||
|
||||
[[profile.local-ci.overrides]]
|
||||
filter = "package(solidcraft-kernel) & test(=tspline::tests::hostile_tsplines_never_panic)"
|
||||
filter = "(package(solidcraft-engine) & test(=tests::robustness_goldens::seed_81)) | (package(solidcraft-kernel) & test(=tspline::tests::hostile_tsplines_never_panic))"
|
||||
priority = 99
|
||||
|
||||
[[profile.local-ci.overrides]]
|
||||
filter = """
|
||||
(package(solidcraft-engine) & (
|
||||
test(/^tests::robustness::/)
|
||||
test(/^tests::robustness_goldens::seed_(81|45|20|24|95|02|57|40|18|48|32|46|85|61)$/)
|
||||
| test(/^tests::robustness::/)
|
||||
| test(=tests::hostile_params_never_panic)
|
||||
| test(=cmd::clearance::tests::distances_are_exact_on_edges_and_curved_faces)
|
||||
| test(=cmd::clipboard::tests::a_pasted_coil_joins_the_pasted_body)
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<!-- Title: which part of the app changes and what a user now sees or can do, clear to someone who hasn't seen your chat, the issue or the code. -->
|
||||
|
||||
## Change
|
||||
|
||||
Start with what this is, in plain words someone new to the project would understand: what it does and who it's for. Don't assume anyone knows the name of your tool, project or feature. Then describe the problem and resulting behavior. Link the issue when applicable.
|
||||
Describe the problem and resulting behavior. Link the issue when applicable.
|
||||
|
||||
Changes a default: no
|
||||
|
||||
@@ -16,8 +14,6 @@ What did you run, and what were the results? Include expected and measured value
|
||||
|
||||
## Screenshots of the behavior (when observable)
|
||||
|
||||
Put the picture or video here in the description. A file in the diff doesn't count: a maintainer has to be able to see what this is without opening the changed files.
|
||||
|
||||
For observable CAD, UI or model behavior, include actual descriptive screenshots or a short recording from a small reproduction. This includes kernel, geometry, assembly and backend effects that can be shown in the app. Coding agents should run the app and capture the evidence themselves, rather than asking a human for evidence they can produce. Show the actual failure/result, preferably before and after, with brief steps, expected/actual behavior and annotations where helpful.
|
||||
|
||||
Flowcharts and Mermaid diagrams cannot substitute for evidence of visible behavior. Use diagrams for architectural reasoning when actual screenshots cannot illustrate the point. Changes with no useful observable behavior may omit screenshot/video evidence. Exclude private designs and sensitive details; attach media or link to an accessible recording rather than committing generated review artifacts.
|
||||
|
||||
@@ -33,8 +33,6 @@
|
||||
# `ci` job still runs and reports the commit's real result (see the `ci` job): the merge queue
|
||||
# reads `ci` from the newest run of a commit, so a run without it would block a PR that passed.
|
||||
# Cross-compilation is opt-in through Run workflow; release builds remain in release.yml.
|
||||
# The release gate (release-gate.yml) calls this workflow (workflow_call) as a Run workflow with
|
||||
# cross-compilation on.
|
||||
# Every Linux job runs on Blacksmith's Ubuntu 24.04 runners (blacksmith-<N>vcpu-ubuntu-2404), sized
|
||||
# per job: 32 vCPU for the tests, 16 for Clippy, the GPU path tests, the archive build (nightly) and the merge queue's, 8 for compiles, doc and reference tests, 4 for the light checks, 2 for Select checks and ci.
|
||||
# The Windows shader job runs on Blacksmith's Windows Server 2025 runners (blacksmith-8vcpu-windows-2025);
|
||||
@@ -52,14 +50,10 @@ on:
|
||||
# only (other labels are skipped, see the top of this file).
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review, labeled]
|
||||
# The kernel-smlib branch (ADR 0002) runs no CI for now (owner, 2026-10-21). Drop this
|
||||
# line before the branch merges back into main.
|
||||
branches-ignore: [kernel-smlib]
|
||||
# The merge queue: each queued group runs the full suite before it lands on main.
|
||||
merge_group:
|
||||
push:
|
||||
# develop: the SMLib kernel's trunk until it merges into main (its PRs land there).
|
||||
branches: [main, develop]
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: "17 6 * * *"
|
||||
workflow_dispatch:
|
||||
@@ -68,14 +62,6 @@ on:
|
||||
description: "Also check WebAssembly and RISC-V (before a release)"
|
||||
type: boolean
|
||||
default: false
|
||||
# The release gate (release-gate.yml): the event stays the caller's (workflow_dispatch), so a
|
||||
# call runs exactly what Run workflow runs.
|
||||
workflow_call:
|
||||
inputs:
|
||||
cross_compile:
|
||||
description: "Also check WebAssembly and RISC-V (before a release)"
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -131,6 +117,7 @@ jobs:
|
||||
outputs:
|
||||
native: ${{ steps.paths.outputs.native }}
|
||||
kernel: ${{ steps.paths.outputs.kernel }}
|
||||
goldens: ${{ steps.paths.outputs.goldens }}
|
||||
windows: ${{ steps.paths.outputs.windows }}
|
||||
# The GPU path tests run (see the rule where it is computed). The job's `if` and the `ci` job's check both read this, so they cannot disagree.
|
||||
gpu: ${{ steps.paths.outputs.gpu }}
|
||||
@@ -169,6 +156,7 @@ jobs:
|
||||
run: |
|
||||
native=false
|
||||
kernel=false
|
||||
goldens=false
|
||||
windows=false
|
||||
gpu_paths=false
|
||||
deps=false
|
||||
@@ -250,12 +238,12 @@ jobs:
|
||||
if [ "${tested:-0}" -gt 0 ]; then
|
||||
echo "The merge queue already tested $PUSH_SHA: repository checks only."
|
||||
elif tested=$(curl -fsS -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
|
||||
"https://api.github.com/repos/$REPO/actions/workflows/ci.yml/runs?event=push&branch=$GITHUB_REF_NAME&status=success&per_page=1" \
|
||||
"https://api.github.com/repos/$REPO/actions/workflows/ci.yml/runs?event=push&branch=main&status=success&per_page=1" \
|
||||
| grep -o '"head_sha": *"[0-9a-f]*"' | head -n 1 | grep -o '[0-9a-f]\{40\}') \
|
||||
&& [ -n "$tested" ] && git merge-base --is-ancestor "$tested" "$PUSH_SHA" \
|
||||
&& git diff --no-renames --name-only -z "$tested" "$PUSH_SHA" > "$RUNNER_TEMP/ci-paths" \
|
||||
&& select_packages "$RUNNER_TEMP/ci-paths" && [ "$full" != true ] && [ -z "$packages" ]; then
|
||||
# Nothing a build reads changed since the last push to this branch whose run passed (the
|
||||
# Nothing a build reads changed since the last push to main whose run passed (the
|
||||
# push before may never have run: a newer push cancels a waiting one).
|
||||
echo "$tested..$PUSH_SHA changes no code: repository checks only."
|
||||
else
|
||||
@@ -294,6 +282,13 @@ jobs:
|
||||
git diff --no-renames --name-only -z "$BASE_SHA...$HEAD_SHA" > "$RUNNER_TEMP/ci-paths"
|
||||
while IFS= read -r -d '' path; do
|
||||
case "$path" in crates/kernel/*|vendor/truck-*) kernel=true ;; esac
|
||||
# What a pull request re-checks the goldens for: the kernel, truck and the goldens
|
||||
# themselves (a re-record is checked before it is queued). The goldens are frozen, so
|
||||
# on any other change they would only re-check unchanged results; the merge queue,
|
||||
# main and the nightly run every seed before anything lands.
|
||||
case "$path" in
|
||||
crates/kernel/*|vendor/truck-*|tests/robustness/*) goldens=true ;;
|
||||
esac
|
||||
done < "$RUNNER_TEMP/ci-paths"
|
||||
# Computed as for a merge group, then turned off below (the fast lane).
|
||||
windows_paths "$RUNNER_TEMP/ci-paths" "$BASE_SHA...$HEAD_SHA"
|
||||
@@ -305,6 +300,10 @@ jobs:
|
||||
# selected means no code changed.
|
||||
select_packages "$RUNNER_TEMP/ci-paths"
|
||||
if [ "$full" = true ] || [ -n "$packages" ]; then native=true; fi
|
||||
# The goldens are solidcraft-engine tests: its tests must be in the archive.
|
||||
if [ "$goldens" = true ] && [ "$full" != true ]; then
|
||||
case " $packages " in *" solidcraft-engine "*) ;; *) packages="$packages solidcraft-engine" ;; esac
|
||||
fi
|
||||
fi
|
||||
# The reference tests replay recipes through solidcraft-cli: needed when it, or anything
|
||||
# it depends on, is selected.
|
||||
@@ -319,12 +318,13 @@ jobs:
|
||||
doctests=$native
|
||||
if [ "$EVENT_NAME" = pull_request ]; then windows=false; oracle=false; doctests=false; fi
|
||||
# Until a maintainer adds approved-for-ci, a pull request gets a quick compile instead of
|
||||
# Clippy, the tests and the doc tests.
|
||||
# Clippy, the tests, the doc tests and the goldens.
|
||||
quick=false
|
||||
if [ "$EVENT_NAME" = pull_request ] && [ "$APPROVED" != true ]; then
|
||||
quick=$native
|
||||
native=false
|
||||
oracle=false
|
||||
goldens=false
|
||||
fi
|
||||
# A push that only merges main into the change (Merge branch 'main', Update branch) when
|
||||
# the change itself already passed: nothing new to test here, and main tests the merged
|
||||
@@ -337,6 +337,7 @@ jobs:
|
||||
if [ -n "$carried" ]; then
|
||||
echo "Only a merge of main into a change that passed in $carried: repository checks only."
|
||||
native=false
|
||||
goldens=false
|
||||
fi
|
||||
fi
|
||||
# The GPU path tests (their own job, about 56 runner-minutes) are for render changes only:
|
||||
@@ -362,6 +363,7 @@ jobs:
|
||||
echo "native=$native"
|
||||
echo "gpu=$gpu"
|
||||
echo "kernel=$kernel"
|
||||
echo "goldens=$goldens"
|
||||
echo "windows=$windows"
|
||||
echo "oracle=$oracle"
|
||||
echo "doctests=$doctests"
|
||||
@@ -387,7 +389,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: repo-checks
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Format
|
||||
run: cargo fmt --all -- --check
|
||||
- name: Asset attribution
|
||||
@@ -407,10 +409,6 @@ jobs:
|
||||
# New UI text must reach every complete catalog; report it here, before review (#8542).
|
||||
- name: Translations in the complete catalogs
|
||||
run: cargo xtask i18n --check
|
||||
- name: Model decisions use exact geometry, not meshes
|
||||
run: |
|
||||
cargo xtask mesh-decisions
|
||||
cargo test -p xtask mesh_decisions --locked
|
||||
- name: Agent router and skills cite real files
|
||||
run: |
|
||||
cargo xtask skills
|
||||
@@ -441,7 +439,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: quick-compile
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Cargo check
|
||||
run: cargo check --workspace --all-targets --locked
|
||||
|
||||
@@ -460,7 +458,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: native-clippy
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Clippy
|
||||
env:
|
||||
FULL: ${{ needs.changes.outputs.full }}
|
||||
@@ -503,7 +501,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: native-tests
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Set up compiler cache
|
||||
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
|
||||
with:
|
||||
@@ -574,7 +572,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: native-tests
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Set up compiler cache
|
||||
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
|
||||
with:
|
||||
@@ -585,8 +583,13 @@ jobs:
|
||||
- name: Run tests
|
||||
env:
|
||||
EVENT_NAME: ${{ github.event_name }}
|
||||
GOLDENS: ${{ needs.changes.outputs.goldens }}
|
||||
FULL: ${{ needs.changes.outputs.full }}
|
||||
PACKAGES: ${{ needs.changes.outputs.packages }}
|
||||
# The robustness golden seeds a pull request skips: each takes one to twenty minutes under
|
||||
# CI load, together about four fifths of the goldens' time. Pushes to main, the merge
|
||||
# queue and the nightly run every seed.
|
||||
SLOW_SEEDS: 81|45|20|24|95|02|57|40|18|48|32|46|85|61|77|34|14
|
||||
run: |
|
||||
# Pull requests skip the heavy tests (default-filter in .config/nextest.toml); `default()`
|
||||
# below is that filter, so a pull request still runs only what it ran before.
|
||||
@@ -600,23 +603,29 @@ jobs:
|
||||
# The boolean property tests draw new random inputs every run; they run only in the
|
||||
# nightly property-tests job, so a known kernel bug cannot turn main red at random.
|
||||
base='not (package(solidcraft-kernel) & binary(boolean_props))'
|
||||
elif [ "$GOLDENS" = true ]; then
|
||||
# A pull request that can change a robustness golden (tests/robustness/goldens.json)
|
||||
# also checks every seed but the slow ones, in the same run so they share its cores.
|
||||
base="(default() & not (binary(action_matrix) & test(=action_matrix_sample))) | (package(solidcraft-engine) & test(/^tests::robustness_goldens::/) & not test(/^tests::robustness_goldens::seed_($SLOW_SEEDS)\$/))"
|
||||
fi
|
||||
junit=${CARGO_TARGET_DIR:-target}/nextest/ci/junit.xml
|
||||
rm -f "$junit"
|
||||
# Pull requests test the affected packages (scripts/ci/affected.py).
|
||||
scope=(--workspace)
|
||||
if [ "$FULL" != true ]; then scope=(); for p in $PACKAGES; do scope+=(-p "$p"); done; fi
|
||||
status=0
|
||||
# The GPU path tracer's tests run in their own job (GPU path tests): one at a time, they
|
||||
# took about 36 of this job's 45 minutes.
|
||||
# A failed test does not fail the step by itself: the tests known to fail today
|
||||
# (tests/KNOWN_FAILING_TESTS) may fail, any other fails it, and so does a listed test
|
||||
# that passes. nextest's exit code 100 is "tests failed"; any other is its own error
|
||||
# (a build error, a bad filter) and fails the step at once.
|
||||
status=0
|
||||
cargo nextest run "${scope[@]}" --cargo-profile ci --locked --profile ci --no-tests=pass \
|
||||
--ignore-default-filter -E "($base) & not (package(=solidcraft-gpu) & test(/^path::/))" || status=$?
|
||||
if [ "$status" -ne 0 ] && [ "$status" -ne 100 ]; then exit "$status"; fi
|
||||
cargo xtask known-failing --junit "$junit"
|
||||
--ignore-default-filter -E "($base) & not (package(=solidcraft-gpu) & test(/^path::/))" || status=1
|
||||
if [ "$status" != 0 ]; then
|
||||
# A failed golden gets the hint to re-record it (junit.xml lists the failures).
|
||||
if [ -f "$junit" ] && tr '\n' ' ' < "$junit" | grep -q '<testcase name="tests::robustness_goldens::[^"]*"[^>]*>[[:space:]]*<failure'; then
|
||||
echo "::error::A robustness golden changed. If the new result is intended, re-record it in this pull request and say why:"
|
||||
echo "::error::ROBUSTNESS_GOLDENS_BLESS=\"why it changed\" cargo test --profile ci -p solidcraft-engine --lib robustness_goldens:: (see docs/robustness.md)"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
- name: Compiler cache statistics
|
||||
if: always()
|
||||
run: sccache --show-stats
|
||||
@@ -690,7 +699,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: native-gpu
|
||||
save-if: ${{ (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') && matrix.shard == 1 }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' && matrix.shard == 1 }}
|
||||
- name: Set up compiler cache
|
||||
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
|
||||
with:
|
||||
@@ -705,14 +714,8 @@ jobs:
|
||||
# None of these is in the default filter (the heavy tests), so pull requests, the merge
|
||||
# queue, main and nightly all run every one of them, as before. `count` deals the tests
|
||||
# out in turn (27 each); `hash` split them 41/40/27 across three shards.
|
||||
# Graded against tests/KNOWN_FAILING_TESTS, as in Native Linux tests.
|
||||
junit=${CARGO_TARGET_DIR:-target}/nextest/ci/junit.xml
|
||||
rm -f "$junit"
|
||||
status=0
|
||||
cargo nextest run -p solidcraft-gpu --cargo-profile ci --locked --profile ci --no-tests=pass \
|
||||
--ignore-default-filter -E 'test(/^path::/)' --partition "count:$SHARD/4" || status=$?
|
||||
if [ "$status" -ne 0 ] && [ "$status" -ne 100 ]; then exit "$status"; fi
|
||||
cargo xtask known-failing --junit "$junit"
|
||||
--ignore-default-filter -E 'test(/^path::/)' --partition "count:$SHARD/4"
|
||||
- name: Compiler cache statistics
|
||||
if: always()
|
||||
run: sccache --show-stats
|
||||
@@ -846,7 +849,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: doc-tests
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Set up compiler cache
|
||||
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
|
||||
with:
|
||||
@@ -904,7 +907,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: oracle
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Set up compiler cache
|
||||
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
|
||||
with:
|
||||
@@ -943,7 +946,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: windows-fxc
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
# One test at a time: WARP's shader JIT crashes now and then (a null read in
|
||||
# d3d10warp.dll's JIT optimizer, about 1 run in 60) when several devices compile compute
|
||||
# pipelines at once, which the parallel tests do. Minidumps showed it in WARP itself, not
|
||||
@@ -967,7 +970,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: windows-startup
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Backend order and probing on Windows
|
||||
run: cargo test -p solidcraft --profile ci --locked -- startup::tests native_crash::tests native_frame::tests
|
||||
- name: Build the app
|
||||
@@ -1104,7 +1107,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: wasm
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- run: cargo xtask wasm
|
||||
|
||||
riscv64-gates:
|
||||
@@ -1126,7 +1129,7 @@ jobs:
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: riscv64
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: Install cross-compilation dependencies
|
||||
run: |
|
||||
# Ubuntu's regular archive serves amd64; RISC-V packages live in ports.
|
||||
@@ -1142,7 +1145,7 @@ jobs:
|
||||
EOF
|
||||
sudo dpkg --add-architecture riscv64
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libasound2-dev:riscv64 libxkbcommon-dev:riscv64 \
|
||||
sudo apt-get install -y gcc-riscv64-linux-gnu libasound2-dev:riscv64 libxkbcommon-dev:riscv64 \
|
||||
libwayland-dev:riscv64 libx11-dev:riscv64 libxrandr-dev:riscv64 libxi-dev:riscv64 libgl1-mesa-dev:riscv64
|
||||
- name: Cargo check on RISC-V
|
||||
env:
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
# The fillet rig as a regression gate: a pull request that touches fillet code (the paths below)
|
||||
# runs every case in tests/kernel-cases/fillets/ through one release build of
|
||||
# solidcraft-cli, and fails on a regression (a case that fails and
|
||||
# tests/kernel-cases/fillets/KNOWN_FAILING does not list) or on a listed case that now passes
|
||||
# (it is fixed: remove its line, so the list only shrinks). See tests/kernel-cases/README.md.
|
||||
#
|
||||
# GitHub filters a workflow by whole files, so the fillet parts of crates/doc/src/eval*.rs and
|
||||
# crates/engine/src/cmd/features.rs select it whenever those files change. Pushes to main and
|
||||
# develop that touch the same paths run it too and save the compiler cache (a Blacksmith sticky
|
||||
# disk) that pull requests then mount read-only.
|
||||
name: Fillet rig
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
paths:
|
||||
- "crates/kernel/src/blend*.rs"
|
||||
- "crates/kernel/src/fillet*.rs"
|
||||
- "crates/kernel/src/*corner*.rs"
|
||||
- "crates/kernel/src/continuity*.rs"
|
||||
- "crates/smlib/**"
|
||||
- "crates/doc/src/eval*.rs"
|
||||
- "crates/engine/src/cmd/features.rs"
|
||||
- "tests/kernel-cases/fillets/**"
|
||||
# The rig itself: the grading, the runner and this workflow.
|
||||
- "apps/solidcraft-cli/src/kernel_cases.rs"
|
||||
- "xtask/src/kernel_cases.rs"
|
||||
- ".github/workflows/fillet-rig.yml"
|
||||
push:
|
||||
branches: [main, develop]
|
||||
# The same paths as pull_request.
|
||||
paths:
|
||||
- "crates/kernel/src/blend*.rs"
|
||||
- "crates/kernel/src/fillet*.rs"
|
||||
- "crates/kernel/src/*corner*.rs"
|
||||
- "crates/kernel/src/continuity*.rs"
|
||||
- "crates/smlib/**"
|
||||
- "crates/doc/src/eval*.rs"
|
||||
- "crates/engine/src/cmd/features.rs"
|
||||
- "tests/kernel-cases/fillets/**"
|
||||
# The rig itself: the grading, the runner and this workflow.
|
||||
- "apps/solidcraft-cli/src/kernel_cases.rs"
|
||||
- "xtask/src/kernel_cases.rs"
|
||||
- ".github/workflows/fillet-rig.yml"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: fillet-rig-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
jobs:
|
||||
fillets:
|
||||
name: Fillet rig
|
||||
# Draft pull requests run no CI, as in ci.yml.
|
||||
if: github.event_name != 'pull_request' || !github.event.pull_request.draft
|
||||
runs-on: blacksmith-8vcpu-ubuntu-2404
|
||||
timeout-minutes: 60
|
||||
env:
|
||||
CARGO_INCREMENTAL: "0"
|
||||
RUSTC_WRAPPER: sccache
|
||||
SCCACHE_DIR: /home/runner/.cache/sccache
|
||||
SCCACHE_CACHE_SIZE: 10G
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
- name: Size parallel compiles to the job's memory
|
||||
run: scripts/ci/build-jobs.sh
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
# Only main and develop commit the cache; pull requests and forks mount a clone and never
|
||||
# write back.
|
||||
- name: Mount the compiler cache
|
||||
uses: useblacksmith/stickydisk@3f6be1451e3cad893b778bc93495c80452a5da26 # v1.7.2
|
||||
continue-on-error: true
|
||||
with:
|
||||
key: ${{ github.repository }}-sccache-fillet-rig
|
||||
path: /home/runner/.cache/sccache
|
||||
commit: ${{ (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') && 'on-change' || 'false' }}
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: fillet-rig
|
||||
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
|
||||
- name: Set up compiler cache
|
||||
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
|
||||
with:
|
||||
version: v0.16.0
|
||||
- name: Build the CLI (release)
|
||||
run: cargo build --release --locked -p solidcraft-cli
|
||||
- name: Run the fillet cases against the known-failing list
|
||||
run: >-
|
||||
cargo run -q --locked -p xtask -- kernel-cases --area fillets
|
||||
--cli target/release/solidcraft-cli --out "$RUNNER_TEMP/fillet-rig"
|
||||
--known-failing tests/kernel-cases/fillets/KNOWN_FAILING
|
||||
- name: Keep the results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
||||
with:
|
||||
name: fillet-rig-results
|
||||
path: ${{ runner.temp }}/fillet-rig/results.json
|
||||
if-no-files-found: ignore
|
||||
@@ -21,8 +21,6 @@ concurrency:
|
||||
jobs:
|
||||
publish:
|
||||
name: Request the combined docs, web, and Flatpak deployment
|
||||
# A pre-release stays off the Flatpak feed: the feed's one branch is what `flatpak update` offers.
|
||||
if: github.event_name == 'workflow_dispatch' || !github.event.release.prerelease
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# While a new geometry kernel is evaluated, new issues and discussions about kernel work, and new
|
||||
# pull requests that change the kernel directories, are labelled `kernel-paused` for a maintainer to
|
||||
# answer (CONTRIBUTING.md, "Kernel work is paused"). The logic is in scripts/kernel-paused/ (tested
|
||||
# in ci.yml).
|
||||
# While a new geometry kernel is evaluated, new issues, pull requests and discussions about kernel
|
||||
# work are labelled `kernel-paused` for a maintainer to answer (CONTRIBUTING.md, "Kernel work is
|
||||
# paused"). The logic is in scripts/kernel-paused/ (tested in ci.yml).
|
||||
name: Kernel paused
|
||||
|
||||
on:
|
||||
|
||||
@@ -1,238 +0,0 @@
|
||||
# The kernel rig and the complexity ladder as a regression gate. A plan job maps a pull request's
|
||||
# changed files to the rig areas they can affect (scripts/ci/kernel_rig_plan.py): an area runs
|
||||
# when a file its tests/kernel-cases/<area>/PATHS lists changes, or one of its cases; every area
|
||||
# runs when the shared core in tests/kernel-cases/PATHS-ALL changes, and when the solidcore pin in
|
||||
# the root Cargo.toml and Cargo.lock moves (the plan reads their diff); the ladder runs whenever any
|
||||
# area does. One job then builds solidcraft-cli once (release), checks that every
|
||||
# registry command has a case or an exemption (tests/kernel-cases/EXEMPT), and hands the CLI to a
|
||||
# matrix of shards as an artifact, one per selected area plus the ladder, in parallel, so the
|
||||
# wall time is the build plus the slowest shard. See tests/kernel-cases/README.md.
|
||||
#
|
||||
# - An area fails on a regression (a case that fails and its tests/kernel-cases/<area>/KNOWN_FAILING
|
||||
# does not list) or on a listed case that passes (it is fixed: remove its line in the same pull
|
||||
# request, so the list only shrinks).
|
||||
# - The ladder fails on any case whose status or counts differ from
|
||||
# tests/kernel-cases/ladder/golden.json; a right change is re-recorded (`--record "why"`).
|
||||
#
|
||||
# The trigger paths are whole folders that hold every area's PATHS (a self-test,
|
||||
# scripts/ci/test_kernel_rig_plan.py, checks they do), so a pull request that touches none of
|
||||
# them (the UI, docs, packaging) starts no runner at all, and a new area needs no edit here: the
|
||||
# plan finds the areas from the folders. Pushes to main and develop on the same paths, merge groups
|
||||
# (once the queue is on), the release gate (release-gate.yml, workflow_call) and a run by hand run
|
||||
# every area; those pushes also commit the compiler cache (a Blacksmith sticky disk) that every
|
||||
# other run mounts read-only.
|
||||
name: Kernel rig
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
paths:
|
||||
- "crates/kernel/**"
|
||||
- "crates/geom/**"
|
||||
- "crates/smlib/**"
|
||||
- "crates/step/**"
|
||||
- "crates/io/src/**"
|
||||
- "crates/doc/src/**"
|
||||
- "crates/engine/src/**"
|
||||
- "tests/kernel-cases/**"
|
||||
# The solidcore pin (the plan runs every area only when its lines change).
|
||||
- "Cargo.toml"
|
||||
- "Cargo.lock"
|
||||
# The rig itself: the grading, the runner, the selection and this workflow.
|
||||
- "apps/solidcraft-cli/src/kernel_cases.rs"
|
||||
- "xtask/src/kernel_cases.rs"
|
||||
- "xtask/src/kernel_ladder.rs"
|
||||
- "scripts/ci/kernel_rig_plan.py"
|
||||
- "scripts/ci/test_kernel_rig_plan.py"
|
||||
- ".github/workflows/kernel-rig.yml"
|
||||
push:
|
||||
branches: [main, develop]
|
||||
# The same paths as pull_request.
|
||||
paths:
|
||||
- "crates/kernel/**"
|
||||
- "crates/geom/**"
|
||||
- "crates/smlib/**"
|
||||
- "crates/step/**"
|
||||
- "crates/io/src/**"
|
||||
- "crates/doc/src/**"
|
||||
- "crates/engine/src/**"
|
||||
- "tests/kernel-cases/**"
|
||||
# The solidcore pin (the plan runs every area only when its lines change).
|
||||
- "Cargo.toml"
|
||||
- "Cargo.lock"
|
||||
# The rig itself: the grading, the runner, the selection and this workflow.
|
||||
- "apps/solidcraft-cli/src/kernel_cases.rs"
|
||||
- "xtask/src/kernel_cases.rs"
|
||||
- "xtask/src/kernel_ladder.rs"
|
||||
- "scripts/ci/kernel_rig_plan.py"
|
||||
- "scripts/ci/test_kernel_rig_plan.py"
|
||||
- ".github/workflows/kernel-rig.yml"
|
||||
merge_group:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
# A new push to a pull request replaces its old run.
|
||||
group: kernel-rig-${{ github.event_name }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
jobs:
|
||||
plan:
|
||||
name: Select the rig areas
|
||||
# Draft pull requests run no CI, as in ci.yml.
|
||||
if: github.event_name != 'pull_request' || !github.event.pull_request.draft
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
timeout-minutes: 5
|
||||
outputs:
|
||||
# The shard matrix (JSON list of areas and the ladder; [] when nothing is selected).
|
||||
shards: ${{ steps.plan.outputs.shards }}
|
||||
# Whether the build job, and with it the coverage check, runs.
|
||||
build: ${{ steps.plan.outputs.build }}
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
# A pull request's diff needs its base's history.
|
||||
fetch-depth: ${{ github.event_name == 'pull_request' && '0' || '1' }}
|
||||
- name: Selection self-test
|
||||
run: python3 -I scripts/ci/test_kernel_rig_plan.py
|
||||
- id: plan
|
||||
name: Map the changed files to areas
|
||||
env:
|
||||
EVENT_NAME: ${{ github.event_name }}
|
||||
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
||||
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
||||
run: |
|
||||
# Pull requests run the areas their diff reaches; pushes, merge groups, the release
|
||||
# gate and a run by hand run every area.
|
||||
if [ "$EVENT_NAME" = pull_request ]; then
|
||||
git diff --no-renames --name-only -z "$BASE_SHA...$HEAD_SHA" > "$RUNNER_TEMP/rig-paths"
|
||||
git diff --no-renames "$BASE_SHA...$HEAD_SHA" -- Cargo.toml Cargo.lock > "$RUNNER_TEMP/rig-pin.diff"
|
||||
python3 -I scripts/ci/kernel_rig_plan.py --paths "$RUNNER_TEMP/rig-paths" --pin-diff "$RUNNER_TEMP/rig-pin.diff" \
|
||||
--github-output "$GITHUB_OUTPUT"
|
||||
else
|
||||
python3 -I scripts/ci/kernel_rig_plan.py --all --github-output "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
build:
|
||||
name: Build the CLI
|
||||
needs: plan
|
||||
if: needs.plan.outputs.build == 'true'
|
||||
runs-on: blacksmith-8vcpu-ubuntu-2404
|
||||
timeout-minutes: 60
|
||||
env:
|
||||
CARGO_INCREMENTAL: "0"
|
||||
RUSTC_WRAPPER: sccache
|
||||
SCCACHE_DIR: /home/runner/.cache/sccache
|
||||
SCCACHE_CACHE_SIZE: 10G
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
- name: Size parallel compiles to the job's memory
|
||||
run: scripts/ci/build-jobs.sh
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
# Only pushes to main and develop commit the cache; pull requests, merge groups and forks
|
||||
# mount a clone and never write back.
|
||||
- name: Mount the compiler cache
|
||||
uses: useblacksmith/stickydisk@3f6be1451e3cad893b778bc93495c80452a5da26 # v1.7.2
|
||||
continue-on-error: true
|
||||
with:
|
||||
key: ${{ github.repository }}-sccache-kernel-rig
|
||||
path: /home/runner/.cache/sccache
|
||||
commit: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') && 'on-change' || 'false' }}
|
||||
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
||||
with:
|
||||
key: kernel-rig
|
||||
save-if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') }}
|
||||
- name: Set up compiler cache
|
||||
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
|
||||
with:
|
||||
version: v0.16.0
|
||||
- name: Build the CLI (release) and the rig's runner
|
||||
run: |
|
||||
cargo build --release --locked -p solidcraft-cli
|
||||
cargo build --locked -p xtask
|
||||
# A tar keeps the executable bits, which an artifact drops. xtask finds the repository from
|
||||
# the path it was built in (CARGO_MANIFEST_DIR), which is the same checkout path in every
|
||||
# job of this workflow.
|
||||
# Every registry command is used by a case or listed in tests/kernel-cases/EXEMPT.
|
||||
- name: Every command has a case
|
||||
run: target/debug/xtask kernel-cases --coverage --cli target/release/solidcraft-cli
|
||||
# A coverage-only run (the registry or the cases changed, no area selected) runs no shard.
|
||||
- name: Pack the binaries
|
||||
if: needs.plan.outputs.shards != '[]'
|
||||
run: tar -cf "$RUNNER_TEMP/kernel-rig-bin.tar" -C target release/solidcraft-cli debug/xtask
|
||||
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
||||
if: needs.plan.outputs.shards != '[]'
|
||||
with:
|
||||
name: kernel-rig-bin
|
||||
path: ${{ runner.temp }}/kernel-rig-bin.tar
|
||||
retention-days: 1
|
||||
- name: Compiler cache statistics
|
||||
if: always()
|
||||
run: sccache --show-stats
|
||||
|
||||
shard:
|
||||
name: Kernel rig (${{ matrix.shard }})
|
||||
needs: [plan, build]
|
||||
if: needs.plan.outputs.shards != '[]'
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
timeout-minutes: 30
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# The areas of tests/kernel-cases/ the plan selected, and the ladder. On the build box
|
||||
# (aarch64, 4 cases at a time) the slowest areas took about 1 minute (booleans, 212 s of
|
||||
# cases with one of 84 s; threads, 161 s) and the ladder, one case at a time, 92 s: no area
|
||||
# needs splitting.
|
||||
shard: ${{ fromJSON(needs.plan.outputs.shards) }}
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
||||
with:
|
||||
name: kernel-rig-bin
|
||||
path: ${{ runner.temp }}
|
||||
- name: Unpack the binaries
|
||||
run: mkdir -p target && tar -xf "$RUNNER_TEMP/kernel-rig-bin.tar" -C target
|
||||
- name: Run the cases against the known-failing list (the ladder against its golden)
|
||||
env:
|
||||
SHARD: ${{ matrix.shard }}
|
||||
run: |
|
||||
if [ "$SHARD" = ladder ]; then
|
||||
set -- --ladder --gate
|
||||
else
|
||||
set -- --area "$SHARD" --known-failing "tests/kernel-cases/$SHARD/KNOWN_FAILING"
|
||||
fi
|
||||
target/debug/xtask kernel-cases "$@" --cli target/release/solidcraft-cli --out "$RUNNER_TEMP/kernel-rig"
|
||||
- name: Keep the results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
||||
with:
|
||||
name: kernel-rig-results-${{ matrix.shard }}
|
||||
path: ${{ runner.temp }}/kernel-rig/**/results.json
|
||||
if-no-files-found: ignore
|
||||
|
||||
# One check for the whole gate, for branch protection and the merge queue.
|
||||
kernel-rig:
|
||||
name: kernel-rig
|
||||
needs: [plan, build, shard]
|
||||
if: always() && (github.event_name != 'pull_request' || !github.event.pull_request.draft)
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
steps:
|
||||
# A skipped build or shard counts as passed only when the plan selected none.
|
||||
- name: Every selected job passed
|
||||
env:
|
||||
PLAN: ${{ needs.plan.result }}
|
||||
WANT_BUILD: ${{ needs.plan.outputs.build }}
|
||||
WANT_SHARDS: ${{ needs.plan.outputs.shards }}
|
||||
BUILD: ${{ needs.build.result }}
|
||||
SHARDS: ${{ needs.shard.result }}
|
||||
run: |
|
||||
echo "plan=$PLAN build=$BUILD shards=$SHARDS selected=$WANT_SHARDS"
|
||||
test "$PLAN" = success
|
||||
if [ "$WANT_BUILD" = true ]; then test "$BUILD" = success; else test "$BUILD" = skipped; fi
|
||||
if [ "$WANT_SHARDS" != '[]' ]; then test "$SHARDS" = success; else test "$SHARDS" = skipped; fi
|
||||
@@ -1,6 +1,5 @@
|
||||
# The documentation site on GitHub Pages: the book (docs/book) at https://docs.solidcraft.io/
|
||||
# and the web app at /app/ (the latest release), /app-rc/ (the newest release candidate) and
|
||||
# /app-edge/ (this commit). Needs Settings → Pages → Source = GitHub Actions; skipped while the
|
||||
# and the bundled web app at /app/. Needs Settings → Pages → Source = GitHub Actions; skipped while the
|
||||
# repository is private.
|
||||
name: Pages
|
||||
|
||||
@@ -67,10 +66,7 @@ jobs:
|
||||
mkdir -p site
|
||||
cp -r target/book/. site/
|
||||
bash docs/book/seo.sh site # canonical links, robots.txt, sitemap.xml
|
||||
- name: Add the web app channels (stable and release candidate from their releases, edge from this build)
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: bash packaging/web-channels.sh site dist/web
|
||||
cp -r dist/web site/app
|
||||
- uses: actions/configure-pages@v5
|
||||
id: pages
|
||||
- name: Install Flatpak repository tools
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Three quick checks on every pull request (CONTRIBUTING.md, "Sending a change"): no second open PR
|
||||
# for an issue a lower-numbered one already closes, the "Changes a default:" line is filled in, and
|
||||
# a PR adding to the showcase shows a picture. None is a required status check. The logic is in scripts/pr-checks/pr-checks.js (tested in ci.yml).
|
||||
# Two quick checks on every pull request (CONTRIBUTING.md, "Sending a change"): no second open PR
|
||||
# for an issue a lower-numbered one already closes, and the "Changes a default:" line is filled in.
|
||||
# Neither is a required status check. The logic is in scripts/pr-checks/pr-checks.js (tested in ci.yml).
|
||||
name: PR checks
|
||||
|
||||
on:
|
||||
@@ -48,21 +48,6 @@ jobs:
|
||||
const r = await checks.checkDefaults({ github, context, core });
|
||||
core.info(JSON.stringify(r));
|
||||
|
||||
picture:
|
||||
name: Picture check
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
sparse-checkout: scripts/pr-checks
|
||||
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
with:
|
||||
script: |
|
||||
const checks = require('./scripts/pr-checks/pr-checks.js');
|
||||
const r = await checks.checkPicture({ github, context, core });
|
||||
core.info(JSON.stringify(r));
|
||||
|
||||
# Labelling needs write access, which a fork PR's token never has, so it is its own job and best
|
||||
# effort: a fork PR just doesn't get the `changes-default` label from here.
|
||||
label:
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
# The release gate: everything, in full and in parallel, on one branch's head, before that branch
|
||||
# replaces main as a release (develop, rebased onto main). Run it by hand:
|
||||
# gh workflow run release-gate.yml --ref develop
|
||||
# It calls the workflows that own each check instead of copying their jobs:
|
||||
# - ci.yml as Run workflow with cross-compilation: every native suite in full (not scoped), the
|
||||
# reference tests, the doc tests, the GPU path tests, the action matrix (all 16 shards) and its
|
||||
# determinism check, the property tests, the repository checks (web-offline among them),
|
||||
# WebAssembly and RISC-V, Windows D3D12 FXC and Windows app startup;
|
||||
# - kernel-rig.yml: every rig area against its KNOWN_FAILING and the ladder against its golden;
|
||||
# - release.yml as a dry run (draft false, packages_only): the Linux, Flatpak, Snap, FreeBSD,
|
||||
# macOS, Windows and web packages with their smoke tests and package checks, unsigned (no
|
||||
# secrets are passed, so no signing secret or SignPath quota is used) and without the release
|
||||
# job (checksums, update signing, publishing).
|
||||
# The gate passes only when all three pass. Before main is replaced, tag the old main
|
||||
# (main-before-develop-<date>) and push the tag.
|
||||
name: Release gate
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: release-gate-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
name: CI
|
||||
uses: ./.github/workflows/ci.yml
|
||||
permissions:
|
||||
contents: read
|
||||
# Select checks reads this commit's other runs.
|
||||
actions: read
|
||||
with:
|
||||
cross_compile: true
|
||||
|
||||
kernel-rig:
|
||||
name: Kernel rig
|
||||
uses: ./.github/workflows/kernel-rig.yml
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
packages:
|
||||
name: Packages
|
||||
uses: ./.github/workflows/release.yml
|
||||
# No secrets: the signing steps skip without them. GitHub checks a called workflow's job
|
||||
# permissions before the run, skipped jobs included, so the release job's contents: write must
|
||||
# be granted here; packages_only skips that job, and no step that runs writes to the
|
||||
# repository. actions: read is the Windows job's.
|
||||
permissions:
|
||||
contents: write
|
||||
actions: read
|
||||
with:
|
||||
draft: false
|
||||
packages_only: true
|
||||
|
||||
release-gate:
|
||||
name: release-gate
|
||||
needs: [ci, kernel-rig, packages]
|
||||
if: always()
|
||||
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||
steps:
|
||||
- name: Every part passed
|
||||
env:
|
||||
CI: ${{ needs.ci.result }}
|
||||
KERNEL_RIG: ${{ needs.kernel-rig.result }}
|
||||
PACKAGES: ${{ needs.packages.result }}
|
||||
run: |
|
||||
echo "ci=$CI kernel-rig=$KERNEL_RIG packages=$PACKAGES"
|
||||
test "$CI" = success
|
||||
test "$KERNEL_RIG" = success
|
||||
test "$PACKAGES" = success
|
||||
@@ -21,8 +21,6 @@
|
||||
# releases/latest/download/<name> links in the README keep working across releases.
|
||||
#
|
||||
# A dry run: dispatch with draft=false (the default). Only the release branch may create drafts.
|
||||
# The release gate (release-gate.yml) calls it as such a dry run, without secrets (unsigned) and
|
||||
# without the release job (packages_only).
|
||||
# A dry run from any branch also test-signs the Windows files when SIGNPATH_API_TOKEN exists:
|
||||
# gh workflow run release.yml --ref <branch> -f draft=false [-f signpath_signing_policy=test-signing]
|
||||
name: Release
|
||||
@@ -43,25 +41,6 @@ on:
|
||||
description: "SignPath signing policy for the Windows files (empty: the repository variable, else test-signing)"
|
||||
type: string
|
||||
default: ""
|
||||
# The release gate (release-gate.yml): a dry run (draft false) of every package and its checks.
|
||||
# The event stays the caller's (workflow_dispatch), so a call runs as a dispatched dry run does.
|
||||
# The gate passes no secrets, so nothing is signed (the signing steps skip without their
|
||||
# secrets, as on a fork), and packages_only skips the release job (checksums, update signing,
|
||||
# publishing).
|
||||
workflow_call:
|
||||
inputs:
|
||||
packages_only:
|
||||
description: "Build and check every package only: no release job"
|
||||
type: boolean
|
||||
default: false
|
||||
draft:
|
||||
description: "Create/update a draft (release branch only; off: build artifacts only)"
|
||||
type: boolean
|
||||
default: false
|
||||
signpath_signing_policy:
|
||||
description: "SignPath signing policy for the Windows files (empty: the repository variable, else test-signing)"
|
||||
type: string
|
||||
default: ""
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -234,8 +213,6 @@ jobs:
|
||||
if: needs.version.outputs.build == 'true'
|
||||
# makepkg only repackages the tarball's prebuilt binaries, so both architectures build here.
|
||||
runs-on: ubuntu-24.04
|
||||
# A pre-release or nightly without an Arch package is still worth having; a stable release isn't.
|
||||
continue-on-error: ${{ contains(needs.version.outputs.version, '-') }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -252,29 +229,10 @@ jobs:
|
||||
# makepkg in an archlinux:base-devel container. The package is named after the tarball's
|
||||
# .desktop file (io.tangencylabs.solidcraft) and written as
|
||||
# dist/release/solidcraft-<version>-linux-<arch>.pkg.tar.zst.
|
||||
# An Arch version can't hold a hyphen, and the action reads the version from the tarball's name
|
||||
# (a hyphenated one comes out as 0.0.0): 0.40.0-rc.1 goes in as 0.40.0rc.1, which pacman sorts
|
||||
# before 0.40.0, and the package keeps the release's name.
|
||||
- id: pkgver
|
||||
name: Arch version
|
||||
run: |
|
||||
pkgver="${VERSION//-/}"
|
||||
echo "pkgver=$pkgver" >>"$GITHUB_OUTPUT"
|
||||
if [ "$pkgver" != "$VERSION" ]; then
|
||||
cp "dist/linux/solidcraft-$VERSION-linux-$ARCH.tar.gz" "dist/linux/solidcraft-$pkgver-linux-$ARCH.tar.gz"
|
||||
fi
|
||||
env:
|
||||
ARCH: ${{ matrix.arch }}
|
||||
- uses: storytold/craft-common-actions/actions/arch-package@fa5ef18780cf5e7d5d3b8de068de56cffc83cac5 # main
|
||||
with:
|
||||
tarball: dist/linux/solidcraft-${{ steps.pkgver.outputs.pkgver }}-linux-${{ matrix.arch }}.tar.gz
|
||||
tarball: dist/linux/solidcraft-${{ env.VERSION }}-linux-${{ matrix.arch }}.tar.gz
|
||||
arch: ${{ matrix.arch }}
|
||||
- name: The package under the release's version
|
||||
if: steps.pkgver.outputs.pkgver != env.VERSION
|
||||
env:
|
||||
ARCH: ${{ matrix.arch }}
|
||||
PKGVER: ${{ steps.pkgver.outputs.pkgver }}
|
||||
run: sudo mv "dist/release/solidcraft-$PKGVER-linux-$ARCH.pkg.tar.zst" "dist/release/solidcraft-$VERSION-linux-$ARCH.pkg.tar.zst"
|
||||
- name: Check the package
|
||||
env:
|
||||
PKG: dist/release/solidcraft-${{ env.VERSION }}-linux-${{ matrix.arch }}.pkg.tar.zst
|
||||
@@ -654,8 +612,7 @@ jobs:
|
||||
release:
|
||||
name: GitHub Release or dry-run artifacts
|
||||
needs: [version, linux, flatpak, arch, snap, freebsd, macos, windows, web]
|
||||
# Not for the release gate (packages_only): it builds and checks the packages, nothing more.
|
||||
if: needs.version.outputs.build == 'true' && !inputs.packages_only
|
||||
if: needs.version.outputs.build == 'true'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
@@ -10,8 +10,6 @@ Work: ROADMAP.md, "Where help is wanted most" in CONTRIBUTING.md, issues labelle
|
||||
- No GPL/LGPL/AGPL code, not even reading it (OpenCASCADE, FreeCAD, SolveSpace, CadQuery, LibreCAD, QCAD): `cargo xtask licences --check`.
|
||||
- Every asset is original or openly licensed with a row in ATTRIBUTION.md; read `assets/AGENTS.md` before icon work: `cargo xtask assets`, `cargo xtask icons`.
|
||||
- Never crash: no unwrap/expect/panic/unsafe in non-test code (unsafe allowlist in crash-safety), errors are `Result`, input is hostile: clippy `-D warnings`, `hostile_params_never_panic`.
|
||||
- Model decisions (what an operation does, which bodies it touches, which face or edge a point or name means, depths, nearness) use exact geometry; a mesh is for display, export, previews and mesh bodies (`xtask/mesh-decisions.txt` only shrinks): `cargo xtask mesh-decisions`.
|
||||
- New kernel cases go to solidcore: `cargo xtask lists`.
|
||||
- Everything is a command and programmatic calls never open dialogs: `skills/solidcraft-commands/SKILL.md`.
|
||||
- Layering (geom, sketch/kernel/render, doc, io, engine, ui-egui, apps); only `crates/kernel` uses truck: `cargo xtask layers`.
|
||||
- One outer UI container, one camera path (`navigation::handle`), colours from theme tokens: `cargo xtask ui-containers`.
|
||||
@@ -24,7 +22,6 @@ Work: ROADMAP.md, "Where help is wanted most" in CONTRIBUTING.md, issues labelle
|
||||
- A changed default keeps the old behaviour behind a preference and fills the PR's `Changes a default:` line, and no second PR for an issue a lower-numbered one closes: `pr-checks.yml`.
|
||||
- A regression test goes in the area's existing test file, never a per-bug file (#3226).
|
||||
- Look at open PRs first, claim with a draft PR (lowest number wins), one topic per PR, never force-push `main`, no pushes just to catch up with `main`: `skills/solidcraft-contributing/SKILL.md`.
|
||||
- A PR's title and first sentence make sense to someone who never saw your chat or the issue: `skills/solidcraft-contributing/SKILL.md`.
|
||||
- Show observable changes with real screenshots or a recording, captured yourself.
|
||||
- Run `cargo xtask ci` before every commit, without switching branches while it runs. `cargo xtask skills` keeps this file and `skills/` honest.
|
||||
|
||||
|
||||
@@ -103,22 +103,6 @@ Editable drawing code, native projects and shipped exports are collected under `
|
||||
| tests/step-conformance/tiny_pin.step | step-conformance contributors | generated from formulas by https://github.com/dan335/step-conformance (corpus/generated, 96f30bb); import regression fixture | CC0-1.0 |
|
||||
| tests/step-conformance/torus_ring_nurbs.step | step-conformance contributors | generated from formulas by https://github.com/dan335/step-conformance (corpus/generated, 96f30bb); import regression fixture | CC0-1.0 |
|
||||
| tests/step-conformance/washer.step | step-conformance contributors | generated from formulas by https://github.com/dan335/step-conformance (corpus/generated, 96f30bb); import regression fixture | CC0-1.0 |
|
||||
| tests/kernel-cases/import/1721-closed-bspline-tube-face/input.step | step-conformance contributors | copy of tests/step-conformance/cylinder_nurbs.step (generated from formulas by https://github.com/dan335/step-conformance, corpus/generated, 96f30bb); kernel regression case for tangency-labs/solidcraft#1721 | CC0-1.0 |
|
||||
| tests/kernel-cases/import/2043-outer-bound-opposing-surface-sense/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#2043 | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/258-cone-point-vertex/input.step | step-conformance contributors | copy of tests/step-conformance/cone_point_vertex.step (generated from formulas by https://github.com/dan335/step-conformance, corpus/generated, 96f30bb); kernel regression case for tangency-labs/solidcraft#258 | CC0-1.0 |
|
||||
| tests/kernel-cases/import/258-cone-to-point/input.step | step-conformance contributors | copy of tests/step-conformance/cone_point.step (generated from formulas by https://github.com/dan335/step-conformance, corpus/generated, 96f30bb); kernel regression case for tangency-labs/solidcraft#258 | CC0-1.0 |
|
||||
| tests/kernel-cases/import/258-tiny-pin/input.step | step-conformance contributors | copy of tests/step-conformance/tiny_pin.step (generated from formulas by https://github.com/dan335/step-conformance, corpus/generated, 96f30bb); kernel regression case for tangency-labs/solidcraft#258 | CC0-1.0 |
|
||||
| tests/kernel-cases/import/3098-bspline-edges-over-tiny-knot-span/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#3098 | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/3208-extruded-ellipse-face-over-parameter-seam/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#3208 | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/3352-vertex-off-its-edge-curve/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#3352 | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/3730-void-oriented-shell-false/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#3730 | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/3880-cylinder-seam-edge/input.step | step-conformance contributors | copy of tests/step-conformance/cylinder_seam.step (generated from formulas by https://github.com/dan335/step-conformance, corpus/generated, 96f30bb); kernel regression case for tangency-labs/solidcraft#3880 | CC0-1.0 |
|
||||
| tests/kernel-cases/import/3880-nurbs-hemisphere-dome/input.step | step-conformance contributors | copy of tests/step-conformance/dome_nurbs.step (generated from formulas by https://github.com/dan335/step-conformance, corpus/generated, 96f30bb); kernel regression case for tangency-labs/solidcraft#3880 | CC0-1.0 |
|
||||
| tests/kernel-cases/import/3963-closed-spline-edge-vertex-past-start/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#3963 | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/4005-cylinder-written-as-near-zero-cone/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#4005 | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/4006-plane-written-as-cone-of-nearly-right-angle/input.step | SolidCraft contributors | synthetic STEP file written by hand from ISO 10303-21 for the kernel regression case of tangency-labs/solidcraft#4006 | MIT OR Apache-2.0 |
|
||||
| tests/ssi-corpus/cases/*.json.gz, tests/ssi-corpus/LICENSE-MIT, tests/ssi-corpus/LICENSE-APACHE | ssi-corpus contributors (jyviko) | 119 surface/surface intersection cases with exact ground truth from https://github.com/jyviko/ssi-corpus (cases/data, b04c8a6), gzip-compressed, unchanged; SSI scorer fixtures (tests/ssi-corpus/README.md) | MIT OR Apache-2.0 |
|
||||
| tests/ssi-corpus/cases/y23_*.json.gz | Yang, Jia and Yan (paper authors: published surfaces, figures and topology); ssi-corpus contributors (reconstructions and truth) | 25 cases built from Yang, Jia & Yan 2023, "Topology Guaranteed B-Spline Surface/Surface Intersection", ACM Transactions on Graphics 42(6), Article 211; each cites the paper in its `source` field | CC-BY 4.0 (paper); MIT OR Apache-2.0 (case files) |
|
||||
| tests/step-regressions/rod_doubled_edge.step | SolidCraft contributors | written by SolidCraft from the commands of #4598 (a bored rod moved 100 mm and exported); import regression fixture | MIT OR Apache-2.0 |
|
||||
| tests/oracle/17-loft/reference.stl | SolidCraft contributors | triangulation of our own recipe (tests/oracle/17-loft/recipe.json) built with FreeCAD as an external tool by tools/freecad-oracle | MIT OR Apache-2.0 |
|
||||
| tests/oracle/23-bracket-multifeature/reference.stl | SolidCraft contributors | triangulation of our own recipe (tests/oracle/23-bracket-multifeature/recipe.json) built with FreeCAD as an external tool by tools/freecad-oracle | MIT OR Apache-2.0 |
|
||||
@@ -245,18 +229,6 @@ Editable drawing code, native projects and shipped exports are collected under `
|
||||
| assets/icons/ui/design/svg/flat/plus.svg | SolidCraft contributors | single-colour application/navigation icon master (64 grid), original SolidCraft artwork | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/pan.svg | SolidCraft contributors | single-colour application/navigation icon master (64 grid), original SolidCraft artwork | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/perspective.svg | SolidCraft contributors | single-colour application/navigation icon master (64 grid), original SolidCraft artwork | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_appearance.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_assistant.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_design.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_general.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_graphics.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_layout.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_mouse3d.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_navigation.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_plugins.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_shortcuts.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_sketch.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/prefs_tools.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/redo.svg | SolidCraft contributors | single-colour application/navigation icon master (64 grid), original SolidCraft artwork | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/save.svg | SolidCraft contributors | single-colour application/navigation icon master (64 grid), original SolidCraft artwork | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/settings.svg | SolidCraft contributors | single-colour application/navigation icon master (64 grid), original SolidCraft artwork | MIT OR Apache-2.0 |
|
||||
@@ -658,135 +630,6 @@ Original SolidCraft drawings, Open for owner review; no runtime assignments.
|
||||
| docs/book/src/generated/equation-wave.png | SolidCraft contributors | rendered by `cargo xtask book` (`solidcraft-cli snapshot docs/book/scripts/equation-wave.json`; gitignored) | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/model/print_face.svg | SolidCraft contributors | two-tone modelling icon master (64 grid), original SolidCraft artwork | MIT OR Apache-2.0 |
|
||||
| assets/locales/fi.json | SolidCraft contributors | Original Finnish translation of SolidCraft's English catalog, AI-assisted (Claude Code) clean-room from the English and not yet reviewed line by line by a native speaker; no commercial CAD text used | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/model/plane_axis_point.svg | SolidCraft contributors | original icon master (64 grid) | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-2x.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-2x.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-4x.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-4x.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-8x.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-8x.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-off.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/aa-off.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/agent-pointer-speed.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/agent-pointer-speed.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/ao-on.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/ao-on.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/assembly-move.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/assembly-move.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/browser-card.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/browser-card.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/browser-column.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/browser-column.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-axes.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-axes.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-bends.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-bends.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-draft.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-draft.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-failed.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-failed.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-fixed.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-fixed.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-projected.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/colour-vision-projected.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/direct-interaction.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/direct-interaction.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/frame-rate.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/frame-rate.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-bottom.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-bottom.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-in-browser.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-in-browser.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-left.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-left.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-under-browser.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/history-under-browser.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/layout-schematic.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/layout-schematic.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/measure-axis-distances.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/measure-axis-distances.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/mouse-mapping.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/mouse-mapping.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/navigator-axes.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/navigator-axes.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/navigator-cube.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/navigator-cube.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orbit-centre.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orbit-centre.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orbit-cursor.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orbit-cursor.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orbit-origin.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orbit-origin.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orientation-y-up.dark.svg | SolidCraft contributors | original SolidCraft artwork: the Orientation figure copied from the app and extracted from the Preferences redesign board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orientation-y-up.light.svg | SolidCraft contributors | original SolidCraft artwork: the Orientation figure copied from the app and extracted from the Preferences redesign board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orientation-z-up.dark.svg | SolidCraft contributors | original SolidCraft artwork: the Orientation figure copied from the app and extracted from the Preferences redesign board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/orientation-z-up.light.svg | SolidCraft contributors | original SolidCraft artwork: the Orientation figure copied from the app and extracted from the Preferences redesign board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/quick-measure.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/quick-measure.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/select-bodies.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/select-bodies.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/select-faces-edges.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/select-faces-edges.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-conflict.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-conflict.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-exit-keep.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-exit-keep.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-exit-previous.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-exit-previous.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-exit-unless-turned.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-exit-unless-turned.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-guides.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-guides.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-hide-glyphs.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-hide-glyphs.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-state-icons.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/sketch-state-icons.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/style-shaded-edges.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/style-shaded-edges.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-coarse.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-coarse.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-fine.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-fine.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-normal.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-normal.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-ultra.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tess-ultra.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-dark.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-dark.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-gruvbox.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-gruvbox.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-imported.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-imported.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-light.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-light.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-system-dark-half.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-system-dark-half.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-system-light-half.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/theme-system-light-half.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-cursor.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-cursor.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-extrude.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-extrude.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-hole.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-hole.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-placement.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/tool-placement.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/vertex-markers.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/vertex-markers.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-angles.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-angles.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-grid.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-grid.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-perspective.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-perspective.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-shadow.dark.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| docs/design/preferences/figures/view-shadow.light.svg | SolidCraft contributors | original SolidCraft artwork drawn for the Preferences redesign (tracker #9863), extracted from the design board as a standalone SVG | MIT OR Apache-2.0 |
|
||||
| `assets/locales/pending/sketch-offset-instances.json` | SolidCraft contributors | Original offset instance-count label and translations | MIT OR Apache-2.0 |
|
||||
| assets/icons/ui/design/svg/flat/settings_profile.svg | SolidCraft contributors | single-colour application/navigation icon master (64 grid), original analytic head and shoulder geometry for settings profiles | MIT OR Apache-2.0 |
|
||||
| tests/kernel-cases/import/4561-convert-box-mesh-with-a-zero-area-triangle/box-degenerate.stl | SolidCraft contributors | synthetic ASCII STL written by hand: a box with one zero-area triangle, for the kernel regression case of tangency-labs/solidcraft#4561 | MIT OR Apache-2.0 |
|
||||
| assets/locales/pending/theme-blur-ui.json | SolidCraft contributors | Original blur controls, notices and translations | MIT OR Apache-2.0 |
|
||||
| crates/ui-egui/tests/fixtures/theme-blur.json | SolidCraft contributors | Original theme for blur option scenarios and manager review | MIT OR Apache-2.0 |
|
||||
| assets/locales/ka.json | David Machakhelidze (devius) | Original Georgian translation of SolidCraft's English catalog, written with Claude Code from the meaning of each English string; terminology and doubtful strings decided by a native Georgian speaker; no commercial CAD text used | MIT OR Apache-2.0 |
|
||||
|
||||
## Code adapted from sibling projects
|
||||
|
||||
@@ -826,15 +669,6 @@ in THIRD-PARTY-LICENSES.txt; no images or artwork from that project are copied.
|
||||
The glTF test files are built by the tests themselves (crates/io/src/gltf_in_tests.rs,
|
||||
crates/engine/src/tests/gltf_import.rs); no third-party models are committed.
|
||||
|
||||
## Geometry kernel crates
|
||||
|
||||
| Crate | Used for | Licence |
|
||||
|---|---|---|
|
||||
| solidcore (https://github.com/tangency-labs/solidcore, pinned by rev in Cargo.toml) | the Rust port of NVIDIA's SMLib: the B-rep kernel behind crates/smlib | Apache-2.0 (its NOTICE credits NVIDIA's USD BRep) |
|
||||
|
||||
Linked as a crate; no code from it is copied into SolidCraft. Its licence text and NOTICE go
|
||||
into THIRD-PARTY-LICENSES.txt when `main` regenerates it.
|
||||
|
||||
## FreeCAD and Rhino import library
|
||||
|
||||
FreeCAD `.FCStd` and Rhino `.3dm` files are read with [cadmpeg](https://github.com/cadmpeg/cadmpeg)
|
||||
@@ -850,13 +684,17 @@ copied into SolidCraft.
|
||||
| SolidCraft file | Original contribution | Licence |
|
||||
|---|---|---|
|
||||
| crates/ui-egui/src/viewport.rs (`nearest_quarter_turn`, `axis_view_orbit`) | N3MI-DG's [PR #101](https://github.com/bherbruck/solidcraft/pull/101): [minimal TOP/BOTTOM turns](https://github.com/bherbruck/solidcraft/commit/c28e780f52490784ef5886f094b9d3f6d10c3e3f) and [drag-to-orbit](https://github.com/bherbruck/solidcraft/commit/f30b30be6ecc4e2e6544a851243137c01a354934), adapted to the axis gizmo | MIT OR Apache-2.0 |
|
||||
| crates/smlib/src/core/offset.rs (`draft`: the tilted planes and `SmBrep::LocalOperation`, the tail of the capi's `draft_faces`) | ablasik's `draft` in `crates/smlib/src/ffi/rs_ops2.rs` on [ablasik/solidcraft `app/solidcore-backend-on-develop`](https://github.com/ablasik/solidcraft/blob/9c7e8e31565e1823f0591b58e2967351c32af13f/crates/smlib/src/ffi/rs_ops2.rs), adapted to `core::offset`'s errors and checks | MIT OR Apache-2.0 |
|
||||
|
||||
## Vendored third-party code
|
||||
|
||||
| Directory | Source | Licence | Changes |
|
||||
|---|---|---|---|
|
||||
| vendor/accesskit_macos | accesskit_macos 0.26.3, https://github.com/AccessKit/accesskit (The AccessKit contributors) | MIT OR Apache-2.0 | the subclassing adapter and its tests from 0.27.2: dropping the adapter keeps AppKit's key-value observers (vendor/README.md) |
|
||||
| vendor/truck-meshalgo | truck-meshalgo 0.4.0, https://github.com/ricosjp/truck (RICOS Co. Ltd.) | Apache-2.0 | meshing: bounded parameter searches, collapsed-boundary projection, subdivision and provisional fixed-grid previews (vendor/README.md) |
|
||||
| vendor/truck-stepio | truck-stepio 0.3.0, https://github.com/ricosjp/truck (RICOS Co. Ltd.) | Apache-2.0 | STEP writer: intersection-curve surfaces written at unique ids (vendor/README.md) |
|
||||
| vendor/truck-shapeops | truck-shapeops 0.4.0, https://github.com/ricosjp/truck (RICOS Co. Ltd.) | Apache-2.0 | robust meshing and nearest-parameter fallback in booleans; degenerate intersection-curve rejection; face and edge history of booleans; trace macro; corner choice at vertices several intersection curves end on; reuse of an operand's meshes (vendor/README.md) |
|
||||
| vendor/truck-geometry | truck-geometry 0.5.0, https://github.com/ricosjp/truck (RICOS Co. Ltd.) | Apache-2.0 | intersection curves divided from their neighbours' surface parameters; surface second derivatives (vendor/README.md) |
|
||||
| vendor/matext4cgmath | matext4cgmath 0.1.0, https://github.com/ricosjp/matext4cgmath (RICOS Co. Ltd.) | Apache-2.0 | root refinement stops after 100 Newton steps (vendor/README.md) |
|
||||
|
||||
## Vendored renderer compatibility fix
|
||||
|
||||
|
||||
@@ -19,13 +19,12 @@ Questions, ideas or want to say what you're working on? Join the [Discord](https
|
||||
|
||||
## Kernel work is paused
|
||||
|
||||
We're moving to a new geometry kernel. Until that's done, please don't open pull requests that
|
||||
change `crates/kernel/`, `crates/geom/` or `vendor/truck*`, or issues and discussions about kernel
|
||||
work: booleans, fillets, chamfers, shell, offsets, sweeps and lofts, threads and holes, STEP/IGES
|
||||
import and export, or tessellation. The pinned issue on the tracker explains it. New ones get the
|
||||
`kernel-paused` label (`.github/workflows/kernel-paused.yml`) and a maintainer answers them. Crashes
|
||||
and data loss are still taken as issues. Pull requests outside those directories carry on as normal,
|
||||
including the dialogs and tools for these features.
|
||||
We're evaluating a new geometry kernel. Until that's decided, please don't open issues, pull
|
||||
requests or discussions about kernel work: booleans, fillets, chamfers, shell, offsets, sweeps and
|
||||
lofts, threads and holes, STEP/IGES import and export, tessellation, or anything else that changes
|
||||
`crates/kernel/`. The pinned issue on the tracker explains it. New ones get the `kernel-paused`
|
||||
label (`.github/workflows/kernel-paused.yml`) and a maintainer answers them. Crashes and data loss
|
||||
are still taken as issues, and everything outside the kernel carries on as normal.
|
||||
|
||||
## Get it running (about 10 minutes on a fast machine)
|
||||
|
||||
@@ -161,23 +160,9 @@ the most complete description of the house style.
|
||||
| UI scenarios | `crates/ui-egui/tests/scenarios/*.json` | part of `cargo test` |
|
||||
| Reference tests | `cargo xtask oracle` | `tests/oracle/` (see below) |
|
||||
|
||||
The reference for what the kernel builds is the kernel-cases ladder (`tests/kernel-cases/ladder/`,
|
||||
`cargo xtask kernel-cases --ladder`, [docs/kernel-ladder.md](docs/kernel-ladder.md)).
|
||||
|
||||
**Kernel cases go to solidcore.** A case that checks a kernel operation (a boolean, a blend, a
|
||||
shell, a sweep, an import's geometry) is a new entry in solidcore's corpus,
|
||||
`crates/solidcore/tests/kernel_cases/<area>/` in
|
||||
[tangency-labs/solidcore](https://github.com/tangency-labs/solidcore), with an answer in closed
|
||||
form or exact. Draft it as a rig case here, export it with
|
||||
`cargo xtask kernel-cases --area <area> --export DIR`, add `DIR/<area>/<case>.json` and its
|
||||
`.bodies.json.gz` there, and delete the draft; or write the entry by hand as that folder's README
|
||||
describes. `tests/kernel-cases/` takes no new cases: its `CASES` list only shrinks
|
||||
(`cargo xtask lists`). App-level cases (what a command does, the UI, product rules) stay in
|
||||
SolidCraft, as tests in their area's existing test file or UI scenarios.
|
||||
|
||||
The naming corpus checks persistent names: every name a corpus design stores still finds a face or
|
||||
an edge, and two builds name its faces and edges alike
|
||||
(`cargo test --profile ci -p solidcraft-cli --test naming_corpus`).
|
||||
A geometry change that changes the robustness goldens re-records them in the same pull request:
|
||||
`ROBUSTNESS_GOLDENS_BLESS="why it changed" cargo test --profile ci -p solidcraft-engine --lib robustness_goldens::`
|
||||
(see [docs/robustness.md](docs/robustness.md)); CI runs every seed on pull requests that touch geometry.
|
||||
[docs/mutation-testing.md](docs/mutation-testing.md) shows how to find kernel behaviour these
|
||||
black-box suites miss.
|
||||
|
||||
@@ -236,7 +221,8 @@ Pull requests skip a few heavy tests (one to twelve minutes each), which run in
|
||||
Check that validation after merging. They are listed in
|
||||
`.config/nextest.toml` and the [testing page](docs/book/src/dev/testing.md):
|
||||
|
||||
- `solidcraft-engine`: `tests::hostile_params_never_panic`, everything in `tests::robustness`,
|
||||
- `solidcraft-engine`: `tests::hostile_params_never_panic`, everything in `tests::robustness` and
|
||||
the seeds of `tests::robustness_goldens` (`seed_00` … `seed_95`; pull requests that change the kernel, truck or the goldens run all but the slowest, `SLOW_SEEDS` in `ci.yml`),
|
||||
`pattern_suppress_tests::enclosure_arc_extinction_keeps_a_real_sharp_inner_lip_after_resize_and_reopen`,
|
||||
`pattern_suppress_tests::enclosure_datums_follow_wall_height_and_board_depth_with_material_proofs`,
|
||||
`cmd::plastic::tests::enclosure_snap_fit_follows_resized_front_wall`, the `atomic_commands` contract tests
|
||||
@@ -256,8 +242,7 @@ the surface itself). Expected values are either worked out in closed form
|
||||
(`tools/oracle-analytic/`) or computed by building the same recipe in FreeCAD, run as a separate
|
||||
program (`tools/freecad-oracle/`); each file says which. The generated
|
||||
[reference test report](docs/oracle.md) has the current case count and results. The reference-test
|
||||
CI job runs `cargo xtask oracle` during full validation, and on pull requests that reach
|
||||
`solidcraft-cli`. A case that
|
||||
CI job runs `cargo xtask oracle` during full validation; pull-request runs skip it. A case that
|
||||
fails because of a known bug names its issue in `expected.json` (`"known_failure": "#123"`);
|
||||
never change an expected value to match SolidCraft's output.
|
||||
|
||||
@@ -353,15 +338,6 @@ and a fresh CI run:
|
||||
PRs in groups by area, so PRs that touch the same code meet a conflict at most once.
|
||||
4. Reference the issue (`Fixes #12`). In the PR, say what you tested and how. For geometry work, include the measured numbers (and
|
||||
the expected ones).
|
||||
5. Write the PR title and first sentence for someone who hasn't seen your chat, the issue or the
|
||||
code. Maintainers pick what to review from the title, and it becomes the commit on `main`. Say
|
||||
which part of the app changes and what a user now sees or can do, and name things rather than
|
||||
leaning on "there", "it" or "this".
|
||||
- Unclear: `Send to Slicer: pick one print face per body there, and show print faces only while it is open`
|
||||
- Clear: `3D printing: choose the face each body rests on in the Send to Slicer window, not the face menu`
|
||||
|
||||
Use plain, literal English in PR text: one idea per sentence, active voice, and one word for one
|
||||
thing. This helps everyone, including readers whose first language isn't English.
|
||||
|
||||
Commenting `/claim` assigns you, adds the `in progress` label, and replies with its automatic cleanup
|
||||
deadline. It frees a claim with no linked PR after 72 hours, or a claim with a PR after 14 days
|
||||
@@ -370,13 +346,6 @@ without pushes. These automatic cleanup deadlines are separate from the daily pr
|
||||
`/unclaim` releases the bot claim early (only you or a maintainer can). Issues a maintainer has
|
||||
taken are never freed automatically.
|
||||
|
||||
**A PR has to explain itself.** Start the description with what it is, in plain words someone new
|
||||
to the project would understand: what it does and who it's for. Don't assume anyone knows the name
|
||||
of your tool, project or feature. If there's anything to look at, show it in the description: a
|
||||
picture or video has to be visible there without opening the changed files. "The GIF is the change"
|
||||
doesn't count. A PR that doesn't do this waits until it does. For a PR that adds to
|
||||
`docs/showcase.md` or `docs/screenshots/`, the Picture check fails until the description shows one.
|
||||
|
||||
Help reviewers see what the words mean. For observable CAD, UI or model behavior, please
|
||||
include actual descriptive screenshots or a short recording in the issue or PR. This evidence
|
||||
is required for changes or bugs that can be demonstrated in the app, including kernel,
|
||||
|
||||
@@ -186,6 +186,15 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "approx"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arboard"
|
||||
version = "3.6.1"
|
||||
@@ -206,6 +215,12 @@ dependencies = [
|
||||
"x11rb",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "array-macro"
|
||||
version = "2.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "220a2c618ab466efe41d0eace94dfeff1c35e3aa47891bdb95e1c0fefffd3c99"
|
||||
|
||||
[[package]]
|
||||
name = "arrayref"
|
||||
version = "0.3.9"
|
||||
@@ -518,6 +533,15 @@ dependencies = [
|
||||
"piper",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "branches"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f11502672c5570f77f6bdf573332483f8475bab6a7fda00f1fae8ddb5a6245c0"
|
||||
dependencies = [
|
||||
"rustc_version",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.20.3"
|
||||
@@ -765,6 +789,17 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cgmath"
|
||||
version = "0.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a98d30140e3296250832bbaaff83b27dcd6fa3cc70fb6f1f3e5c9c0023b5317"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"num-traits",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "chacha20"
|
||||
version = "0.10.2"
|
||||
@@ -787,6 +822,19 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "chrono"
|
||||
version = "0.4.45"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
|
||||
dependencies = [
|
||||
"iana-time-zone",
|
||||
"js-sys",
|
||||
"num-traits",
|
||||
"wasm-bindgen",
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cipher"
|
||||
version = "0.4.4"
|
||||
@@ -857,6 +905,12 @@ version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation"
|
||||
version = "0.9.4"
|
||||
@@ -1034,6 +1088,19 @@ dependencies = [
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_more"
|
||||
version = "0.99.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f"
|
||||
dependencies = [
|
||||
"convert_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustc_version",
|
||||
"syn 2.0.119",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.7"
|
||||
@@ -1180,7 +1247,7 @@ dependencies = [
|
||||
"bitflags 2.13.2",
|
||||
"emath",
|
||||
"epaint",
|
||||
"itertools",
|
||||
"itertools 0.15.0",
|
||||
"log",
|
||||
"nohash-hasher",
|
||||
"profiling",
|
||||
@@ -1598,8 +1665,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
"libc",
|
||||
"wasi",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1914,6 +1983,30 @@ dependencies = [
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iana-time-zone"
|
||||
version = "0.1.65"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
|
||||
dependencies = [
|
||||
"android_system_properties",
|
||||
"core-foundation-sys",
|
||||
"iana-time-zone-haiku",
|
||||
"js-sys",
|
||||
"log",
|
||||
"wasm-bindgen",
|
||||
"windows-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iana-time-zone-haiku"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
|
||||
dependencies = [
|
||||
"cc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "icu_collections"
|
||||
version = "2.3.0"
|
||||
@@ -2073,6 +2166,15 @@ dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.15.0"
|
||||
@@ -2167,6 +2269,17 @@ dependencies = [
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "katexit"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccfb0b7ce7938f84a5ecbdca5d0a991e46bc9d6d078934ad5e92c5270fe547db"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "keyboard-types"
|
||||
version = "0.8.3"
|
||||
@@ -2317,6 +2430,15 @@ version = "0.4.34"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
|
||||
|
||||
[[package]]
|
||||
name = "matext4cgmath"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cgmath",
|
||||
"katexit",
|
||||
"num-complex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.8.3"
|
||||
@@ -3192,6 +3314,30 @@ dependencies = [
|
||||
"toml_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.107"
|
||||
@@ -3364,6 +3510,15 @@ dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rclite"
|
||||
version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e09665c494a9de2bd230e1aedc0c2fb20481a51f28f7db84d0c9bcfe2fe537b2"
|
||||
dependencies = [
|
||||
"branches",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "read-fonts"
|
||||
version = "0.41.0"
|
||||
@@ -4051,27 +4206,9 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcore"
|
||||
version = "1.0.1"
|
||||
source = "git+https://github.com/tangency-labs/solidcore?rev=8ddce901671f1cebd9214a31d21895d725e886c8#8ddce901671f1cebd9214a31d21895d725e886c8"
|
||||
dependencies = [
|
||||
"thiserror 2.0.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcore-record"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/tangency-labs/solidcore?rev=f5e8e9a29e0c9b7cf6c4040a5bc8878382b3c62f#f5e8e9a29e0c9b7cf6c4040a5bc8878382b3c62f"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"block2 0.6.2",
|
||||
"eframe",
|
||||
@@ -4102,32 +4239,29 @@ dependencies = [
|
||||
"ureq",
|
||||
"windows-sys 0.61.2",
|
||||
"winit",
|
||||
"winreg",
|
||||
"x11rb",
|
||||
"zbus 5.19.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-3dx-client"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-cli"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"image",
|
||||
"log",
|
||||
"serde_json",
|
||||
"solidcore-record",
|
||||
"solidcraft-engine",
|
||||
"solidcraft-gpu",
|
||||
"solidcraft-kernel",
|
||||
"solidcraft-mcp",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-derive"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -4136,17 +4270,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-doc"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"log",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2 0.10.9",
|
||||
"solidcore-record",
|
||||
"solidcraft-derive",
|
||||
"solidcraft-geom",
|
||||
"solidcraft-kernel",
|
||||
"solidcraft-profile",
|
||||
"solidcraft-render",
|
||||
"solidcraft-sketch",
|
||||
"thiserror 2.0.21",
|
||||
@@ -4155,7 +4287,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-engine"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"image",
|
||||
"log",
|
||||
@@ -4163,12 +4295,10 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_path_to_error",
|
||||
"solidcore-record",
|
||||
"solidcraft-doc",
|
||||
"solidcraft-geom",
|
||||
"solidcraft-io",
|
||||
"solidcraft-kernel",
|
||||
"solidcraft-profile",
|
||||
"solidcraft-render",
|
||||
"solidcraft-sketch",
|
||||
"thiserror 2.0.21",
|
||||
@@ -4178,17 +4308,16 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-geom"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"solidcore-record",
|
||||
"thiserror 2.0.21",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-gpu"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"image",
|
||||
"log",
|
||||
@@ -4197,7 +4326,6 @@ dependencies = [
|
||||
"robust",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"solidcore-record",
|
||||
"solidcraft-engine",
|
||||
"solidcraft-geom",
|
||||
"solidcraft-io",
|
||||
@@ -4209,7 +4337,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-io"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"cadmpeg-core",
|
||||
"cadmpeg-ir",
|
||||
@@ -4224,56 +4352,45 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2 0.10.9",
|
||||
"solidcore-record",
|
||||
"solidcraft-doc",
|
||||
"solidcraft-geom",
|
||||
"solidcraft-kernel",
|
||||
"solidcraft-profile",
|
||||
"solidcraft-testkit",
|
||||
"thiserror 2.0.21",
|
||||
"zip",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-kernel"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"log",
|
||||
"proptest",
|
||||
"rayon",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"solidcore-record",
|
||||
"solidcraft-geom",
|
||||
"solidcraft-profile",
|
||||
"solidcraft-smlib",
|
||||
"solidcraft-step",
|
||||
"spade",
|
||||
"thiserror 2.0.21",
|
||||
"truck-meshalgo",
|
||||
"truck-modeling",
|
||||
"truck-shapeops",
|
||||
"truck-stepio",
|
||||
"truck-topology",
|
||||
"web-time",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-mcp"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"image",
|
||||
"serde_json",
|
||||
"solidcraft-engine",
|
||||
"solidcraft-gpu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-profile"
|
||||
version = "0.40.0-rc.2"
|
||||
dependencies = [
|
||||
"serde_json",
|
||||
"web-time",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-render"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"image",
|
||||
"moxcms",
|
||||
@@ -4281,62 +4398,33 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2 0.10.9",
|
||||
"solidcore-record",
|
||||
"solidcraft-geom",
|
||||
"web-time",
|
||||
"weezl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-sketch"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"harfrust",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"solidcore-record",
|
||||
"solidcraft-geom",
|
||||
"thiserror 2.0.21",
|
||||
"ttf-parser",
|
||||
"unicode-bidi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-smlib"
|
||||
version = "0.40.0-rc.2"
|
||||
dependencies = [
|
||||
"flate2",
|
||||
"log",
|
||||
"serde_json",
|
||||
"solidcore",
|
||||
"solidcore-record",
|
||||
"solidcraft-geom",
|
||||
"solidcraft-profile",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-space-mouse"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-step"
|
||||
version = "0.40.0-rc.2"
|
||||
dependencies = [
|
||||
"solidcore-record",
|
||||
"solidcraft-geom",
|
||||
"solidcraft-profile",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-testkit"
|
||||
version = "0.40.0-rc.2"
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-ui-egui"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"arboard",
|
||||
"egui",
|
||||
@@ -4351,7 +4439,6 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2 0.10.9",
|
||||
"solidcore-record",
|
||||
"solidcraft-engine",
|
||||
"solidcraft-gpu",
|
||||
"solidcraft-space-mouse",
|
||||
@@ -4368,7 +4455,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solidcraft-web"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"eframe",
|
||||
"egui",
|
||||
@@ -4429,6 +4516,16 @@ version = "2.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.119"
|
||||
@@ -4678,6 +4775,144 @@ dependencies = [
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-base"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4c279de9e92e5dc20a188deb0bb9a4bd421a6a185e57e03e19025e84a36c5a05"
|
||||
dependencies = [
|
||||
"cgmath",
|
||||
"matext4cgmath",
|
||||
"rustc-hash 2.1.3",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-derivers"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "421ff1c5a303aed64e295d9b30e8424ee7a2fa251617a59ae4acfd078496009f"
|
||||
dependencies = [
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-geometry"
|
||||
version = "0.5.0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
"truck-base",
|
||||
"truck-geotrait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-geotrait"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97a31fe98d5a0589ad20576260e214af23dea21a8d125da81ad3bbcb666f411f"
|
||||
dependencies = [
|
||||
"getrandom 0.2.17",
|
||||
"rand 0.8.8",
|
||||
"thiserror 1.0.69",
|
||||
"truck-base",
|
||||
"truck-derivers",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-meshalgo"
|
||||
version = "0.4.0"
|
||||
dependencies = [
|
||||
"array-macro",
|
||||
"derive_more",
|
||||
"itertools 0.13.0",
|
||||
"rayon",
|
||||
"rustc-hash 2.1.3",
|
||||
"spade",
|
||||
"truck-base",
|
||||
"truck-geometry",
|
||||
"truck-modeling",
|
||||
"truck-polymesh",
|
||||
"truck-topology",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-modeling"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8082c2dfac8c2732a014d81807fb5d24dbac0d72ee4de2a705b7fbc05fa05b18"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"rustc-hash 2.1.3",
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
"truck-base",
|
||||
"truck-geometry",
|
||||
"truck-geotrait",
|
||||
"truck-polymesh",
|
||||
"truck-topology",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-polymesh"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8f22def310af4a89c37beb4839bbf702b302d2c112ea29553759f0e16622fbf"
|
||||
dependencies = [
|
||||
"array-macro",
|
||||
"bytemuck",
|
||||
"itertools 0.13.0",
|
||||
"rustc-hash 2.1.3",
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
"truck-base",
|
||||
"truck-geotrait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-shapeops"
|
||||
version = "0.4.0"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"itertools 0.13.0",
|
||||
"rustc-hash 2.1.3",
|
||||
"truck-base",
|
||||
"truck-geometry",
|
||||
"truck-geotrait",
|
||||
"truck-meshalgo",
|
||||
"truck-topology",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-stepio"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"truck-geometry",
|
||||
"truck-modeling",
|
||||
"truck-polymesh",
|
||||
"truck-topology",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "truck-topology"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf62a1610405c5e39ab5eb6948f326fc1641689734a6b8207a80792133fe0e78"
|
||||
dependencies = [
|
||||
"parking_lot",
|
||||
"rayon",
|
||||
"rclite",
|
||||
"rustc-hash 2.1.3",
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
"truck-base",
|
||||
"truck-geotrait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ttf-parser"
|
||||
version = "0.25.1"
|
||||
@@ -5775,11 +6010,9 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
|
||||
|
||||
[[package]]
|
||||
name = "xtask"
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
dependencies = [
|
||||
"flate2",
|
||||
"proc-macro2",
|
||||
"quick-xml",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2 0.10.9",
|
||||
|
||||
@@ -5,7 +5,7 @@ members = ["crates/*", "apps/*", "xtask"]
|
||||
exclude = ["vendor"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.40.0-rc.2"
|
||||
version = "0.29.0"
|
||||
edition = "2024"
|
||||
license = "MIT OR Apache-2.0"
|
||||
rust-version = "1.95"
|
||||
@@ -16,11 +16,8 @@ repository = "https://github.com/bherbruck/solidcraft"
|
||||
robust = "1.2"
|
||||
# internal
|
||||
solidcraft-geom = { path = "crates/geom" }
|
||||
solidcraft-profile = { path = "crates/profile" }
|
||||
solidcraft-sketch = { path = "crates/sketch" }
|
||||
solidcraft-kernel = { path = "crates/kernel" }
|
||||
solidcraft-smlib = { path = "crates/smlib" }
|
||||
solidcraft-step = { path = "crates/step" }
|
||||
solidcraft-render = { path = "crates/render" }
|
||||
solidcraft-gpu = { path = "crates/gpu" }
|
||||
solidcraft-doc = { path = "crates/doc" }
|
||||
@@ -31,16 +28,6 @@ solidcraft-space-mouse = { path = "crates/space-mouse" }
|
||||
solidcraft-mcp = { path = "crates/mcp" }
|
||||
solidcraft-derive = { path = "crates/derive" }
|
||||
solidcraft-3dx-client = { path = "crates/threedx-client" }
|
||||
# The Rust port of NVIDIA's SMLib (Apache-2.0), the B-rep kernel behind crates/smlib. Pinned;
|
||||
# move the rev on its own commit. For a
|
||||
# local checkout, add `[patch."https://github.com/tangency-labs/solidcore"] solidcore = { path =
|
||||
# "../solidcore/crates/solidcore" }` to a `.cargo/config.toml` outside the repository.
|
||||
solidcore = { git = "https://github.com/tangency-labs/solidcore", rev = "8ddce901671f1cebd9214a31d21895d725e886c8" }
|
||||
# Geometry as data (solidcore's layers §1, "Record"): the B-rep record, its structural validation
|
||||
# and the native body file. Pinned like solidcore; for a local checkout, patch it as above.
|
||||
solidcore-record = { git = "https://github.com/tangency-labs/solidcore", rev = "f5e8e9a29e0c9b7cf6c4040a5bc8878382b3c62f" }
|
||||
# test tooling: a dev-dependency only (xtask/src/layers.rs)
|
||||
solidcraft-testkit = { path = "crates/testkit" }
|
||||
|
||||
# foundation
|
||||
thiserror = "2"
|
||||
@@ -58,7 +45,14 @@ sha2 = "0.10"
|
||||
moxcms = { version = "0.8.1", default-features = false, features = ["extended_range"] }
|
||||
semver = "1"
|
||||
|
||||
# constrained Delaunay + Ruppert refinement for trimmed faces (MIT OR Apache-2.0).
|
||||
# geometry kernel (Apache-2.0; see plan/adr/0001-geometry-kernel.md). Only crates/kernel uses it.
|
||||
truck-modeling = "0.6"
|
||||
truck-shapeops = { version = "0.4", default-features = false }
|
||||
truck-meshalgo = { version = "0.4", default-features = false, features = ["tessellation", "analyzers"] }
|
||||
truck-stepio = { version = "0.3", default-features = false }
|
||||
truck-topology = "0.6"
|
||||
# constrained Delaunay + Ruppert refinement for trimmed faces (MIT OR Apache-2.0); already in the
|
||||
# tree through truck-meshalgo.
|
||||
spade = { version = "2.15", default-features = false, features = ["std"] }
|
||||
rayon = "1.12"
|
||||
|
||||
@@ -131,7 +125,9 @@ opt-level = 2
|
||||
opt-level = 1
|
||||
|
||||
# Tests and lints (`cargo xtask ci`, GitHub CI): quick to build, quick enough to run. Light
|
||||
# optimisation, line tables only (file:line in backtraces), no LTO, no debug assertions.
|
||||
# optimisation, line tables only (file:line in backtraces), no LTO. Debug assertions are off because
|
||||
# truck's debug-only checks reject valid geometry (seam edges, closed edges); that was the only
|
||||
# reason the tests used to build with --release, which cost most of CI's time.
|
||||
[profile.ci]
|
||||
inherits = "dev"
|
||||
opt-level = 1
|
||||
@@ -154,9 +150,14 @@ codegen-units = 16
|
||||
# binary). See docs/crash-reports.md.
|
||||
debug = "line-tables-only"
|
||||
|
||||
|
||||
# Vendored crates with SolidCraft fixes (see vendor/README.md and ATTRIBUTION.md).
|
||||
# truck-shapeops with SolidCraft fixes (Apache-2.0, see vendor/truck-shapeops and ATTRIBUTION.md).
|
||||
[patch.crates-io]
|
||||
truck-geometry = { path = "vendor/truck-geometry" }
|
||||
truck-shapeops = { path = "vendor/truck-shapeops" }
|
||||
truck-stepio = { path = "vendor/truck-stepio" }
|
||||
truck-meshalgo = { path = "vendor/truck-meshalgo" }
|
||||
matext4cgmath = { path = "vendor/matext4cgmath" }
|
||||
|
||||
# Keep OpenGL pipelines, resolve textures and CAD callbacks at the same safe sample count.
|
||||
egui-wgpu = { path = "vendor/egui-wgpu" }
|
||||
|
||||
|
||||
@@ -662,9 +662,7 @@ completed drawings publish atomically. The browser still exports synchronously.
|
||||
pieces survive unfold/refold as one logical sheet group, including split flanged sheets.
|
||||
Cut-outs made in the flat pattern cross bends at any angle or curved: their edges fold to
|
||||
helices and curves on the bend, their walls square to the sheet. Free-form bases use bounded
|
||||
sampling. A fold crosses the sheet's own outer edges the same way, slanted or on any curve,
|
||||
with the outline exact in the flat pattern and its DXF, and flanges and other folds still go
|
||||
on the panels.
|
||||
sampling.
|
||||
Parallel prismatic partial-depth cuts retain pocket side and depth through transfer and
|
||||
unfold/refold, with separate pocket contours in preview and DXF. Planar Intersect preserves
|
||||
exact holes and retained islands, including the union of multiple selected profiles, and
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
## Supported versions
|
||||
|
||||
SolidCraft is young and moves quickly, so only the latest release gets security fixes. Please
|
||||
update to the [latest release](https://github.com/tangency-labs/solidcraft/releases/latest) before
|
||||
update to the [latest release](https://github.com/bherbruck/solidcraft/releases/latest) before
|
||||
reporting, and check whether the problem is still on `main`.
|
||||
|
||||
| Version | Supported |
|
||||
@@ -15,46 +15,18 @@ reporting, and check whether the problem is still on `main`.
|
||||
## Reporting a vulnerability
|
||||
|
||||
Please **don't open a public issue** for a security problem. Report it privately through GitHub:
|
||||
open the repository's [Security tab](https://github.com/tangency-labs/solidcraft/security) and choose
|
||||
open the repository's [Security tab](https://github.com/bherbruck/solidcraft/security) and choose
|
||||
**Report a vulnerability**
|
||||
([direct link](https://github.com/tangency-labs/solidcraft/security/advisories/new)).
|
||||
([direct link](https://github.com/bherbruck/solidcraft/security/advisories/new)).
|
||||
|
||||
Please include what you found, the steps you ran to reproduce it (a design file, command or MCP
|
||||
request), the version and platform, and what an attacker gains. I'll acknowledge the report as soon
|
||||
as I can, keep you updated in the advisory, and credit you when the fix is published unless you'd
|
||||
rather stay anonymous.
|
||||
Please include what you found, how to reproduce it (a design file, command or MCP request), the
|
||||
version and platform, and the impact you expect. I'll acknowledge the report as soon as I can,
|
||||
keep you updated in the advisory, and credit you when the fix is published unless you'd rather
|
||||
stay anonymous.
|
||||
|
||||
## What counts as a security issue
|
||||
Areas where reports are especially useful:
|
||||
|
||||
Advisories are for problems where someone gets something they shouldn't, without already having
|
||||
access to your computer or your account. For example:
|
||||
|
||||
- opening a design, STEP, STL or 3MF file from someone else runs code, or reads or overwrites files
|
||||
it shouldn't
|
||||
- a website or another computer can reach or control SolidCraft
|
||||
- an agent gets past a prompt that promised to ask you first
|
||||
- the web app reaches beyond the page's own storage
|
||||
- a release package or an update can be tampered with
|
||||
- an API key or token gets sent somewhere it shouldn't go
|
||||
|
||||
## What to report as a normal bug
|
||||
|
||||
Please [open an issue](https://github.com/tangency-labs/solidcraft/issues/new) for these. They're
|
||||
still worth fixing, but they aren't security issues:
|
||||
|
||||
- anything that needs a program already running on your computer, or the control token. A program
|
||||
running as you can already do what you can.
|
||||
- MCP's allowed folders. They guard against accidents, they aren't a security boundary, and an agent
|
||||
with a shell of its own can already reach those files. Getting around them isn't a vulnerability.
|
||||
- crashes, hangs, or heavy memory or CPU use, unless they also lead to something in the list above
|
||||
- anything that only happens in an unusual setup you'd have to choose on purpose
|
||||
|
||||
## Before you send it
|
||||
|
||||
- **Run it.** Reproduce the problem on the latest release. If you only read the code, say so, and
|
||||
expect it to wait.
|
||||
- **Check it yourself.** If a scanner or an AI agent found it, read the code and confirm it first.
|
||||
These tools tend to overrate what they find.
|
||||
- **Say what's gained.** Name what the attacker needs and what they get. I set the final severity.
|
||||
|
||||
Reports that don't fit will be closed with a short note, or moved to the issue tracker.
|
||||
- opening untrusted design, STEP, STL or 3MF files (crashes, excessive memory or CPU, path tricks)
|
||||
- the MCP server and the control API (file access outside the allowed folders, command injection)
|
||||
- the web app (anything reaching beyond the page's own storage)
|
||||
- release packages and the update paths (AppImage, Flatpak, MSI, deb, rpm, snap)
|
||||
|
||||
@@ -20,15 +20,11 @@ name = "solvecraft-cli"
|
||||
path = "src/alias.rs"
|
||||
|
||||
[features]
|
||||
default = ["raytrace-cpu", "profile"]
|
||||
default = ["raytrace-cpu"]
|
||||
bundled-render-library = ["solidcraft-engine/bundled-render-library"]
|
||||
raytrace-cpu = ["solidcraft-engine/raytrace-cpu"]
|
||||
# The profiler, compiled in so any build can say where its time goes (`--profile`,
|
||||
# SOLIDCRAFT_PROFILE=1); it records nothing until asked.
|
||||
profile = ["solidcraft-engine/profile"]
|
||||
|
||||
[dependencies]
|
||||
solidcore-record = { workspace = true }
|
||||
solidcraft-engine = { workspace = true }
|
||||
solidcraft-gpu = { workspace = true }
|
||||
solidcraft-mcp = { workspace = true }
|
||||
@@ -38,5 +34,3 @@ serde_json = { workspace = true }
|
||||
[dev-dependencies]
|
||||
# Snapshot tests decode the pictures to compare them with a tolerance.
|
||||
image = { workspace = true }
|
||||
# Tests measure meshes at their own tolerances.
|
||||
solidcraft-kernel = { workspace = true }
|
||||
|
||||
@@ -184,7 +184,7 @@ pub fn run(args: &[String]) -> Result<(), String> {
|
||||
s.execute(id, &c["params"]).map_err(|e| format!("command {i} ({id}): {e}"))?;
|
||||
run.push(t.elapsed().as_secs_f64() * 1000.0);
|
||||
let t = std::time::Instant::now();
|
||||
s.world_state().map_err(|e| e.to_string())?.warm_meshes(|| true);
|
||||
s.world_state().warm_meshes(|| true);
|
||||
shown.push(t.elapsed().as_secs_f64() * 1000.0);
|
||||
if run.len() == 100 || i + 1 == commands.len() {
|
||||
let mean = |v: &[f64]| v.iter().sum::<f64>() / v.len().max(1) as f64;
|
||||
@@ -198,7 +198,7 @@ pub fn run(args: &[String]) -> Result<(), String> {
|
||||
shown.clear();
|
||||
}
|
||||
}
|
||||
let world = s.world_state().map_err(|e| e.to_string())?;
|
||||
let world = s.world_state();
|
||||
println!(
|
||||
"{}",
|
||||
json!({"step": "built", "ms": began.elapsed().as_secs_f64() * 1000.0, "commands": commands.len(), "features": s.doc.features.len(), "bodies": world.bodies.len()})
|
||||
@@ -236,7 +236,7 @@ mod tests {
|
||||
}
|
||||
}
|
||||
assert!(s.model.results.iter().all(|r| r.error.is_none()));
|
||||
let world = s.world_state().unwrap();
|
||||
let world = s.world_state();
|
||||
assert!(world.bodies.len() > 40, "{} bodies", world.bodies.len());
|
||||
assert!(world.bodies.iter().any(|b| b.name.contains("spoke")));
|
||||
}
|
||||
|
||||
@@ -40,6 +40,8 @@ pub fn one(args: &[String]) -> Result<(), String> {
|
||||
"steps": run.steps.iter().map(|s| s.kind).collect::<Vec<_>>(),
|
||||
"unsupported": run.unsupported,
|
||||
"rejected": run.rejected,
|
||||
"boolean_fallbacks": run.boolean_fallbacks,
|
||||
"boolean_reports_truncated": run.boolean_reports_truncated,
|
||||
"panics": PANICS.swap(0, std::sync::atomic::Ordering::SeqCst),
|
||||
});
|
||||
if run.outcome.is_bug() {
|
||||
@@ -189,9 +191,23 @@ fn summarise(results: &[Value], took: Duration) -> String {
|
||||
let mut boolean: BTreeMap<String, usize> = BTreeMap::new();
|
||||
let mut at_step: BTreeMap<String, usize> = BTreeMap::new();
|
||||
let mut unsupported: BTreeMap<String, usize> = BTreeMap::new();
|
||||
let mut fallbacks: BTreeMap<String, [u64; 2]> = BTreeMap::new();
|
||||
let mut truncated = [0usize; 2];
|
||||
let mut steps = 0;
|
||||
let (mut dp, mut bp) = (0, 0);
|
||||
for v in results {
|
||||
for (i, group) in ["design", "boolean"].into_iter().enumerate() {
|
||||
if v[group]["boolean_reports_truncated"].as_bool().unwrap_or(false) {
|
||||
truncated[i] += 1;
|
||||
}
|
||||
if let Some(counts) = v[group]["boolean_fallbacks"].as_object() {
|
||||
for (strategy, count) in counts {
|
||||
if let Some(total) = fallbacks.entry(strategy.clone()).or_default().get_mut(i) {
|
||||
*total = total.saturating_add(count.as_u64().unwrap_or(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dp += usize::from(v["design"]["panics"].as_u64().unwrap_or(0) > 0);
|
||||
bp += usize::from(v["boolean_panics"].as_u64().unwrap_or(0) > 0);
|
||||
let k = if v.get("timeout").is_some() {
|
||||
@@ -230,6 +246,11 @@ fn summarise(results: &[Value], took: Duration) -> String {
|
||||
for (k, c) in &boolean {
|
||||
s += &format!("- {k}: {}\n", pct(*c));
|
||||
}
|
||||
s += "\nSuccessful Boolean retries (events, including nested operations):\n";
|
||||
for (strategy, [designs, checks]) in &fallbacks {
|
||||
s += &format!("- {strategy}: designs {designs}, boolean checks {checks}\n");
|
||||
}
|
||||
s += &format!("- Capped reports: designs {}, boolean checks {}\n", truncated[0], truncated[1]);
|
||||
s
|
||||
}
|
||||
|
||||
@@ -238,13 +259,15 @@ mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn report_counts_outcomes_and_timeouts() {
|
||||
fn report_counts_retry_events_separately_and_marks_incomplete_logs() {
|
||||
let results = [
|
||||
json!({"design":{"outcome":{"kind":"ok"}},"boolean":{"outcome":"ok"}}),
|
||||
json!({"design":{"outcome":{"kind":"ok"}},"boolean":{"outcome":"ok"}}),
|
||||
json!({"design":{"outcome":{"kind":"ok"},"boolean_fallbacks":{"shifted_operands":2}},"boolean":{"outcome":"ok","boolean_fallbacks":{"shifted_operands":3},"boolean_reports_truncated":true}}),
|
||||
json!({"design":{"outcome":{"kind":"ok"},"boolean_fallbacks":{"shifted_operands":1}},"boolean":{"outcome":"ok"}}),
|
||||
json!({"timeout":90}),
|
||||
];
|
||||
let text = summarise(&results, Duration::ZERO);
|
||||
assert!(text.contains("shifted_operands: designs 3, boolean checks 3"), "{text}");
|
||||
assert!(text.contains("Capped reports: designs 0, boolean checks 1"), "{text}");
|
||||
assert!(text.contains("timeout: 1 (33.3 %)"), "{text}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,299 +0,0 @@
|
||||
//! `kernel-cases --export=DIR`: one kernel rig case as a corpus entry for solidcore's rig. The
|
||||
//! case's commands run as the rig runs them while the kernel's operations are traced
|
||||
//! (`smlib_trace`); the entry holds the operation (or the chain of operations) that made the
|
||||
//! bodies the case ends with, each operand that came in as a record given as that record (the
|
||||
//! B-rep record, solidcore-record's JSON), the fix set, the case's expected values and the rig's
|
||||
//! own result. A case whose result no kernel operation alone accounts for is written too, with
|
||||
//! the reasons, so nothing is dropped silently.
|
||||
//!
|
||||
//! An entry's operation is expressible (`operation_expressible`) when the run failed in a kernel
|
||||
//! operation (the last one traced failed), or when every body the case ends with is the record a
|
||||
//! traced operation's output was written as, or an operand some traced operation took, as its
|
||||
//! record. The entry is wholly expressible (`expressible`) when, besides, every value it grades is
|
||||
//! the kernel's: none of `continuity`, `watertight`, `files`, `results`, `construction` or
|
||||
//! `flat_pattern` (SolidCraft computes them), no face, edge or vertex count that the rig's merging
|
||||
//! across analytic surfaces (`merged_topology`) changes, and no refusal graded on SolidCraft's
|
||||
//! wording of the kernel's error. Those are listed in `ungraded`.
|
||||
|
||||
use std::collections::{BTreeMap, BTreeSet, HashMap};
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
use serde_json::{Value, json};
|
||||
use solidcore_record::brep::Brep;
|
||||
use solidcraft_engine::kernel::smlib_trace::{self, Event};
|
||||
|
||||
use crate::read_json;
|
||||
|
||||
/// What a traced case leaves for its entry: the trace of its commands, and the bodies it ends
|
||||
/// with by name or the engine's error.
|
||||
#[derive(Default)]
|
||||
pub struct Capture {
|
||||
pub events: Vec<Event>,
|
||||
pub ran: Option<Result<Vec<(String, Brep)>, String>>,
|
||||
}
|
||||
|
||||
/// The expected values SolidCraft computes, never the kernel.
|
||||
const GRADER_ONLY: [&str; 6] = ["continuity", "watertight", "files", "results", "construction", "flat_pattern"];
|
||||
|
||||
/// The case directory's area (its path under `tests/kernel-cases/`, a ladder case's tier under
|
||||
/// `ladder/`) and its id.
|
||||
fn area_and_id(dir: &str) -> Result<(String, String), String> {
|
||||
let p = Path::new(dir);
|
||||
let parts: Vec<String> = p.components().map(|c| c.as_os_str().to_string_lossy().to_string()).collect();
|
||||
let at = parts.iter().rposition(|c| c == "kernel-cases").ok_or_else(|| format!("{dir}: not under tests/kernel-cases"))?;
|
||||
let rest = parts.get(at + 1..).unwrap_or_default();
|
||||
match rest.split_last() {
|
||||
Some((id, area)) if !area.is_empty() => Ok((area.join("/"), id.clone())),
|
||||
_ => Err(format!("{dir}: no area")),
|
||||
}
|
||||
}
|
||||
|
||||
/// The case's line in its area's `KNOWN_FAILING`: why it fails today; `None` when not listed.
|
||||
fn known_failing(dir: &str, id: &str) -> Option<String> {
|
||||
let list = Path::new(dir).parent()?.join("KNOWN_FAILING");
|
||||
let text = std::fs::read_to_string(list).ok()?;
|
||||
text.lines().filter(|l| !l.trim_start().starts_with('#')).find_map(|l| {
|
||||
let (case, why) = l.split_once(char::is_whitespace).unwrap_or((l, ""));
|
||||
(case == id).then(|| why.trim().to_string())
|
||||
})
|
||||
}
|
||||
|
||||
/// The trace read as operations and the records that went in and came out.
|
||||
struct Trace<'a> {
|
||||
/// Each operation: its name, operands, parameters and outputs or error.
|
||||
calls: Vec<(&'static str, &'a [u64], &'a Value, &'a Result<Vec<u64>, String>)>,
|
||||
/// The record each body made from a record was made from.
|
||||
imports: HashMap<u64, (&'a Brep, bool, bool)>,
|
||||
/// The records bodies were written as, in order.
|
||||
exports: Vec<(u64, &'a Brep)>,
|
||||
/// The operation that made each body.
|
||||
producer: HashMap<u64, usize>,
|
||||
}
|
||||
|
||||
impl<'a> Trace<'a> {
|
||||
fn of(events: &'a [Event]) -> Trace<'a> {
|
||||
let mut t = Trace { calls: Vec::new(), imports: HashMap::new(), exports: Vec::new(), producer: HashMap::new() };
|
||||
for e in events {
|
||||
match e {
|
||||
Event::Import { id, record, trusted, keeping_splines } => {
|
||||
t.imports.insert(*id, (record, *trusted, *keeping_splines));
|
||||
}
|
||||
Event::Export { id, record } => t.exports.push((*id, record)),
|
||||
Event::Call { op, inputs, params, outputs } => {
|
||||
if let Ok(made) = outputs {
|
||||
for id in made {
|
||||
t.producer.insert(*id, t.calls.len());
|
||||
}
|
||||
}
|
||||
t.calls.push((*op, inputs, params, outputs));
|
||||
}
|
||||
}
|
||||
}
|
||||
t
|
||||
}
|
||||
|
||||
/// Bodies some operation took as an operand.
|
||||
fn operands(&self) -> BTreeSet<u64> {
|
||||
self.calls.iter().flat_map(|c| c.1.iter().copied()).collect()
|
||||
}
|
||||
}
|
||||
|
||||
/// The operations `ends` need, in the order they ran: each body's maker, and its operands' makers
|
||||
/// in turn, back to bodies made from records. Operands made by nothing traced are listed in
|
||||
/// `unknown`.
|
||||
fn chain(t: &Trace<'_>, ends: &[u64], unknown: &mut BTreeSet<u64>) -> Vec<usize> {
|
||||
let mut need = BTreeSet::new();
|
||||
let mut todo: Vec<u64> = ends.to_vec();
|
||||
while let Some(id) = todo.pop() {
|
||||
if t.imports.contains_key(&id) {
|
||||
continue;
|
||||
}
|
||||
match t.producer.get(&id) {
|
||||
Some(&i) => {
|
||||
if need.insert(i)
|
||||
&& let Some(c) = t.calls.get(i)
|
||||
{
|
||||
todo.extend(c.1.iter().copied());
|
||||
}
|
||||
}
|
||||
None => {
|
||||
unknown.insert(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
need.into_iter().collect()
|
||||
}
|
||||
|
||||
/// The entry of case `dir`, run with result `out`, into `root/<area>/<id>.json`, and the fix set
|
||||
/// into `root/fixes.json`.
|
||||
pub fn write(root: &Path, dir: &str, out: &Value, capture: Capture) -> Result<(), String> {
|
||||
let (area, id) = area_and_id(dir)?;
|
||||
let want = read_json(&format!("{dir}/expected.json"))?;
|
||||
let t = Trace::of(&capture.events);
|
||||
// Why the operation is not the kernel's alone, and what the entry cannot grade without
|
||||
// SolidCraft.
|
||||
let mut why_not: Vec<String> = Vec::new();
|
||||
let mut ungraded: Vec<String> = Vec::new();
|
||||
let has = |k: &str| want.get(k).is_some_and(|v| !v.is_null());
|
||||
|
||||
if let Some(missing) = want["missing"].as_str() {
|
||||
why_not.push(format!("SolidCraft has no command for it yet: {missing}"));
|
||||
}
|
||||
for k in GRADER_ONLY.iter().filter(|k| has(k)) {
|
||||
ungraded.push(format!("{k}: SolidCraft computes it"));
|
||||
}
|
||||
|
||||
let mut result: Vec<Value> = Vec::new();
|
||||
let mut ends: Vec<u64> = Vec::new();
|
||||
let mut failed_call: Option<usize> = None;
|
||||
let mut outcome = json!({"ran": true});
|
||||
match (&capture.ran, has("missing")) {
|
||||
(_, true) => {}
|
||||
(None, false) => why_not.push("the case did not run".into()),
|
||||
(Some(Err(e)), false) => {
|
||||
// The run stopped. It stopped in the kernel when the last operation that failed is
|
||||
// followed by no operation but copies (a copy or a tagged copy, which build nothing):
|
||||
// nothing was built after it, so the engine's error reports that failure in its own
|
||||
// words. An operation that ran after it means the engine went on and failed itself.
|
||||
outcome = json!({"ran": false, "engine_error": e});
|
||||
let last_failed = t.calls.iter().rposition(|c| c.3.is_err());
|
||||
let built_after = |i: usize| t.calls.iter().skip(i + 1).any(|c| !matches!(c.0, "copy" | "tagged"));
|
||||
match last_failed.filter(|&i| !built_after(i)).and_then(|i| t.calls.get(i).map(|c| (i, c))) {
|
||||
Some((i, c)) => {
|
||||
failed_call = Some(i);
|
||||
ends.extend(c.1.iter().copied());
|
||||
if let Err(k) = c.3 {
|
||||
outcome["kernel_error"] = json!(k);
|
||||
if let Some(why) = want["refusal"].as_str().filter(|w| !k.contains(*w)) {
|
||||
ungraded.push(format!("refusal {why:?}: SolidCraft's wording of the kernel's error"));
|
||||
}
|
||||
}
|
||||
}
|
||||
None if t.calls.is_empty() => why_not.push(format!("no kernel operation ran before the failure: {e}")),
|
||||
None => why_not.push(format!("the failure is SolidCraft's, not a kernel operation's: {e}")),
|
||||
}
|
||||
}
|
||||
(Some(Ok(world)), false) => {
|
||||
let operands = t.operands();
|
||||
let mut made = 0;
|
||||
for (name, record) in world {
|
||||
let from_op = t.exports.iter().rev().find(|(id, r)| *r == record && t.producer.contains_key(id)).map(|(id, _)| *id);
|
||||
let operand = t.imports.iter().filter(|(i, (r, _, _))| *r == record && operands.contains(i)).map(|(i, _)| *i).min();
|
||||
match (from_op, operand) {
|
||||
(Some(id), _) => {
|
||||
made += 1;
|
||||
ends.push(id);
|
||||
result.push(json!({"body": name, "made": format!("b{id}")}));
|
||||
}
|
||||
(None, Some(id)) => {
|
||||
ends.push(id);
|
||||
result.push(json!({"body": name, "operand": format!("b{id}")}));
|
||||
}
|
||||
(None, None) => why_not.push(format!(
|
||||
"body {name:?} is no kernel operation's output nor an operand: SolidCraft built it or changed the kernel's record"
|
||||
)),
|
||||
}
|
||||
}
|
||||
if world.is_empty() {
|
||||
why_not.push("the case ends with no body".into());
|
||||
} else if made == 0 && why_not.is_empty() {
|
||||
why_not.push("no kernel operation made a body the case ends with".into());
|
||||
}
|
||||
// Counts graded as SolidCraft merges them, where that differs from the records'.
|
||||
let raw = |k: &str| -> u64 {
|
||||
world
|
||||
.iter()
|
||||
.map(|(_, r)| match k {
|
||||
"faces" => r.faces.len(),
|
||||
"edges" => r.edges.len(),
|
||||
_ => r.vertices.len(),
|
||||
} as u64)
|
||||
.sum()
|
||||
};
|
||||
for k in ["faces", "edges", "vertices"] {
|
||||
if let Some(merged) = out["measured"][k].as_u64().filter(|&m| has(k) && m != raw(k)) {
|
||||
ungraded.push(format!("{k}: graded merged across analytic surfaces ({merged}), the records have {}", raw(k)));
|
||||
}
|
||||
}
|
||||
outcome["raw_counts"] = json!({"faces": raw("faces"), "edges": raw("edges"), "vertices": raw("vertices")});
|
||||
}
|
||||
}
|
||||
|
||||
let mut unknown = BTreeSet::new();
|
||||
let mut order = chain(&t, &ends, &mut unknown);
|
||||
if !unknown.is_empty() {
|
||||
why_not.push(format!("operands made by nothing traced: {unknown:?}"));
|
||||
}
|
||||
if let Some(i) = failed_call.filter(|i| !order.contains(i)) {
|
||||
order.push(i);
|
||||
}
|
||||
// Operand records: every body the chain takes, or the case ends with, that came in as a record.
|
||||
let mut bodies = BTreeMap::new();
|
||||
let given = |id: u64, bodies: &mut BTreeMap<String, Value>| {
|
||||
if let Some((record, trusted, splines)) = t.imports.get(&id) {
|
||||
bodies.insert(format!("b{id}"), json!({"trusted": trusted, "keeping_splines": splines, "record": record}));
|
||||
}
|
||||
};
|
||||
let mut calls: Vec<Value> = Vec::new();
|
||||
for (op, inputs, params, outputs) in order.iter().filter_map(|&i| t.calls.get(i)) {
|
||||
for &id in inputs.iter() {
|
||||
given(id, &mut bodies);
|
||||
}
|
||||
let mut c = json!({"op": op, "inputs": inputs.iter().map(|i| format!("b{i}")).collect::<Vec<_>>(), "params": params});
|
||||
match outputs {
|
||||
Ok(made) => c["outputs"] = json!(made.iter().map(|i| format!("b{i}")).collect::<Vec<_>>()),
|
||||
Err(e) => c["error"] = json!(e),
|
||||
}
|
||||
calls.push(c);
|
||||
}
|
||||
for r in &result {
|
||||
if let Some(id) = r["operand"].as_str().and_then(|b| b.strip_prefix('b')).and_then(|n| n.parse().ok()) {
|
||||
given(id, &mut bodies);
|
||||
}
|
||||
}
|
||||
let rig = json!({
|
||||
"status": out["status"], "error": out["error"], "refused_with": out["refused_with"], "measured": out["measured"],
|
||||
"known_failing": known_failing(dir, &id),
|
||||
});
|
||||
let operation_expressible = why_not.is_empty();
|
||||
let entry = json!({
|
||||
"case": id,
|
||||
"area": area,
|
||||
"sources": want["sources"],
|
||||
"what": want["what"],
|
||||
"expressible": operation_expressible && ungraded.is_empty(),
|
||||
"operation_expressible": operation_expressible,
|
||||
"why_not": why_not,
|
||||
"ungraded": ungraded,
|
||||
"expected": want,
|
||||
"rig": rig,
|
||||
"outcome": outcome,
|
||||
"calls": calls,
|
||||
"bodies": bodies,
|
||||
"result": result,
|
||||
"traced_ops": t.calls.iter().map(|c| c.0).collect::<Vec<_>>(),
|
||||
});
|
||||
let folder: PathBuf = root.join(&area);
|
||||
std::fs::create_dir_all(&folder).map_err(|e| format!("{}: {e}", folder.display()))?;
|
||||
let path = folder.join(format!("{id}.json"));
|
||||
let text = serde_json::to_string(&entry).map_err(|e| e.to_string())?;
|
||||
std::fs::write(&path, text).map_err(|e| format!("{}: {e}", path.display()))?;
|
||||
// Cases run in parallel processes: each writes its own file and renames it over the shared
|
||||
// one, so no reader sees a torn file (every process writes the same fix set).
|
||||
let fixes = serde_json::to_string_pretty(&smlib_trace::fixes()).map_err(|e| e.to_string())?;
|
||||
let own = root.join(format!("fixes.json.{}", std::process::id()));
|
||||
std::fs::write(&own, fixes).map_err(|e| format!("{}: {e}", own.display()))?;
|
||||
std::fs::rename(&own, root.join("fixes.json")).map_err(|e| format!("{}: {e}", root.display()))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn the_area_is_the_path_under_kernel_cases() {
|
||||
assert_eq!(area_and_id("tests/kernel-cases/booleans/1894-x").unwrap(), ("booleans".into(), "1894-x".into()));
|
||||
assert_eq!(area_and_id("/r/tests/kernel-cases/ladder/07-fillets/003-y").unwrap(), ("ladder/07-fillets".into(), "003-y".into()));
|
||||
assert!(area_and_id("/r/other/x").is_err());
|
||||
}
|
||||
}
|
||||
@@ -10,13 +10,12 @@
|
||||
//! solidcraft-cli bench-assistant --connect 127.0.0.1:PORT [--token T] --base-url URL --model NAME [--tasks 1,2,5] [--repeat N]
|
||||
//! [--timeout-s 300] [--json out.json] [--markdown out.md]
|
||||
//! the standard Assistant model test (#4851) on a running app
|
||||
//! solidcraft-cli snapshot <script|design> [--in design|part.step] --out shot.png [--width W] [--height H] [--view iso|front|top|…|NAME | --camera JSON] [--no-grid] [--no-axes] [--quality LEVEL]
|
||||
//! solidcraft-cli snapshot <script|design> [--in design|part.step] --out shot.png [--width W] [--height H] [--view iso|front|top|…|NAME | --camera JSON] [--no-grid] [--no-axes]
|
||||
//! [--body NAME:opacity=0.3,color=#rrggbb]... [--tool NAME]... [--section z=27]
|
||||
//! solidcraft-cli exec <command> [json-params] run one command on an empty design
|
||||
//! solidcraft-cli commands the command registry as JSON
|
||||
//! solidcraft-cli recipe <recipe.json> translate an oracle recipe to a script
|
||||
//! solidcraft-cli oracle <case-dir>... replay recipes and compare with expected.json
|
||||
//! solidcraft-cli kernel-cases [--json] [--dumps=DIR] [--validation=MODE] <case-dir>... the kernel regression rig (tests/kernel-cases)
|
||||
//! solidcraft-cli mcp [--headless] [--in design|script] [--connect HOST:PORT [--token T]] [--allow-path DIR]... [--allow-any-path]
|
||||
//! [--param-check off|warn|strict]
|
||||
//! MCP server on stdio (docs/mcp.md)
|
||||
@@ -34,12 +33,9 @@ mod bench_agent;
|
||||
mod bench_assistant;
|
||||
mod crashes;
|
||||
mod fuzz;
|
||||
mod kernel_cases;
|
||||
mod kernel_cases_export;
|
||||
mod logger;
|
||||
mod oracle;
|
||||
mod preview;
|
||||
mod profiling;
|
||||
mod recipe;
|
||||
mod render;
|
||||
mod spatial;
|
||||
@@ -62,19 +58,19 @@ struct Command {
|
||||
}
|
||||
|
||||
/// `run`'s lines in the usage.
|
||||
const USAGE_RUN: &str = " solidcraft-cli run <script.json|design.sc|part.step> [--in design.sc|part.step] [--out FILE]... [--save FILE] [--quiet] [--results] [--timings] [--profile] [--profile-out trace.json] [--json-out FILE] [--allow-errors] [--validation each_step|each_feature|off]\n [--param-check off|warn|strict]\n solidcraft-cli run --in <design.sc|part.step> [--out FILE]...\n (a timeline feature that fails fails the run and nothing is written; --allow-errors writes anyway)\n (--validation: when SMLib's full check runs on the features computed (diagnostics.validation), default each_feature)\n (--param-check checks each step against its command's contract: warn reports on stderr, strict stops the run)\n (--timings prints {timings: [{index, command, ms}], total_ms} for a script, with --results its results too;\n --profile adds each command's profile: {boolean_ms, tessellate_ms, other_ms}, the kernel's share)\n (--profile also records where the time goes, SMLib's calls, kernel operations, features, commands and import stages,\n and prints the table to stderr: count, total, self time and longest per span; --profile-out FILE writes the spans\n as a Chrome trace for chrome://tracing or ui.perfetto.dev; SOLIDCRAFT_PROFILE=1 does the same for any command)\n";
|
||||
const USAGE_RUN: &str = " solidcraft-cli run <script.json|design.sc|part.step> [--in design.sc|part.step] [--out FILE]... [--save FILE] [--quiet] [--results] [--timings] [--profile] [--json-out FILE] [--allow-errors]\n [--param-check off|warn|strict]\n solidcraft-cli run --in <design.sc|part.step> [--out FILE]...\n (a timeline feature that fails fails the run and nothing is written; --allow-errors writes anyway)\n (--param-check checks each step against its command's contract: warn reports on stderr, strict stops the run)\n (--timings prints {timings: [{index, command, ms}], total_ms} for a script, with --results its results too;\n --profile adds each command's profile: {boolean_ms, tessellate_ms, other_ms}, the kernel's share)\n";
|
||||
/// `eval`'s lines in the usage.
|
||||
const USAGE_EVAL: &str = " solidcraft-cli eval <script.json|design.sc|part.step> [--in design.sc|part.step] [--json-out FILE] [--profile] [--profile-out trace.json] (alias: inspect)\n solidcraft-cli eval --in <script.json|design.sc|part.step> [--json-out FILE]\n (with both inputs, runs the positional script on --in before measuring; does not automatically save the modified design)\n (--json-out FILE writes the JSON that run (with --results, else the measurement) and eval print to FILE instead of stdout,\n as plain UTF-8: a shell's > can re-encode it, e.g. Windows PowerShell adds a byte-order mark)\n (--profile and --profile-out as for run)\n";
|
||||
const USAGE_EVAL: &str = " solidcraft-cli eval <script.json|design.sc|part.step> [--in design.sc|part.step] [--json-out FILE] (alias: inspect)\n solidcraft-cli eval --in <script.json|design.sc|part.step> [--json-out FILE]\n (with both inputs, runs the positional script on --in before measuring; does not automatically save the modified design)\n (--json-out FILE writes the JSON that run (with --results, else the measurement) and eval print to FILE instead of stdout,\n as plain UTF-8: a shell's > can re-encode it, e.g. Windows PowerShell adds a byte-order mark)\n";
|
||||
/// `script`'s lines in the usage.
|
||||
const USAGE_SCRIPT: &str = " solidcraft-cli script <design.sc|script.json> [--out script.json]\n (the design's history as a command script that eval and run replay)\n";
|
||||
/// `bench-open`'s lines in the usage.
|
||||
const USAGE_BENCH_OPEN: &str = " solidcraft-cli bench-open <design.sc | part.step> [--parse-only] [--save OUT.sc] [--display LEVEL [--edit NAME EXPR]] [--ops script.json] [--profile] [--profile-out trace.json]\n (--profile and --profile-out as for run)\n (--ops: after opening, run each command of the script and undo it, timing the command, the\n evaluations it caused and the view it leaves: placing and meshing what changed)\n";
|
||||
const USAGE_BENCH_OPEN: &str = " solidcraft-cli bench-open <design.sc | part.step> [--parse-only] [--save OUT.sc] [--display LEVEL [--edit NAME EXPR]] [--ops script.json]\n (--ops: after opening, run each command of the script and undo it, timing the command, the\n evaluations it caused and the view it leaves: placing and meshing what changed)\n";
|
||||
/// `bench-agent`'s lines in the usage.
|
||||
const USAGE_BENCH_AGENT: &str = " solidcraft-cli bench-agent [--scale F] [--save design.sc] [--script-out script.json]\n";
|
||||
/// `bench-assistant`'s lines in the usage.
|
||||
const USAGE_BENCH_ASSISTANT: &str = " solidcraft-cli bench-assistant --connect 127.0.0.1:PORT [--token T] --base-url URL --model NAME [--tasks 1,2,5] [--repeat N] [--timeout-s 300] [--json out.json] [--markdown out.md]\n";
|
||||
/// `snapshot`'s lines in the usage.
|
||||
const USAGE_SNAPSHOT: &str = " solidcraft-cli snapshot <script|design> [--in design.sc|part.step] --out shot.png [--width W] [--height H] [--view NAME | --camera JSON] [--no-grid] [--no-axes]\n [--body NAME:opacity=0.3,color=#rrggbb]... [--tool NAME]... [--section z=27] [--quality coarse|normal|fine|ultra]\n solidcraft-cli snapshot --in <design.sc|part.step> --out shot.png ...\n (as with run, --in starts from a design and the script runs on top of it; an option snapshot doesn't take is an error;\n --view: iso, front, back, top, bottom, left, right, or the name of a view saved in the design with view.save;\n --camera: {target: [x,y,z], yaw, pitch, distance, fov?} in mm and radians, as the MCP screenshot takes it (docs/mcp.md);\n --no-grid and --no-axes leave the ground grid (on Z 0) and the origin's axes out of the picture;\n --body: how one body is drawn, as appearance.assign takes it: opacity 0-1 (below 1 is see-through, so what is inside\n it shows) and color #rrggbb, either or both, once per body;\n --tool: draw this body solid in the tool colour and every other body see-through, so a cut's or a join's tool body\n is visible inside the material it meets; a later --body overrides it;\n --section: cut the model as inspect.section does, so the inside shows: z=27 (the plane through that world\n coordinate, keeping the smaller side), add ,flip to keep the other side, or XY, XZ, YZ, or its own JSON;\n --quality: the display quality the bodies are meshed at, as the app's setting (default normal))\n";
|
||||
const USAGE_SNAPSHOT: &str = " solidcraft-cli snapshot <script|design> [--in design.sc|part.step] --out shot.png [--width W] [--height H] [--view NAME | --camera JSON] [--no-grid] [--no-axes]\n [--body NAME:opacity=0.3,color=#rrggbb]... [--tool NAME]... [--section z=27]\n solidcraft-cli snapshot --in <design.sc|part.step> --out shot.png ...\n (as with run, --in starts from a design and the script runs on top of it; an option snapshot doesn't take is an error;\n --view: iso, front, back, top, bottom, left, right, or the name of a view saved in the design with view.save;\n --camera: {target: [x,y,z], yaw, pitch, distance, fov?} in mm and radians, as the MCP screenshot takes it (docs/mcp.md);\n --no-grid and --no-axes leave the ground grid (on Z 0) and the origin's axes out of the picture;\n --body: how one body is drawn, as appearance.assign takes it: opacity 0-1 (below 1 is see-through, so what is inside\n it shows) and color #rrggbb, either or both, once per body;\n --tool: draw this body solid in the tool colour and every other body see-through, so a cut's or a join's tool body\n is visible inside the material it meets; a later --body overrides it;\n --section: cut the model as inspect.section does, so the inside shows: z=27 (the plane through that world\n coordinate, keeping the smaller side), add ,flip to keep the other side, or XY, XZ, YZ, or its own JSON)\n";
|
||||
/// `render`'s lines in the usage.
|
||||
const USAGE_RENDER: &str = " solidcraft-cli render <script|design> --out image.png [--setup NAME] [--width W] [--height H] [--transparent] [--overwrite] [--timeout SECONDS]\n [--progressive] [--samples N] [--max-depth N] [--seed N] [--exposure EV] [--lighting FILE.json] [--environment FILE.json] [--tone-map reinhard|aces_fitted]\n";
|
||||
/// `exec`'s lines in the usage.
|
||||
@@ -85,8 +81,6 @@ const USAGE_COMMANDS: &str = " solidcraft-cli commands\n";
|
||||
const USAGE_RECIPE: &str = " solidcraft-cli recipe <recipe.json>\n";
|
||||
/// `oracle`'s lines in the usage.
|
||||
const USAGE_ORACLE: &str = " solidcraft-cli oracle <case-dir>... [--json]\n";
|
||||
/// `kernel-cases`'s lines in the usage.
|
||||
const USAGE_KERNEL_CASES: &str = " solidcraft-cli kernel-cases <case-dir>... [--json] [--dumps=DIR] [--export=DIR] [--validation=each_step|each_feature|off]\n (the kernel regression rig, tests/kernel-cases, on SMLib; --dumps: each case's\n failing SMLib calls leave their inputs for replay in DIR/<area>-<case>; --export: each case's\n kernel operations, input records and expected values for solidcore's rig, in DIR/<area>/<case>.json; --validation: when SMLib's\n full check runs (diagnostics.validation), default each_feature)\n";
|
||||
/// `fuzz`'s lines in the usage.
|
||||
const USAGE_FUZZ: &str =
|
||||
" solidcraft-cli fuzz [--from N] [--count N] [--jobs J] [--timeout S] [--steps N] [--minimise] [--out DIR] [--report FILE]\n";
|
||||
@@ -124,7 +118,6 @@ const COMMANDS: &[Command] = &[
|
||||
Command { name: "commands", usage: USAGE_COMMANDS, listed: true },
|
||||
Command { name: "recipe", usage: USAGE_RECIPE, listed: true },
|
||||
Command { name: "oracle", usage: USAGE_ORACLE, listed: true },
|
||||
Command { name: "kernel-cases", usage: USAGE_KERNEL_CASES, listed: true },
|
||||
Command { name: "fuzz", usage: USAGE_FUZZ, listed: true },
|
||||
Command { name: "fuzz-one", usage: USAGE_FUZZ_ONE, listed: false },
|
||||
Command { name: "mcp", usage: USAGE_MCP, listed: true },
|
||||
@@ -140,19 +133,6 @@ const COMMANDS: &[Command] = &[
|
||||
fn main() -> ExitCode {
|
||||
let mut args: Vec<String> = std::env::args().skip(1).collect();
|
||||
logger::init(&mut args);
|
||||
// `--profile` / `--profile-out` (run, eval, bench-open) or SOLIDCRAFT_PROFILE (any command):
|
||||
// record from here, and print the table when the command ends.
|
||||
let profiling = match args.first().map(String::as_str) {
|
||||
Some("run" | "eval" | "inspect" | "bench-open") => profiling::start(&args[1..]),
|
||||
_ => profiling::start(&[]),
|
||||
};
|
||||
let profiling = match profiling {
|
||||
Ok(p) => p,
|
||||
Err(e) => {
|
||||
eprintln!("error: {e}");
|
||||
return ExitCode::FAILURE;
|
||||
}
|
||||
};
|
||||
if let Err(e) = max_file_size(&mut args) {
|
||||
eprintln!("error: {e}");
|
||||
return ExitCode::FAILURE;
|
||||
@@ -190,14 +170,9 @@ fn main() -> ExitCode {
|
||||
recipe::to_script(&v).map(|s| println!("{}", pretty(&s)))
|
||||
}),
|
||||
Some("oracle") => oracle::run(&args[1..]),
|
||||
Some("kernel-cases") => kernel_cases::run(&args[1..]),
|
||||
Some("fuzz") => fuzz::run(&args[1..]),
|
||||
Some("fuzz-one") => fuzz::one(&args[1..]),
|
||||
Some("mcp") => {
|
||||
let result = cmd_mcp(&args[1..]);
|
||||
solidcraft_mcp::cleanup_scratch_dir();
|
||||
result
|
||||
}
|
||||
Some("mcp") => cmd_mcp(&args[1..]),
|
||||
Some("crashes") => crashes::run(&args[1..]),
|
||||
Some("icon") => cmd_icon(&args[1..]),
|
||||
Some("licences" | "licenses") => {
|
||||
@@ -227,11 +202,6 @@ fn main() -> ExitCode {
|
||||
}
|
||||
_ => Err(usage()),
|
||||
};
|
||||
// The table also when the command failed: where it spent its time before failing.
|
||||
let r = match (r, profiling.map(profiling::Profiling::finish)) {
|
||||
(Ok(()), Some(Err(e))) => Err(e),
|
||||
(r, _) => r,
|
||||
};
|
||||
match r {
|
||||
Ok(()) => ExitCode::SUCCESS,
|
||||
Err(e) => {
|
||||
@@ -312,15 +282,8 @@ pub fn load(path: &str) -> Result<Session, String> {
|
||||
/// `load`, with scripts and recipes run at the parameter-check level `check`, which the
|
||||
/// session keeps.
|
||||
fn load_checked(path: &str, check: solidcraft_engine::schema::ParamCheck) -> Result<Session, String> {
|
||||
load_with(path, check, solidcraft_engine::kernel::Validation::default())
|
||||
}
|
||||
|
||||
/// `load_checked`, the features computed under `validation` (`diagnostics.validation`), which
|
||||
/// the session keeps.
|
||||
fn load_with(path: &str, check: solidcraft_engine::schema::ParamCheck, validation: solidcraft_engine::kernel::Validation) -> Result<Session, String> {
|
||||
let mut s = Session::default();
|
||||
s.param_check = check;
|
||||
s.set_validation(validation);
|
||||
if solidcraft_engine::io::is_step_path(path) || solidcraft_engine::io::is_mesh_path(path) || solidcraft_engine::io::is_point_cloud_path(path) {
|
||||
s.execute("doc.open", &json!({"path": path})).map_err(|e| e.to_string())?;
|
||||
return Ok(s);
|
||||
@@ -328,7 +291,7 @@ fn load_with(path: &str, check: solidcraft_engine::schema::ParamCheck, validatio
|
||||
let bytes = solidcraft_engine::io::limits::read(path, solidcraft_engine::io::limits::Kind::Design).map_err(|e| format!("{path}: {e}"))?;
|
||||
if solidcraft_engine::io::is_design_container(&bytes) {
|
||||
let doc = solidcraft_engine::io::read_design(&bytes).map_err(|e| format!("{path}: {e}"))?;
|
||||
let mut session = Session::opened_at_validating(doc, None, Some(path), validation);
|
||||
let mut session = Session::opened_at(doc, None, Some(path));
|
||||
session.param_check = check;
|
||||
return Ok(session);
|
||||
}
|
||||
@@ -392,16 +355,6 @@ fn positional(args: &[String]) -> Option<&String> {
|
||||
None
|
||||
}
|
||||
|
||||
/// Is `path` a command script (or a recipe), not a design: JSON that is no saved design.
|
||||
fn is_script(path: &str) -> bool {
|
||||
let Ok(bytes) = solidcraft_engine::io::vfs::read(path, solidcraft_engine::io::MAX_DESIGN_BYTES) else { return false };
|
||||
if solidcraft_engine::io::is_design_container(&bytes) {
|
||||
return false;
|
||||
}
|
||||
serde_json::from_slice::<Value>(&bytes)
|
||||
.is_ok_and(|v| !v.get("format").and_then(Value::as_str).is_some_and(|f| solidcraft_engine::doc::format::version_of(f).is_some()))
|
||||
}
|
||||
|
||||
/// `--json-out FILE`: where the JSON a command prints goes instead of stdout.
|
||||
fn json_out(args: &[String]) -> Result<Option<&str>, String> {
|
||||
if !args.iter().any(|a| a == "--json-out") {
|
||||
@@ -438,31 +391,24 @@ fn cmd_run(args: &[String]) -> Result<(), String> {
|
||||
known_args(
|
||||
"run",
|
||||
args,
|
||||
&["--in", "--out", "--save", "--json-out", "--param-check", "--profile-out", "--validation"],
|
||||
&["--in", "--out", "--save", "--json-out", "--param-check"],
|
||||
&["--quiet", "--results", "--timings", "--profile", "--allow-errors"],
|
||||
true,
|
||||
)?;
|
||||
let validation = validation_flag("run", args)?;
|
||||
let base = flag(args, "--in");
|
||||
let path = positional(args);
|
||||
if path.is_none() && base.is_none() {
|
||||
return Err(usage());
|
||||
}
|
||||
let want_results = args.iter().any(|a| a == "--results");
|
||||
// `--profile` records the profiler's spans (the table goes to stderr, `profiling.rs`); for a
|
||||
// script it also times each command and splits out its kernel time, implying `--timings`.
|
||||
let script = path.is_some_and(|p| is_script(p));
|
||||
let profile = script && args.iter().any(|a| a == "--profile" || a == "--profile-out");
|
||||
// `--profile` times each command and splits out its kernel time; it implies `--timings`.
|
||||
let profile = args.iter().any(|a| a == "--profile");
|
||||
let timings = profile || args.iter().any(|a| a == "--timings");
|
||||
let (mut s, results) = if want_results || timings {
|
||||
// Collect every command's result or time (scripts only), then process requested files too.
|
||||
let mut s = match base {
|
||||
Some(b) => load_with(b, check, validation)?,
|
||||
None => {
|
||||
let mut s = Session::default();
|
||||
s.set_validation(validation);
|
||||
s
|
||||
}
|
||||
Some(b) => load_checked(b, check)?,
|
||||
None => Session::default(),
|
||||
};
|
||||
s.param_check = check;
|
||||
let needs = if want_results { "--results needs a script" } else { "--timings needs a script" };
|
||||
@@ -479,7 +425,7 @@ fn cmd_run(args: &[String]) -> Result<(), String> {
|
||||
};
|
||||
(s, Some(out))
|
||||
} else {
|
||||
(open_validating(base, path, check, validation)?, None)
|
||||
(open(base, path, check)?, None)
|
||||
};
|
||||
// A feature that fails leaves the bodies as they were before it (a parameter change can
|
||||
// break a feature without failing the command that made it): writing them would hand out
|
||||
@@ -506,38 +452,18 @@ fn cmd_run(args: &[String]) -> Result<(), String> {
|
||||
/// The session `run`, `eval` and `snapshot` start from: `--in` (a design or STEP file) with the
|
||||
/// positional script run on top of it, or either one alone, with scripts run at `check`.
|
||||
fn open(base: Option<&str>, path: Option<&String>, check: solidcraft_engine::schema::ParamCheck) -> Result<Session, String> {
|
||||
open_validating(base, path, check, solidcraft_engine::kernel::Validation::default())
|
||||
}
|
||||
|
||||
/// [`open`], the features computed under `validation`.
|
||||
fn open_validating(
|
||||
base: Option<&str>,
|
||||
path: Option<&String>,
|
||||
check: solidcraft_engine::schema::ParamCheck,
|
||||
validation: solidcraft_engine::kernel::Validation,
|
||||
) -> Result<Session, String> {
|
||||
let load = |p: &str| load_with(p, check, validation);
|
||||
match (base, path) {
|
||||
(Some(b), Some(p)) => {
|
||||
let mut s = load(b)?;
|
||||
let mut s = load_checked(b, check)?;
|
||||
run_script_warning(&mut s, p, &read_json(p)?)?;
|
||||
Ok(s)
|
||||
}
|
||||
(Some(b), None) => load(b),
|
||||
(None, Some(p)) => load(p),
|
||||
(Some(b), None) => load_checked(b, check),
|
||||
(None, Some(p)) => load_checked(p, check),
|
||||
(None, None) => Err(usage()),
|
||||
}
|
||||
}
|
||||
|
||||
/// `--validation MODE` (`diagnostics.validation`): the default, each_feature, when not given.
|
||||
fn validation_flag(cmd: &str, args: &[String]) -> Result<solidcraft_engine::kernel::Validation, String> {
|
||||
match flag(args, "--validation") {
|
||||
Some(m) => solidcraft_engine::kernel::Validation::parse(m)
|
||||
.ok_or_else(|| format!("{cmd}: --validation must be each_step, each_feature or off, not `{m}`")),
|
||||
None => Ok(solidcraft_engine::kernel::Validation::default()),
|
||||
}
|
||||
}
|
||||
|
||||
/// Refuses an option `cmd` doesn't take, and one missing its value: a typo, or another
|
||||
/// command's option, would otherwise be ignored without a word. `positionals` says whether the
|
||||
/// command takes a word of its own (a file, a seed): `fuzz` takes none, and would start a run.
|
||||
@@ -575,7 +501,7 @@ fn timeline_ok(s: &Session) -> Result<(), String> {
|
||||
|
||||
fn cmd_eval(args: &[String]) -> Result<(), String> {
|
||||
let json_out = json_out(args)?;
|
||||
known_args("eval", args, &["--in", "--json-out", "--profile-out"], &["--profile"], true)?;
|
||||
known_args("eval", args, &["--in", "--json-out"], &[], true)?;
|
||||
let mut s = open(flag(args, "--in"), positional(args), solidcraft_engine::schema::ParamCheck::Off)?;
|
||||
let m = s.execute("inspect.measure", &json!({})).map_err(|e| e.to_string())?;
|
||||
let d = s.execute("document.inspect", &json!({})).map_err(|e| e.to_string())?;
|
||||
@@ -657,7 +583,7 @@ fn cmd_snapshot(args: &[String]) -> Result<(), String> {
|
||||
known_args(
|
||||
"snapshot",
|
||||
args,
|
||||
&["--in", "--out", "--width", "--height", "--view", "--camera", "--body", "--tool", "--section", "--quality"],
|
||||
&["--in", "--out", "--width", "--height", "--view", "--camera", "--body", "--tool", "--section"],
|
||||
&["--no-grid", "--no-axes"],
|
||||
true,
|
||||
)?;
|
||||
@@ -670,16 +596,6 @@ fn cmd_snapshot(args: &[String]) -> Result<(), String> {
|
||||
Some(x) => x.parse().ok().filter(|n| (16..=8192).contains(n)).ok_or_else(|| format!("{name} must be 16 to 8192 pixels, not `{x}`")),
|
||||
};
|
||||
let (w, h) = (size("--width", 1280)?, size("--height", 800)?);
|
||||
// The display quality the bodies are meshed at, as the app's Display Quality setting: set
|
||||
// before the design opens, so every display plan is made at it.
|
||||
if let Some(q) = flag(args, "--quality") {
|
||||
use solidcraft_engine::doc::display_quality::{DisplayQuality, set_current};
|
||||
let level = DisplayQuality::parse(q).ok_or_else(|| {
|
||||
let ids: Vec<&str> = DisplayQuality::ALL.iter().map(|q| q.id()).collect();
|
||||
format!("--quality must be one of {}, not `{q}`", ids.join(", "))
|
||||
})?;
|
||||
set_current(level);
|
||||
}
|
||||
let mut s = open(flag(args, "--in"), positional(args), solidcraft_engine::schema::ParamCheck::Off)?;
|
||||
// How the bodies are drawn and where the model is cut, through the commands the app's
|
||||
// Appearance dialog and Section Analysis run (`preview`).
|
||||
@@ -699,12 +615,9 @@ fn cmd_snapshot(args: &[String]) -> Result<(), String> {
|
||||
}
|
||||
(None, None) => {}
|
||||
}
|
||||
let cam = match s.camera {
|
||||
Some(cam) => cam,
|
||||
None => solidcraft_engine::view::home_camera(&s).map_err(|e| e.to_string())?,
|
||||
};
|
||||
let cam = s.camera.unwrap_or_else(|| solidcraft_engine::view::home_camera(&s));
|
||||
let guides = Guides { grid: !args.iter().any(|a| a == "--no-grid"), axes: !args.iter().any(|a| a == "--no-axes") };
|
||||
let scene = solidcraft_engine::view::scene_with_guides(&s, &cam, s.section, guides).map_err(|e| e.to_string())?;
|
||||
let scene = solidcraft_engine::view::scene_with_guides(&s, &cam, s.section, guides);
|
||||
let png = solidcraft_engine::capture::png(&scene, &cam, w, h)?;
|
||||
std::fs::write(out, &png.bytes).map_err(|e| format!("{out}: {e}"))?;
|
||||
let mut reply = json!({"path": out, "width": w, "height": h, "bytes": png.bytes.len(), "renderer": png.renderer});
|
||||
@@ -933,7 +846,7 @@ fn bench_ops(mut s: Session, script: &str) -> Result<Session, String> {
|
||||
let r = s.execute(id, p).map_err(|e| format!("{id}: {e}"))?;
|
||||
let ms = t.elapsed().as_secs_f64() * 1000.0;
|
||||
let t = std::time::Instant::now();
|
||||
s.world_state().map_err(|e| e.to_string())?.warm_meshes(|| true);
|
||||
s.world_state().warm_meshes(|| true);
|
||||
let view_ms = t.elapsed().as_secs_f64() * 1000.0;
|
||||
println!("{}", json!({"step": "op", "command": id, "ms": ms, "view_ms": view_ms}));
|
||||
Ok(r)
|
||||
@@ -989,7 +902,7 @@ pub(crate) fn cmd_bench_open(args: &[String]) -> Result<(), String> {
|
||||
println!("{}", json!({"step": "feature", "id": r.id, "name": r.name, "ms": r.ms, "error": r.error}));
|
||||
}
|
||||
let t = std::time::Instant::now();
|
||||
let st = s.world_state().map_err(|e| e.to_string())?;
|
||||
let st = s.world_state();
|
||||
let place_ms = t.elapsed().as_secs_f64() * 1000.0;
|
||||
// As the desktop app prepares a design it opened.
|
||||
st.warm_meshes(|| true);
|
||||
@@ -1059,7 +972,7 @@ pub(crate) fn cmd_bench_open(args: &[String]) -> Result<(), String> {
|
||||
let t = std::time::Instant::now();
|
||||
s.execute("parameters.change", &json!({"name": name, "expression": expr})).map_err(|e| e.to_string())?;
|
||||
let eval_ms = t.elapsed().as_secs_f64() * 1000.0;
|
||||
let st = s.world_state().map_err(|e| e.to_string())?;
|
||||
let st = s.world_state();
|
||||
let t = std::time::Instant::now();
|
||||
st.warm_meshes(|| true);
|
||||
let mesh_ms = t.elapsed().as_secs_f64() * 1000.0;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#![allow(clippy::needless_range_loop)]
|
||||
|
||||
use serde_json::{Value, json};
|
||||
use solidcore_record::Vec3;
|
||||
use solidcraft_engine::geom::Vec3;
|
||||
|
||||
use crate::spatial::{self, Tri};
|
||||
use crate::{read_json, recipe};
|
||||
@@ -13,28 +13,28 @@ use crate::{read_json, recipe};
|
||||
/// Default relative tolerance for volume and area (our curved-face tessellation is within ~2e-4).
|
||||
pub const REL_TOL: f64 = 1e-3;
|
||||
/// Default tolerance for centre of mass and bounding box, as a fraction of the bbox diagonal.
|
||||
pub(crate) const ABS_FRAC: f64 = 1e-3;
|
||||
const ABS_FRAC: f64 = 1e-3;
|
||||
/// Chord tolerance used to triangulate our part for the surface-distance check (mm).
|
||||
const MESH_TOL: f64 = 0.01;
|
||||
/// Relative tolerance on the principal second moments of the two triangulations.
|
||||
const INERTIA_REL: f64 = 2e-3;
|
||||
|
||||
/// What SolidCraft built: totals over every body.
|
||||
pub(crate) struct Got {
|
||||
pub(crate) body_count: usize,
|
||||
pub(crate) volume: f64,
|
||||
pub(crate) area: f64,
|
||||
pub(crate) com: [f64; 3],
|
||||
pub(crate) bbox: ([f64; 3], [f64; 3]),
|
||||
pub(crate) faces: u64,
|
||||
struct Got {
|
||||
body_count: usize,
|
||||
volume: f64,
|
||||
area: f64,
|
||||
com: [f64; 3],
|
||||
bbox: ([f64; 3], [f64; 3]),
|
||||
faces: u64,
|
||||
}
|
||||
|
||||
pub(crate) fn v3(v: &Value) -> Option<[f64; 3]> {
|
||||
fn v3(v: &Value) -> Option<[f64; 3]> {
|
||||
let a = v.as_array()?;
|
||||
Some([a.first()?.as_f64()?, a.get(1)?.as_f64()?, a.get(2)?.as_f64()?])
|
||||
}
|
||||
|
||||
pub(crate) fn totals(m: &Value) -> Got {
|
||||
fn totals(m: &Value) -> Got {
|
||||
let bodies = m["bodies"].as_array().cloned().unwrap_or_default();
|
||||
let (mut volume, mut area, mut faces) = (0.0, 0.0, 0);
|
||||
let mut moment = [0.0; 3];
|
||||
@@ -57,21 +57,21 @@ pub(crate) fn totals(m: &Value) -> Got {
|
||||
Got { body_count: bodies.len(), volume, area, com, bbox: (lo, hi), faces }
|
||||
}
|
||||
|
||||
pub(crate) struct Checks {
|
||||
pub(crate) list: Vec<Value>,
|
||||
pub(crate) pass: bool,
|
||||
struct Checks {
|
||||
list: Vec<Value>,
|
||||
pass: bool,
|
||||
}
|
||||
|
||||
impl Checks {
|
||||
pub(crate) fn push(&mut self, what: &str, got: Value, want: Value, ok: bool) {
|
||||
fn push(&mut self, what: &str, got: Value, want: Value, ok: bool) {
|
||||
self.pass &= ok;
|
||||
self.list.push(json!({"check": what, "got": got, "want": want, "ok": ok}));
|
||||
}
|
||||
pub(crate) fn rel(&mut self, what: &str, g: f64, w: Option<f64>, rel: f64) {
|
||||
fn rel(&mut self, what: &str, g: f64, w: Option<f64>, rel: f64) {
|
||||
let ok = w.is_some_and(|w| g.is_finite() && (g - w).abs() <= rel * w.abs().max(1.0));
|
||||
self.push(what, json!(g), json!(w), ok);
|
||||
}
|
||||
pub(crate) fn vec(&mut self, what: &str, g: [f64; 3], w: Option<[f64; 3]>, tol: f64) {
|
||||
fn vec(&mut self, what: &str, g: [f64; 3], w: Option<[f64; 3]>, tol: f64) {
|
||||
let ok = w.is_some_and(|w| g.iter().zip(w).all(|(g, w)| g.is_finite() && (g - w).abs() <= tol));
|
||||
self.push(what, json!(g), json!(w), ok);
|
||||
}
|
||||
@@ -186,8 +186,8 @@ fn step_export_check(s: &solidcraft_engine::Session, volume: f64) -> (bool, Stri
|
||||
/// Our part as a triangle soup (curved faces refined onto the surface).
|
||||
fn our_mesh(s: &solidcraft_engine::Session) -> Result<Vec<Tri>, String> {
|
||||
let mut ours: Vec<Tri> = Vec::new();
|
||||
for b in &s.world_state().map_err(|e| e.to_string())?.bodies {
|
||||
let m = b.body.mesh(&solidcraft_engine::kernel::MeshTolerance::chord(MESH_TOL)).map_err(|e| e.to_string())?;
|
||||
for b in &s.world_state().bodies {
|
||||
let m = b.body.tessellate_with(MESH_TOL, true).map_err(|e| e.to_string())?;
|
||||
let p = |i: u32| m.positions.get(i as usize).map(|v: &Vec3| [v.x, v.y, v.z]);
|
||||
for t in &m.triangles {
|
||||
if let (Some(a), Some(b), Some(c)) = (p(t[0]), p(t[1]), p(t[2])) {
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
//! `--profile` and `--profile-out FILE` for `run`, `eval` and `bench-open` (and
|
||||
//! `SOLIDCRAFT_PROFILE=1` for any command): record where the time goes, the kernel's calls to the
|
||||
//! commands, print the table to stderr when the command ends (stdout stays the command's JSON)
|
||||
//! and write the spans as a Chrome trace for chrome://tracing or Perfetto.
|
||||
|
||||
use solidcraft_engine::profile;
|
||||
|
||||
/// Rows the table prints.
|
||||
const TOP: usize = 30;
|
||||
|
||||
/// A recording that prints its table when finished.
|
||||
pub struct Profiling {
|
||||
trace: Option<String>,
|
||||
}
|
||||
|
||||
/// Start recording when `args` (after the command) ask for it, or `SOLIDCRAFT_PROFILE` does.
|
||||
pub fn start(args: &[String]) -> Result<Option<Profiling>, String> {
|
||||
let trace = match args.iter().position(|a| a == "--profile-out") {
|
||||
Some(i) => match args.get(i + 1) {
|
||||
Some(f) if !f.starts_with("--") => Some(f.clone()),
|
||||
_ => return Err("--profile-out needs a FILE".into()),
|
||||
},
|
||||
None => None,
|
||||
};
|
||||
let asked = trace.is_some() || args.iter().any(|a| a == "--profile");
|
||||
if !asked && !solidcraft_engine::timing::profile_from_env() {
|
||||
return Ok(None);
|
||||
}
|
||||
if !profile::COMPILED {
|
||||
return Err("this solidcraft-cli was built without the profiler (its `profile` feature)".into());
|
||||
}
|
||||
profile::reset();
|
||||
profile::set_enabled(true);
|
||||
Ok(Some(Profiling { trace }))
|
||||
}
|
||||
|
||||
impl Profiling {
|
||||
/// Stop recording, print the table on stderr and write the trace.
|
||||
pub fn finish(self) -> Result<(), String> {
|
||||
profile::set_enabled(false);
|
||||
eprint!("{}", profile::report().table(TOP));
|
||||
if let Some(path) = self.trace {
|
||||
let mut bytes = Vec::new();
|
||||
profile::write_chrome_trace(&mut bytes).map_err(|e| format!("{path}: {e}"))?;
|
||||
std::fs::write(&path, bytes).map_err(|e| format!("{path}: {e}"))?;
|
||||
eprintln!("profile: trace written to {path} (open it in chrome://tracing or ui.perfetto.dev)");
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,6 @@
|
||||
//! Each design runs in a child process (this test binary, [`action_matrix_worker`]) so an action
|
||||
//! that hangs or aborts is recorded as such and the rest of the design still runs.
|
||||
|
||||
use solidcraft_engine::geom::prelude::*;
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use std::io::{BufRead, Write};
|
||||
use std::path::{Path, PathBuf};
|
||||
@@ -29,10 +28,10 @@ use std::process::{Command, Stdio};
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use serde_json::{Value, json};
|
||||
use solidcore_record::Vec3;
|
||||
use solidcraft_engine::Session;
|
||||
use solidcraft_engine::doc::kernel::{FaceSurface, face_surface};
|
||||
use solidcraft_engine::doc::{FaceAttachmentStatus, ModelBody, naming};
|
||||
use solidcraft_engine::geom::Vec3;
|
||||
|
||||
/// One in this many actions runs on pull requests (by a stable hash of its key).
|
||||
const PR_SAMPLE: u64 = 40;
|
||||
@@ -197,7 +196,7 @@ fn round3(x: f64) -> f64 {
|
||||
|
||||
/// Every action on every entity of the design's final bodies, in a fixed order.
|
||||
fn actions(s: &Session) -> Vec<Action> {
|
||||
let st = s.world_state().unwrap();
|
||||
let st = s.world_state();
|
||||
let placed = s.placed_document();
|
||||
let paths: BTreeMap<String, Vec<u64>> =
|
||||
placed.body_frames_with_source(&s.model.state()).into_iter().map(|(world, _, _, path, _)| (world, path)).collect();
|
||||
@@ -1339,9 +1338,7 @@ fn a_fillet_or_chamfer_on_one_edge_ending_at_a_cylinder() {
|
||||
fn a_round_on_a_knuckle_cap_circle() {
|
||||
for (cmd, size, removed) in [("solid.fillet", "radius", (2.4, 2.8)), ("solid.chamfer", "distance", (5.6, 6.3))] {
|
||||
let mut s = load(&root().join("tests/oracle/63-hinge-knuckle/recipe.json")).unwrap();
|
||||
let volume = |s: &Session| {
|
||||
s.model.state().bodies.iter().map(|b| b.body.mesh(&solidcraft_kernel::MeshTolerance::chord(0.001)).unwrap().measure().volume).sum::<f64>()
|
||||
};
|
||||
let volume = |s: &Session| s.model.state().bodies.iter().map(|b| b.body.tessellate(0.001).unwrap().measure().volume).sum::<f64>();
|
||||
let before = volume(&s);
|
||||
s.execute(cmd, &json!({"edges": [[40.0, 29.837_722, 6.449_490]], size: 0.728})).unwrap_or_else(|e| panic!("{cmd}: {e}"));
|
||||
check(&s, 0, &BTreeMap::new()).unwrap_or_else(|(kind, e)| panic!("{cmd}: {kind}: {e}"));
|
||||
@@ -1361,9 +1358,7 @@ fn a_round_on_a_knuckle_cap_circle() {
|
||||
#[test]
|
||||
fn a_hair_thin_hole_on_a_ledge_beside_a_loft_cut() {
|
||||
let mut s = load(&root().join("examples/regressions/loft_cut_beside_round_hole.json")).unwrap();
|
||||
let volume = |s: &Session| {
|
||||
s.model.state().bodies.iter().map(|b| b.body.mesh(&solidcraft_kernel::MeshTolerance::chord(0.005)).unwrap().measure().volume).sum::<f64>()
|
||||
};
|
||||
let volume = |s: &Session| s.model.state().bodies.iter().map(|b| b.body.tessellate_with(0.005, true).unwrap().measure().volume).sum::<f64>();
|
||||
let before = volume(&s);
|
||||
s.execute("solid.hole", &json!({"diameter": 0.133, "position": [357.22, -150.993_333, 730.0]})).unwrap();
|
||||
check(&s, 0, &BTreeMap::new()).unwrap_or_else(|(kind, e)| panic!("{kind}: {e}"));
|
||||
@@ -1380,9 +1375,7 @@ fn a_hair_thin_hole_on_a_ledge_beside_a_loft_cut() {
|
||||
#[test]
|
||||
fn a_small_hole_through_the_wall_of_a_plastic_rest() {
|
||||
let mut s = load(&root().join("apps/solidcraft-cli/tests/corpus/modern-plastic.solidcraft")).unwrap();
|
||||
let volume = |s: &Session| {
|
||||
s.model.state().bodies.iter().map(|b| b.body.mesh(&solidcraft_kernel::MeshTolerance::chord(0.002)).unwrap().measure().volume).sum::<f64>()
|
||||
};
|
||||
let volume = |s: &Session| s.model.state().bodies.iter().map(|b| b.body.tessellate_with(0.002, true).unwrap().measure().volume).sum::<f64>();
|
||||
let before = volume(&s);
|
||||
s.execute("solid.hole", &json!({"diameter": 0.8, "position": [63.069_841_5, 28.333_333, 4.0]})).unwrap();
|
||||
check(&s, 0, &BTreeMap::new()).unwrap_or_else(|(kind, e)| panic!("{kind}: {e}"));
|
||||
@@ -1397,9 +1390,7 @@ fn a_small_hole_through_the_wall_of_a_plastic_rest() {
|
||||
#[test]
|
||||
fn a_hole_square_to_a_45_degree_flange() {
|
||||
let mut s = load(&root().join("tests/oracle/70-sm-flange-45/recipe.json")).unwrap();
|
||||
let volume = |s: &Session| {
|
||||
s.model.state().bodies.iter().map(|b| b.body.mesh(&solidcraft_kernel::MeshTolerance::chord(0.002)).unwrap().measure().volume).sum::<f64>()
|
||||
};
|
||||
let volume = |s: &Session| s.model.state().bodies.iter().map(|b| b.body.tessellate_with(0.002, true).unwrap().measure().volume).sum::<f64>();
|
||||
let before = volume(&s);
|
||||
s.execute("solid.hole", &json!({"diameter": 3.448, "position": [66.666_667, -4.511_845, 4.511_845]})).unwrap();
|
||||
check(&s, 0, &BTreeMap::new()).unwrap_or_else(|(kind, e)| panic!("{kind}: {e}"));
|
||||
@@ -1657,7 +1648,7 @@ impl TipConstruction {
|
||||
other => panic!("expected an axis, got {other:?}"),
|
||||
}
|
||||
}
|
||||
fn plane(&self) -> solidcore_record::Plane {
|
||||
fn plane(&self) -> solidcraft_engine::geom::Plane {
|
||||
match &self.0 {
|
||||
solidcraft_engine::doc::construct::ConstructGeom::Plane(p) => *p,
|
||||
other => panic!("expected a plane, got {other:?}"),
|
||||
@@ -1737,7 +1728,7 @@ fn the_ribbed_lid_builds_the_same_body_every_time() {
|
||||
st.bodies
|
||||
.iter()
|
||||
.map(|b| {
|
||||
let mesh = b.body.mesh(&solidcraft_kernel::MeshTolerance::chord(0.1)).unwrap();
|
||||
let mesh = b.body.tessellate(0.1).unwrap();
|
||||
let bits = mesh.positions.iter().fold(0u64, |acc, p| {
|
||||
acc.rotate_left(7).wrapping_add(p.x.to_bits() ^ p.y.to_bits().rotate_left(21) ^ p.z.to_bits().rotate_left(42))
|
||||
});
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
use std::f64::consts::PI;
|
||||
|
||||
use serde_json::Value;
|
||||
use solidcore_record::Vec3;
|
||||
use solidcraft_engine::geom::Vec3;
|
||||
use solidcraft_engine::{Session, io, kernel};
|
||||
|
||||
fn assert_two_through_holes(session: &Session, stage: &str) {
|
||||
@@ -26,8 +26,8 @@ fn assert_two_through_holes(session: &Session, stage: &str) {
|
||||
let expected = 2.0 * PI * 4.0_f64.powi(2) * 6.0;
|
||||
assert!((removed - expected).abs() < expected * 1e-3, "{stage}: the two holes remove {removed} mm³, expected {expected} mm³");
|
||||
|
||||
let before_mesh = uncut.mesh(&solidcraft_kernel::MeshTolerance::chord(0.01)).unwrap();
|
||||
let after_mesh = bracket.mesh(&solidcraft_kernel::MeshTolerance::chord(0.01)).unwrap();
|
||||
let before_mesh = uncut.tessellate(0.01).unwrap();
|
||||
let after_mesh = bracket.tessellate(0.01).unwrap();
|
||||
let down = Vec3::new(0.0, 0.0, -1.0);
|
||||
for y in [-15.0, -45.0] {
|
||||
let center = Vec3::new(25.0, y, 1.0);
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
# Design file corpus
|
||||
|
||||
Designs saved by older SolidCraft builds. `tests/design_corpus.rs` opens each one with the
|
||||
current build and checks that it is upgraded to the current file format, that it evaluates
|
||||
(a feature may fail only by asking for a reference it lost to be picked again; what it rebuilds
|
||||
to is today's), and that damaged and hostile variants of it never panic. The `.expected.json`
|
||||
next to each is `solidcraft-cli eval` of that file by the build that saved it (bodies, volumes,
|
||||
areas, world bounding boxes), kept as a record of what that build made; no test compares with
|
||||
it.
|
||||
current build and checks that it evaluates as it did when saved (the `.expected.json` next to
|
||||
it is `solidcraft-cli eval` of that file by the build that saved it: bodies, volumes, areas,
|
||||
world bounding boxes), that it is upgraded to the current file format, and that damaged and
|
||||
hostile variants of it never panic.
|
||||
|
||||
| File | Saved by | Era |
|
||||
|---|---|---|
|
||||
|
||||
@@ -90,6 +90,10 @@
|
||||
],
|
||||
"timeline": [
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 1,
|
||||
"ms": 0.131943,
|
||||
@@ -100,6 +104,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 2,
|
||||
"ms": 1.0812709999999999,
|
||||
@@ -110,6 +118,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 3,
|
||||
"ms": 0.450002,
|
||||
@@ -120,6 +132,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 4,
|
||||
"ms": 5.191514000000001,
|
||||
|
||||
@@ -54,6 +54,10 @@
|
||||
],
|
||||
"timeline": [
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 1,
|
||||
"ms": 1.178957,
|
||||
@@ -64,6 +68,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 2,
|
||||
"ms": 83.24342399999999,
|
||||
@@ -74,6 +82,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 3,
|
||||
"ms": 0.150889,
|
||||
@@ -84,6 +96,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 4,
|
||||
"ms": 94.465481,
|
||||
@@ -94,6 +110,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 5,
|
||||
"ms": 50.426736,
|
||||
@@ -104,6 +124,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 6,
|
||||
"ms": 40.383005,
|
||||
@@ -114,6 +138,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 7,
|
||||
"ms": 59.041461000000005,
|
||||
@@ -124,6 +152,18 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [
|
||||
{
|
||||
"face_shift_mm": 0.0,
|
||||
"rotation_rad": 0.0,
|
||||
"strategy": "planar_fallback",
|
||||
"tolerance_mm": 0.0,
|
||||
"translation_mm": 0.0
|
||||
}
|
||||
],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 8,
|
||||
"ms": 562.5477970000001,
|
||||
@@ -131,9 +171,13 @@
|
||||
"rolled_back": false,
|
||||
"suppressed": false,
|
||||
"type": "BoxFeature",
|
||||
"warning": null
|
||||
"warning": "Boolean retry: exact planar fallback (no displacement)"
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 9,
|
||||
"ms": 89.56076,
|
||||
@@ -144,6 +188,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 10,
|
||||
"ms": 65.330634,
|
||||
@@ -154,6 +202,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 11,
|
||||
"ms": 97.229403,
|
||||
|
||||
@@ -99,6 +99,10 @@
|
||||
],
|
||||
"timeline": [
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 1,
|
||||
"ms": 0.204585,
|
||||
@@ -109,6 +113,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 2,
|
||||
"ms": 2.318662,
|
||||
@@ -119,6 +127,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 3,
|
||||
"ms": 0.109196,
|
||||
@@ -129,6 +141,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 4,
|
||||
"ms": 0.338859,
|
||||
@@ -139,6 +155,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 5,
|
||||
"ms": 0.312259,
|
||||
@@ -149,6 +169,10 @@
|
||||
"warning": null
|
||||
},
|
||||
{
|
||||
"boolean_diagnostics": {
|
||||
"events": [],
|
||||
"truncated": false
|
||||
},
|
||||
"error": null,
|
||||
"id": 6,
|
||||
"ms": 0.23144699999999999,
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//! Designs saved by older SolidCraft builds (tests/corpus, see its README) open, are upgraded to
|
||||
//! the current format and evaluate (what they rebuild to today is today's, not what the build
|
||||
//! that saved them made); damaged and hostile design files never panic.
|
||||
//! Designs saved by older SolidCraft builds (tests/corpus, see its README) open and evaluate as
|
||||
//! they did when they were saved; damaged and hostile design files never panic.
|
||||
|
||||
use solidcraft_engine::geom::prelude::*;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
use serde_json::{Value, json};
|
||||
@@ -23,24 +21,67 @@ fn open(path: &Path) -> Session {
|
||||
s
|
||||
}
|
||||
|
||||
/// Every corpus design opens, is upgraded to the current format, evaluates, and saves and reads
|
||||
/// back the same. A feature may fail only by asking for a reference it lost to be picked again
|
||||
/// (a name saved before format 14 finds nothing today).
|
||||
/// Differences that are deliberate behaviour changes made before the file format had versions
|
||||
/// (no migration can tell those files apart): (file, check, why).
|
||||
const KNOWN: [(&str, &str, &str); 2] = [
|
||||
(
|
||||
"m0-revolve-primitives",
|
||||
"Body1 bbox",
|
||||
"partial revolves turn toward the sketch normal since ac43365 (as most parametric CAD tools do); M0 turned them the other way",
|
||||
),
|
||||
("components-arm", "body_count", "Measure counted only the root component's bodies then; it measures every placed body now"),
|
||||
];
|
||||
|
||||
fn known(file: &str, check: &str) -> bool {
|
||||
KNOWN.iter().any(|(f, c, _)| *f == file && *c == check)
|
||||
}
|
||||
|
||||
/// Volumes and areas then came from coarser tessellation (and curved booleans and fillets have
|
||||
/// become exact since): the same part within this relative tolerance (the oracle's).
|
||||
const REL: f64 = 1e-3;
|
||||
|
||||
fn close(a: f64, b: f64, rel: f64) -> bool {
|
||||
(a - b).abs() <= rel * b.abs().max(1.0)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn old_designs_open_upgrade_and_evaluate() {
|
||||
fn old_designs_open_and_evaluate_as_saved() {
|
||||
let mut problems = Vec::new();
|
||||
for p in corpus() {
|
||||
let name = p.file_stem().unwrap_or_default().to_string_lossy().to_string();
|
||||
let want: Value = serde_json::from_slice(&std::fs::read(p.with_extension("expected.json")).unwrap()).unwrap();
|
||||
let mut s = open(&p);
|
||||
for r in &s.model.results {
|
||||
if let Some(e) = r.error.as_deref().filter(|e| solidcraft_engine::doc::reselect_parts(e).is_none()) {
|
||||
if let Some(e) = &r.error {
|
||||
problems.push(format!("{name}: feature {}: {e}", r.id));
|
||||
}
|
||||
}
|
||||
assert_eq!(s.doc.format, solidcraft_engine::doc::format::format_string(solidcraft_engine::doc::format::FORMAT), "{name}: upgraded");
|
||||
let got = s.execute("inspect.measure", &json!({})).unwrap();
|
||||
if got["body_count"].as_u64().unwrap_or(0) == 0 {
|
||||
problems.push(format!("{name}: no bodies"));
|
||||
if got["body_count"] != want["body_count"] && !known(&name, "body_count") {
|
||||
problems.push(format!("{name}: {} bodies, saved with {}", got["body_count"], want["body_count"]));
|
||||
}
|
||||
for w in want["bodies"].as_array().into_iter().flatten() {
|
||||
let bname = w["name"].as_str().unwrap_or_default();
|
||||
let Some(g) = got["bodies"].as_array().into_iter().flatten().find(|g| g["name"] == w["name"]) else {
|
||||
problems.push(format!("{name}: body {bname} missing"));
|
||||
continue;
|
||||
};
|
||||
for k in ["volume_mm3", "area_mm2"] {
|
||||
let (a, b) = (g[k].as_f64().unwrap_or(f64::NAN), w[k].as_f64().unwrap_or(f64::NAN));
|
||||
if !close(a, b, REL) {
|
||||
problems.push(format!("{name}: {bname} {k} {a} (saved {b})"));
|
||||
}
|
||||
}
|
||||
if known(&name, &format!("{bname} bbox")) {
|
||||
continue;
|
||||
}
|
||||
for (end, i) in [("min", 0), ("min", 1), ("min", 2), ("max", 0), ("max", 1), ("max", 2)] {
|
||||
let (a, b) = (g["bbox"][end][i].as_f64().unwrap_or(f64::NAN), w["bbox"][end][i].as_f64().unwrap_or(f64::NAN));
|
||||
if (a - b).abs() > 1e-3 * b.abs().max(1.0) {
|
||||
problems.push(format!("{name}: {bname} bbox {end}[{i}] {a} (saved {b})"));
|
||||
}
|
||||
}
|
||||
}
|
||||
// Saved again, it reads back the same.
|
||||
let again = solidcraft_engine::doc::Document::from_json(&s.doc.to_json()).unwrap();
|
||||
@@ -53,48 +94,40 @@ fn old_designs_open_upgrade_and_evaluate() {
|
||||
}
|
||||
|
||||
/// Names saved before format 14 were worked out from geometry, pieces of a split face numbered by
|
||||
/// where their centres lay (`F2:top#2`). They open marked as such and find no face or edge today:
|
||||
/// each feature holding one fails, asking for its reference to be picked again, and the rest of
|
||||
/// the design builds.
|
||||
/// where their centres lay (`F2:top#2`). They keep naming the faces they named: marked as such,
|
||||
/// they are found as the build that saved them found them, without new notes.
|
||||
#[test]
|
||||
fn names_saved_before_exact_history_ask_for_their_faces_again() {
|
||||
fn names_saved_before_exact_history_find_the_faces_they_named() {
|
||||
let path = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/corpus/naming-split-pieces.solidcraft");
|
||||
let s = open(&path);
|
||||
let feature = |name: &str| s.doc.features.iter().find(|f| f.name == name).unwrap_or_else(|| panic!("{name}"));
|
||||
assert_eq!(feature("Round").edge_names, vec!["?F2:side:l2|F2:top#2".to_string()]);
|
||||
assert_eq!(feature("Bevel").edge_names, vec!["?F2:side:l4|F2:top#1".to_string()]);
|
||||
assert_eq!(feature("Raise").face_names, vec!["?F2:top#1".to_string()]);
|
||||
let asked = |name: &str| {
|
||||
let r = s.model.result(feature(name).id).unwrap_or_else(|| panic!("{name}"));
|
||||
r.error.as_deref().and_then(solidcraft_engine::doc::reselect_parts).map(|(f, reference)| (f.to_string(), reference.to_string()))
|
||||
};
|
||||
assert_eq!(asked("Round"), Some(("Round".into(), "?F2:side:l2|F2:top#2".into())));
|
||||
assert_eq!(asked("Bevel"), Some(("Bevel".into(), "?F2:side:l4|F2:top#1".into())));
|
||||
assert_eq!(asked("Raise"), Some(("Raise".into(), "?F2:top#1".into())));
|
||||
for r in s.model.results.iter().filter(|r| !["Round", "Bevel", "Raise"].contains(&r.name.as_str())) {
|
||||
assert!(r.error.is_none(), "{}: {:?}", r.name, r.error);
|
||||
for r in &s.model.results {
|
||||
assert!(r.error.is_none() && r.warning.is_none(), "{}: {:?} {:?}", r.name, r.error, r.warning);
|
||||
}
|
||||
assert!(!s.model.state().bodies.is_empty());
|
||||
// The raised piece is the left one, as saved (the stored point is on it).
|
||||
let state = s.model.state();
|
||||
let solid = |p: [f64; 3]| state.bodies.iter().any(|b| b.body.contains(solidcraft_engine::geom::Vec3::new(p[0], p[1], p[2])));
|
||||
assert!(solid([7.0, 15.0, 11.0]) && !solid([32.0, 15.0, 11.0]));
|
||||
}
|
||||
|
||||
/// Body names saved before format 14 named the pieces of a split body in the kernel's shell
|
||||
/// order: such a design opens with every feature marked `shell_piece_order` and evaluates, each
|
||||
/// body name it stores naming a piece. (Which piece takes which name is not promised to be as it
|
||||
/// was saved.) Its fillet and chamfer hold edge names saved then, which find nothing today: they
|
||||
/// ask for their edges to be picked again.
|
||||
/// Body names saved before format 14 name the pieces of a split body in the kernel's shell order.
|
||||
/// The features after the split that refer to a piece by its body name still find that piece:
|
||||
/// the far one stays `Body1` (chamfered), the near one `Body1 (1)` (filleted, coloured).
|
||||
#[test]
|
||||
fn body_names_saved_before_exact_history_open_marked_and_evaluate() {
|
||||
fn body_names_saved_before_exact_history_keep_their_pieces() {
|
||||
let path = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/corpus/split-body-pieces.solidcraft");
|
||||
let s = open(&path);
|
||||
assert!(s.doc.features.iter().all(|f| f.shell_piece_order), "every saved feature keeps the shell order");
|
||||
for r in &s.model.results {
|
||||
let asked = r.error.as_deref().and_then(solidcraft_engine::doc::reselect_parts);
|
||||
assert!(r.error.is_none() || asked.is_some_and(|(_, reference)| reference.starts_with('?')), "{}: {:?}", r.name, r.error);
|
||||
assert!(r.error.is_none() && r.warning.is_none(), "{}: {:?} {:?}", r.name, r.error, r.warning);
|
||||
}
|
||||
let state = s.model.state();
|
||||
for name in ["Body1", "Body1 (1)"] {
|
||||
assert!(state.bodies.iter().any(|b| b.name == name), "{name}");
|
||||
}
|
||||
let piece = |name: &str| state.bodies.iter().find(|b| b.name == name).unwrap_or_else(|| panic!("{name}"));
|
||||
let solid = |name: &str, p: [f64; 3]| piece(name).body.contains(solidcraft_engine::geom::Vec3::new(p[0], p[1], p[2]));
|
||||
assert!(solid("Body1", [20.0, 24.0, 5.0]) && solid("Body1 (1)", [20.0, 6.0, 5.0]));
|
||||
assert!(s.doc.appearances.bodies.contains_key("Body1 (1)"));
|
||||
}
|
||||
|
||||
@@ -140,7 +173,6 @@ fn flat_face_attachments() -> Vec<(String, String, usize, Option<(u32, bool)>, O
|
||||
for p in corpus() {
|
||||
let name = p.file_stem().unwrap_or_default().to_string_lossy().to_string();
|
||||
let mut s = open(&p);
|
||||
let failed_on_open: Vec<u64> = s.model.results.iter().filter(|r| r.error.is_some()).map(|r| r.id).collect();
|
||||
let state = s.model.state();
|
||||
let placed = s.placed_document();
|
||||
let mut picks = Vec::new();
|
||||
@@ -148,7 +180,7 @@ fn flat_face_attachments() -> Vec<(String, String, usize, Option<(u32, bool)>, O
|
||||
let Some(body) = state.bodies.iter().find(|b| b.definition_name() == definition && placed.model_body_component(b) == component) else {
|
||||
continue;
|
||||
};
|
||||
let mesh = body.body.mesh(&solidcraft_kernel::MeshTolerance::chord(0.01)).unwrap();
|
||||
let mesh = body.body.tessellate(0.01).unwrap();
|
||||
for index in 0..body.body.face_count() {
|
||||
if body.body.planar_face(index).is_none() {
|
||||
continue;
|
||||
@@ -192,8 +224,7 @@ fn flat_face_attachments() -> Vec<(String, String, usize, Option<(u32, bool)>, O
|
||||
let known = known_without_attachment(&name, &body, normal, distance);
|
||||
out.push((name.clone(), body, index, known, problem));
|
||||
}
|
||||
let failed: Vec<u64> = s.model.results.iter().filter(|r| r.error.is_some()).map(|r| r.id).collect();
|
||||
assert_eq!(failed, failed_on_open, "{name}: undo leaves the features that failed on opening, and only those, failed");
|
||||
assert!(s.model.results.iter().all(|r| r.error.is_none()), "{name}: left with errors after undo");
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
@@ -263,110 +263,3 @@ mod setup {
|
||||
assert!(json_of(&pkg.join("claude_desktop_config.json"))["mcpServers"]["solidcraft"].is_object());
|
||||
}
|
||||
}
|
||||
|
||||
/// Scratch files belong to the CLI process; exercise real startup, requests and shutdown.
|
||||
mod scratch_cleanup {
|
||||
use super::*;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
fn command(case: &str) -> (PathBuf, Command) {
|
||||
let dir = std::env::temp_dir().join(format!("solidcraft-mcp-lifecycle-{case}-{}", std::process::id()));
|
||||
std::fs::create_dir(&dir).unwrap();
|
||||
let mut command = Command::new(env!("CARGO_BIN_EXE_solidcraft-cli"));
|
||||
command
|
||||
.args(["mcp", "--headless"])
|
||||
.env("TMPDIR", &dir)
|
||||
.env("TMP", &dir)
|
||||
.env("TEMP", &dir)
|
||||
.env("SOLIDCRAFT_RECOVERY_DIR", dir.join("recovery"))
|
||||
.stdin(Stdio::piped())
|
||||
.stdout(Stdio::piped())
|
||||
.stderr(Stdio::piped());
|
||||
(dir, command)
|
||||
}
|
||||
|
||||
fn scratch_folders(dir: &Path) -> Vec<PathBuf> {
|
||||
std::fs::read_dir(dir)
|
||||
.unwrap()
|
||||
.map(|entry| entry.unwrap().path())
|
||||
.filter(|path| path.file_name().unwrap().to_string_lossy().starts_with("solidcraft-mcp-"))
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn initialize() -> Value {
|
||||
json!({"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2025-06-18"}})
|
||||
}
|
||||
|
||||
fn run(mut command: Command, request: Value) -> std::process::Output {
|
||||
let mut child = command.spawn().unwrap();
|
||||
writeln!(child.stdin.take().unwrap(), "{request}").unwrap();
|
||||
child.wait_with_output().unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn eof_removes_only_the_process_scratch_folder() {
|
||||
let (dir, command) = command("eof");
|
||||
let unrelated = dir.join("solidcraft-mcp-unrelated");
|
||||
std::fs::create_dir(&unrelated).unwrap();
|
||||
let out = run(command, initialize());
|
||||
assert!(out.status.success(), "{}", String::from_utf8_lossy(&out.stderr));
|
||||
let reply: Value = serde_json::from_slice(&out.stdout).unwrap();
|
||||
assert!(reply.get("result").is_some(), "{reply}");
|
||||
assert_eq!(scratch_folders(&dir), vec![unrelated]);
|
||||
assert!(dir.join("recovery").is_dir(), "cleanup must leave the recovery folder alone");
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn startup_error_removes_the_process_scratch_folder() {
|
||||
let (dir, mut command) = command("startup-error");
|
||||
let out = command.args(["--param-check", "invalid"]).stdin(Stdio::null()).output().unwrap();
|
||||
let stderr = String::from_utf8_lossy(&out.stderr);
|
||||
assert!(!out.status.success());
|
||||
assert!(stderr.contains("--param-check wants off, warn or strict"), "{stderr}");
|
||||
assert!(scratch_folders(&dir).is_empty(), "startup error left a scratch folder in {dir:?}");
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn shutdown_preserves_nonempty_scratch_folder() {
|
||||
let (dir, mut command) = command("nonempty");
|
||||
let mut child = command.spawn().unwrap();
|
||||
let mut input = child.stdin.take().unwrap();
|
||||
writeln!(input, "{}", initialize()).unwrap();
|
||||
let mut reply = String::new();
|
||||
BufReader::new(child.stdout.take().unwrap()).read_line(&mut reply).unwrap();
|
||||
let reply: Value = serde_json::from_str(&reply).unwrap();
|
||||
assert!(reply.get("result").is_some(), "{reply}");
|
||||
let scratch = scratch_folders(&dir);
|
||||
assert_eq!(scratch.len(), 1);
|
||||
let saved = scratch[0].join("keep.txt");
|
||||
std::fs::write(&saved, "saved output").unwrap();
|
||||
drop(input);
|
||||
let out = child.wait_with_output().unwrap();
|
||||
assert!(out.status.success(), "{}", String::from_utf8_lossy(&out.stderr));
|
||||
assert_eq!(std::fs::read_to_string(saved).unwrap(), "saved output");
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn failed_screenshot_scratch_folder_is_removed_without_a_path_scope() {
|
||||
let (dir, mut command) = command("screenshot");
|
||||
command.arg("--allow-any-path");
|
||||
// A headless server cannot capture a window. The request still allocates a scratch
|
||||
// path before the backend refuses it, without relying on a GPU or installed renderer.
|
||||
let out = run(
|
||||
command,
|
||||
json!({
|
||||
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
|
||||
"params": {"name": "screenshot", "arguments": {"source": "window"}},
|
||||
}),
|
||||
);
|
||||
assert!(out.status.success(), "{}", String::from_utf8_lossy(&out.stderr));
|
||||
let reply: Value = serde_json::from_slice(&out.stdout).unwrap();
|
||||
assert_eq!(reply["result"]["isError"], true, "{reply}");
|
||||
assert!(reply["result"]["content"][0]["text"].as_str().unwrap().contains("the window gave no picture"), "{reply}");
|
||||
assert!(scratch_folders(&dir).is_empty(), "failed screenshot left a scratch folder in {dir:?}");
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ fn model(name: &str, s: &Session) -> Value {
|
||||
.iter()
|
||||
.map(|r| json!({"id": r.id, "name": r.name, "error": r.error, "warning": r.warning, "skipped": r.skipped, "state": state(name, &r.state)}))
|
||||
.collect();
|
||||
json!({"results": results, "world": state(name, &s.world_state().unwrap())})
|
||||
json!({"results": results, "world": state(name, &s.world_state())})
|
||||
}
|
||||
|
||||
/// The same edit on both: a parameter's value when the design has one, else a new body.
|
||||
@@ -289,60 +289,6 @@ fn undoing_an_edit_after_opening_reuses_the_saved_results() {
|
||||
let _ = std::fs::remove_file(format!("{}.bak", path.display()));
|
||||
}
|
||||
|
||||
/// A saved model holds the results of the body check mode it was evaluated under: opened under
|
||||
/// the same mode it is taken as it is, under another the design is evaluated again.
|
||||
#[test]
|
||||
fn a_model_saved_under_another_check_mode_is_evaluated_again() {
|
||||
let plate = solidcraft_engine::sample::samples().into_iter().find(|s| s.name == "Sample Plate").unwrap();
|
||||
let mut built = Session::default();
|
||||
for c in (plate.script)()["commands"].as_array().unwrap() {
|
||||
built.execute(c["command"].as_str().unwrap(), &c["params"]).unwrap();
|
||||
}
|
||||
let path = temp("mode");
|
||||
built.execute("file.save_as", &json!({"path": path.to_string_lossy()})).unwrap();
|
||||
let same = open(&path);
|
||||
assert_eq!(same.model.validation(), built.model.validation());
|
||||
assert_eq!(same.model.recomputed, 0, "taken from the file");
|
||||
let mut other = Session::default();
|
||||
other.set_validation(solidcraft_engine::kernel::Validation::EachStep);
|
||||
assert_ne!(other.validation(), built.model.validation());
|
||||
other.execute("doc.open", &json!({"path": path.to_string_lossy()})).unwrap();
|
||||
assert_eq!(other.validation(), solidcraft_engine::kernel::Validation::EachStep);
|
||||
assert!(other.model.recomputed > 0, "evaluated again under its own mode");
|
||||
let _ = std::fs::remove_file(&path);
|
||||
let _ = std::fs::remove_file(format!("{}.bak", path.display()));
|
||||
}
|
||||
|
||||
/// A body made by rounds keeps, in the saved model, the rounds and the body they were made on: a
|
||||
/// later round at the corner where they meet blends them again with it whether the design was
|
||||
/// opened from its model or evaluated anew. Two edges of a 20 mm box rounded r2 (a mitre at the
|
||||
/// corner (20, 0, 20)), saved; opened, the upright edge there rounded r3: the corner all three
|
||||
/// rounded at once make (SMLib's setback corner, kernel `three_rounds_at_a_corner`), 15 faces and
|
||||
/// 7928.142563938 mm³, the same body as the design evaluated anew.
|
||||
#[test]
|
||||
fn a_later_round_after_opening_blends_the_saved_rounds_again() {
|
||||
let mut built = Session::default();
|
||||
built.execute("solid.box", &json!({"length": 20, "width": 20, "height": 20, "body_name": "Box"})).unwrap();
|
||||
built.execute("solid.fillet", &json!({"edges": [[20, 10, 20], [10, 0, 20]], "radius": 2})).unwrap();
|
||||
let path = temp("later-round");
|
||||
built.execute("file.save_as", &json!({"path": path.to_string_lossy()})).unwrap();
|
||||
let bytes = std::fs::read(&path).unwrap();
|
||||
let mut cached = open(&path);
|
||||
assert_eq!(cached.model.last_recomputed, 0, "opened without evaluating");
|
||||
let mut rebuilt = Session::new(solidcraft_engine::io::read_design(&bytes).unwrap());
|
||||
for s in [&mut cached, &mut rebuilt] {
|
||||
s.execute("solid.fillet", &json!({"edges": [[20, 0, 10]], "radius": 3})).unwrap();
|
||||
let st = s.model.state();
|
||||
let b = &st.body("Box").unwrap().body;
|
||||
let v = solidcraft_engine::kernel::measure(b).unwrap().volume;
|
||||
assert_eq!(b.face_count(), 15);
|
||||
assert!((v - 7928.142563938).abs() < 1e-6, "{v}");
|
||||
}
|
||||
assert_eq!(model("later round", &cached), model("later round", &rebuilt));
|
||||
let _ = std::fs::remove_file(&path);
|
||||
let _ = std::fs::remove_file(format!("{}.bak", path.display()));
|
||||
}
|
||||
|
||||
/// A design saved before body names were pinned (#6403) pins them as it opens, as its first
|
||||
/// command would, and opening it is no change. That command pinned them as part of itself, so
|
||||
/// undoing it went back to the unpinned design, which no evaluated result matched: the first
|
||||
|
||||
@@ -1,404 +0,0 @@
|
||||
//! Every design of the corpus loads, two builds of it name its faces and edges alike, and a
|
||||
//! name it stores that no longer finds its face or edge fails its feature. The stored names are
|
||||
//! the fillet and chamfer edges, the faces a feature picks, the face a sketch sits on and the
|
||||
//! sheet metal edges; one that finds nothing (`gone`, a sketch's face `lost`) must leave its
|
||||
//! feature failed (it asks for the reference to be picked again, never takes another face or
|
||||
//! edge), and a design that no longer loads fails the test. A build's names are each face's and
|
||||
//! edge's name with where it is (its area and centre, its length and middle); the second build
|
||||
//! must give the same, and its stored names must find the same faces and edges.
|
||||
//!
|
||||
//! Face and edge indices are left out: they are the kernel's order, which a rebuild need not
|
||||
//! keep (a fillet's or a boolean's faces come out in another order from one build to the next).
|
||||
//! How many faces a body has and what each is called is the kernel's business, not this test's.
|
||||
//!
|
||||
//! The corpus is the action matrix's (the old design files in `tests/corpus`, the examples, the
|
||||
//! demo and typical designs in `tests/action_matrix/designs`, the reference recipes), the sample
|
||||
//! designs, the engine's design fixtures and the older designs kept by the hole matrix, taper
|
||||
//! and projection tests.
|
||||
|
||||
use solidcraft_engine::geom::prelude::*;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::Command;
|
||||
|
||||
use serde_json::{Value, json};
|
||||
use solidcore_record::Vec3;
|
||||
use solidcraft_engine::Session;
|
||||
use solidcraft_engine::doc::{FaceAttachmentStatus, Feature, FeatureKind, ModelBody, ModelState, PlaneRef, naming};
|
||||
|
||||
fn root() -> PathBuf {
|
||||
Path::new(env!("CARGO_MANIFEST_DIR")).join("../..").canonicalize().unwrap()
|
||||
}
|
||||
|
||||
/// Where a design comes from.
|
||||
enum Source {
|
||||
File(PathBuf),
|
||||
Sample(fn() -> Value),
|
||||
}
|
||||
|
||||
/// Every design of the corpus: (`<group>/<design>`, where it comes from).
|
||||
fn designs() -> Vec<(String, Source)> {
|
||||
let root = root();
|
||||
let mut out = Vec::new();
|
||||
let mut add = |prefix: &str, dir: PathBuf, ext: &str| {
|
||||
let Ok(rd) = std::fs::read_dir(&dir) else { return };
|
||||
let mut v: Vec<PathBuf> = rd.flatten().map(|e| e.path()).filter(|p| p.extension().is_some_and(|x| x == ext)).collect();
|
||||
v.sort();
|
||||
for p in v {
|
||||
let stem = p.file_stem().unwrap_or_default().to_string_lossy().to_string();
|
||||
out.push((format!("{prefix}/{stem}"), Source::File(p)));
|
||||
}
|
||||
};
|
||||
add("corpus", root.join("apps/solidcraft-cli/tests/corpus"), "solidcraft");
|
||||
add("examples", root.join("examples"), "json");
|
||||
add("examples", root.join("examples/acceptance"), "json");
|
||||
add("regressions", root.join("examples/regressions"), "json");
|
||||
add("demo", root.join("examples/demo"), "json");
|
||||
add("typical", root.join("tests/action_matrix/designs"), "json");
|
||||
add("demo", root.join("tests/action_matrix/designs"), "solidcraft");
|
||||
add("fixtures", root.join("crates/engine/src/tests/fixtures"), "solidcraft");
|
||||
add("hole_matrix", root.join("tests/hole_matrix/old-0.9"), "json");
|
||||
add("taper", root.join("tests/taper/before-1014"), "json");
|
||||
add("projection", root.join("tests/projection/before-1508"), "json");
|
||||
let mut cases: Vec<PathBuf> =
|
||||
std::fs::read_dir(root.join("tests/oracle")).unwrap().flatten().map(|e| e.path()).filter(|p| p.join("recipe.json").is_file()).collect();
|
||||
cases.sort();
|
||||
for c in cases {
|
||||
out.push((format!("oracle/{}", c.file_name().unwrap_or_default().to_string_lossy()), Source::File(c.join("recipe.json"))));
|
||||
}
|
||||
for sample in solidcraft_engine::sample::samples() {
|
||||
let stem: String = sample.name.to_lowercase().split_whitespace().collect::<Vec<_>>().join("-");
|
||||
out.push((format!("samples/{stem}"), Source::Sample(sample.script)));
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
/// Build a design: a design file (also a design saved as JSON) is opened, a script is run.
|
||||
fn load(source: &Source) -> Result<Session, String> {
|
||||
let mut s = Session::default();
|
||||
let script = match source {
|
||||
Source::Sample(script) => script(),
|
||||
Source::File(path) if path.extension().is_some_and(|x| x == "solidcraft") => {
|
||||
s.execute("doc.open", &json!({"path": path.to_string_lossy()})).map_err(|e| e.to_string())?;
|
||||
return Ok(s);
|
||||
}
|
||||
Source::File(path) if path.file_name().is_some_and(|n| n == "recipe.json") => {
|
||||
let out = Command::new(env!("CARGO_BIN_EXE_solidcraft-cli")).arg("recipe").arg(path).output().map_err(|e| e.to_string())?;
|
||||
if !out.status.success() {
|
||||
return Err(format!("recipe: {}", String::from_utf8_lossy(&out.stderr).trim()));
|
||||
}
|
||||
serde_json::from_slice(&out.stdout).map_err(|e| e.to_string())?
|
||||
}
|
||||
Source::File(path) => {
|
||||
let v: Value = serde_json::from_slice(&std::fs::read(path).map_err(|e| e.to_string())?).map_err(|e| e.to_string())?;
|
||||
if v.get("features").is_some() {
|
||||
s.execute("doc.open", &json!({"path": path.to_string_lossy()})).map_err(|e| e.to_string())?;
|
||||
return Ok(s);
|
||||
}
|
||||
match v.get("steps").and_then(Value::as_array) {
|
||||
// The demo's steps: an MCP `execute` each.
|
||||
Some(steps) => {
|
||||
json!({"commands": steps.iter().map(|st| json!({"command": st["command"], "params": st["params"]})).collect::<Vec<_>>()})
|
||||
}
|
||||
None => v,
|
||||
}
|
||||
}
|
||||
};
|
||||
s.run_script(&script).map_err(|e| e.to_string())?;
|
||||
if s.active_sketch.is_some() {
|
||||
let _ = s.execute("sketch.finish", &json!({}));
|
||||
}
|
||||
Ok(s)
|
||||
}
|
||||
|
||||
/// What decides a name beyond its text: `[geometric]` when it was worked out from geometry, not
|
||||
/// exact history.
|
||||
fn flags(list: &[(bool, &str)]) -> String {
|
||||
let set: Vec<&str> = list.iter().filter(|(on, _)| *on).map(|(_, f)| *f).collect();
|
||||
if set.is_empty() { String::new() } else { format!(" [{}]", set.join(", ")) }
|
||||
}
|
||||
|
||||
/// Where each named face and edge of a body is, by name, sorted: a face's area and centre, an
|
||||
/// edge's length and middle, from the body's mesh. Two builds that name their faces alike give
|
||||
/// the same list.
|
||||
fn placed_names(b: &ModelBody) -> Vec<(String, [f64; 4])> {
|
||||
if b.body.is_mesh() {
|
||||
return Vec::new();
|
||||
}
|
||||
let m = b.mesh();
|
||||
let faces = naming::face_names(b);
|
||||
let mut sums = vec![[0.0f64; 4]; faces.len()];
|
||||
for (t, f) in m.triangles.iter().zip(&m.tri_face) {
|
||||
let [p, q, r] = t.map(|i| m.positions.get(i as usize).copied().unwrap_or(Vec3::ZERO));
|
||||
let area = (q - p).cross(r - p).len() / 2.0;
|
||||
let c = (p + q + r) / 3.0;
|
||||
if let Some(s) = sums.get_mut(*f as usize) {
|
||||
*s = [s[0] + area, s[1] + area * c.x, s[2] + area * c.y, s[3] + area * c.z];
|
||||
}
|
||||
}
|
||||
let mut out: Vec<(String, [f64; 4])> = faces
|
||||
.iter()
|
||||
.zip(&sums)
|
||||
.map(|(n, s)| {
|
||||
let a = s[0].max(1e-300);
|
||||
(format!("{} face {n}", b.name), [s[0], s[1] / a, s[2] / a, s[3] / a])
|
||||
})
|
||||
.collect();
|
||||
for (n, line) in naming::edge_names(b).iter().zip(&m.edges) {
|
||||
let length: f64 = line.windows(2).map(|w| w[1].dist(w[0])).sum();
|
||||
let mid = line.iter().fold(Vec3::ZERO, |acc, p| acc + *p) / (line.len().max(1) as f64);
|
||||
out.push((format!("{} edge {n}", b.name), [length, mid.x, mid.y, mid.z]));
|
||||
}
|
||||
out.sort_by(|x, y| x.0.cmp(&y.0).then(x.1.partial_cmp(&y.1).unwrap_or(std::cmp::Ordering::Equal)));
|
||||
out
|
||||
}
|
||||
|
||||
fn face_label(st: &ModelState, body: usize, face: usize) -> String {
|
||||
match st.bodies.get(body) {
|
||||
Some(b) => format!("{} face {}", b.name, naming::face_names(b).get(face).map(String::as_str).unwrap_or("?")),
|
||||
None => format!("body #{body} face #{face}"),
|
||||
}
|
||||
}
|
||||
|
||||
/// Every name feature `f` stores, with what it finds in the model before it, as a feature
|
||||
/// rebuilding finds it, and whether it finds anything.
|
||||
fn record_refs(out: &mut Vec<(String, bool)>, s: &Session, f: &Feature) {
|
||||
let doc = &*s.doc;
|
||||
let who = format!("ref {} ({})", f.name, f.id);
|
||||
let before = s.model.state_before(f.id);
|
||||
// Faces a feature picks by point and stores by name (shell, draft, hole, …).
|
||||
let explicit_emboss = matches!(&f.kind, FeatureKind::Emboss { face: Some(_), .. });
|
||||
if f.face_names.iter().any(|n| !n.is_empty()) {
|
||||
let fst = solidcraft_engine::doc::face_point_state(doc, &before, &f.kind, f.component).unwrap();
|
||||
for (k, (p, n)) in f.kind.face_points().into_iter().zip(&f.face_names).enumerate() {
|
||||
if n.is_empty() {
|
||||
continue;
|
||||
}
|
||||
let (found, ok) = if explicit_emboss {
|
||||
("not checked (a cylindrical emboss finds its face on its own body)".to_string(), true)
|
||||
} else {
|
||||
match naming::locate_face_on_body(&fst, f.kind.face_body(), n, p) {
|
||||
Some(hit) => (format!("{}{}", face_label(&fst, hit.body, hit.face), flags(&[(!hit.verified, "geometric")])), true),
|
||||
None => ("gone".into(), false),
|
||||
}
|
||||
};
|
||||
out.push((format!("{who} face {k} `{n}` -> {found}"), ok));
|
||||
}
|
||||
}
|
||||
// Edges a feature picks by point and stores by name.
|
||||
if f.edge_names.iter().any(|n| !n.is_empty()) {
|
||||
let edge = |out: &mut Vec<(String, bool)>, b: &ModelBody, k: usize, n: &str, p: Vec3| {
|
||||
let (found, ok) = match naming::locate_edge(b, n, p) {
|
||||
Ok(hit) => (
|
||||
format!(
|
||||
"{} edge {}{}",
|
||||
b.name,
|
||||
naming::edge_names(b).get(hit.edge).map(String::as_str).unwrap_or("?"),
|
||||
flags(&[(!hit.verified, "geometric")])
|
||||
),
|
||||
true,
|
||||
),
|
||||
Err(e) => (format!("gone ({e})"), false),
|
||||
};
|
||||
out.push((format!("{who} edge {k} `{n}` -> {found}"), ok));
|
||||
};
|
||||
let named = |k: usize| f.edge_names.get(k).filter(|n| !n.is_empty());
|
||||
match &f.kind {
|
||||
FeatureKind::Fillet { edges, body, .. } | FeatureKind::Chamfer { edges, body, .. } => {
|
||||
let pts: Vec<Vec3> = solidcraft_engine::doc::plain(edges);
|
||||
match solidcraft_engine::doc::blend_target(&before, body, &pts).ok().and_then(|i| before.bodies.get(i)) {
|
||||
Some(b) => {
|
||||
for (k, p) in pts.iter().enumerate() {
|
||||
if let Some(n) = named(k) {
|
||||
edge(out, b, k, n, *p);
|
||||
}
|
||||
}
|
||||
}
|
||||
None => out.push((format!("{who} edges: no body to round"), false)),
|
||||
}
|
||||
}
|
||||
FeatureKind::SheetConvert { body, bends, .. } => match before.body(body) {
|
||||
Some(b) => {
|
||||
for (k, p) in solidcraft_engine::doc::plain::<Vec3, _>(bends).iter().enumerate() {
|
||||
if let Some(n) = named(k) {
|
||||
edge(out, b, k, n, *p);
|
||||
}
|
||||
}
|
||||
}
|
||||
None => out.push((format!("{who} bends: body `{body}` gone"), false)),
|
||||
},
|
||||
// Sheet metal edges are named by the sheet's panels, and found on its sheets.
|
||||
FeatureKind::SheetFlange { .. } | FeatureKind::SheetHem { .. } => {
|
||||
let pts: Vec<Vec3> = match &f.kind {
|
||||
FeatureKind::SheetFlange { edges, .. } => edges.iter().map(|e| e.point.0).collect(),
|
||||
FeatureKind::SheetHem { edges, .. } => solidcraft_engine::doc::plain(edges),
|
||||
_ => Vec::new(),
|
||||
};
|
||||
for (k, p) in pts.iter().enumerate() {
|
||||
let Some(n) = named(k) else { continue };
|
||||
let on: Vec<&str> = before.sheets.iter().filter(|sh| sh.edge_by_name(n, *p).is_some()).map(|sh| sh.body.as_str()).collect();
|
||||
let found = if on.is_empty() { "gone".to_string() } else { format!("sheet edge on {}", on.join(", ")) };
|
||||
out.push((format!("{who} sheet edge {k} `{n}` -> {found}"), !on.is_empty()));
|
||||
}
|
||||
}
|
||||
other => {
|
||||
for (k, n) in f.edge_names.iter().enumerate().filter(|(_, n)| !n.is_empty()) {
|
||||
out.push((format!("{who} edge {k} `{n}` -> not checked ({})", other.type_name()), true));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// The face a sketch sits on.
|
||||
if let FeatureKind::Sketch { plane: PlaneRef::Face { name, anchor, at, .. }, .. } = &f.kind {
|
||||
let mut ok = true;
|
||||
let status = match doc.sketch_face_attachment(f.id, &s.model) {
|
||||
FaceAttachmentStatus::Healthy { target, .. } => {
|
||||
let faces = match before.body(&target.body) {
|
||||
Some(b) => match doc.anchored_face_indices(&before, b, &target) {
|
||||
Ok((indices, note)) => {
|
||||
let names = naming::face_names(b);
|
||||
let mut list: Vec<&str> = indices.iter().map(|i| names.get(*i).map(String::as_str).unwrap_or("?")).collect();
|
||||
list.sort();
|
||||
format!("{} faces {}{}", b.name, list.join(", "), flags(&[(note.is_some(), "changed cap")]))
|
||||
}
|
||||
Err(e) => {
|
||||
ok = false;
|
||||
format!("no faces ({e})")
|
||||
}
|
||||
},
|
||||
None => {
|
||||
ok = false;
|
||||
format!("body `{}` gone", target.body)
|
||||
}
|
||||
};
|
||||
format!("healthy: {faces}")
|
||||
}
|
||||
FaceAttachmentStatus::Lost { message, .. } => {
|
||||
ok = false;
|
||||
format!("lost: {message}")
|
||||
}
|
||||
FaceAttachmentStatus::Legacy { .. } => match name {
|
||||
// The face its name finds, as the sketch finds it.
|
||||
Some(n) => {
|
||||
let fst = solidcraft_engine::doc::state_in_frame(doc, &before, f.component).unwrap();
|
||||
match naming::locate_face(&fst, n, *at) {
|
||||
Some(hit) => format!("by name: {}{}", face_label(&fst, hit.body, hit.face), flags(&[(!hit.verified, "geometric")])),
|
||||
None => {
|
||||
ok = false;
|
||||
"by name: gone".into()
|
||||
}
|
||||
}
|
||||
}
|
||||
None => "by its pick".into(),
|
||||
},
|
||||
FaceAttachmentStatus::Sheet { .. } => "sheet face".into(),
|
||||
FaceAttachmentStatus::Fixed { .. } => "fixed".into(),
|
||||
};
|
||||
let stored = match (anchor, name) {
|
||||
(Some(a), _) => {
|
||||
let kind =
|
||||
a.target.certificate.as_ref().and_then(|c| serde_json::to_value(c).ok()).and_then(|v| v["kind"].as_str().map(String::from));
|
||||
format!("`{}` on {} ({})", a.target.name, a.target.body, kind.unwrap_or_else(|| "no certificate".into()))
|
||||
}
|
||||
(None, Some(n)) => format!("`{n}`"),
|
||||
(None, None) => "by its pick".into(),
|
||||
};
|
||||
out.push((format!("{who} plane {stored} -> {status}"), ok));
|
||||
}
|
||||
}
|
||||
|
||||
/// A build of a design: where its faces and edges are by name, and what every name it stores
|
||||
/// finds.
|
||||
struct Build {
|
||||
names: Vec<(String, [f64; 4])>,
|
||||
refs: Vec<(String, bool)>,
|
||||
}
|
||||
|
||||
fn build(s: &Session) -> Build {
|
||||
let names = s.model.state().bodies.iter().flat_map(placed_names).collect();
|
||||
let mut refs = Vec::new();
|
||||
for f in s.doc.features.iter().filter(|f| !f.suppressed) {
|
||||
let from = refs.len();
|
||||
record_refs(&mut refs, s, f);
|
||||
// A name that finds nothing is sound when its feature fails: it asks for the reference
|
||||
// to be picked again.
|
||||
if s.model.result(f.id).is_some_and(|r| r.error.is_some()) {
|
||||
refs.iter_mut().skip(from).for_each(|(_, ok)| *ok = true);
|
||||
}
|
||||
}
|
||||
Build { names, refs }
|
||||
}
|
||||
|
||||
/// Where two builds name their faces and edges apart (at most `cap` of them): a name only one
|
||||
/// has, or a face or edge of that name somewhere else (1e-6 of its size, to the mesh's rounding).
|
||||
fn differences(a: &Build, b: &Build, cap: usize) -> Vec<String> {
|
||||
let mut out = Vec::new();
|
||||
if a.names.len() != b.names.len() {
|
||||
out.push(format!("{} named faces and edges, then {}", a.names.len(), b.names.len()));
|
||||
}
|
||||
for ((n, x), (m, y)) in a.names.iter().zip(&b.names) {
|
||||
let scale = x.iter().chain(y).fold(1.0f64, |s, v| s.max(v.abs()));
|
||||
if n != m || x.iter().zip(y).any(|(p, q)| (p - q).abs() > 1e-6 * scale) {
|
||||
out.push(format!("{n} at {x:?}, then {m} at {y:?}"));
|
||||
}
|
||||
}
|
||||
for ((r, _), (q, _)) in a.refs.iter().zip(&b.refs) {
|
||||
if r != q {
|
||||
out.push(format!("{r}, then {q}"));
|
||||
}
|
||||
}
|
||||
if a.refs.len() != b.refs.len() {
|
||||
out.push(format!("{} stored names, then {}", a.refs.len(), b.refs.len()));
|
||||
}
|
||||
out.truncate(cap);
|
||||
out
|
||||
}
|
||||
|
||||
/// Designs whose names differ from one build to the next today: (design, why). Their
|
||||
/// differences are printed, not failed on, until the cause is fixed; a stored name that finds
|
||||
/// nothing still fails.
|
||||
const UNSTABLE: [(&str, &str); 1] = [(
|
||||
"regressions/closed_sweep_torus_cut",
|
||||
"the halves of each swept wall lie level along every axis, so which is `#1` and which `#2` follows the order the kernel gives the faces in, which changes from one build to the next",
|
||||
)];
|
||||
|
||||
#[test]
|
||||
fn corpus_designs_name_alike_every_build_and_fail_where_a_reference_is_gone() {
|
||||
let designs = designs();
|
||||
let next = std::sync::atomic::AtomicUsize::new(0);
|
||||
let results = std::sync::Mutex::new(Vec::new());
|
||||
let workers = std::thread::available_parallelism().map_or(4, |n| n.get()).min(designs.len().max(1));
|
||||
std::thread::scope(|scope| {
|
||||
for _ in 0..workers {
|
||||
scope.spawn(|| {
|
||||
while let Some((name, source)) = designs.get(next.fetch_add(1, std::sync::atomic::Ordering::Relaxed)) {
|
||||
let got = load(source).and_then(|first| Ok((build(&first), build(&load(source)?))));
|
||||
results.lock().unwrap_or_else(|e| e.into_inner()).push((name.clone(), got));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
let mut results = results.into_inner().unwrap_or_else(|e| e.into_inner());
|
||||
results.sort_by(|a, b| a.0.cmp(&b.0));
|
||||
let mut problems = Vec::new();
|
||||
for (name, got) in &results {
|
||||
let (first, second) = match got {
|
||||
Ok(builds) => builds,
|
||||
Err(e) => {
|
||||
problems.push(format!("{name}: does not load: {e}"));
|
||||
continue;
|
||||
}
|
||||
};
|
||||
let lost: Vec<&str> = first.refs.iter().filter(|(_, ok)| !ok).map(|(r, _)| r.as_str()).collect();
|
||||
if !lost.is_empty() {
|
||||
problems.push(format!("{name}: stored names that find nothing, in features that build:\n {}", lost.join("\n ")));
|
||||
}
|
||||
let apart = differences(first, second, 40);
|
||||
if !apart.is_empty() {
|
||||
match UNSTABLE.iter().find(|(design, _)| design == name) {
|
||||
Some((_, why)) => eprintln!("{name} (not checked: {why}):\n {}", apart.join("\n ")),
|
||||
None => problems.push(format!("{name}: two builds name it apart (first, then second):\n {}", apart.join("\n "))),
|
||||
}
|
||||
}
|
||||
}
|
||||
assert!(problems.is_empty(), "{} of {} design(s) of the corpus:\n{}", problems.len(), results.len(), problems.join("\n"));
|
||||
}
|
||||
@@ -9,7 +9,6 @@ use std::path::{Path, PathBuf};
|
||||
use serde_json::{Value, json};
|
||||
use solidcraft_engine::Session;
|
||||
use solidcraft_engine::doc::kernel::{FaceSurface, face_surface};
|
||||
use solidcraft_engine::geom::prelude::*;
|
||||
|
||||
fn root() -> PathBuf {
|
||||
Path::new(env!("CARGO_MANIFEST_DIR")).join("../..").canonicalize().unwrap()
|
||||
@@ -32,7 +31,7 @@ struct Topology {
|
||||
|
||||
/// Every solid body's topology, by name.
|
||||
fn topology(s: &Session) -> BTreeMap<String, Topology> {
|
||||
let st = s.world_state().unwrap();
|
||||
let st = s.world_state();
|
||||
st.bodies
|
||||
.iter()
|
||||
.filter(|b| !b.body.is_mesh())
|
||||
@@ -143,14 +142,16 @@ fn a_parameter_edit_rebuilds_like_a_fresh_build_and_reverts_exactly() {
|
||||
assert!(problems.is_empty(), "{}", problems.join("\n"));
|
||||
}
|
||||
|
||||
/// The README demo's Raspberry Pi case (`examples/demo/enclosure_ui_mcp.py --story pi`): after
|
||||
/// each feature, each outer side (the four walls and the bottom) is one face and the case is as
|
||||
/// tall as its height, and a height changed in Parameters rebuilds the same topology as one
|
||||
/// built at that height: (a) built at height 24, (b) built at 24 and changed to 32, (c) built at
|
||||
/// 32. The port cut-outs and the floor vents used to split the long wall (or the end wall at 24)
|
||||
/// into strips along the openings' tops and bottoms.
|
||||
/// The README demo's Raspberry Pi case (`examples/demo/enclosure_ui_mcp.py --story pi`): its
|
||||
/// face count after each feature, and each outer side (the four walls and the bottom) one face
|
||||
/// throughout: (a) built at height 24, (b) built at 24 and changed to 32 in Parameters, (c)
|
||||
/// built at 32. The port cut-outs and the floor vents used to split the long wall (or the end
|
||||
/// wall at 24) into strips along the openings' tops and bottoms.
|
||||
#[test]
|
||||
fn pi_case_sides_stay_whole_at_both_heights() {
|
||||
fn pi_case_faces_per_step_at_both_heights() {
|
||||
// Sketch1 (1) .. RectangularPattern2 (14): the faces once features 1..=k are built.
|
||||
const FACES: [(usize, usize); 13] =
|
||||
[(2, 6), (3, 10), (4, 19), (5, 19), (6, 25), (7, 43), (8, 43), (9, 55), (10, 55), (11, 59), (12, 59), (13, 63), (14, 79)];
|
||||
let dir = scratch_dir("pi");
|
||||
let design: Value = serde_json::from_slice(&std::fs::read(root().join("tests/action_matrix/designs/pi-case.sc")).unwrap()).unwrap();
|
||||
let at = |height: &str, file: &str| {
|
||||
@@ -173,13 +174,12 @@ fn pi_case_sides_stay_whole_at_both_heights() {
|
||||
for (case, s, h) in [("(a) at 24", a, 24.), ("(b) 24 changed to 32", b, 32.), ("(c) at 32", c, 32.)] {
|
||||
assert!(errors(&s).is_empty(), "{case}: features fail: {:?}", errors(&s));
|
||||
let mut steps = Vec::new();
|
||||
// Sketch1 (1) is no body; the box (2) .. RectangularPattern2 (14).
|
||||
for k in 2..=14 {
|
||||
for (k, want) in FACES {
|
||||
let mut t = s.scratch();
|
||||
t.execute("timeline.rollback", &json!({"position": k})).unwrap();
|
||||
let st = t.world_state().unwrap();
|
||||
let st = t.world_state();
|
||||
let body = st.bodies.iter().find(|b| b.name == "Body1").unwrap();
|
||||
assert!(body.body.validity().is_empty(), "{case}: after feature {k}: {:?}", body.body.validity());
|
||||
assert_eq!(body.body.face_count(), want, "{case}: faces after feature {k}");
|
||||
// Each outer side: the faces in its plane.
|
||||
for (n, d) in [([0., -1., 0.], 33.), ([0., 1., 0.], 33.), ([-1., 0., 0.], 47.5), ([1., 0., 0.], 47.5), ([0., 0., -1.], 0.)] {
|
||||
let on = (0..body.body.face_count())
|
||||
|
||||
@@ -465,11 +465,7 @@ fn snapshot_runs_its_script_on_the_in_design() {
|
||||
fn unknown_command_suggests_the_closest_id() {
|
||||
let output = cli().args(["exec", "file.open"]).output().unwrap();
|
||||
assert_eq!(output.status.code(), Some(1));
|
||||
assert!(
|
||||
String::from_utf8_lossy(&output.stderr).contains("did you mean `doc.open` or `panel.open`?"),
|
||||
"{}",
|
||||
String::from_utf8_lossy(&output.stderr)
|
||||
);
|
||||
assert!(String::from_utf8_lossy(&output.stderr).contains("did you mean `doc.open`?"), "{}", String::from_utf8_lossy(&output.stderr));
|
||||
}
|
||||
|
||||
/// #1833: `--timings` reports each command's time instead of the measurement, `--profile` adds
|
||||
|
||||
@@ -65,10 +65,7 @@ fn allow_errors_writes_anyway_and_a_saved_design_keeps_failing() {
|
||||
let output = cli().arg("run").arg(dir.broken_script()).arg("--allow-errors").arg("--out").arg(&step).arg("--save").arg(&saved).output().unwrap();
|
||||
assert!(output.status.success(), "{}", String::from_utf8_lossy(&output.stderr));
|
||||
let measured: Value = serde_json::from_slice(&output.stdout).unwrap();
|
||||
// SMLib integrates the volume (a relative accuracy of 1e-4 asked for; a box comes out within
|
||||
// a few units in the last place), so the box's 4000 mm³ is checked to 1e-9, not to the bit.
|
||||
let volume = measured["total"]["volume_mm3"].as_f64().unwrap();
|
||||
assert!((volume - 4000.0).abs() < 4000.0 * 1e-9, "the box without its fillet: {volume}");
|
||||
assert_eq!(measured["total"]["volume_mm3"], json!(4000.0), "the box without its fillet");
|
||||
assert!(std::fs::metadata(&step).unwrap().len() > 0);
|
||||
// The saved design still holds the failing feature: running it fails too, `eval` reports it.
|
||||
let again = dir.0.join("again.step");
|
||||
|
||||
@@ -171,9 +171,9 @@ fn a_saved_view_is_its_camera_and_a_standard_view_is_unchanged() {
|
||||
let top = dir.snapshot(&script, "top.png", &["--view", "top"]);
|
||||
let mut s = Session::default();
|
||||
s.run_script(&serde_json::from_slice(&std::fs::read(&script).unwrap()).unwrap()).unwrap();
|
||||
let mut cam = solidcraft_engine::view::home_camera(&s).unwrap();
|
||||
let mut cam = solidcraft_engine::view::home_camera(&s);
|
||||
cam.set_view(solidcraft_engine::render::StandardView::Top);
|
||||
let scene = solidcraft_engine::view::scene(&s, &cam).unwrap();
|
||||
let scene = solidcraft_engine::view::scene(&s, &cam);
|
||||
assert_same(&top, &solidcraft_engine::capture::png(&scene, &cam, SIZE.0, SIZE.1).unwrap().bytes, "the home camera turned to the top");
|
||||
assert_same(&top, &dir.mcp(&script, "mcp-top.png", json!({"view": "top"})), "the MCP top view");
|
||||
assert_differs(&top, &saved, "top and the saved view");
|
||||
@@ -288,7 +288,7 @@ fn a_snapshot_shows_the_part_where_the_camera_puts_it() {
|
||||
let vp = c.view_proj(f64::from(SIZE.0) / f64::from(SIZE.1), 1000.0);
|
||||
let (mut elo, mut ehi) = ([f64::MAX; 2], [f64::MIN; 2]);
|
||||
for k in 0..8 {
|
||||
let p = solidcore_record::Vec3::new(
|
||||
let p = solidcraft_engine::geom::Vec3::new(
|
||||
corner[0] + size[0] * f64::from(k & 1),
|
||||
corner[1] + size[1] * f64::from((k >> 1) & 1),
|
||||
corner[2] + size[2] * f64::from((k >> 2) & 1),
|
||||
@@ -335,9 +335,9 @@ fn a_forced_cpu_snapshot_is_the_cpu_rasterizers_and_says_so() {
|
||||
assert!(stderr.contains("CPU rasterizer"), "{stderr}");
|
||||
let mut s = Session::default();
|
||||
s.run_script(&serde_json::from_slice(&std::fs::read(&script).unwrap()).unwrap()).unwrap();
|
||||
let mut cam = solidcraft_engine::view::home_camera(&s).unwrap();
|
||||
let mut cam = solidcraft_engine::view::home_camera(&s);
|
||||
cam.set_view(solidcraft_engine::render::StandardView::Top);
|
||||
let scene = solidcraft_engine::view::scene(&s, &cam).unwrap();
|
||||
let scene = solidcraft_engine::view::scene(&s, &cam);
|
||||
let cpu = solidcraft_engine::render::render_png(&scene, &cam, SIZE.0 as usize, SIZE.1 as usize).unwrap();
|
||||
assert_eq!(std::fs::read(dir.0.join("cpu.png")).unwrap(), cpu);
|
||||
}
|
||||
|
||||
@@ -5,14 +5,13 @@
|
||||
//! vertices nothing else used, so an edge that is one straight line was drawn (and lit on hover)
|
||||
//! as many pieces, and a sketch on such a face projected every piece.
|
||||
|
||||
use solidcraft_engine::geom::prelude::*;
|
||||
use std::collections::HashMap;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
use serde_json::json;
|
||||
use solidcore_record::Vec3;
|
||||
use solidcraft_engine::Session;
|
||||
use solidcraft_engine::doc::kernel::{FaceSurface, face_surface};
|
||||
use solidcraft_engine::geom::Vec3;
|
||||
|
||||
fn design() -> PathBuf {
|
||||
Path::new(env!("CARGO_MANIFEST_DIR")).join("../../tests/action_matrix/designs/crazy-geom-cuts.sc")
|
||||
@@ -49,11 +48,11 @@ fn key(v: Vec3) -> [i64; 3] {
|
||||
fn straight_edges_are_one_edge_after_many_cuts() {
|
||||
for (what, s) in [("as saved", open(&design())), ("built from scratch", rebuilt())] {
|
||||
assert_eq!(errors(&s), vec![], "{what}: every feature evaluates");
|
||||
let st = s.world_state().unwrap();
|
||||
let st = s.world_state();
|
||||
let bodies: Vec<_> = st.bodies.iter().filter(|b| !b.body.is_mesh()).collect();
|
||||
assert_eq!(bodies.len(), 1, "{what}: one body");
|
||||
let body = &bodies[0].body;
|
||||
let mesh = body.mesh(&solidcraft_kernel::MeshTolerance::chord(0.01)).unwrap();
|
||||
let mesh = body.tessellate(0.01).unwrap();
|
||||
// Every edge is drawn as one polyline; a straight one as one segment.
|
||||
let mut at: HashMap<[i64; 3], Vec<usize>> = HashMap::new();
|
||||
for (i, e) in mesh.edges.iter().enumerate() {
|
||||
|
||||
@@ -14,11 +14,8 @@ name = "solidcraft-web"
|
||||
path = "src/main.rs"
|
||||
|
||||
[features]
|
||||
default = ["profile"]
|
||||
default = []
|
||||
bundled-render-library = ["solidcraft-engine/bundled-render-library"]
|
||||
# The profiler, compiled in so any build can say where its time goes (the Profile operations
|
||||
# preference, SOLIDCRAFT_PROFILE=1, diagnostics.profile); it records nothing until asked.
|
||||
profile = ["solidcraft-engine/profile"]
|
||||
|
||||
[dependencies]
|
||||
solidcraft-engine = { workspace = true }
|
||||
@@ -36,7 +33,7 @@ js-sys = "0.3"
|
||||
serde_json = { workspace = true }
|
||||
web-sys = { version = "0.3", features = [
|
||||
"Window", "Document", "Element", "HtmlElement", "HtmlCanvasElement", "Location", "Navigator", "StorageManager",
|
||||
"FileSystemHandle", "FileSystemDirectoryHandle", "FileSystemFileHandle", "FileSystemGetFileOptions", "FileSystemGetDirectoryOptions", "FileSystemWritableFileStream",
|
||||
"FileSystemHandle", "FileSystemDirectoryHandle", "FileSystemFileHandle", "FileSystemGetFileOptions", "FileSystemWritableFileStream",
|
||||
"WritableStream", "File", "FileList", "Blob", "BlobPropertyBag", "Url", "HtmlAnchorElement", "HtmlInputElement", "Storage", "StorageEvent",
|
||||
"IdbFactory", "IdbDatabase", "IdbObjectStore", "IdbOpenDbRequest", "IdbRequest", "IdbTransaction", "IdbTransactionMode",
|
||||
"Headers", "ReadableStream", "ReadableStreamDefaultReader",
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
//! Links the browser build with an 8 MiB stack: solidcore's kernel algorithms (subdivision,
|
||||
//! intersection, filleting) recurse legitimately, and wasm has no guard page to catch an
|
||||
//! overflow (solidcore's README recommends 8 MiB).
|
||||
|
||||
fn main() {
|
||||
if std::env::var("CARGO_CFG_TARGET_ARCH").is_ok_and(|a| a == "wasm32") {
|
||||
println!("cargo:rustc-link-arg=-zstack-size=8388608");
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
This build keeps its designs and settings apart per release channel (src/channel.rs).
|
||||
packaging/web-channels.sh only offers a release candidate that has this file.
|
||||
@@ -34,7 +34,6 @@
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="icons/32x32/io.tangencylabs.solidcraft.png">
|
||||
<link rel="apple-touch-icon" href="icons/256x256/io.tangencylabs.solidcraft.png">
|
||||
<link data-trunk rel="copy-file" href="manifest.webmanifest" />
|
||||
<link data-trunk rel="copy-file" href="channel-storage.txt" />
|
||||
<link data-trunk rel="copy-file" href="../../assets/icons/app/linux/exports/hicolor/32x32/apps/io.tangencylabs.solidcraft.png" data-target-path="icons/32x32" />
|
||||
<link data-trunk rel="copy-file" href="../../assets/icons/app/linux/exports/hicolor/256x256/apps/io.tangencylabs.solidcraft.png" data-target-path="icons/256x256" />
|
||||
<link data-trunk rel="copy-file" href="../../assets/icons/app/linux/exports/hicolor/512x512/apps/io.tangencylabs.solidcraft.png" data-target-path="icons/512x512" />
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
//! Release channels. The site serves the stable web app at `/app/`, the release candidate at
|
||||
//! `/app-rc/` and the bleeding-edge build at `/app-edge/`: one origin, so one set of browser
|
||||
//! storage. A channel that kept its designs and settings in the same places could save a design
|
||||
//! in a file format the stable app can't open, or overwrite stable's settings. So each
|
||||
//! pre-release channel keeps everything under its own name, and stable (and any copy served from
|
||||
//! another path: the release zip, `trunk serve`) keeps the names it has always used, so what
|
||||
//! people have saved at `/app/` is untouched.
|
||||
//!
|
||||
//! The channel comes from the directory the app is served from, not from the build, so a build
|
||||
//! taken from a release zip is as separate as one built on the spot.
|
||||
|
||||
/// The channel the app is served as, from the page's path: `"rc"`, `"edge"`, or `""` (stable).
|
||||
pub fn of_path(pathname: &str) -> &'static str {
|
||||
match pathname.trim_end_matches("index.html").trim_end_matches('/').rsplit('/').next() {
|
||||
Some("app-rc") => "rc",
|
||||
Some("app-edge") => "edge",
|
||||
_ => "",
|
||||
}
|
||||
}
|
||||
|
||||
/// `name` as this channel stores it: unchanged for stable, `rc:name` and `edge:name` otherwise.
|
||||
pub fn name_in(channel: &str, name: &str) -> String {
|
||||
if channel.is_empty() { name.to_owned() } else { format!("{channel}:{name}") }
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
pub fn current() -> &'static str {
|
||||
web_sys::window().and_then(|w| w.location().pathname().ok()).map_or("", |p| of_path(&p))
|
||||
}
|
||||
|
||||
/// A storage key (local storage, IndexedDB database name) of the running channel.
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
pub fn key(name: &str) -> String {
|
||||
name_in(current(), name)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn channel_follows_the_directory() {
|
||||
assert_eq!(of_path("/app/"), "");
|
||||
assert_eq!(of_path("/app/index.html"), "");
|
||||
assert_eq!(of_path("/app-rc/"), "rc");
|
||||
assert_eq!(of_path("/app-rc"), "rc");
|
||||
assert_eq!(of_path("/app-rc/index.html"), "rc");
|
||||
assert_eq!(of_path("/app-edge/"), "edge");
|
||||
assert_eq!(of_path("/"), "");
|
||||
assert_eq!(of_path("/solidcraft-web-0.30.1/"), "");
|
||||
assert_eq!(of_path("/app/app-rc/"), "rc", "only the directory's own name counts");
|
||||
assert_eq!(of_path("/app-rc/app/"), "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn stable_keeps_its_names() {
|
||||
assert_eq!(name_in("", "solidcraft.prefs"), "solidcraft.prefs");
|
||||
assert_eq!(name_in("rc", "solidcraft.prefs"), "rc:solidcraft.prefs");
|
||||
assert_ne!(name_in("rc", "x"), name_in("edge", "x"));
|
||||
}
|
||||
}
|
||||
@@ -467,7 +467,7 @@ mod web {
|
||||
|
||||
async fn open_db() -> Result<IdbDatabase, String> {
|
||||
let factory = web_sys::window().ok_or("no window")?.indexed_db().map_err(err)?.ok_or("this browser has no IndexedDB")?;
|
||||
let request: IdbOpenDbRequest = factory.open_with_u32(&crate::channel::key(DB), 1).map_err(err)?;
|
||||
let request: IdbOpenDbRequest = factory.open_with_u32(DB, 1).map_err(err)?;
|
||||
let target = request.clone();
|
||||
let upgrade = Closure::once_into_js(move || {
|
||||
if let Ok(db) = target.result().and_then(|r| r.dyn_into::<IdbDatabase>()) {
|
||||
|
||||
@@ -16,9 +16,7 @@ use solidcraft_engine::io::vfs;
|
||||
use crate::disk;
|
||||
use wasm_bindgen::{JsCast as _, JsValue, closure::Closure};
|
||||
use wasm_bindgen_futures::{JsFuture, spawn_local};
|
||||
use web_sys::{
|
||||
FileSystemDirectoryHandle, FileSystemFileHandle, FileSystemGetDirectoryOptions, FileSystemGetFileOptions, FileSystemWritableFileStream,
|
||||
};
|
||||
use web_sys::{FileSystemDirectoryHandle, FileSystemFileHandle, FileSystemGetFileOptions, FileSystemWritableFileStream};
|
||||
|
||||
/// Where OPFS files appear to the engine.
|
||||
pub const OPFS: &str = disk::OPFS_PREFIX;
|
||||
@@ -113,7 +111,7 @@ thread_local! {
|
||||
static LOCAL: Cell<bool> = const { Cell::new(false) };
|
||||
}
|
||||
|
||||
/// Local storage keys of stored files (under the channel's name, see `channel.rs`).
|
||||
/// Local storage keys of stored files.
|
||||
const LOCAL_PREFIX: &str = "solidcraft.file.";
|
||||
/// Local-storage files kept by earlier releases (compatibility shim, docs/compatibility.md):
|
||||
/// still listed and opened; removing one removes either key.
|
||||
@@ -171,17 +169,7 @@ fn has(sm: &web_sys::StorageManager, method: &str) -> bool {
|
||||
async fn root() -> Result<FileSystemDirectoryHandle, String> {
|
||||
let sm = storage_manager().filter(|sm| has(sm, "getDirectory")).ok_or("this page has no private file storage (it needs https or localhost)")?;
|
||||
let dir = JsFuture::from(sm.get_directory()).await.map_err(err)?;
|
||||
let dir = dir.dyn_into::<FileSystemDirectoryHandle>().map_err(|_| "this browser has no private file storage (OPFS)".to_string())?;
|
||||
// Stable keeps its files in the root, where they have always been; a pre-release channel has a folder of its own.
|
||||
match crate::channel::current() {
|
||||
"" => Ok(dir),
|
||||
channel => {
|
||||
let opts = FileSystemGetDirectoryOptions::new();
|
||||
opts.set_create(true);
|
||||
let sub = JsFuture::from(dir.get_directory_handle_with_options(&format!("channel-{channel}"), &opts)).await.map_err(err)?;
|
||||
sub.dyn_into::<FileSystemDirectoryHandle>().map_err(|_| "not a folder".to_string())
|
||||
}
|
||||
}
|
||||
dir.dyn_into::<FileSystemDirectoryHandle>().map_err(|_| "this browser has no private file storage (OPFS)".to_string())
|
||||
}
|
||||
|
||||
pub(crate) async fn read_handle(h: &FileSystemFileHandle) -> Result<Vec<u8>, String> {
|
||||
@@ -203,7 +191,7 @@ async fn file_handle(dir: &FileSystemDirectoryHandle, name: &str, create: bool)
|
||||
async fn write_file(name: &str, bytes: &[u8]) -> Result<(), String> {
|
||||
if local_only() {
|
||||
return local()?
|
||||
.set_item(&crate::channel::key(&format!("{LOCAL_PREFIX}{name}")), &encode(bytes))
|
||||
.set_item(&format!("{LOCAL_PREFIX}{name}"), &encode(bytes))
|
||||
.map_err(|e| format!("local storage is full or blocked: {}", err(e)));
|
||||
}
|
||||
let dir = root().await?;
|
||||
@@ -219,7 +207,7 @@ async fn remove_file(name: &str) -> Result<(), String> {
|
||||
if local_only() {
|
||||
let st = local()?;
|
||||
st.remove_item(&format!("{LEGACY_LOCAL_PREFIX}{name}")).map_err(err)?;
|
||||
return st.remove_item(&crate::channel::key(&format!("{LOCAL_PREFIX}{name}"))).map_err(err);
|
||||
return st.remove_item(&format!("{LOCAL_PREFIX}{name}")).map_err(err);
|
||||
}
|
||||
let dir = root().await?;
|
||||
JsFuture::from(dir.remove_entry(name)).await.map_err(err)?;
|
||||
@@ -232,10 +220,7 @@ fn read_local() -> Result<Vec<(String, Vec<u8>, f64)>, String> {
|
||||
let mut out = Vec::new();
|
||||
for i in 0..st.length().unwrap_or(0).min(10_000) {
|
||||
let Some(k) = st.key(i).ok().flatten() else { continue };
|
||||
let own = crate::channel::key(LOCAL_PREFIX);
|
||||
// The old names belong to stable; a pre-release channel has none.
|
||||
let legacy = crate::channel::current().is_empty().then_some(LEGACY_LOCAL_PREFIX);
|
||||
let Some(name) = k.strip_prefix(own.as_str()).or_else(|| legacy.and_then(|l| k.strip_prefix(l))) else { continue };
|
||||
let Some(name) = k.strip_prefix(LOCAL_PREFIX).or_else(|| k.strip_prefix(LEGACY_LOCAL_PREFIX)) else { continue };
|
||||
if let Some(v) = st.get_item(&k).ok().flatten() {
|
||||
out.push((name.to_string(), decode(&v), 0.0));
|
||||
}
|
||||
|
||||
@@ -15,9 +15,6 @@ type Reply = Result<(String, Vec<u8>), String>;
|
||||
pub struct Download {
|
||||
reply: Rc<RefCell<Option<Reply>>>,
|
||||
pending: Option<(String, Vec<u8>)>,
|
||||
/// The downloaded design being opened (a few features a frame, #10198): the answer to come,
|
||||
/// the name it takes and the file it was read from.
|
||||
opening: Option<(std::sync::mpsc::Receiver<serde_json::Value>, String, String)>,
|
||||
}
|
||||
|
||||
impl Download {
|
||||
@@ -36,14 +33,13 @@ impl Download {
|
||||
}
|
||||
|
||||
pub fn tick(&mut self, app: &mut SolveApp, ctx: &egui::Context) {
|
||||
self.opened(app);
|
||||
if let Some(reply) = self.reply.borrow_mut().take() {
|
||||
match reply {
|
||||
Ok(file) => self.pending = Some(file),
|
||||
Err(error) => app.set_status(format!("Could not open design link: {error}"), true),
|
||||
}
|
||||
}
|
||||
if self.pending.is_none() || self.opening.is_some() || app.file_picker_busy() {
|
||||
if self.pending.is_none() || app.file_picker_busy() {
|
||||
return;
|
||||
}
|
||||
if solidcraft_ui_egui::documents::any_dirty(app) {
|
||||
@@ -75,33 +71,18 @@ impl Download {
|
||||
}
|
||||
}
|
||||
let Some((name, bytes)) = self.pending.take() else { return };
|
||||
// The extension selects the design loader even when the URL has no extension. Named
|
||||
// after the link, as the progress card shows the file's name.
|
||||
let file: String = name.chars().map(|c| if matches!(c, '/' | '\\') { '_' } else { c }).collect();
|
||||
let path = format!("/linked/{}.{}", if file.is_empty() { "design" } else { &file }, solidcraft_engine::io::DESIGN_EXT);
|
||||
vfs::insert(&path, bytes);
|
||||
// Opened as any design is, with its progress and Cancel; finished in `opened`.
|
||||
self.opening = Some((app.open_path_answered(&path), name, path));
|
||||
self.opened(app);
|
||||
}
|
||||
|
||||
/// The downloaded design is in: it is an unsaved copy under the link's name.
|
||||
fn opened(&mut self, app: &mut SolveApp) {
|
||||
let Some((rx, _, _)) = &self.opening else { return };
|
||||
let (ok, cancelled) = match rx.try_recv() {
|
||||
Ok(reply) => (reply["ok"].as_bool() == Some(true), reply["error"].as_str().is_some_and(|e| e.contains("cancelled"))),
|
||||
Err(std::sync::mpsc::TryRecvError::Empty) => return,
|
||||
Err(std::sync::mpsc::TryRecvError::Disconnected) => (false, false),
|
||||
};
|
||||
let Some((_, name, path)) = self.opening.take() else { return };
|
||||
if ok && app.session.path.as_deref() == Some(path.as_str()) {
|
||||
// The extension selects the design loader even when the URL has no extension.
|
||||
let path = &format!("/linked/design.{}", solidcraft_engine::io::DESIGN_EXT);
|
||||
vfs::insert(path, bytes);
|
||||
app.open_path(path);
|
||||
if app.session.path.as_deref() == Some(path.as_str()) {
|
||||
app.session.path = None;
|
||||
app.session.doc_mut().name = name;
|
||||
app.session.mark_unsaved();
|
||||
} else if !ok && !cancelled {
|
||||
} else {
|
||||
app.set_status("Could not open design link: the downloaded file is not a valid SolidCraft design", true);
|
||||
}
|
||||
let _ = vfs::remove(&path);
|
||||
let _ = vfs::remove(path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
mod api;
|
||||
#[cfg(any(target_arch = "wasm32", test))]
|
||||
mod channel;
|
||||
#[cfg(any(target_arch = "wasm32", test))]
|
||||
mod disk;
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
mod easyprint;
|
||||
@@ -154,15 +152,8 @@ impl PrefsWriter {
|
||||
/// tab of the page when one tab writes). Other keys, and settings taken away (clearing the site's
|
||||
/// data), leave this tab's settings as they are.
|
||||
#[cfg(any(target_arch = "wasm32", test))]
|
||||
fn settings_written(own_key: &str, key: Option<&str>, value: Option<String>) -> Option<String> {
|
||||
// Tabs of another channel write to the same storage, under their own key.
|
||||
value.filter(|_| key == Some(own_key))
|
||||
}
|
||||
|
||||
/// The settings key of `channel` (see [`channel`]).
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
fn prefs_key() -> String {
|
||||
channel::key(solidcraft_ui_egui::prefs::STORAGE_KEY)
|
||||
fn settings_written(key: Option<&str>, value: Option<String>) -> Option<String> {
|
||||
value.filter(|_| key == Some(solidcraft_ui_egui::prefs::STORAGE_KEY))
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
@@ -171,7 +162,6 @@ mod web {
|
||||
|
||||
use solidcraft_engine::Session;
|
||||
use solidcraft_engine::io::vfs;
|
||||
use solidcraft_ui_egui::ui_kit::BackingTooltipExt as _;
|
||||
use solidcraft_ui_egui::{Services, SolveApp, ui_kit};
|
||||
use wasm_bindgen::JsCast as _;
|
||||
|
||||
@@ -272,7 +262,7 @@ mod web {
|
||||
fn hear_settings_from_other_tabs(window: &web_sys::Window, ctx: &egui::Context, inbox: PrefsInbox) {
|
||||
let ctx = ctx.clone();
|
||||
let on_storage = wasm_bindgen::closure::Closure::<dyn FnMut(web_sys::StorageEvent)>::new(move |e: web_sys::StorageEvent| {
|
||||
if let Some(prefs) = crate::settings_written(&crate::prefs_key(), e.key().as_deref(), e.new_value()) {
|
||||
if let Some(prefs) = crate::settings_written(e.key().as_deref(), e.new_value()) {
|
||||
inbox.set(Some(prefs));
|
||||
ctx.request_repaint();
|
||||
}
|
||||
@@ -344,7 +334,8 @@ mod web {
|
||||
}
|
||||
let prefs = self.persisted_prefs();
|
||||
let Some(prefs) = self.prefs_writer.take(prefs) else { return };
|
||||
let stored = web_sys::window().and_then(|w| w.local_storage().ok().flatten()).map(|s| s.set_item(&crate::prefs_key(), &prefs));
|
||||
let stored =
|
||||
web_sys::window().and_then(|w| w.local_storage().ok().flatten()).map(|s| s.set_item(solidcraft_ui_egui::prefs::STORAGE_KEY, &prefs));
|
||||
if !matches!(stored, Some(Ok(()))) {
|
||||
log::warn!("settings: the browser's storage did not take them; they are saved again later");
|
||||
self.prefs_writer = crate::PrefsWriter::default();
|
||||
@@ -384,8 +375,7 @@ mod web {
|
||||
// Designs opened from the computer's disk (the files window): open them.
|
||||
let opened: Vec<_> = self.files.opened.borrow_mut().drain(..).collect();
|
||||
for path in opened {
|
||||
// A few features a frame, with progress and Cancel (#10198).
|
||||
self.app.open_path_async(&path);
|
||||
self.app.open_path(&path);
|
||||
self.files.panel.set(false);
|
||||
}
|
||||
// Recent designs whose file is gone are dropped from the list.
|
||||
@@ -426,7 +416,7 @@ mod web {
|
||||
path
|
||||
};
|
||||
match intent {
|
||||
Intent::Open => self.app.open_path_async(&path),
|
||||
Intent::Open => self.app.open_path(&path),
|
||||
Intent::Insert | Intent::Theme => self.app.drop_path(&path),
|
||||
}
|
||||
self.files.panel.set(false);
|
||||
@@ -501,7 +491,7 @@ mod web {
|
||||
files::pick_from_disk(&self.files, Intent::Open);
|
||||
}
|
||||
if ui_kit::button(ui, "Insert from computer…", ui_kit::Button::Normal)
|
||||
.backing_on_hover_text(solidcraft_ui_egui::i18n::tr("web.files.insert_drawings_hint"))
|
||||
.on_hover_text(solidcraft_ui_egui::i18n::tr("web.files.insert_drawings_hint"))
|
||||
.clicked()
|
||||
{
|
||||
files::pick_from_disk(&self.files, Intent::Insert);
|
||||
@@ -555,7 +545,7 @@ mod web {
|
||||
let design = solidcraft_engine::io::is_design_path(&e.name);
|
||||
if !design
|
||||
&& ui_kit::button(ui, "Insert", ui_kit::Button::Small)
|
||||
.backing_on_hover_text(solidcraft_ui_egui::i18n::tr("web.files.insert_stored_drawings_hint"))
|
||||
.on_hover_text(solidcraft_ui_egui::i18n::tr("web.files.insert_stored_drawings_hint"))
|
||||
.clicked()
|
||||
{
|
||||
act = Some(("insert", e.name.clone()));
|
||||
@@ -565,7 +555,7 @@ mod web {
|
||||
self.rename_focus = true;
|
||||
}
|
||||
if ui_kit::button(ui, "Save to computer…", ui_kit::Button::Small)
|
||||
.backing_on_hover_text("A copy in a file you choose; the stored design stays here")
|
||||
.on_hover_text("A copy in a file you choose; the stored design stays here")
|
||||
.clicked()
|
||||
{
|
||||
act = Some(("save_copy", e.name.clone()));
|
||||
@@ -590,7 +580,7 @@ mod web {
|
||||
let path = format!("{}{name}", files::OPFS);
|
||||
match what {
|
||||
"open" => {
|
||||
self.app.open_path_async(&path);
|
||||
self.app.open_path(&path);
|
||||
self.files.panel.set(false);
|
||||
}
|
||||
"insert" => {
|
||||
@@ -843,15 +833,14 @@ mod web {
|
||||
self.store_prefs(&ctx);
|
||||
}
|
||||
fn persist_egui_memory(&self) -> bool {
|
||||
// eframe keeps this under one fixed key: only stable uses it, so a pre-release never rewrites it.
|
||||
self.launch.persists() && crate::channel::current().is_empty()
|
||||
self.launch.persists()
|
||||
}
|
||||
fn save(&mut self, storage: &mut dyn eframe::Storage) {
|
||||
if !self.launch.persists() {
|
||||
return;
|
||||
}
|
||||
let prefs = self.persisted_prefs();
|
||||
storage.set_string(&crate::prefs_key(), prefs);
|
||||
storage.set_string(solidcraft_ui_egui::prefs::STORAGE_KEY, prefs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -861,7 +850,7 @@ mod web {
|
||||
|
||||
/// Where `?webgl` is remembered. The installed app starts from its manifest's start URL, which
|
||||
/// has no query, so the choice has to outlive the page it was made on.
|
||||
const WEBGL_KEY: &str = "solidcraft.webgl"; // stored under crate::channel::key
|
||||
const WEBGL_KEY: &str = "solidcraft.webgl";
|
||||
|
||||
/// Render with WebGL2: asked for now (`?webgl`, remembered) or before (until `?webgpu`).
|
||||
fn webgl() -> bool {
|
||||
@@ -869,17 +858,17 @@ mod web {
|
||||
let q = query();
|
||||
if crate::query_flag(&q, "webgl") {
|
||||
if let Some(s) = &storage {
|
||||
let _ = s.set_item(&crate::channel::key(WEBGL_KEY), "1");
|
||||
let _ = s.set_item(WEBGL_KEY, "1");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if crate::query_flag(&q, "webgpu") {
|
||||
if let Some(s) = &storage {
|
||||
let _ = s.remove_item(&crate::channel::key(WEBGL_KEY));
|
||||
let _ = s.remove_item(WEBGL_KEY);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
storage.and_then(|s| s.get_item(&crate::channel::key(WEBGL_KEY)).ok().flatten()).is_some()
|
||||
storage.and_then(|s| s.get_item(WEBGL_KEY).ok().flatten()).is_some()
|
||||
}
|
||||
|
||||
/// Fetch font bytes asynchronously through the browser.
|
||||
@@ -978,7 +967,7 @@ mod web {
|
||||
if launch.persists() {
|
||||
hear_settings_from_other_tabs(&window, &cc.egui_ctx, other_tab_prefs.clone());
|
||||
}
|
||||
if launch.persists() && let Some(p) = cc.storage.and_then(|s| solidcraft_ui_egui::prefs::stored(|k| s.get_string(&crate::channel::key(k)))) {
|
||||
if launch.persists() && let Some(p) = cc.storage.and_then(|s| solidcraft_ui_egui::prefs::stored(|k| s.get_string(k))) {
|
||||
app.load_prefs(&p);
|
||||
}
|
||||
if let Some(rs) = &cc.wgpu_render_state {
|
||||
@@ -1181,10 +1170,9 @@ mod tests {
|
||||
#[test]
|
||||
fn only_settings_another_tab_wrote_are_loaded() {
|
||||
let key = solidcraft_ui_egui::prefs::STORAGE_KEY;
|
||||
assert_eq!(settings_written(key, Some(key), Some("{}".into())).as_deref(), Some("{}"));
|
||||
assert_eq!(settings_written(key, Some("solidcraft.webgl"), Some("1".into())), None);
|
||||
assert_eq!(settings_written(key, Some(key), None), None, "removed settings leave this tab's");
|
||||
assert_eq!(settings_written(key, None, None), None, "clearing all storage leaves this tab's settings");
|
||||
assert_eq!(settings_written(key, Some("rc:solidcraft.prefs"), Some("{}".into())), None, "another channel's settings are not loaded");
|
||||
assert_eq!(settings_written(Some(key), Some("{}".into())).as_deref(), Some("{}"));
|
||||
assert_eq!(settings_written(Some("solidcraft.webgl"), Some("1".into())), None);
|
||||
assert_eq!(settings_written(Some(key), None), None, "removed settings leave this tab's");
|
||||
assert_eq!(settings_written(None, None), None, "clearing all storage leaves this tab's settings");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,12 +8,9 @@ publish = false
|
||||
default-run = "solidcraft"
|
||||
|
||||
[features]
|
||||
default = ["raytrace-cpu", "bundled-render-library", "profile"]
|
||||
default = ["raytrace-cpu", "bundled-render-library"]
|
||||
bundled-render-library = ["solidcraft-engine/bundled-render-library"]
|
||||
raytrace-cpu = ["solidcraft-engine/raytrace-cpu"]
|
||||
# The profiler, compiled in so any build can say where its time goes (the Profile operations
|
||||
# preference, SOLIDCRAFT_PROFILE=1, diagnostics.profile); it records nothing until asked.
|
||||
profile = ["solidcraft-engine/profile"]
|
||||
|
||||
# The workspace lints, except unsafe_code: denied, not forbidden, so that src/open_documents.rs
|
||||
# (macOS file-open events), src/native_crash.rs (Windows exception filter), src/native_crash_macos.rs
|
||||
@@ -81,7 +78,6 @@ windows-sys = { version = "0.61", features = [
|
||||
"Win32_UI_HiDpi",
|
||||
"Win32_UI_WindowsAndMessaging",
|
||||
] }
|
||||
winreg = "0.56"
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
muda = { version = "0.21.2", default-features = false }
|
||||
@@ -93,7 +89,7 @@ hidapi = { version = "2.6.7", default-features = false, features = ["macos-share
|
||||
# Files opened from Finder and the Dock (src/open_documents.rs), and the fullscreen title-bar
|
||||
# inset (src/main.rs); all already come with eframe and rfd.
|
||||
objc2 = "0.6"
|
||||
objc2-app-kit = { version = "0.3", default-features = false, features = ["std", "NSAccessibility", "NSApplication", "NSResponder", "NSWindow", "NSWorkspace"] }
|
||||
objc2-app-kit = { version = "0.3", default-features = false, features = ["std", "NSApplication", "NSResponder", "NSWindow"] }
|
||||
objc2-foundation = { version = "0.3", default-features = false, features = ["std", "block2", "NSArray", "NSNotification", "NSOperation", "NSProcessInfo", "NSString", "NSURL"] }
|
||||
block2 = "0.6"
|
||||
# Native crash capture (src/native_crash_macos.rs): the signal handler, the faulting module
|
||||
|
||||
@@ -22,10 +22,6 @@ const MAX_BAD_LINES: usize = 8;
|
||||
/// How long a subscribed connection waits after a `design.changed` line before the next: what
|
||||
/// changes meanwhile (a parameter dragged) goes out as one line, the latest (#6985).
|
||||
const EVENT_GAP: Duration = Duration::from_millis(100);
|
||||
/// How long a new connection has to show the token. A client connects when it has a request to
|
||||
/// send, so this is plenty; one that doesn't send it loses the connection, and its seat among
|
||||
/// [`MAX_CONNECTIONS`] goes to someone else.
|
||||
const TOKEN_WAIT: Duration = Duration::from_secs(5);
|
||||
|
||||
static OPEN: AtomicUsize = AtomicUsize::new(0);
|
||||
/// The token files this launch wrote (its control port, the agent chat's endpoint) and the
|
||||
@@ -229,53 +225,23 @@ fn unauthorized() -> Value {
|
||||
/// Refuse the connection: the reply, then the end of what we send, then what the client had
|
||||
/// already sent read and dropped (a little, briefly). Closing a socket with unread input resets
|
||||
/// the connection, and a reset can reach the client before it has read the refusal.
|
||||
fn refuse(out: &mut TcpStream, reader: &mut BufReader<ClientInput>) {
|
||||
fn refuse(out: &mut TcpStream, reader: &mut BufReader<TcpStream>) {
|
||||
use std::io::Read;
|
||||
let _ = send(out, &unauthorized());
|
||||
let _ = out.shutdown(std::net::Shutdown::Write);
|
||||
reader.get_mut().deadline = Some(Instant::now() + Duration::from_millis(500));
|
||||
let _ = reader.get_ref().set_read_timeout(Some(Duration::from_millis(500)));
|
||||
let _ = std::io::copy(&mut reader.by_ref().take(64 * 1024), &mut std::io::sink());
|
||||
}
|
||||
|
||||
/// What a client sends. Until it shows the token, all of its reads share one deadline, so neither
|
||||
/// blank lines nor a line sent a byte at a time buy it more time. After that it may stay idle as
|
||||
/// long as it likes.
|
||||
struct ClientInput {
|
||||
socket: TcpStream,
|
||||
deadline: Option<Instant>,
|
||||
}
|
||||
|
||||
impl ClientInput {
|
||||
/// No deadline any more: the client showed the token.
|
||||
fn admit(&mut self) -> std::io::Result<()> {
|
||||
self.deadline = None;
|
||||
self.socket.set_read_timeout(None)
|
||||
}
|
||||
}
|
||||
|
||||
impl std::io::Read for ClientInput {
|
||||
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
|
||||
if let Some(deadline) = self.deadline {
|
||||
let left = deadline.saturating_duration_since(Instant::now());
|
||||
if left.is_zero() {
|
||||
return Err(std::io::ErrorKind::TimedOut.into());
|
||||
}
|
||||
self.socket.set_read_timeout(Some(left))?;
|
||||
}
|
||||
self.socket.read(buf)
|
||||
}
|
||||
}
|
||||
|
||||
/// How long a request waits for the app's reply: most requests, and a batch (or every request,
|
||||
/// on a patient connection); and how long a new connection has to show the token.
|
||||
/// on a patient connection).
|
||||
#[derive(Clone, Copy)]
|
||||
struct Waits {
|
||||
short: Duration,
|
||||
long: Duration,
|
||||
token: Duration,
|
||||
}
|
||||
|
||||
const WAITS: Waits = Waits { short: Duration::from_secs(60), long: Duration::from_secs(3600), token: TOKEN_WAIT };
|
||||
const WAITS: Waits = Waits { short: Duration::from_secs(60), long: Duration::from_secs(3600) };
|
||||
|
||||
/// A request that timed out but is still running in the app (#1618): its id and method, and where
|
||||
/// its reply will land.
|
||||
@@ -577,7 +543,7 @@ fn serve_with(
|
||||
let connection = running.connections.fetch_add(1, Ordering::Relaxed) + 1;
|
||||
let Ok(read) = stream.try_clone() else { return };
|
||||
let mut out = stream;
|
||||
let mut reader = BufReader::new(ClientInput { socket: read, deadline: Some(Instant::now() + waits.token) });
|
||||
let mut reader = BufReader::new(read);
|
||||
let mut bad = 0usize;
|
||||
let mut authenticated = false;
|
||||
let mut pending: Option<Pending> = None;
|
||||
@@ -588,10 +554,6 @@ fn serve_with(
|
||||
let line = match read_line(&mut reader, MAX_LINE) {
|
||||
Ok(Some(l)) => String::from_utf8_lossy(&l).into_owned(),
|
||||
Ok(None) => break,
|
||||
// Closed without a word: a client that connected early and only now sends its first
|
||||
// request would read a line here as the reply to it. It finds the connection closed
|
||||
// and opens another.
|
||||
Err(e) if !authenticated && matches!(e.kind(), std::io::ErrorKind::TimedOut | std::io::ErrorKind::WouldBlock) => break,
|
||||
Err(e) => {
|
||||
let _ = answer(&mut out, events.as_ref(), &json!({"ok": false, "error": e.to_string()}));
|
||||
break;
|
||||
@@ -603,12 +565,7 @@ fn serve_with(
|
||||
// The first request must carry the token; later ones on the same connection may.
|
||||
if !authenticated {
|
||||
match token_of(&line) {
|
||||
Some(t) if control_auth::tokens_match(&t, token) => {
|
||||
if reader.get_mut().admit().is_err() {
|
||||
break;
|
||||
}
|
||||
authenticated = true;
|
||||
}
|
||||
Some(t) if control_auth::tokens_match(&t, token) => authenticated = true,
|
||||
_ => {
|
||||
refuse(&mut out, &mut reader);
|
||||
break;
|
||||
@@ -718,80 +675,6 @@ fn serve_with(
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
/// A connection that doesn't show the token in time is closed without a word, however it fills
|
||||
/// the time. One that does keeps working when it idles for longer than that.
|
||||
#[test]
|
||||
fn the_token_has_a_time_limit_and_an_authenticated_client_may_idle() {
|
||||
use std::io::Read;
|
||||
let token = "0123456789abcdef0123456789abcdef";
|
||||
let limit = Duration::from_millis(500);
|
||||
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
|
||||
let addr = listener.local_addr().unwrap();
|
||||
let (tx, rx) = channel::<ControlRequest>();
|
||||
std::thread::spawn(move || {
|
||||
for req in rx {
|
||||
let _ = req.reply.send(json!({"ok": true, "result": req.method}));
|
||||
}
|
||||
});
|
||||
static RUNNING: Running = Running::new();
|
||||
let waits = Waits { short: Duration::from_secs(10), long: Duration::from_secs(10), token: limit };
|
||||
std::thread::spawn(move || {
|
||||
for stream in listener.incoming().flatten() {
|
||||
let tx = tx.clone();
|
||||
std::thread::spawn(move || serve_with(stream, token, tx, egui::Context::default(), false, waits, &RUNNING, &DESIGN_WATCH));
|
||||
}
|
||||
});
|
||||
let open = || {
|
||||
let s = TcpStream::connect(addr).unwrap();
|
||||
s.set_read_timeout(Some(Duration::from_secs(20))).unwrap();
|
||||
s
|
||||
};
|
||||
// Sends `drip` every 50 ms until the server closes; what it read, and when it closed.
|
||||
let closed_after = |drip: &[u8]| {
|
||||
let mut s = open();
|
||||
let start = Instant::now();
|
||||
s.set_read_timeout(Some(Duration::from_millis(50))).unwrap();
|
||||
let mut got = Vec::new();
|
||||
loop {
|
||||
let mut buf = [0u8; 256];
|
||||
match s.read(&mut buf) {
|
||||
Ok(0) => break,
|
||||
Ok(n) => got.extend_from_slice(buf.get(..n).unwrap()),
|
||||
Err(e) if matches!(e.kind(), std::io::ErrorKind::WouldBlock | std::io::ErrorKind::TimedOut) => {
|
||||
assert!(start.elapsed() < Duration::from_secs(20), "still open");
|
||||
let _ = s.write_all(drip);
|
||||
}
|
||||
Err(_) => break,
|
||||
}
|
||||
}
|
||||
(got, start.elapsed())
|
||||
};
|
||||
for drip in [&b""[..], b"\n", b"\r\n \n", b" ", b"{"] {
|
||||
let (got, took) = closed_after(drip);
|
||||
assert!(got.is_empty(), "{drip:?} was answered: {}", String::from_utf8_lossy(&got));
|
||||
assert!(took >= limit.saturating_sub(Duration::from_millis(50)), "{drip:?} closed after {took:?}");
|
||||
}
|
||||
|
||||
let mut s = open();
|
||||
let mut lines = BufReader::new(s.try_clone().unwrap());
|
||||
let mut ask = |line: Value| -> Value {
|
||||
writeln!(s, "{line}").unwrap();
|
||||
let mut l = String::new();
|
||||
lines.read_line(&mut l).unwrap();
|
||||
serde_json::from_str(&l).unwrap()
|
||||
};
|
||||
assert_eq!(ask(json!({"id": 1, "method": "ui.view", "token": token}))["ok"], true);
|
||||
std::thread::sleep(limit * 3);
|
||||
assert_eq!(ask(json!({"id": 2, "method": "ui.view"}))["ok"], true, "idle for longer than the limit");
|
||||
|
||||
// A wrong token is still answered, at once.
|
||||
let mut wrong = open();
|
||||
writeln!(wrong, "{}", json!({"id": 1, "method": "ui.view", "token": "nope"})).unwrap();
|
||||
let mut l = String::new();
|
||||
BufReader::new(wrong).read_line(&mut l).unwrap();
|
||||
assert!(l.contains("unauthorized"), "{l}");
|
||||
}
|
||||
|
||||
/// #1618: a request that outlasts its wait says it is still running; the connection keeps its
|
||||
/// reply for `control.pending`, and refuses other requests as `busy` until it lands, so none
|
||||
/// is queued to run unseen behind it.
|
||||
@@ -815,7 +698,7 @@ mod tests {
|
||||
let _ = req.reply.send(json!({"ok": true, "result": req.method}));
|
||||
}
|
||||
});
|
||||
let waits = Waits { short: Duration::from_millis(100), long: Duration::from_millis(100), token: TOKEN_WAIT };
|
||||
let waits = Waits { short: Duration::from_millis(100), long: Duration::from_millis(100) };
|
||||
static RUNNING: Running = Running::new();
|
||||
std::thread::spawn(move || {
|
||||
if let Some(stream) = listener.incoming().flatten().next() {
|
||||
@@ -881,7 +764,7 @@ mod tests {
|
||||
let _ = req.reply.send(json!({"ok": true, "result": req.method}));
|
||||
}
|
||||
});
|
||||
let waits = Waits { short: Duration::from_millis(100), long: Duration::from_secs(60), token: TOKEN_WAIT };
|
||||
let waits = Waits { short: Duration::from_millis(100), long: Duration::from_secs(60) };
|
||||
std::thread::spawn(move || {
|
||||
for stream in listener.incoming().flatten() {
|
||||
let tx = tx.clone();
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
//! Cached accessibility signal, observed only while a theme offers blur. No UI-thread IO.
|
||||
use std::sync::{
|
||||
Arc,
|
||||
atomic::{AtomicBool, AtomicU8, Ordering},
|
||||
};
|
||||
|
||||
#[derive(Default)]
|
||||
struct Reading {
|
||||
needed: AtomicBool,
|
||||
started: AtomicBool,
|
||||
value: AtomicU8,
|
||||
}
|
||||
|
||||
pub fn cached(ctx: &egui::Context) -> Box<dyn Fn(bool) -> Option<bool>> {
|
||||
let state = Arc::new(Reading::default());
|
||||
let ctx = ctx.clone();
|
||||
Box::new(move |needed| {
|
||||
state.needed.store(needed, Ordering::Relaxed);
|
||||
if needed && !state.started.swap(true, Ordering::Relaxed) {
|
||||
let weak = Arc::downgrade(&state);
|
||||
let ctx = ctx.clone();
|
||||
if let Err(error) = std::thread::Builder::new().name("desktop-transparency".into()).spawn(move || {
|
||||
while let Some(state) = weak.upgrade() {
|
||||
if state.needed.load(Ordering::Relaxed) {
|
||||
let code = match read() {
|
||||
Some(true) => 1,
|
||||
Some(false) => 2,
|
||||
None => 0,
|
||||
};
|
||||
if state.value.swap(code, Ordering::Relaxed) != code {
|
||||
ctx.request_repaint();
|
||||
}
|
||||
}
|
||||
drop(state);
|
||||
std::thread::sleep(std::time::Duration::from_secs(5));
|
||||
}
|
||||
}) {
|
||||
log::warn!("desktop transparency: could not observe accessibility setting: {error}");
|
||||
}
|
||||
}
|
||||
match state.value.load(Ordering::Relaxed) {
|
||||
1 => Some(true),
|
||||
2 => Some(false),
|
||||
_ => None,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn read() -> Option<bool> {
|
||||
let key =
|
||||
winreg::RegKey::predef(winreg::enums::HKEY_CURRENT_USER).open_subkey(r"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize").ok()?;
|
||||
match key.get_value::<u32, _>("EnableTransparency").ok()? {
|
||||
0 => Some(true),
|
||||
1 => Some(false),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
fn read() -> Option<bool> {
|
||||
objc2::rc::autoreleasepool(|_| Some(objc2_app_kit::NSWorkspace::sharedWorkspace().accessibilityDisplayShouldReduceTransparency()))
|
||||
}
|
||||
@@ -24,8 +24,6 @@ mod come_forward;
|
||||
mod control_server;
|
||||
#[cfg(target_os = "linux")]
|
||||
mod desktop_theme;
|
||||
#[cfg(any(target_os = "windows", target_os = "macos"))]
|
||||
mod desktop_transparency;
|
||||
mod device_lost;
|
||||
#[cfg(target_os = "windows")]
|
||||
mod native_crash;
|
||||
@@ -541,10 +539,6 @@ fn services(cc: &eframe::CreationContext<'_>, folder: &DialogFolder) -> Services
|
||||
desktop_dark: Some(desktop_theme::start(&cc.egui_ctx)),
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
desktop_dark: None,
|
||||
#[cfg(any(target_os = "windows", target_os = "macos"))]
|
||||
reduce_transparency: Some(desktop_transparency::cached(&cc.egui_ctx)),
|
||||
#[cfg(not(any(target_os = "windows", target_os = "macos")))]
|
||||
reduce_transparency: None,
|
||||
http_get: Some(std::sync::Arc::new(http_get)),
|
||||
http_download: Some(std::sync::Arc::new(http_download)),
|
||||
// Already an installed app: only the browser build offers to install.
|
||||
@@ -901,8 +895,6 @@ fn main() -> eframe::Result {
|
||||
if let Err(e) = startup::relaunch_with_version_compat() {
|
||||
log::warn!("startup: OCLP check failed (continuing normally): {e}");
|
||||
}
|
||||
// SOLIDCRAFT_PROFILE=1: the profiler records from the start (diagnostics.profile reads it).
|
||||
solidcraft_engine::timing::profile_from_env();
|
||||
// Validate before legacy adoption, crash markers or any user preference read.
|
||||
let settings = settings_dir().map_err(|error| eframe::Error::AppCreation(error.into()))?;
|
||||
if std::env::var_os("SOLIDCRAFT_SETTINGS_DIR").is_none() {
|
||||
|
||||
@@ -181,7 +181,6 @@ pipe false
|
||||
plane false
|
||||
plane_along_path false
|
||||
plane_angle false
|
||||
plane_axis_point false
|
||||
plane_midplane false
|
||||
plane_perpendicular false
|
||||
plane_tangent false
|
||||
@@ -201,18 +200,6 @@ point_vertex false
|
||||
polygon false
|
||||
polygon_circumscribed false
|
||||
polygon_edge false
|
||||
prefs_appearance false
|
||||
prefs_assistant false
|
||||
prefs_design false
|
||||
prefs_general false
|
||||
prefs_graphics false
|
||||
prefs_layout false
|
||||
prefs_mouse3d false
|
||||
prefs_navigation false
|
||||
prefs_plugins false
|
||||
prefs_shortcuts false
|
||||
prefs_sketch false
|
||||
prefs_tools false
|
||||
presspull false
|
||||
print_face false
|
||||
project false
|
||||
@@ -244,7 +231,11 @@ section false
|
||||
select false
|
||||
send false
|
||||
settings false
|
||||
settings_profile false
|
||||
settings_keyboard false
|
||||
settings_monitor false
|
||||
settings_mouse false
|
||||
settings_palette false
|
||||
settings_plug false
|
||||
sheet false
|
||||
sheet_rules false
|
||||
shell false
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Appearance</title>
|
||||
<path d="M32 7.5C18 7.5 7.5 18.5 7.5 32C7.5 45.5 18.5 56.5 32 56.5C37.5 56.5 40 53 38 49C36 45 38.5 42 43 42L47.5 42C52.5 42 56.5 38 56.5 33C56.5 18.5 46 7.5 32 7.5Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><circle cx="20" cy="33" r="4" fill="currentColor"/><circle cx="28" cy="20" r="4" fill="currentColor"/><circle cx="42" cy="22" r="4" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 520 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Assistant</title>
|
||||
<path d="M29 12.5Q30.2 33.8 51.5 35Q30.2 36.2 29 57.5Q27.8 36.2 6.5 35Q27.8 33.8 29 12.5Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M50 6Q50.6 12.4 57 13Q50.6 13.6 50 20Q49.4 13.6 43 13Q49.4 12.4 50 6Z" fill="currentColor" stroke="currentColor" stroke-width="4.6" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 479 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Design</title>
|
||||
<path d="M32 7.7L53.04 19.85L53.04 44.15L32 56.3L10.96 44.15L10.96 19.85Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M10.96 19.85L32 32L53.04 19.85M32 32L32 56.3" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 427 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>General</title>
|
||||
<path d="M27.24 14.85L27.15 7.07L36.85 7.07L36.76 14.85L44.48 19.3L51.17 15.34L56.02 23.73L49.23 27.54L49.23 36.46L56.02 40.27L51.17 48.66L44.48 44.7L36.76 49.15L36.85 56.93L27.15 56.93L27.24 49.15L19.52 44.7L12.83 48.66L7.98 40.27L14.77 36.46L14.77 27.54L7.98 23.73L12.83 15.34L19.52 19.3Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 640 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Graphics</title>
|
||||
<path d="M14 8L50 8A6 6 0 0 1 56 14L56 38A6 6 0 0 1 50 44L14 44A6 6 0 0 1 8 38L8 14A6 6 0 0 1 14 8ZM32 44L32 54M20 54L44 54" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 323 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Layout</title>
|
||||
<path d="M14 10L50 10A6 6 0 0 1 56 16L56 48A6 6 0 0 1 50 54L14 54A6 6 0 0 1 8 48L8 16A6 6 0 0 1 14 10Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M24 10L24 54M24 39L56 39" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 436 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>3D mouse</title>
|
||||
<path d="M6.5 32A25.5 25.5 0 1 0 57.5 32A25.5 25.5 0 1 0 6.5 32Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M24 32A8 8 0 1 0 40 32A8 8 0 1 0 24 32Z" fill="currentColor" stroke="currentColor" stroke-width="4.08" stroke-linejoin="round" stroke-linecap="round"/><path d="M53.4 32L45.96 35.9L45.96 28.1Z" fill="currentColor" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round" stroke-linecap="round"/><path d="M32 53.4L28.1 45.96L35.9 45.96Z" fill="currentColor" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round" stroke-linecap="round"/><path d="M10.6 32L18.04 28.1L18.04 35.9Z" fill="currentColor" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round" stroke-linecap="round"/><path d="M32 10.6L35.9 18.04L28.1 18.04Z" fill="currentColor" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Navigation</title>
|
||||
<path d="M32 7A14 14 0 0 1 46 21L46 43A14 14 0 0 1 18 43L18 21A14 14 0 0 1 32 7Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M18 38L46 38" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M32 14L32 22" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 530 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Plugins</title>
|
||||
<path d="M24 7L24 20M40 7L40 20M16 20L48 20L48 28A16 16 0 0 1 16 28ZM32 44L32 57" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 279 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Shortcuts</title>
|
||||
<path d="M12 13L52 13A6 6 0 0 1 58 19L58 45A6 6 0 0 1 52 51L12 51A6 6 0 0 1 6 45L6 19A6 6 0 0 1 12 13Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><circle cx="18" cy="26" r="3.6" fill="currentColor"/><circle cx="28" cy="26" r="3.6" fill="currentColor"/><circle cx="38" cy="26" r="3.6" fill="currentColor"/><circle cx="48" cy="26" r="3.6" fill="currentColor"/><path d="M20 40L44 40" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 639 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Sketch</title>
|
||||
<path d="M7 57L25.53 51.48L12.52 38.47Z" fill="currentColor" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M7 57L25.53 51.48L53.81 23.2L40.8 10.19L12.52 38.47Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/><path d="M44.62 32.39L31.61 19.38" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 545 B |
@@ -1,4 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Tools</title>
|
||||
<path d="M56.86 18.45A16.5 16.5 0 0 1 37.12 39.04L22.33 53.83A8.6 8.6 0 0 1 10.17 41.67L24.96 26.88A16.5 16.5 0 0 1 45.55 7.14L37.55 15.14L39.94 24.06L48.86 26.45Z" fill="none" stroke="currentColor" stroke-width="6.8" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 360 B |
@@ -1,5 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Settings profile</title>
|
||||
<circle cx="32" cy="19" r="8" fill="none" stroke="currentColor" stroke-width="5.6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12 53C12 44.7157 20.9543 38 32 38C43.0457 38 52 44.7157 52 53" fill="none" stroke="currentColor" stroke-width="5.6" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 413 B |
@@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
||||
<title>Plane through axis and point</title>
|
||||
<path d="M26 15L56 32.32L38 42.71L8 25.39Z" fill="#b9ddf8" stroke="#236ead" stroke-width="2.55" stroke-linejoin="round" stroke-linecap="round" stroke-dasharray="0.1 5"/>
|
||||
<path d="M15 18.4L53 40.34" fill="none" stroke="currentColor" stroke-width="2.55" stroke-linejoin="round" stroke-linecap="round"/>
|
||||
<circle cx="22" cy="29" r="3.1" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 475 B |
@@ -1,8 +1,7 @@
|
||||
//! Navigation drawing definitions. Camera projection and picking remain in the UI widgets.
|
||||
use crate::theme::Tokens;
|
||||
use egui::{Color32, FontId, Pos2, Rect, Shape, Stroke, pos2, vec2};
|
||||
use solidcore_record::Vec3;
|
||||
use solidcraft_engine::geom::Ring;
|
||||
use solidcraft_engine::geom::{Ring, Vec3};
|
||||
pub(crate) struct Facet {
|
||||
pub(crate) direction: Vec3,
|
||||
pub(crate) points: Ring<Pos2>,
|
||||
@@ -152,12 +151,6 @@ pub(crate) fn curved_arrow(painter: &egui::Painter, at: Pos2, clockwise: bool, h
|
||||
/// The pointer target around a compass end: larger than the drawn disc, so it is easy to hit.
|
||||
pub(crate) const AXIS_RADIUS: f32 = 15.0;
|
||||
pub(crate) fn axis_tip(painter: &egui::Painter, c: Pos2, name: &str, d: &Vec3, at: Pos2, depth: f64, hovered: bool, t: Tokens) {
|
||||
axis_tip_scaled(painter, c, name, d, at, depth, hovered, t, 1.0);
|
||||
}
|
||||
|
||||
/// The same compass artwork at a uniform scale, including its lettering and strokes.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub(crate) fn axis_tip_scaled(painter: &egui::Painter, c: Pos2, name: &str, d: &Vec3, at: Pos2, depth: f64, hovered: bool, t: Tokens, scale: f32) {
|
||||
let col = if d.x != 0.0 {
|
||||
t.axis_x
|
||||
} else if d.y != 0.0 {
|
||||
@@ -170,11 +163,11 @@ pub(crate) fn axis_tip_scaled(painter: &egui::Painter, c: Pos2, name: &str, d: &
|
||||
// Positive shafts are the full axis colour; negative ones are a dimmed tint (and any end
|
||||
// pointing away from the viewer dims further).
|
||||
let ink = if !positive || depth < -0.01 { col.gamma_multiply(0.55) } else { col };
|
||||
let radius = if positive { 11.0 } else { 4.8 } * scale;
|
||||
let radius = if positive { 11.0 } else { 4.8 };
|
||||
let direction = (at - c).normalized();
|
||||
let width = 3.6 * scale;
|
||||
let width = 3.6;
|
||||
// A negative shaft stops at the outer edge of its ring; a positive one runs under its disc.
|
||||
let end = if positive { at - direction * radius } else { at - direction * (radius + 1.2 * scale) };
|
||||
let end = if positive { at - direction * radius } else { at - direction * (radius + 1.2) };
|
||||
painter.line_segment([c, end], Stroke::new(width, ink));
|
||||
// The round cap sits at the origin; the other end is covered by the disc or ring.
|
||||
painter.circle_filled(c, width / 2.0, ink);
|
||||
@@ -186,18 +179,18 @@ pub(crate) fn axis_tip_scaled(painter: &egui::Painter, c: Pos2, name: &str, d: &
|
||||
// kind turns fully white.
|
||||
if hovered {
|
||||
// Same outer size as the resting tip: a ring's outline is half its stroke outside.
|
||||
painter.circle_filled(at, if positive { radius } else { radius + 1.2 * scale }, t.on_accent);
|
||||
painter.circle_filled(at, if positive { radius } else { radius + 1.2 }, t.on_accent);
|
||||
// On the light theme a white disc vanishes into the compass, so it carries an outline in
|
||||
// the axis colour, drawn inside the disc so it does not grow.
|
||||
if light && positive {
|
||||
painter.circle_stroke(at, radius - scale, Stroke::new(2.0 * scale, col));
|
||||
painter.circle_stroke(at, radius - 1.0, Stroke::new(2.0, col));
|
||||
}
|
||||
}
|
||||
if positive {
|
||||
// On a hovered (white) disc the letter takes the axis colour.
|
||||
let letter = if hovered { col } else { t.on_accent };
|
||||
let label = name.to_uppercase();
|
||||
let galley = painter.layout_no_wrap(label, crate::fonts::bold(crate::theme::Tokens::get().font_compass * scale), letter);
|
||||
let galley = painter.layout_no_wrap(label, crate::fonts::bold(crate::theme::Tokens::get().font_compass), letter);
|
||||
let origin = at - galley.size() / 2.0;
|
||||
let ppp = painter.ctx().pixels_per_point().max(0.5);
|
||||
let origin = pos2((origin.x * ppp).round() / ppp, (origin.y * ppp).round() / ppp);
|
||||
@@ -208,7 +201,7 @@ pub(crate) fn axis_tip_scaled(painter: &egui::Painter, c: Pos2, name: &str, d: &
|
||||
at,
|
||||
radius,
|
||||
Stroke::new(
|
||||
2.4 * scale,
|
||||
2.4,
|
||||
if !hovered {
|
||||
ink
|
||||
} else if light {
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Pravougaoni",
|
||||
"Rectangular Tube": "Pravougaona cijev",
|
||||
"Reference face": "Referentno lice",
|
||||
"Reference plane": "Referentna ravan",
|
||||
"Relief Depth": "Dubina rasterećenja",
|
||||
"Relief Width": "Širina rasterećenja",
|
||||
"Remove Tools": "Ukloni alate",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Presjek",
|
||||
"Section (optional)": "Presjek (neobavezno)",
|
||||
"Section position": "Položaj presjeka",
|
||||
"Sections": "Presjeci",
|
||||
"Sections (one sketch each)": "Presjeci (po jedna skica)",
|
||||
"Select Other": "Izaberi drugo",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Izaberi drugo: držite lijevo dugme mirno na modelu (ili desni klik › Izaberi drugo…) da prikažete sve ispod pokazivača; ponovo kliknite na isto mjesto da izaberete sljedeći element. Dvaput kliknite srednjim dugmetom za Početni prikaz (Postavke › Navigacija).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (pričvršćenje izgubljeno)",
|
||||
"browser.sketch_editing": "{name} (uređuje se)",
|
||||
"browser.sketch_name": "Skica{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "već u svom dijelu",
|
||||
"browser.sketches_to_parts_design_body": "na tijelu samog dizajna",
|
||||
"browser.sketches_to_parts_moved": "Skice premještene u dio na kojem se nalaze: {moved}",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "na licu bez tačnog pričvršćenja",
|
||||
"browser.sketches_to_parts_not_on_face": "ne na licu dijela",
|
||||
"browser.sketches_to_parts_part_missing": "njihov dio više ne postoji",
|
||||
"browser.sketches_to_parts_result": "Skice premještene u dio na kojem se nalaze: {moved}; ostale na mjestu: {stayed} ({why})",
|
||||
"browser.units": "Jedinice: {units}",
|
||||
"cam.flat": "Ravno lice",
|
||||
"cam.follower": "Pratilac",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Izdvoji u datoteku",
|
||||
"cmd.component_finish_edit": "Završi uređivanje",
|
||||
"cmd.component_from_bodies": "Napravi komponente iz tijela",
|
||||
"cmd.component_hide_history": "Sakrij vremensku traku komponente",
|
||||
"cmd.component_insert_design": "Umetni dizajn",
|
||||
"cmd.component_links": "Popis veza",
|
||||
"cmd.component_list": "Popis komponenti",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Premjesti tijela u komponentu",
|
||||
"cmd.component_move_features": "Premjesti operacije u komponentu",
|
||||
"cmd.component_move_sketches": "Premjesti skice u komponentu",
|
||||
"cmd.component_move_sketches_to_parts": "Premjesti skice u njihove dijelove",
|
||||
"cmd.component_paste_from_design": "Zalijepi iz drugog dizajna",
|
||||
"cmd.component_paste_new": "Zalijepi kao novo",
|
||||
"cmd.component_properties": "Fizička svojstva komponente",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Preimenuj komponentu",
|
||||
"cmd.component_replace_with_link": "Zamijeni vezom",
|
||||
"cmd.component_revert_position": "Vrati položaj",
|
||||
"cmd.component_show_history": "Prikaži vremensku traku komponente",
|
||||
"cmd.component_unlock": "Otključaj sadržaj",
|
||||
"cmd.component_update_links": "Ažuriraj veze",
|
||||
"cmd.config_activate": "Aktiviraj konfiguraciju",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Pravilo konfiguracije",
|
||||
"cmd.config_rules": "Pravila konfiguracije",
|
||||
"cmd.config_table": "Prikaži tabelu konfiguracija",
|
||||
"cmd.construct.plane.axis_point": "Ravan kroz osu i tačku",
|
||||
"cmd.construct_axis_edge": "Osa kroz ivicu",
|
||||
"cmd.construct_axis_normal_to_face": "Osa okomita na lice",
|
||||
"cmd.construct_axis_through_cylinder": "Osa kroz cilindar/konus/torus",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Prikaži rastavljeni prikaz",
|
||||
"cmd.expr_evaluate": "Izračunaj izraz",
|
||||
"cmd.face_delete": "Izbriši lice",
|
||||
"cmd.file.export_3mf": "Izvezi 3MF",
|
||||
"cmd.file.export_obj": "Izvezi OBJ",
|
||||
"cmd.file.export_step": "Izvezi STEP",
|
||||
"cmd.file.export_stl": "Izvezi STL",
|
||||
"cmd.file.export_urdf": "Izvezi URDF",
|
||||
"cmd.file_export": "Izvoz",
|
||||
"cmd.file_insert_mesh": "Umetni mrežu",
|
||||
"cmd.file_insert_step": "Umetni STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Omogući boje komponenti",
|
||||
"cmd.inspect_colored_components_disable": "Onemogući boje komponenti",
|
||||
"cmd.inspect_compare": "Uporedi tijela",
|
||||
"cmd.inspect_compare_picture": "Uporedi sliku",
|
||||
"cmd.inspect_continuity": "Analiza kontinuiteta",
|
||||
"cmd.inspect_curvature_comb": "Analiza češlja zakrivljenosti",
|
||||
"cmd.inspect_curvature_map": "Analiza mape zakrivljenosti",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Uredi oblak tačaka",
|
||||
"cmd.pointcloud_insert": "Umetni oblak tačaka",
|
||||
"cmd.pointcloud_list": "Oblaci tačaka",
|
||||
"cmd.render.compare.divider": "Pomjeri razdjelnik poređenja renderovanja",
|
||||
"cmd.render.result.discard": "Odbaci rezultat renderovanja",
|
||||
"cmd.render.result.select": "Izaberi rezultat renderovanja",
|
||||
"cmd.render_aging_describe": "Slojevito starenje površine",
|
||||
"cmd.render_backends": "Pozadinski sistemi renderovanja",
|
||||
"cmd.render_batch": "Renderuj sve kadrove",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Splajn kontrolnih tačaka (stepen 5)",
|
||||
"cmd.sketch_spline_fit_point": "Splajn kroz tačke",
|
||||
"cmd.sketch_spline_insert_point": "Dodaj tačku splajna",
|
||||
"cmd.sketch_spline_remove_point": "Ukloni tačku splajna",
|
||||
"cmd.sketch_spline_reverse": "Obrni smjer splajna",
|
||||
"cmd.sketch_spun_profile": "Rotirani profil",
|
||||
"cmd.sketch_toggle_diameter": "Prebaci poluprečnik / prečnik",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Pomjeri oznaku vraćanja",
|
||||
"cmd.timeline_stop": "Zaustavi vremensku traku",
|
||||
"cmd.timeline_suppress": "Potisni operaciju",
|
||||
"cmd.ui.assistant": "Prikaži ili sakrij Asistenta",
|
||||
"cmd.view.render_browser": "Stablo renderovanja",
|
||||
"cmd.view.render_dock": "Premjesti panel renderovanja",
|
||||
"cmd.view.render_focus": "Prikaz fokusa renderovanja",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Alat za navigaciju",
|
||||
"cmd.view_top": "Pogled odozgo",
|
||||
"cmd.view_visual_style": "Vizuelni stil",
|
||||
"color.blue": "Plava",
|
||||
"color.copy": "Kliknite da kopirate vrijednosti boje",
|
||||
"color.edit": "Kliknite da uredite boju",
|
||||
"color.gamma": "Prikaz vrijednosti boje u gama prostoru 0-255",
|
||||
"color.green": "Zelena",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Unesite #rrggbb ili #rrggbbaa; šest cifara zadržava neprozirnost",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Nijansa",
|
||||
"color.linear": "Prikaz vrijednosti boje u linearnom prostoru 0-1",
|
||||
"color.recent": "Nedavne boje",
|
||||
"color.recent_help": "Ovdje se pojavljuju boje koje izaberete u bilo kojem polju boje",
|
||||
"color.red": "Crvena",
|
||||
"color.saturation": "Zasićenost (procenat)",
|
||||
"color.saturation_value": "Zasićenost i vrijednost",
|
||||
"color.selected": "Izabrana boja",
|
||||
"color.step_down": "Smanji za korak",
|
||||
"color.step_up": "Povećaj za korak",
|
||||
"color.value": "Vrijednost, svjetlina (procenat)",
|
||||
"config.column_filter_empty": "Nema odgovarajućih kolona",
|
||||
"config.rule_parameter_columns": "Prikazani su samo parametri koji imaju kolonu u tabeli. Dodajte kolonu pomoću Dodaj kolonu (+) da biste parametar koristili ovdje.",
|
||||
"config.rule_suppression_columns": "Prikazane su samo operacije koje imaju kolonu Potisni u tabeli. Dodajte kolonu pomoću Dodaj kolonu (+) da biste ovdje mogli upravljati operacijom.",
|
||||
"contact.components_count": "Komponente: {count}",
|
||||
"contact.enabled_label": "omogućeno",
|
||||
"coupling.gear_1": "Zupčanik 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Kota: {name}",
|
||||
"dialog.edit_title": "UREDI {title}",
|
||||
"dialog.no_shown_body": "Nema prikazanog tijela za izmjenu: prikažite jedno ili izaberite Novo tijelo",
|
||||
"dialog.pattern_sketch_not_object": "Izaberite tijela ili operacije: skica nije ni jedno ni drugo. Ponovite njene krive pomoću alata Niz ili Preslikaj u samoj skici ili je prvo ekstrudirajte.",
|
||||
"dialog.select": "↖ Izaberi",
|
||||
"dialog.selected_count": "↖ Izabrano: {count}",
|
||||
"dialog.selection_constraint": "Ograničenje {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · kriva {id}",
|
||||
"dialog.selection_guidance": "Izaberite ulaz da ga promijenite. Kliknite izabrane objekte da ih uklonite; Ctrl/Cmd-klik ih također uključuje i isključuje. Pogledajte pregled, a zatim pritisnite U redu.",
|
||||
"dialog.selection_midpoint": "Središnja tačka · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} od {total}: Izaberite {input}",
|
||||
"dialog.step": "Korak",
|
||||
"document.changed_on_disk": "{name} je promijenjen na disku",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Pravi pomoćnu osu kroz dvije tačke, vrhove ili tačke skice. Koristite je za osu koja prolazi između dva poznata položaja.",
|
||||
"help.construct.plane.along_path": "Pravi pomoćnu ravan okomitu na ivicu ili krivu, na nekom položaju duž nje. Koristite je da skicirate profil za povlačenje ili presjek putanje.",
|
||||
"help.construct.plane.at_angle": "Pravi pomoćnu ravan zakrenutu za ugao u odnosu na ravan ili lice, oko ose ili ivice. Koristite je za nagnute skice, npr. kutni nosač.",
|
||||
"help.construct.plane.axis_point": "Pravi pomoćnu ravan koja sadrži osu i tačku izvan te ose. Izaberite osu ishodišta ili pomoćnu osu, ravnu ivicu ili liniju skice, pa vrh, tačku skice ili pomoćnu tačku. Tačka na osi ne može odrediti jedinstvenu ravan.",
|
||||
"help.construct.plane.midplane": "Pravi pomoćnu ravan na pola puta između dvije ravni ili ravna lica, ili koja ih raspolavlja tamo gdje se sastaju pod uglom. Koristite je kao ravan simetrije za preslikavanje.",
|
||||
"help.construct.plane.offset": "Pravi pomoćnu ravan paralelnu s ravni ili ravnim licem, na određenoj udaljenosti ili kroz tačku. Koristite je da skicirate na zadatoj visini iznad lica.",
|
||||
"help.construct.plane.perpendicular": "Pravi pomoćnu ravan koja sadrži liniju ili ivicu i okomita je na ravan ili lice. Koristite je da skicirate uspravno na modelu duž ivice.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Provjerite vrstu spoja (npr. Kruti), učvršćenje, granice spoja i vrijednosti koje pokreću parametri.",
|
||||
"joint_move.blocked_title": "Ovaj dio se ne može pomjeriti",
|
||||
"joint_move.coarse": "Korak rotacije blizu ose (°)",
|
||||
"joint_move.conflict": "Jedan spoj ovog dijela je u sukobu s ostalima: {joint}.",
|
||||
"joint_move.conflict_hint": "Uredite, potisnite ili izbrišite spoj koji je u sukobu da bi ostali spojevi mogli postaviti dio.",
|
||||
"joint_move.distance": "Udaljenost od početka",
|
||||
"joint_move.done": "Gotovo",
|
||||
"joint_move.fine": "Korak rotacije dalje od ose (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Staza {number}",
|
||||
"nav.alias.help": "Shift+Alt+povlačenje lijevim dugmetom orbitira, Shift+Alt+srednjim pomjera, Shift+Alt+desnim zumira; povlačenje srednjim dugmetom također pomjera, a desnim orbitira",
|
||||
"nav.blender.help": "Povlačenje srednjim dugmetom orbitira, Shift+srednje pomjera, Ctrl+srednje zumira; povlačenje desnim dugmetom ne dira kameru",
|
||||
"nav.creo.help": "Povlačenje srednjim dugmetom orbitira, Shift+srednje pomjera, Ctrl+srednje uz vertikalno povlačenje zumira (prema dolje za približavanje); točkić također zumira",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Miš i 3D miš rotiraju kroz oba pola i čuvaju nagib. Privlačenje osa tipkom Shift je isključeno.",
|
||||
"nav.free_orbit.label": "Slobodno orbitiranje",
|
||||
"nav.free_orbit.snap_help": "Miš i 3D miš rotiraju kroz oba pola i čuvaju nagib. Držite Shift tokom povlačenja za orbitiranje da privučete smjer pogleda i nagib.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+lijevo povlačenje pomjera prikaz, Shift+Alt+lijevo zumira, Ctrl+lijevo povlačenje na praznom prostoru orbitira",
|
||||
"nav.inventor.help": "Povlačenje srednjim dugmetom pomjera, Shift+srednje orbitira, Ctrl+srednje zumira, povlačenje desnim orbitira",
|
||||
"nav.maya.help": "Alt+lijevo povlačenje orbitira, Alt+srednje pomjera, Alt+desno zumira; srednje povlačenje također pomjera",
|
||||
"nav.nx.help": "Povlačenje srednjim dugmetom orbitira, Shift+srednje pomjera (u NX-u srednje + desno), Ctrl+srednje zumira (u NX-u srednje + lijevo); povlačenje desnim dugmetom ne dira kameru",
|
||||
"nav.openscad.help": "Povlačenje lijevim dugmetom po praznom prostoru orbitira, Shift+povlačenje lijevim bira okvirom, povlačenje geometrije skice je uređuje; povlačenje desnim ili srednjim dugmetom pomjera, Shift+desno ili Shift+srednje zumira",
|
||||
"nav.perspective.sketch": "Uređivanje skice koristi ortografski prikaz. Završite skicu da prebacite na perspektivu.",
|
||||
"nav.right_drag_orbits.help": "Isključeno: povlačenje desnim dugmetom ne dira kameru, a desno dugme samo otvara kontekstni meni. Izbor mapiranja miša SolidWorks to isključuje.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Vijak s poluokruglom glavom i imbusom",
|
||||
"parts.family.dowel_pin": "Cilindrični zatik",
|
||||
"parts.family.hex_bolt": "Vijak sa šestougaonom glavom",
|
||||
"parts.family.hex_cap_screw_inch": "Vijak sa šestougaonom glavom (inč)",
|
||||
"parts.family.hex_nut": "Šestougaona matica",
|
||||
"parts.family.hex_nut_inch": "Šestougaona matica (inč)",
|
||||
"parts.family.set_screw": "Bezglavi vijak s imbusom, ravni vrh",
|
||||
"parts.family.socket_head_cap_screw": "Vijak s cilindričnom glavom i imbusom",
|
||||
"parts.family.washer": "Obična podloška",
|
||||
"parts.family.washer_sae": "Obična podloška, SAE (uska)",
|
||||
"parts.family.washer_uss": "Obična podloška, USS (široka)",
|
||||
"parts.holes": "Rupe (neobavezno)",
|
||||
"parts.placement_hint": "izaberite jednu ili više rupa da u svaku postavite dio, ili ga U redu postavlja u ishodište",
|
||||
"parts.system": "Sistem jedinica",
|
||||
"parts.system.inch": "Inčni",
|
||||
"parts.system.metric": "Metrički",
|
||||
"pattern.alignment_2": "Poravnanje 2",
|
||||
"pattern.alignment_hint": "Broj uključuje original. Centar ravnomjerno raspoređuje kopije; Obrni bira dodatnu stranu za parne ukupne brojeve.",
|
||||
"pattern.direction_1": "Smjer 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Povlačenje lijevim dugmetom",
|
||||
"prefs.button_middle": "Povlačenje srednjim dugmetom",
|
||||
"prefs.button_right": "Povlačenje desnim dugmetom",
|
||||
"prefs.carousel_next": "Sljedeće",
|
||||
"prefs.carousel_previous": "Prethodno",
|
||||
"prefs.choose_font": "Izaberi datoteku fonta…",
|
||||
"prefs.click": "Klik",
|
||||
"prefs.contact_shading": "Meko sjenčenje dodira",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Zakrivljene površi",
|
||||
"prefs.curves": "Zakrivljene površi",
|
||||
"prefs.cut_preview_tint": "Prikaži uklonjeni materijal u crvenoj boji",
|
||||
"prefs.cut_preview_tint_help": "Pregled ispunjava materijal koji operacija uklanja i oblik koji zamjenjuje crvenom prozirnom sjenom. Kada je isključeno, te ispune su potpuno prozirne i crtaju se samo njihovi obrisi.",
|
||||
"prefs.dark_parts_shading": "Zadrži oblik tamnih dijelova",
|
||||
"prefs.dark_parts_shading_help": "Sjenči prikaz u linearnom svjetlu s mekim dopunskim svjetlom neba, tako da tamna lica zadrže gradijent umjesto da pocrne",
|
||||
"prefs.dead_zone_note": "Šrafirana traka je mrtva zona: kretanje unutar nje se zanemaruje.",
|
||||
"prefs.default": "podrazumijevano",
|
||||
"prefs.design": "Podrazumijevane postavke dizajna",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Ivice i sjenčenje",
|
||||
"prefs.extend": "Produži",
|
||||
"prefs.extra_navigation": "Ctrl + povlačenje lijevim dugmetom po praznom prostoru orbitira; držite razmaknicu za pomjeranje.",
|
||||
"prefs.extrude_view_isometric": "Okreni prikaz u izometrijski kada se otvori Ekstrudiraj",
|
||||
"prefs.extrude_view_return": "Vrati se na prethodni prikaz kada se Ekstrudiraj zatvori",
|
||||
"prefs.follows_os": "Prati operativni sistem",
|
||||
"prefs.font": "Font",
|
||||
"prefs.font_fallback": "Znakovi koji nedostaju izabranom fontu prikazuju se ugrađenim fontom, tako da nijedna oznaka ne prikazuje prazan kvadrat.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automatski",
|
||||
"prefs.graphics_card_missing": "Sačuvana grafička kartica nije dostupna; koristi se Automatski.",
|
||||
"prefs.graphics_card_restart": "Stupa na snagu nakon ponovnog pokretanja SolidCrafta. WGPU_ADAPTER_NAME ima prednost nad ovim izborom.",
|
||||
"prefs.graphics_card_unused": "Sačuvana grafička kartica nije korištena za ovaj prozor; kartica koja se koristi prikazana je u Pomoć › O programu i u statusnoj traci. Pokušajte s opcijom Automatski ili postavite WGPU_ADAPTER_NAME na jedinstveni dio naziva kartice.",
|
||||
"prefs.graphics_note": "Žrtvujte brzinu za glatkoću. Svaki izbor pokazuje svoj učinak na primjeru.",
|
||||
"prefs.graphics_presets_note": "Unaprijed postavljene vrijednosti podešavaju sve izbore ispod odjednom.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Sakrij simbole ograničenja kada je prikaz umanjen",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Kada je Skice postavljeno na Ispod svoje operacije, vremenska traka lijevo prikazuje svaku skicu jedan nivo uvučeno, ispod prve operacije napravljene iz nje, kad god je dovoljno široka za nazive. Vremenska traka na dnu uvijek zadržava redoslijed nastanka.",
|
||||
"prefs.history_sketches_under_feature": "Ispod svoje operacije",
|
||||
"prefs.hold_stop_snapping": "Držite da isključite privlačenje",
|
||||
"prefs.home_fit_size": "Veličina za Početni prikaz i Uklopi",
|
||||
"prefs.home_fit_size_note": "Koliki dio prikaza model ispunjava kada ga uokviri Početni prikaz, Uklopi, otvaranje dizajna ili promjena prikaza u navigatoru, bez obzira na to je li postavka ispod uključena. 100 %: ispunjava prikaz između panela, kompasa i navigacijske trake.",
|
||||
"prefs.icons_only": "Samo ikone",
|
||||
"prefs.imported_file": "Uvezena datoteka",
|
||||
"prefs.in_browser": "U stablu modela",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Jezik interfejsa",
|
||||
"prefs.interface_note": "Kako SolidCraft izgleda i gdje su njegovi dijelovi.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Obrni zakrivljene strelice za valjanje",
|
||||
"prefs.invert_curved_roll_arrows_note": "Dvije zakrivljene strelice u uglu kocke valjaju prikaz unutar ravni ekrana. Uključeno: strelica u smjeru kazaljke na satu valja prikaz suprotno od smjera kazaljke na satu, a strelica suprotno od smjera kazaljke na satu valja ga u smjeru kazaljke na satu. Isključeno: svaka strelica valja prikaz onako kako je zakrivljena.",
|
||||
"prefs.invert_navigator_arrows": "Obrni strelice za rotaciju kocke prikaza",
|
||||
"prefs.invert_navigator_arrows_note": "Strelice oko kocke orbitiraju kameru u smjeru u kojem pokazuju, kao u programima Fusion i Inventor: strelica s lijeve strane pokazuje udesno i zakreće kameru udesno. Isključeno: strelica okreće kocku prema strani na kojoj se nalazi, pa lijeva strelica zakreće kameru ulijevo. Postavka ne utiče na zakrivljene strelice za valjanje.",
|
||||
"prefs.keep_work_on_tab_switch": "Zadrži dijaloge i alate otvorenima pri prebacivanju između dizajna",
|
||||
"prefs.keep_work_on_tab_switch_note": "Svaka kartica dizajna zadržava svoj otvoreni dijalog ili alat, s onim što ste u njemu izabrali i upisali, te svoju karticu trake s alatima. Kada se vratite na dizajn, ponovo su tu. Isključeno: prebacivanje između dizajna otkazuje ih i prikazuje karticu Model.",
|
||||
"prefs.labels": "Oznake",
|
||||
"prefs.language_system": "Sistem",
|
||||
"prefs.layout": "Raspored",
|
||||
"prefs.layout_note": "Kompaktno pričvršćuje panele uz ivice prozora. Prozirnost stabla modela dostupna je u opciji Plutajuće. Stranu Asistenta promijenite na stranici Asistent.",
|
||||
"prefs.left": "Lijevo",
|
||||
"prefs.left_click": "Lijevi klik",
|
||||
"prefs.line_drag_draws_one": "Pritisak i povlačenje crta jednu liniju",
|
||||
"prefs.line_drag_draws_one_note": "U alatu Linija pritisak, povlačenje i puštanje crta jednu liniju od mjesta pritiska do mjesta puštanja i tu se završava. Klikovi i dalje crtaju lanac. Isključeno: povlačenje postavlja tačku tamo gdje se pusti, kao i klik.",
|
||||
"prefs.line_hover_tangent_arc": "Zadržite pokazivač na posljednjoj tački linije da pređete na tangentni luk",
|
||||
"prefs.line_hover_tangent_arc_note": "U alatu Linija, nakon što je nacrtan segment, odmaknite pokazivač od posljednje tačke lanca, vratite ga na nju i držite ga mirno: sljedeći klik završava tangentni luk, a isti pokret vraća na linije. Isključeno: zadržavanje na toj tački ne radi ništa.",
|
||||
"prefs.linked_designs": "Povezani dizajni",
|
||||
"prefs.live_input": "Ulaz uživo",
|
||||
"prefs.live_preview": "Pregled uživo",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Mapiranje miša",
|
||||
"prefs.navigation": "Navigacija",
|
||||
"prefs.navigation_note": "Kako miš, trackpad i 3D miš pomjeraju prikaz.",
|
||||
"prefs.navigator_fit": "Uklopi model nakon promjene prikaza u navigatoru",
|
||||
"prefs.navigator_fit_note": "Lice, ugao ili strelica kocke prikaza, odnosno osa alata za orijentaciju, također usmjerava pogled na sredinu modela s jedne udaljenosti na kojoj se uklapa iz svakog smjera (njegova granična sfera). Početni prikaz koristi isti zum i centar dok je ova opcija uključena, pa se prikazi koje izaberete poslije njega samo okreću. Isključeno: prikaz se okreće na mjestu i zadržava svoj cilj i zum.",
|
||||
"prefs.network_host_remove": "Ukloni",
|
||||
"prefs.network_locations": "Dozvoli mrežne lokacije u dizajnima",
|
||||
"prefs.network_locations_note": "Isključeno: povezane datoteke dizajna na drugom računaru (\\\\server\\share) otvaraju se samo sa servera navedenih ovdje ili nakon što ga dozvolite kada se to zatraži.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Postavljanje",
|
||||
"prefs.prefer_free_sketch_points": "Daj prednost pokretnim tačkama skice kada se tačke preklapaju",
|
||||
"prefs.preview_choices": "Pregled vaših izbora",
|
||||
"prefs.preview_tint_new_faces": "Oboji novu površ u pregledu",
|
||||
"prefs.preview_tint_new_faces_help": "Pregled operacije koja mijenja tijelo može nacrtati površ koju dodaje u boji pregleda. Kada je isključeno, tijelo se crta kakvo jest.",
|
||||
"prefs.print_face_highlight": "Isticanje površine za štampu",
|
||||
"prefs.print_face_highlight_tip": "Koliko se jako površina za štampu tijela boji i obrubljuje u prikazu. 0 % ne prikazuje isticanje.",
|
||||
"prefs.profile_active": "Aktivni profil",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Koristi prethodni budžet geometrije za pregled renderovanja",
|
||||
"prefs.render_previous_geometry_budget_help": "Vraća prethodno fiksno ograničenje geometrije (512 MiB na 64-bitnim desktop računarima, 128 MiB drugdje) umjesto budžeta prema uređaju.",
|
||||
"prefs.reports_saved": "Sačuvano: {n}",
|
||||
"prefs.ribbon_click_ends_tool": "Klik na dugme aktivnog alata završava ga",
|
||||
"prefs.ribbon_click_ends_tool_note": "Klik na istaknuto dugme na traci alata za skiciranje koji je u upotrebi završava taj alat, pa klikovi u prikazu ponovo služe za biranje. Isključeno: klik ponovo pokreće alat.",
|
||||
"prefs.ribbon_reveal": "Prikaži rezultate pretrage na traci",
|
||||
"prefs.ribbon_reveal_note": "Zadržavanje pokazivača iznad rezultata u Pretraži komande pokazuje gdje se komanda nalazi na traci: njenu karticu, njeno dugme ili njen red u padajućem meniju panela. Komanda pokrenuta iz pretrage tamo trepće, a pokrenuta komanda iz padajućeg menija označava svoj panel.",
|
||||
"prefs.right_click": "Desni klik",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Vrati se na prethodni prikaz",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Vrati se osim ako je rotirano",
|
||||
"prefs.sketch_exit_view_note": "Kuda prikaz ide nakon Završi skicu, Otkaži ili dvostrukog Esc.",
|
||||
"prefs.sketch_face_activates_part": "Skiciranje na licu dijela čini taj dio aktivnim",
|
||||
"prefs.sketch_face_activates_part_note": "Skica započeta na licu tijela druge komponente prvo aktivira tu komponentu, pa skica pripada njoj i u stablu modela ostaje uz taj dio. Taj dio nakon toga ostaje aktivan. Isključeno: skica pripada aktivnoj komponenti.",
|
||||
"prefs.sketch_open_look_at": "Okreni kameru prema skici kad se otvori",
|
||||
"prefs.sketch_open_look_at_note": "Isključeno: kad napravite ili uredite skicu, prikaz ostaje onakav kakav jest. Pogledaj okreće prikaz prema skici kad to želite.",
|
||||
"prefs.sketch_recent_snap": "Automatski privlači na nedavne centre i središnje tačke",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Greška",
|
||||
"prefs.status_selected": "Izabrano",
|
||||
"prefs.status_warning": "Upozorenje",
|
||||
"prefs.structure.appearance": "Izgled",
|
||||
"prefs.structure.appearance_note": "Boje, tekst i pristupačnost.",
|
||||
"prefs.structure.in_profile": "U profilu",
|
||||
"prefs.structure.layout": "Raspored",
|
||||
"prefs.structure.layout_note": "Gdje se nalaze dijelovi prozora.",
|
||||
"prefs.structure.look": "Vizuelno",
|
||||
"prefs.structure.measure_pointer": "Mjerenje i pokazivač",
|
||||
"prefs.structure.mouse3d": "3D miš",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse i SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Miš i trackpad. 3D miš ima vlastitu stranicu.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Promijenjeno otkako je sačuvano",
|
||||
"prefs.structure.profile_hover": "Sačuvano u profilima postavki",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Skica",
|
||||
"prefs.structure.tools": "Alati",
|
||||
"prefs.structure.tools_note": "Kako se ponašaju alati za modeliranje.",
|
||||
"prefs.structure.work": "Rad",
|
||||
"prefs.supersampling_brief": "Iscrtava prikaz većim i smanjuje ga filtriranjem: vrlo oštro i zahtjevnije.",
|
||||
"prefs.tab_accent_note": "Naglasna boja prati aktivnu karticu",
|
||||
"prefs.theme_file": "datoteka teme",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Osnovna boja · sRGB",
|
||||
"render.base_metallic": "Metalni udio",
|
||||
"render.base_opaque_only": "Ovaj uređivač čuva semantiku neprozirnih tijela. Za optičko propuštanje koristite izričite kontrole stakla.",
|
||||
"render.batch_all_shots": "Svi kadrovi ({count})",
|
||||
"render.batch_empty": "Sačuvajte kadar prije renderovanja svih kadrova.",
|
||||
"render.batch_limit": "Renderovanje svih kadrova ograničeno je na 32 kadra.",
|
||||
"render.batch_status": "U toku: {running} · Na čekanju: {waiting}",
|
||||
"render.bloom_enable": "Sjaj prikaza",
|
||||
"render.bloom_help": "Kreativni sjaj samo na izlazu iz pozitivnih linearnih svijetlih dijelova, raširen kroz tri normalizovana prolaza kutijastog filtera. Poluprečnik je u pikselima izlaza. Dodaje se u linearnoj svjetlosti prikaza prije sRGB-a; nije objektiv, volumetrijski efekat niti poboljšanje konvergencije. Sirovi EXR ostaje nepromijenjen.",
|
||||
"render.bloom_opaque": "Sjaj zahtijeva neprozirni izlaz. Prozirni PNG se odbija, a ne spljoštava tiho.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Prvo izaberite izgled u Izgledima",
|
||||
"render.chromatic_offset": "Hromatski pomak ivica",
|
||||
"render.clear_stage": "Ukloni sačuvanu scenu",
|
||||
"render.compare_divider": "Razdjelnik poređenja",
|
||||
"render.compare_live": "Uživo",
|
||||
"render.compare_live_preview": "Pregled uživo",
|
||||
"render.compare_render": "Renderovanje {number}",
|
||||
"render.compare_side": "Renderovanje {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · zabilježeno u reviziji {revision}",
|
||||
"render.compare_swap": "Zamijeni strane",
|
||||
"render.copy_request": "Kopiraj JSON",
|
||||
"render.cpu_aa_help": "Prostorni uzorci: više uzoraka poboljšava ivice i produžava renderovanje.",
|
||||
"render.cpu_area_add": "Dodaj pravougaono CPU svjetlo",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Prikazuje se posljednja završena slika; novije renderovanje je još nije zamijenilo.",
|
||||
"render.result_sequence": "Kontrolna tačka",
|
||||
"render.result_title": "Rezultat renderovanja",
|
||||
"render.results_choose": "Zadržani rezultati",
|
||||
"render.results_label": "Renderovanje {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [zastarjelo]",
|
||||
"render.results_unnamed": "Slika",
|
||||
"render.return_design": "Nazad na Dizajn",
|
||||
"render.review_stale": "Ovaj pregled je zastario. Riješite ga ili ponovo provjerite prije primjene.",
|
||||
"render.ribbon_aging": "Starenje",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Počnite znakom = da riječi složite iz parametara: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Kurziv",
|
||||
"sketch_text.loading_fonts": "Traženje instaliranih fontova…",
|
||||
"sketch_text.no_bold": "Ugrađeni font nema podebljanu varijantu: izaberite instalirani font",
|
||||
"sketch_text.on_path": "Tekst prati svoju putanju: kriva ga postavlja",
|
||||
"sketch_text.path_clear": "Skini tekst s njegove krive",
|
||||
"sketch_text.path_hint": "Kriva skice koju tekst prati: kliknite ovdje, a zatim krivu",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "oba ishodišta su na istoj komponenti",
|
||||
"thread.automatic_size": "Automatska veličina",
|
||||
"thread.designation": "Oznaka",
|
||||
"thread.direction": "Smjer navoja",
|
||||
"thread.iso_metric": "ISO metrički",
|
||||
"thread.left_hand": "Lijevi",
|
||||
"thread.right_hand": "Desni",
|
||||
"thread.select_size": "Izaberite veličinu",
|
||||
"timeline.delete_after_marker_one": "Izbriši 1 operaciju nakon oznake vraćanja",
|
||||
"timeline.delete_after_marker_other": "Izbriši operacije nakon oznake vraćanja: {count}",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Pokrenite ovo u terminalu, a zatim pritisnite Poveži ponovo:",
|
||||
"ui.agent_chat_auth_title": "Prijavi se kod agenta",
|
||||
"ui.agent_chat_cancel": "Otkaži",
|
||||
"ui.agent_chat_cancel_timeout": "Agent nije odgovorio na Zaustavi pa je veza s njim prekinuta. Povežite se ponovo da biste nastavili.",
|
||||
"ui.agent_chat_cannot_start": "Instalirano, ali se ne pokreće: {error}",
|
||||
"ui.agent_chat_changes": "Promjene: {n}, jedan korak poništavanja",
|
||||
"ui.agent_chat_changes_n": "Promjene: {n}",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Komanda agenta",
|
||||
"ui.agent_chat_connect": "Poveži",
|
||||
"ui.agent_chat_copy": "Kopiraj",
|
||||
"ui.agent_chat_copy_message": "Kopiraj poruku",
|
||||
"ui.agent_chat_ctx_bodies": "Tijela",
|
||||
"ui.agent_chat_ctx_elements": "Elementi",
|
||||
"ui.agent_chat_ctx_features": "Operacije",
|
||||
"ui.agent_chat_ctx_more": "+još {n}",
|
||||
"ui.agent_chat_ctx_other": "Ostalo",
|
||||
"ui.agent_chat_custom_heading": "Prilagođeni model",
|
||||
"ui.agent_chat_custom_hint": "Bilo koji program koji govori Agent Client Protocol na stdin i stdout. Ne pokreće ga nikakva ljuska.",
|
||||
"ui.agent_chat_denied": "Odbijeno",
|
||||
"ui.agent_chat_deny": "Odbij",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Sve",
|
||||
"ui.agent_chat_mode_ask": "Pitaj",
|
||||
"ui.agent_chat_mode_edits": "Izmjene",
|
||||
"ui.agent_chat_model_custom": "Koristi prilagođeni: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} ne može koristiti SolidCraft alate, pa može samo razgovarati. Izaberite model s podrškom za alate.",
|
||||
"ui.agent_chat_model_rejected": "Agent nije prihvatio model {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Pretraži modele…",
|
||||
"ui.agent_chat_model_tip": "Model koji agent koristi. Vaš izbor se pamti za ovog agenta.",
|
||||
"ui.agent_chat_models_failed": "Popis modela nije moguće učitati: {error}",
|
||||
"ui.agent_chat_models_heading": "Dostupni modeli",
|
||||
"ui.agent_chat_models_listing": "Učitavanje popisa modela…",
|
||||
"ui.agent_chat_models_none": "Krajnja tačka ne navodi nijedan model",
|
||||
"ui.agent_chat_models_not_a_list": "Odgovor nije popis modela",
|
||||
"ui.agent_chat_new": "Novi razgovor",
|
||||
"ui.agent_chat_new_confirm": "Započeti novi razgovor? Trenutni će biti obrisan.",
|
||||
"ui.agent_chat_next_picture": "Sljedeća slika",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Dozvole",
|
||||
"ui.ai_preset": "Unaprijed postavljeno",
|
||||
"ui.ai_protocol": "Protokol",
|
||||
"ui.ai_reasoning_effort": "Nivo zaključivanja",
|
||||
"ui.ai_reasoning_effort_field_hint": "prazno = podrazumijevana vrijednost pružaoca",
|
||||
"ui.ai_reasoning_effort_hint": "Neobavezno. Šalje se krajnjoj tački kao `reasoning_effort`; prihvaćene vrijednosti razlikuju se od pružaoca do pružaoca (na primjer `low`, `high` ili `max`). SolidCraft nikad ne mijenja vrijednost koju ovdje postavite. Ostavite prazno da se ništa ne šalje i da se zadrži podrazumijevana vrijednost pružaoca.",
|
||||
"ui.ai_remove": "Ukloni",
|
||||
"ui.ai_request_timed_out": "Model je trajao duže od {seconds} s. Vremensko ograničenje zahtjeva za ovu krajnju tačku možete povećati u Postavke › Asistent.",
|
||||
"ui.ai_request_timeout": "Vremensko ograničenje zahtjeva",
|
||||
@@ -4474,11 +4348,9 @@
|
||||
"ui.construction.contact_hint": "Tangenta: izaberite krug/luk ili otvoreni splajn/koniku, pa tačku dodira (krive slobodnog oblika: krajnje tačke)",
|
||||
"ui.construction.external_hint": "Tangenta: izaberite krug ili luk, vanjsku tačku, pa željeno rješenje",
|
||||
"ui.construction.free_hint": "Pomoćna prava: kliknite dvije tačke; desnim klikom počnite ispočetka",
|
||||
"ui.construction.normal_needs_length": "Beskonačna linija je uvijek pomoćna: upišite dužinu da biste nacrtali običnu liniju",
|
||||
"ui.construction.point_hint": "Pomoćna prava: kliknite tačku kroz koju prolazi",
|
||||
"ui.construction.reference_hint": "Pomoćna prava: izaberite pravu liniju, pa tačku; desnim klikom promijenite referencu",
|
||||
"ui.construction.ribbon_label": "Pomoćne",
|
||||
"ui.construction.side_hint": "Pomoćna prava: kliknite stranu prema kojoj linija ide; desnim klikom počnite ispočetka",
|
||||
"ui.context_menu": "Kontekstni meni",
|
||||
"ui.continuity_g0": "G0 pregib",
|
||||
"ui.continuity_g1": "G1 tangentno",
|
||||
@@ -4506,7 +4378,6 @@
|
||||
"ui.dark": "Tamna",
|
||||
"ui.default_modelling_orientation": "Podrazumijevana orijentacija modeliranja",
|
||||
"ui.delete": "Izbriši",
|
||||
"ui.delete_select_first": "Prvo izaberite šta želite izbrisati: operacije, tijela, komponente ili geometriju skice",
|
||||
"ui.depth": "Dubina",
|
||||
"ui.design": "Dizajn",
|
||||
"ui.design_properties.author": "Autor",
|
||||
@@ -4599,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Dio je sačuvan u drugu datoteku; sklop i dalje povezuje: {name}",
|
||||
"ui.edit_in_place_wait": "Pričekajte da se završi ono što se izvršava u dizajnu",
|
||||
"ui.edit_section_analysis": "Uredi analizu presjeka",
|
||||
"ui.edit_sketch_empty": "Nema skica za uređivanje",
|
||||
"ui.ellipse": "Elipsa",
|
||||
"ui.emboss_wrap_note": "Ortogonalni linijski profili koji tangiraju jedan podržani cilindar obavijaju se automatski. Izaberite zid da izaberete cilj.",
|
||||
"ui.end_radius": "Krajnji poluprečnik",
|
||||
@@ -4610,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Eksplicitno",
|
||||
"ui.equation_form": "Oblik",
|
||||
"ui.equation_note": "Varijabla je običan broj: sin(t) je uzima u radijanima. Rezultat bez jedinice je u jedinici dizajna.",
|
||||
"ui.equation_note_range": "Varijabla je dužina, kao i njen raspon: kombinujte je s parametrima dužine, a za sin() je podijelite dužinom. Rezultat bez jedinice je u jedinici dizajna.",
|
||||
"ui.equation_parametric": "Parametarski",
|
||||
"ui.equation_variable_unit": "Varijabla ima jedinicu raspona",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4744,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Sakrij ishodište",
|
||||
"ui.hidePlanes": "Sakrij ravni",
|
||||
"ui.hideProfile": "Sakrij profil",
|
||||
"ui.hide_component_history": "Sakrij njenu vremensku traku",
|
||||
"ui.hide_origin_by_default": "Podrazumijevano sakrij ishodište",
|
||||
"ui.hide_origin_note": "Novi dizajni počinju sa skrivenim folderom Ishodište. Dizajn zadržava vlastitu postavku Ishodišta kada ga prikažete ili sakrijete.",
|
||||
"ui.history_back": "Idi korak nazad",
|
||||
@@ -4752,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "dvaput kliknite ivicu",
|
||||
"ui.history_first": "Idi na početak",
|
||||
"ui.history_forward": "Idi korak naprijed",
|
||||
"ui.history_hide_hidden": "Sakrij skrivene komponente",
|
||||
"ui.history_hide_names": "Sakrij nazive",
|
||||
"ui.history_last": "Idi na kraj",
|
||||
"ui.history_marker_tip": "Oznaka vraćanja: povucite da vratite model unazad; nove operacije dolaze ovdje",
|
||||
@@ -4762,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Prikaži dugme za reprodukciju",
|
||||
"ui.history_play_finish_action": "Završite trenutnu radnju prije reprodukcije vremenske trake",
|
||||
"ui.history_play_roll_back": "Pomjerite oznaku vraćanja unazad prije reprodukcije",
|
||||
"ui.history_show_hidden": "Prikaži skrivene komponente",
|
||||
"ui.history_show_names": "Prikaži nazive",
|
||||
"ui.history_sketch_listed_under": "Navedeno ispod {feature}",
|
||||
"ui.history_title": "Vremenska traka",
|
||||
"ui.history_toggle_names": "Prikaži ili sakrij nazive operacija",
|
||||
"ui.history_waits_for_editor": "Poništi, Ponovi i vremenska traka čekaju dok se ne otvori uređivač operacije",
|
||||
"ui.hole": "Rupa",
|
||||
"ui.hole_tap_type": "Vrsta navoja rupe",
|
||||
"ui.hole_type": "Vrsta rupe",
|
||||
@@ -4783,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} ima nesačuvane promjene, pa je umetnuta njegova sačuvana datoteka. Sačuvajte ga, a zatim pokrenite Ažuriraj veze da unesete promjene.",
|
||||
"ui.insert_design.unsaved": "Nesačuvane promjene",
|
||||
"ui.inspect": "Pregledaj",
|
||||
"ui.instances": "Instance",
|
||||
"ui.intersect": "Presjek",
|
||||
"ui.isolate": "Izoluj",
|
||||
"ui.join": "Spoji",
|
||||
@@ -4792,14 +4655,12 @@
|
||||
"ui.joints": "Spojevi",
|
||||
"ui.keyboard_shortcuts": "Prečice na tastaturi",
|
||||
"ui.language": "Jezik",
|
||||
"ui.lasso_select": "Laso (povucite petlju slobodnom rukom: uzima sve što je u cijelosti unutra)",
|
||||
"ui.layout_compact": "Kompaktno",
|
||||
"ui.layout_floating": "Plutajuće",
|
||||
"ui.length": "Dužina",
|
||||
"ui.length_decimals": "Decimale dužine",
|
||||
"ui.light": "Svijetla",
|
||||
"ui.line": "Linija",
|
||||
"ui.line_arc_hint": "Tangentni luk: kliknite kraj luka. Ponovo se zadržite na posljednjoj tački za linije; desni klik ili Esc za završetak",
|
||||
"ui.link_copies": "Poveži identične kopije",
|
||||
"ui.link_copies_keep": "Zadrži",
|
||||
"ui.link_copies_link": "Poveži",
|
||||
@@ -4888,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Ponovo gradi dio, zamjenjujući sve dodane operacije. Svi primjerci ove komponente se ažuriraju.",
|
||||
"ui.paste": "Zalijepi",
|
||||
"ui.path": "Putanja",
|
||||
"ui.pattern_object_type_tip": "Tijela: puni oblici, biraju se u prikazu ili u stablu modela; svako se kopira u cijelosti.\nOperacije: koraci vremenske trake, poput ekstruzije ili rupe, biraju se na vremenskoj traci ili na licu koje su napravili; korak se ponavlja.\nSkica nije ni jedno ni drugo: ponovite njene krive pomoću alata Niz ili Preslikaj u samoj skici ili je prvo ekstrudirajte.",
|
||||
"ui.pattern_on_path": "Niz duž putanje",
|
||||
"ui.perforate_margin_default": "iz prečnika",
|
||||
"ui.perforate_pitch": "Korak",
|
||||
@@ -4934,9 +4794,9 @@
|
||||
"ui.polygon": "Poligon",
|
||||
"ui.preferences": "Postavke",
|
||||
"ui.press_a_key": "pritisnite tipku…",
|
||||
"ui.print_face_body_not_sent": "Tijelo te površine se ne šalje: prvo ga dodajte u Tijela",
|
||||
"ui.print_face_cleared": "{body}: površina za štampu uklonjena",
|
||||
"ui.print_face_input": "Površina za štampu",
|
||||
"ui.print_face_one_body": "Površina za štampu pripada jednom tijelu: pošaljite to tijelo samo da biste je promijenili",
|
||||
"ui.print_face_pick": "Odaberite ravnu površinu punog tijela da postane površina za štampu",
|
||||
"ui.print_face_set": "{body}: površina za štampu postavljena; Pošalji u slajser polaže tijelo na nju",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5048,7 +4908,6 @@
|
||||
"ui.showDimension": "Prikaži kotu",
|
||||
"ui.showOrigin": "Prikaži ishodište",
|
||||
"ui.showPlanes": "Prikaži ravni",
|
||||
"ui.show_component_history": "Prikaži njenu vremensku traku",
|
||||
"ui.show_constraints": "Ograničenja",
|
||||
"ui.show_construction_geometries": "Pomoćna geometrija",
|
||||
"ui.show_dimensions": "Kote",
|
||||
@@ -5165,15 +5024,12 @@
|
||||
"ui.view_angles": "Uglovi prikaza",
|
||||
"ui.view_angles_convention": "Stepeni oko ose prema gore. Skretanje 0° je pogled sprijeda, 90° slijeva, −90° zdesna, 180° straga; nagib 90° je pogled odozgo; pozitivno valjanje okreće model u smjeru kazaljke na satu.",
|
||||
"ui.view_angles_help": "Prikazuje nagib, skretanje i valjanje prikaza u stepenima i njegovu projekciju ispod alata za orijentaciju. Kliknite očitanje da upišete tačne uglove.",
|
||||
"ui.view_angles_lock": "Zaključaj {axis}",
|
||||
"ui.view_angles_ortho": "Ortogr.",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Nagib",
|
||||
"ui.view_angles_readout": "Nagib {pitch} · Skretanje {yaw} · Valjanje {roll}",
|
||||
"ui.view_angles_roll": "Valjanje",
|
||||
"ui.view_angles_unlock": "Otključaj {axis}",
|
||||
"ui.view_angles_yaw": "Skretanje",
|
||||
"ui.view_angles_zero": "Postavi {axis} na 0°",
|
||||
"ui.view_centre": "Centar prikaza",
|
||||
"ui.viewport_status_clear": "Isključi: {name}",
|
||||
"ui.viewport_status_clear_hint": "Isključi: {name} · Esc",
|
||||
@@ -5275,7 +5131,6 @@
|
||||
"web.open_link": "Otvoriti povezani dizajn?",
|
||||
"web.open_link_confirm": "Postoje nesačuvane promjene. Otvoriti povezani dizajn u novoj kartici?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ izaberi · Enter / Tab dovrši · Esc odbaci",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ izbor · Enter primjenjuje ovu vrijednost",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ izaberi · Enter primjenjuje ono što ste upisali · Esc odbaci",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter nastavlja na GitHubu."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Obdélníkový",
|
||||
"Rectangular Tube": "Obdélníková trubka",
|
||||
"Reference face": "Referenční plocha",
|
||||
"Reference plane": "Referenční rovina",
|
||||
"Relief Depth": "Hloubka odlehčení",
|
||||
"Relief Width": "Šířka odlehčení",
|
||||
"Remove Tools": "Odstranit nástroje",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Řez",
|
||||
"Section (optional)": "Průřez (volitelné)",
|
||||
"Section position": "Poloha průřezu",
|
||||
"Sections": "Průřezy",
|
||||
"Sections (one sketch each)": "Průřezy (každý jeden náčrt)",
|
||||
"Select Other": "Vybrat jiné",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Vybrat jiné: podržte levé tlačítko na modelu (nebo pravé tlačítko › Vybrat jiné…) a zobrazí se vše pod kurzorem; dalším kliknutím na stejné místo vyberete další prvek. Dvojklikem prostředním tlačítkem přejdete na výchozí pohled (Předvolby › Navigace).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (uchycení ztraceno)",
|
||||
"browser.sketch_editing": "{name} (upravuje se)",
|
||||
"browser.sketch_name": "Náčrt{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "už jsou ve svém dílu",
|
||||
"browser.sketches_to_parts_design_body": "leží na tělese samotného návrhu",
|
||||
"browser.sketches_to_parts_moved": "Přesunuto náčrtů do dílu, na kterém leží: {moved}",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "leží na ploše bez přesného připojení",
|
||||
"browser.sketches_to_parts_not_on_face": "neleží na ploše dílu",
|
||||
"browser.sketches_to_parts_part_missing": "jejich díl už neexistuje",
|
||||
"browser.sketches_to_parts_result": "Přesunuto náčrtů do dílu, na kterém leží: {moved}; na místě zůstalo: {stayed} — {why}",
|
||||
"browser.units": "Jednotky: {units}",
|
||||
"cam.flat": "Ploché čelo",
|
||||
"cam.follower": "Zdvihátko",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Extrahovat do souboru",
|
||||
"cmd.component_finish_edit": "Dokončit úpravu",
|
||||
"cmd.component_from_bodies": "Vytvořit komponenty z těles",
|
||||
"cmd.component_hide_history": "Skrýt historii komponenty",
|
||||
"cmd.component_insert_design": "Vložit návrh",
|
||||
"cmd.component_links": "Seznam odkazů",
|
||||
"cmd.component_list": "Seznam komponent",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Přesunout tělesa do komponenty",
|
||||
"cmd.component_move_features": "Přesunout prvky do komponenty",
|
||||
"cmd.component_move_sketches": "Přesunout náčrty do komponenty",
|
||||
"cmd.component_move_sketches_to_parts": "Přesunout náčrty do jejich dílů",
|
||||
"cmd.component_paste_from_design": "Vložit z jiného návrhu",
|
||||
"cmd.component_paste_new": "Vložit jako nové",
|
||||
"cmd.component_properties": "Fyzikální vlastnosti komponenty",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Přejmenovat komponentu",
|
||||
"cmd.component_replace_with_link": "Nahradit odkazem",
|
||||
"cmd.component_revert_position": "Vrátit polohu",
|
||||
"cmd.component_show_history": "Zobrazit historii komponenty",
|
||||
"cmd.component_unlock": "Odemknout obsah",
|
||||
"cmd.component_update_links": "Aktualizovat odkazy",
|
||||
"cmd.config_activate": "Aktivovat konfiguraci",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Pravidlo konfigurace",
|
||||
"cmd.config_rules": "Pravidla konfigurace",
|
||||
"cmd.config_table": "Zobrazit tabulku konfigurací",
|
||||
"cmd.construct.plane.axis_point": "Rovina osou a bodem",
|
||||
"cmd.construct_axis_edge": "Osa hranou",
|
||||
"cmd.construct_axis_normal_to_face": "Osa kolmá k ploše",
|
||||
"cmd.construct_axis_through_cylinder": "Osa válce/kužele/anuloidu",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Zobrazit rozložený pohled",
|
||||
"cmd.expr_evaluate": "Vyhodnotit výraz",
|
||||
"cmd.face_delete": "Smazat plochu",
|
||||
"cmd.file.export_3mf": "Exportovat 3MF",
|
||||
"cmd.file.export_obj": "Exportovat OBJ",
|
||||
"cmd.file.export_step": "Exportovat STEP",
|
||||
"cmd.file.export_stl": "Exportovat STL",
|
||||
"cmd.file.export_urdf": "Exportovat URDF",
|
||||
"cmd.file_export": "Exportovat",
|
||||
"cmd.file_insert_mesh": "Vložit síť",
|
||||
"cmd.file_insert_step": "Vložit STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Zapnout barvy komponent",
|
||||
"cmd.inspect_colored_components_disable": "Vypnout barvy komponent",
|
||||
"cmd.inspect_compare": "Porovnat tělesa",
|
||||
"cmd.inspect_compare_picture": "Porovnat obrázek",
|
||||
"cmd.inspect_continuity": "Analýza spojitosti",
|
||||
"cmd.inspect_curvature_comb": "Analýza hřebenu křivosti",
|
||||
"cmd.inspect_curvature_map": "Mapa křivosti",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Upravit mračno bodů",
|
||||
"cmd.pointcloud_insert": "Vložit mračno bodů",
|
||||
"cmd.pointcloud_list": "Mračna bodů",
|
||||
"cmd.render.compare.divider": "Posunout dělicí čáru porovnání renderů",
|
||||
"cmd.render.result.discard": "Zahodit výsledek renderu",
|
||||
"cmd.render.result.select": "Vybrat výsledek renderu",
|
||||
"cmd.render_aging_describe": "Vrstvené stárnutí povrchu",
|
||||
"cmd.render_backends": "Renderovací jádra",
|
||||
"cmd.render_batch": "Renderovat všechny záběry",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Splajn řídicími body (stupeň 5)",
|
||||
"cmd.sketch_spline_fit_point": "Splajn procházející body",
|
||||
"cmd.sketch_spline_insert_point": "Přidat bod splajnu",
|
||||
"cmd.sketch_spline_remove_point": "Odebrat bod splajnu",
|
||||
"cmd.sketch_spline_reverse": "Obrátit směr splajnu",
|
||||
"cmd.sketch_spun_profile": "Rotační obrys",
|
||||
"cmd.sketch_toggle_diameter": "Přepnout poloměr / průměr",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Přesunout značku časové osy",
|
||||
"cmd.timeline_stop": "Zastavit historii",
|
||||
"cmd.timeline_suppress": "Potlačit prvek",
|
||||
"cmd.ui.assistant": "Zobrazit nebo skrýt Asistenta",
|
||||
"cmd.view.render_browser": "Prohlížeč renderu",
|
||||
"cmd.view.render_dock": "Přesunout panel renderu",
|
||||
"cmd.view.render_focus": "Soustředěný pohled na render",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Navigační nástroj",
|
||||
"cmd.view_top": "Pohled shora",
|
||||
"cmd.view_visual_style": "Vizuální styl",
|
||||
"color.blue": "Modrá",
|
||||
"color.copy": "Kliknutím zkopírujete hodnoty barvy",
|
||||
"color.edit": "Kliknutím upravíte barvu",
|
||||
"color.gamma": "Hodnoty barvy v gama prostoru 0–255",
|
||||
"color.green": "Zelená",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Zadejte #rrggbb nebo #rrggbbaa; šest číslic zachová neprůhlednost",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Odstín",
|
||||
"color.linear": "Hodnoty barvy v lineárním prostoru 0–1",
|
||||
"color.recent": "Nedávné barvy",
|
||||
"color.recent_help": "Barvy, které vyberete v libovolném poli barvy, se zobrazí zde",
|
||||
"color.red": "Červená",
|
||||
"color.saturation": "Sytost (v procentech)",
|
||||
"color.saturation_value": "Sytost a jas",
|
||||
"color.selected": "Vybraná barva",
|
||||
"color.step_down": "Snížit o krok",
|
||||
"color.step_up": "Zvýšit o krok",
|
||||
"color.value": "Hodnota, tedy jas (v procentech)",
|
||||
"config.column_filter_empty": "Žádné odpovídající sloupce",
|
||||
"config.rule_parameter_columns": "Uvedeny jsou jen parametry, které mají v tabulce sloupec. Sloupec přidáte pomocí Přidat sloupec (+), abyste parametr mohli použít zde.",
|
||||
"config.rule_suppression_columns": "Uvedeny jsou jen prvky, které mají v tabulce sloupec Potlačit. Sloupec přidáte pomocí Přidat sloupec (+), abyste mohli prvek řídit zde.",
|
||||
"contact.components_count": "Počet komponent: {count}",
|
||||
"contact.enabled_label": "povoleno",
|
||||
"coupling.gear_1": "Kolo 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Kóta: {name}",
|
||||
"dialog.edit_title": "UPRAVIT {title}",
|
||||
"dialog.no_shown_body": "Není zobrazeno žádné těleso ke změně: zobrazte nějaké nebo zvolte Nové těleso",
|
||||
"dialog.pattern_sketch_not_object": "Vyberte tělesa nebo prvky: náčrt není ani jedno. Opakujte jeho křivky vlastním nástrojem Pole nebo Zrcadlit v náčrtu, nebo jej nejprve vysuňte.",
|
||||
"dialog.select": "↖ Vybrat",
|
||||
"dialog.selected_count": "↖ Vybráno: {count}",
|
||||
"dialog.selection_constraint": "Vazba {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · křivka {id}",
|
||||
"dialog.selection_guidance": "Vstup změníte jeho výběrem. Kliknutím na vybraný objekt jej odeberete; Ctrl/Cmd+klik výběr také přepíná. Zkontrolujte náhled a stiskněte OK.",
|
||||
"dialog.selection_midpoint": "Střed · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} z {total}: Vyberte {input}",
|
||||
"dialog.step": "Krok",
|
||||
"document.changed_on_disk": "Soubor {name} byl změněn na disku",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Vytvoří konstrukční osu procházející dvěma body, vrcholy nebo body náčrtu. Použijte ji pro osu vedoucí mezi dvěma známými polohami.",
|
||||
"help.construct.plane.along_path": "Vytvoří konstrukční rovinu kolmou k hraně nebo křivce v zadané poloze podél ní. Použijte to k náčrtu profilu pro tažení nebo příčného řezu podél cesty.",
|
||||
"help.construct.plane.at_angle": "Vytvoří konstrukční rovinu natočenou o úhel od roviny nebo plochy kolem osy nebo hrany. Použijte ji pro šikmé náčrty, například u úhlového držáku.",
|
||||
"help.construct.plane.axis_point": "Vytvoří konstrukční rovinu obsahující osu a bod mimo tuto osu. Vyberte osu počátku nebo konstrukční osu, přímou hranu nebo úsečku náčrtu a pak vrchol, bod náčrtu nebo konstrukční bod. Bod ležící na ose nemůže určit jednoznačnou rovinu.",
|
||||
"help.construct.plane.midplane": "Vytvoří konstrukční rovinu uprostřed mezi dvěma rovinami nebo rovinnými plochami, nebo rovinu půlící jejich úhel, když se protínají pod úhlem. Použijte ji jako rovinu souměrnosti pro zrcadlení.",
|
||||
"help.construct.plane.offset": "Vytvoří konstrukční rovinu rovnoběžnou s rovinou nebo rovinnou plochou ve zvolené vzdálenosti nebo procházející bodem. Použijte ji k náčrtu v dané výšce nad plochou.",
|
||||
"help.construct.plane.perpendicular": "Vytvoří konstrukční rovinu, která obsahuje přímku nebo hranu a je kolmá k rovině nebo ploše. Použijte ji k náčrtu kolmo na model podél hrany.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Zkontrolujte typ kloubu (např. Pevný), ukotvení, limity kloubu a hodnoty řízené parametry.",
|
||||
"joint_move.blocked_title": "Tento díl nelze posunout",
|
||||
"joint_move.coarse": "Krok otáčení blízko osy (°)",
|
||||
"joint_move.conflict": "Kloub tohoto dílu je v konfliktu s ostatními: {joint}.",
|
||||
"joint_move.conflict_hint": "Upravte, potlačte nebo smažte kloub v konfliktu, aby mohly díl umístit ostatní klouby.",
|
||||
"joint_move.distance": "Vzdálenost od začátku",
|
||||
"joint_move.done": "Hotovo",
|
||||
"joint_move.fine": "Krok otáčení daleko od osy (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Stopa {number}",
|
||||
"nav.alias.help": "Shift+Alt+tažení levým tlačítkem otáčí, Shift+Alt+tažení prostředním posouvá, Shift+Alt+tažení pravým přibližuje; tažení prostředním tlačítkem také posouvá a pravým otáčí",
|
||||
"nav.blender.help": "Tažení prostředním tlačítkem otáčí, Shift+prostřední posouvá, Ctrl+prostřední přibližuje; tažení pravým tlačítkem kameru nemění",
|
||||
"nav.creo.help": "Tažení prostředním tlačítkem otáčí, Shift+prostřední posouvá, Ctrl+prostřední se svislým tažením přibližuje (tažením dolů přiblížíte); přibližuje i kolečko",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Myš a 3D myš otáčejí přes oba póly a zachovávají natočení. Přichytávání os klávesou Shift je vypnuto.",
|
||||
"nav.free_orbit.label": "Volné otáčení",
|
||||
"nav.free_orbit.snap_help": "Myš a 3D myš otáčejí přes oba póly a zachovávají natočení. Podržením klávesy Shift při otáčení tažením přichytíte směr pohledu a natočení.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+tažení levým tlačítkem posouvá, Shift+Alt+levé tlačítko přibližuje, Ctrl+tažení levým tlačítkem na prázdném místě otáčí",
|
||||
"nav.inventor.help": "Tažení prostředním tlačítkem posouvá, Shift+prostřední otáčí, Ctrl+prostřední přibližuje, tažení pravým tlačítkem otáčí",
|
||||
"nav.maya.help": "Alt+tažení levým tlačítkem otáčí, Alt+prostřední tlačítko posouvá, Alt+pravé tlačítko přibližuje; tažení prostředním tlačítkem také posouvá",
|
||||
"nav.nx.help": "Tažení prostředním tlačítkem otáčí, Shift+prostřední posouvá (v NX prostřední + pravé), Ctrl+prostřední přibližuje (v NX prostřední + levé); tažení pravým tlačítkem kameru nemění",
|
||||
"nav.openscad.help": "Tažení levým tlačítkem na prázdném místě otáčí, Shift+tažení levým vybírá obdélníkem, tažení geometrie náčrtu ji upravuje; tažení pravým nebo prostředním tlačítkem posouvá, Shift+tažení pravým nebo prostředním přibližuje",
|
||||
"nav.perspective.sketch": "Úpravy náčrtu používají ortografický pohled. Dokončením náčrtu přepnete na perspektivu.",
|
||||
"nav.right_drag_orbits.help": "Vypnuto: tažení pravým tlačítkem kameru nemění a pravé tlačítko jen otevírá kontextovou nabídku. Volba přiřazení myši SolidWorks tuto možnost vypne.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Šroub s půlkulovou hlavou a vnitřním šestihranem",
|
||||
"parts.family.dowel_pin": "Válcový kolík (lícovaný)",
|
||||
"parts.family.hex_bolt": "Šroub se šestihrannou hlavou",
|
||||
"parts.family.hex_cap_screw_inch": "Šroub se šestihrannou hlavou (palcový)",
|
||||
"parts.family.hex_nut": "Šestihranná matice",
|
||||
"parts.family.hex_nut_inch": "Šestihranná matice (palcová)",
|
||||
"parts.family.set_screw": "Stavěcí šroub s vnitřním šestihranem, s plochým koncem",
|
||||
"parts.family.socket_head_cap_screw": "Šroub s válcovou hlavou a vnitřním šestihranem",
|
||||
"parts.family.washer": "Plochá podložka",
|
||||
"parts.family.washer_sae": "Plochá podložka, SAE (úzká)",
|
||||
"parts.family.washer_uss": "Plochá podložka, USS (široká)",
|
||||
"parts.holes": "Otvory (volitelné)",
|
||||
"parts.placement_hint": "vyberte jeden nebo více otvorů, aby se do každého usadil díl, nebo OK umístí díl do počátku",
|
||||
"parts.system": "Soustava jednotek",
|
||||
"parts.system.inch": "Palcová",
|
||||
"parts.system.metric": "Metrická",
|
||||
"pattern.alignment_2": "Zarovnání 2",
|
||||
"pattern.alignment_hint": "Počty zahrnují originál. Na střed rozloží kopie rovnoměrně; Převrátit volí stranu navíc u sudých počtů.",
|
||||
"pattern.direction_1": "Směr 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Tažení levým tlačítkem",
|
||||
"prefs.button_middle": "Tažení prostředním tlačítkem",
|
||||
"prefs.button_right": "Tažení pravým tlačítkem",
|
||||
"prefs.carousel_next": "Další",
|
||||
"prefs.carousel_previous": "Předchozí",
|
||||
"prefs.choose_font": "Vybrat soubor písma…",
|
||||
"prefs.click": "Klik",
|
||||
"prefs.contact_shading": "Měkké stínování kontaktů",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Zakřivené plochy",
|
||||
"prefs.curves": "Zakřivené plochy",
|
||||
"prefs.cut_preview_tint": "Zobrazit odebraný materiál červeně",
|
||||
"prefs.cut_preview_tint_help": "Náhled vyplní materiál, který prvek odebírá, i tvar, který nahrazuje, červeným průhledným stínem. Když je vypnuto, jsou tyto výplně zcela průhledné a kreslí se jen jejich obrysy.",
|
||||
"prefs.dark_parts_shading": "Zachovat tvar tmavých dílů",
|
||||
"prefs.dark_parts_shading_help": "Stínuje pohled v lineárním světle s jemným světlem oblohy, takže tmavé plochy zachovají přechod a nezčernají",
|
||||
"prefs.dead_zone_note": "Šrafované pásmo je mrtvá zóna: pohyb uvnitř něj se ignoruje.",
|
||||
"prefs.default": "výchozí",
|
||||
"prefs.design": "Výchozí nastavení návrhu",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Hrany a stínování",
|
||||
"prefs.extend": "Prodloužit",
|
||||
"prefs.extra_navigation": "Ctrl+tažení levým tlačítkem v prázdném prostoru otáčí pohled; podržením mezerníku pohled posunete.",
|
||||
"prefs.extrude_view_isometric": "Při otevření Vysunutí otočit pohled do izometrického",
|
||||
"prefs.extrude_view_return": "Po zavření Vysunutí vrátit dřívější pohled",
|
||||
"prefs.follows_os": "Podle systému",
|
||||
"prefs.font": "Písmo",
|
||||
"prefs.font_fallback": "Znaky, které vybrané písmo neobsahuje, se nahradí vestavěným písmem, takže žádný popisek nezobrazí prázdný čtverec.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automaticky",
|
||||
"prefs.graphics_card_missing": "Uložená grafická karta není k dispozici; použije se možnost Automaticky.",
|
||||
"prefs.graphics_card_restart": "Projeví se po restartování aplikace SolidCraft. Tuto volbu přepíše WGPU_ADAPTER_NAME.",
|
||||
"prefs.graphics_card_unused": "Uložená grafická karta se pro toto okno nepoužila; použitá karta je uvedena v nabídce Nápověda › O aplikaci SolidCraft a ve stavovém řádku. Zkuste možnost Automaticky, nebo nastavte WGPU_ADAPTER_NAME na jedinečnou část názvu karty.",
|
||||
"prefs.graphics_note": "Rychlost, nebo hladkost obrazu: každá volba ukazuje svůj účinek na ukázce.",
|
||||
"prefs.graphics_presets_note": "Předvolby nastaví níže uvedené volby najednou.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Skrýt symboly vazeb při oddálení",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Při nastavení Náčrty na Pod svým prvkem zobrazuje Historie vlevo každý náčrt o úroveň níž, pod prvním prvkem, který z něj vychází, pokud je dost široká pro názvy. Časová osa dole vždy zachovává pořadí vytvoření.",
|
||||
"prefs.history_sketches_under_feature": "Pod svým prvkem",
|
||||
"prefs.hold_stop_snapping": "Podržením vypnout přichytávání",
|
||||
"prefs.home_fit_size": "Velikost pro Domů a Přizpůsobit",
|
||||
"prefs.home_fit_size_note": "Kolik pohledu model vyplní, když jej zarámuje Domů, Přizpůsobit, otevřený návrh nebo změna pohledu v navigátoru, ať je nastavení níže zapnuté, nebo ne. 100 %: vyplní pohled mezi panely, kompasem a navigační lištou.",
|
||||
"prefs.icons_only": "Pouze ikony",
|
||||
"prefs.imported_file": "Importovaný soubor",
|
||||
"prefs.in_browser": "V prohlížeči",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Jazyk rozhraní",
|
||||
"prefs.interface_note": "Vzhled aplikace SolidCraft a rozmístění jejích částí.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Obrátit zakřivené šipky natočení",
|
||||
"prefs.invert_curved_roll_arrows_note": "Dvě zakřivené šipky v rohu krychle natáčejí pohled v rovině obrazovky. Zapnuto: šipka po směru hodinových ručiček natáčí pohled proti směru hodinových ručiček a šipka proti směru hodinových ručiček ho natáčí po směru. Vypnuto: každá šipka natáčí pohled tak, jak je zakřivená.",
|
||||
"prefs.invert_navigator_arrows": "Obrátit šipky otáčení krychle pohledu",
|
||||
"prefs.invert_navigator_arrows_note": "Šipky kolem krychle otáčejí kameru tím směrem, kam míří, jako ve Fusion a Inventor: šipka vlevo míří doprava a stáčí kameru doprava. Vypnuto: šipka otáčí krychli na stranu, na které leží, takže šipka vlevo stáčí kameru doleva. Zakřivené šipky natočení tím nejsou dotčeny.",
|
||||
"prefs.keep_work_on_tab_switch": "Ponechat dialogy a nástroje otevřené při přepínání návrhů",
|
||||
"prefs.keep_work_on_tab_switch_note": "Každá karta návrhu si ponechá otevřený dialog nebo nástroj s tím, co jste v něm vybrali a zadali, i svou kartu panelu nástrojů. Po návratu k návrhu jsou zase tam. Vypnuto: přepnutí návrhu je zruší a zobrazí kartu Model.",
|
||||
"prefs.labels": "Popisky",
|
||||
"prefs.language_system": "Systém",
|
||||
"prefs.layout": "Rozvržení",
|
||||
"prefs.layout_note": "Kompaktní ukotví panely k okrajům okna. Průsvitnost prohlížeče je k dispozici v režimu Plovoucí. Stranu asistenta změníte na stránce Asistent.",
|
||||
"prefs.left": "Vlevo",
|
||||
"prefs.left_click": "Levé kliknutí",
|
||||
"prefs.line_drag_draws_one": "Stisknutí a tažení nakreslí jednu úsečku",
|
||||
"prefs.line_drag_draws_one_note": "V nástroji Úsečka nakreslí stisknutí, tažení a puštění jednu úsečku od místa stisknutí po místo puštění a tím kreslení skončí. Kliknutí stále kreslí řetězec. Vypnuto: tažení umístí bod tam, kde tlačítko pustíte, stejně jako kliknutí.",
|
||||
"prefs.line_hover_tangent_arc": "Setrvání na posledním bodu úsečky přepne na tečný oblouk",
|
||||
"prefs.line_hover_tangent_arc_note": "V nástroji Úsečka po nakreslení úseku odsuňte ukazatel od posledního bodu řetězce, vraťte se a podržte jej na něm v klidu: další kliknutí ukončí tečný oblouk a stejné gesto se vrací k úsečkám. Vypnuto: setrvání tam nic nedělá.",
|
||||
"prefs.linked_designs": "Propojené návrhy",
|
||||
"prefs.live_input": "Živý vstup",
|
||||
"prefs.live_preview": "Živý náhled",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Přiřazení myši",
|
||||
"prefs.navigation": "Navigace",
|
||||
"prefs.navigation_note": "Jak myš, trackpad a 3D myš pohybují pohledem.",
|
||||
"prefs.navigator_fit": "Přizpůsobit model po změně pohledu v navigátoru",
|
||||
"prefs.navigator_fit_note": "Plocha, roh nebo šipka krychle pohledu, případně osa orientačního ovladače, také zaměří pohled na střed modelu z jediné vzdálenosti, ze které je celý vidět ze všech stran (jeho ohraničující koule). Domů při zapnutí používá stejné přiblížení a střed, takže pohledy zvolené po něm se jen otáčejí. Vypnuto: pohled se otáčí na místě a zachovává svůj cíl a přiblížení.",
|
||||
"prefs.network_host_remove": "Odebrat",
|
||||
"prefs.network_locations": "Povolit síťová umístění v návrzích",
|
||||
"prefs.network_locations_note": "Vypnuto: propojené soubory návrhu na jiném počítači (\\\\server\\share) se otevírají jen ze zde uvedených serverů nebo poté, co jeden povolíte na výzvu.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Umístění",
|
||||
"prefs.prefer_free_sketch_points": "Při překrytí bodů upřednostnit pohyblivé body náčrtu",
|
||||
"prefs.preview_choices": "Náhled vašich voleb",
|
||||
"prefs.preview_tint_new_faces": "Podbarvit nový povrch v náhledu",
|
||||
"prefs.preview_tint_new_faces_help": "Náhled prvku, který mění těleso, může vykreslit povrch, který prvek přidává, barvou náhledu. Když je vypnuto, těleso se vykreslí samo o sobě.",
|
||||
"prefs.print_face_highlight": "Zvýraznění tiskové plochy",
|
||||
"prefs.print_face_highlight_tip": "Jak výrazně se tisková plocha tělesa v pohledu obarví a obtáhne. 0 % nezobrazí žádné zvýraznění.",
|
||||
"prefs.profile_active": "Aktivní profil",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Použít předchozí rozpočet geometrie náhledu renderu",
|
||||
"prefs.render_previous_geometry_budget_help": "Obnoví předchozí pevný limit geometrie (512 MiB na 64bitovém desktopu, 128 MiB jinde) místo rozpočtu podle zařízení.",
|
||||
"prefs.reports_saved": "{n} uloženo",
|
||||
"prefs.ribbon_click_ends_tool": "Kliknutím na tlačítko spuštěného nástroje jej ukončíte",
|
||||
"prefs.ribbon_click_ends_tool_note": "Kliknutí na zvýrazněné tlačítko právě používaného nástroje náčrtu na pásu karet nástroj ukončí, takže kliknutí v pohledu opět vybírají. Vypnuto: kliknutí nástroj spustí znovu.",
|
||||
"prefs.ribbon_reveal": "Ukazovat výsledky hledání na pásu karet",
|
||||
"prefs.ribbon_reveal_note": "Najetí na výsledek v Hledat příkazy ukáže, kde se příkaz na pásu karet nachází: jeho kartu, tlačítko nebo řádek v rozbalovací nabídce panelu. Příkaz spuštěný z hledání tam zabliká a běžící příkaz z rozbalovací nabídky označí svůj panel.",
|
||||
"prefs.right_click": "Pravé kliknutí",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Vrátit se k předchozímu pohledu",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Vrátit, pokud nebyl pohled otočen",
|
||||
"prefs.sketch_exit_view_note": "Kam se pohled přesune po příkazu Dokončit náčrt, Zrušit nebo dvojitém Esc.",
|
||||
"prefs.sketch_face_activates_part": "Náčrt na ploše dílu tento díl aktivuje",
|
||||
"prefs.sketch_face_activates_part_note": "Náčrt zahájený na ploše tělesa jiné komponenty nejprve aktivuje tuto komponentu, takže jí náčrt patří a v prohlížeči zůstává u tohoto dílu. Díl zůstane aktivní i poté. Vypnuto: náčrt patří aktivní komponentě.",
|
||||
"prefs.sketch_open_look_at": "Při otevření náčrtu natočit pohled k němu",
|
||||
"prefs.sketch_open_look_at_note": "Vypnuto: vytvoření nebo úprava náčrtu ponechá pohled beze změny. Pohled kolmo natočí pohled k náčrtu, kdykoli ho chcete.",
|
||||
"prefs.sketch_recent_snap": "Automaticky přichytávat k nedávným středům a středním bodům",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Chyba",
|
||||
"prefs.status_selected": "Vybráno",
|
||||
"prefs.status_warning": "Varování",
|
||||
"prefs.structure.appearance": "Vzhled",
|
||||
"prefs.structure.appearance_note": "Barvy, text a usnadnění přístupu.",
|
||||
"prefs.structure.in_profile": "V profilu",
|
||||
"prefs.structure.layout": "Rozvržení",
|
||||
"prefs.structure.layout_note": "Kde jsou umístěné části okna.",
|
||||
"prefs.structure.look": "Zobrazení",
|
||||
"prefs.structure.measure_pointer": "Měření a ukazatel",
|
||||
"prefs.structure.mouse3d": "3D myš",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse a SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Myš a touchpad. 3D myš má vlastní stránku.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Změněno od uložení",
|
||||
"prefs.structure.profile_hover": "Uloženo v profilech nastavení",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Náčrt",
|
||||
"prefs.structure.tools": "Nástroje",
|
||||
"prefs.structure.tools_note": "Jak se chovají nástroje pro modelování.",
|
||||
"prefs.structure.work": "Práce",
|
||||
"prefs.supersampling_brief": "Vykreslí pohled větší a pak jej zmenší s filtrováním: velmi ostré, ale náročnější.",
|
||||
"prefs.tab_accent_note": "Zvýrazňovací barva se řídí aktivní kartou",
|
||||
"prefs.theme_file": "soubor motivu",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Základní barva · sRGB",
|
||||
"render.base_metallic": "Kovový podíl",
|
||||
"render.base_opaque_only": "Tento editor zachovává sémantiku neprůhledných těles. Pro optický průchod světla použijte samostatné ovládací prvky skla.",
|
||||
"render.batch_all_shots": "Všechny záběry ({count})",
|
||||
"render.batch_empty": "Před renderováním všech záběrů nejprve uložte záběr.",
|
||||
"render.batch_limit": "Renderování všech záběrů je omezeno na 32 záběrů.",
|
||||
"render.batch_status": "Probíhá: {running} · Čeká: {waiting}",
|
||||
"render.bloom_enable": "Záře ve výstupu",
|
||||
"render.bloom_help": "Kreativní záře z lineárních jasů se třemi normalizovanými průchody. Poloměr v pixelech výstupu, přičtení před sRGB. Nejde o simulaci čočky, objemu ani zlepšení konvergence. Surové EXR se nemění.",
|
||||
"render.bloom_opaque": "Záře vyžaduje neprůhledný výstup. Průhledné PNG se odmítne, neprovede se skryté sloučení.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Nejprve vyberte styl ve Vzhledech",
|
||||
"render.chromatic_offset": "Chromatický posun hran",
|
||||
"render.clear_stage": "Odebrat uloženou scénografii",
|
||||
"render.compare_divider": "Dělicí čára porovnání",
|
||||
"render.compare_live": "Živě",
|
||||
"render.compare_live_preview": "Živý náhled",
|
||||
"render.compare_render": "Render {number}",
|
||||
"render.compare_side": "Render {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · zachyceno ve revizi {revision}",
|
||||
"render.compare_swap": "Prohodit",
|
||||
"render.copy_request": "Kopírovat JSON",
|
||||
"render.cpu_aa_help": "Prostorové vzorky: více vzorků zlepší hrany a prodlouží vykreslení.",
|
||||
"render.cpu_area_add": "Přidat obdélníkové světlo CPU",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Zobrazuje se poslední hotový obrázek; novější vykreslení jej zatím nenahradilo.",
|
||||
"render.result_sequence": "Kontrolní bod",
|
||||
"render.result_title": "Výsledek vykreslení",
|
||||
"render.results_choose": "Ponechané výsledky",
|
||||
"render.results_label": "Render {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [zastaralý]",
|
||||
"render.results_unnamed": "Obrázek",
|
||||
"render.return_design": "Zpět k návrhu",
|
||||
"render.review_stale": "Tato kontrola je zastaralá. Před použitím ji vyřešte nebo proveďte znovu.",
|
||||
"render.ribbon_aging": "Stárnutí",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Začněte znakem = a sestavte slova z parametrů: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Kurzíva",
|
||||
"sketch_text.loading_fonts": "Hledání nainstalovaných písem…",
|
||||
"sketch_text.no_bold": "Vestavěné písmo nemá tučný řez: zvolte nainstalované písmo",
|
||||
"sketch_text.on_path": "Text sleduje svou cestu: umístění určuje křivka",
|
||||
"sketch_text.path_clear": "Odpojit text od křivky",
|
||||
"sketch_text.path_hint": "Křivka náčrtu, kterou text sleduje: klikněte sem a poté na křivku",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "oba počátky jsou na téže komponentě",
|
||||
"thread.automatic_size": "Automatická velikost",
|
||||
"thread.designation": "Označení",
|
||||
"thread.direction": "Směr závitu",
|
||||
"thread.iso_metric": "Metrický ISO",
|
||||
"thread.left_hand": "Levotočivý",
|
||||
"thread.right_hand": "Pravotočivý",
|
||||
"thread.select_size": "Vybrat velikost",
|
||||
"timeline.delete_after_marker_one": "Smazat 1 prvek za značkou historie",
|
||||
"timeline.delete_after_marker_other": "Smazat prvky za značkou historie: {count}",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Spusťte toto v terminálu a pak znovu stiskněte Připojit:",
|
||||
"ui.agent_chat_auth_title": "Přihlásit se k agentovi",
|
||||
"ui.agent_chat_cancel": "Zrušit",
|
||||
"ui.agent_chat_cancel_timeout": "Agent na Zastavit neodpověděl a byl odpojen. Pro pokračování se připojte znovu.",
|
||||
"ui.agent_chat_cannot_start": "Nainstalováno, ale nespouští se: {error}",
|
||||
"ui.agent_chat_changes": "Změny: {n}, jeden krok zpět",
|
||||
"ui.agent_chat_changes_n": "Změn: {n}",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Příkaz agenta",
|
||||
"ui.agent_chat_connect": "Připojit",
|
||||
"ui.agent_chat_copy": "Kopírovat",
|
||||
"ui.agent_chat_copy_message": "Kopírovat zprávu",
|
||||
"ui.agent_chat_ctx_bodies": "Tělesa",
|
||||
"ui.agent_chat_ctx_elements": "Elementy",
|
||||
"ui.agent_chat_ctx_features": "Prvky",
|
||||
"ui.agent_chat_ctx_more": "+{n} dalších",
|
||||
"ui.agent_chat_ctx_other": "Jiné",
|
||||
"ui.agent_chat_custom_heading": "Vlastní model",
|
||||
"ui.agent_chat_custom_hint": "Jakýkoli program, který komunikuje protokolem Agent Client Protocol přes stdin a stdout. Nespouští se přes shell.",
|
||||
"ui.agent_chat_denied": "Zamítnuto",
|
||||
"ui.agent_chat_deny": "Zamítnout",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Vše",
|
||||
"ui.agent_chat_mode_ask": "Ptát se",
|
||||
"ui.agent_chat_mode_edits": "Úpravy",
|
||||
"ui.agent_chat_model_custom": "Použít vlastní: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} nemůže používat nástroje SolidCraftu, takže umí jen chatovat. Vyberte model s podporou nástrojů.",
|
||||
"ui.agent_chat_model_rejected": "Agent nepřijal model {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Hledat modely…",
|
||||
"ui.agent_chat_model_tip": "Model, který agent používá. Vaše volba se pro tohoto agenta zapamatuje.",
|
||||
"ui.agent_chat_models_failed": "Seznam modelů se nepodařilo načíst: {error}",
|
||||
"ui.agent_chat_models_heading": "Dostupné modely",
|
||||
"ui.agent_chat_models_listing": "Načítání seznamu modelů…",
|
||||
"ui.agent_chat_models_none": "Endpoint neuvádí žádné modely",
|
||||
"ui.agent_chat_models_not_a_list": "Odpověď nebyla seznam modelů",
|
||||
"ui.agent_chat_new": "Nový chat",
|
||||
"ui.agent_chat_new_confirm": "Začít nový chat? Aktuální bude vymazán.",
|
||||
"ui.agent_chat_next_picture": "Další obrázek",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Oprávnění",
|
||||
"ui.ai_preset": "Předvolba",
|
||||
"ui.ai_protocol": "Protokol",
|
||||
"ui.ai_reasoning_effort": "Úroveň uvažování",
|
||||
"ui.ai_reasoning_effort_field_hint": "prázdné = výchozí hodnota poskytovatele",
|
||||
"ui.ai_reasoning_effort_hint": "Volitelné. Odesílá se na endpoint jako `reasoning_effort`; přípustné hodnoty se u jednotlivých poskytovatelů liší (například `low`, `high` nebo `max`). Hodnotu, kterou zde nastavíte, SolidCraft nikdy nenahradí. Ponechte prázdné, aby se nic neodeslalo a zůstala výchozí hodnota poskytovatele.",
|
||||
"ui.ai_remove": "Odebrat",
|
||||
"ui.ai_request_timed_out": "Model odpovídal déle než {seconds} s. Časový limit požadavku pro tento endpoint můžete zvýšit v Předvolbách › Asistent.",
|
||||
"ui.ai_request_timeout": "Časový limit požadavku",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Tečna: vyberte kružnici/oblouk nebo otevřený splajn/kuželosečku, pak bod dotyku (volné křivky: koncové body)",
|
||||
"ui.construction.external_hint": "Tečna: vyberte kružnici nebo oblouk, vnější bod, pak požadované řešení",
|
||||
"ui.construction.free_hint": "Konstrukční přímka: klikněte na dva body; pravým tlačítkem začnete znovu",
|
||||
"ui.construction.normal_needs_length": "Nekonečná přímka je vždy konstrukční: zadejte délku, abyste nakreslili běžnou úsečku",
|
||||
"ui.construction.point_hint": "Konstrukční přímka: klikněte na bod, kterým má procházet",
|
||||
"ui.construction.reference_hint": "Konstrukční přímka: vyberte přímku, pak bod; pravým tlačítkem změníte referenci",
|
||||
"ui.construction.ribbon_label": "Pom. přímky",
|
||||
"ui.construction.side_hint": "Konstrukční přímka: klikněte na stranu, kterým směrem přímka vede; pravým tlačítkem začnete znovu",
|
||||
"ui.context_menu": "Místní nabídka",
|
||||
"ui.continuity_crease": "Hrana",
|
||||
"ui.continuity_curvature": "Křivost",
|
||||
"ui.continuity_curvature_change": "Změna křivosti",
|
||||
"ui.continuity_g0": "G0 hrana",
|
||||
"ui.continuity_g1": "G1 tečně",
|
||||
"ui.continuity_g2": "G2 křivost",
|
||||
"ui.continuity_gap": "Mezera",
|
||||
"ui.continuity_position": "Poloha",
|
||||
"ui.continuity_tangent": "Tečnost",
|
||||
"ui.copy": "Kopírovat",
|
||||
"ui.corner": "Roh",
|
||||
"ui.corners": "Rohy",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Tmavý",
|
||||
"ui.default_modelling_orientation": "Výchozí orientace modelování",
|
||||
"ui.delete": "Smazat",
|
||||
"ui.delete_select_first": "Nejprve vyberte, co smazat: prvky, tělesa, komponenty nebo geometrii náčrtu",
|
||||
"ui.depth": "Hloubka",
|
||||
"ui.design": "Návrh",
|
||||
"ui.design_properties.author": "Autor",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Díl byl uložen do jiného souboru; sestava stále odkazuje na {name}",
|
||||
"ui.edit_in_place_wait": "Počkejte, až skončí to, co v návrhu běží",
|
||||
"ui.edit_section_analysis": "Upravit analýzu řezu",
|
||||
"ui.edit_sketch_empty": "Žádné náčrty k úpravě",
|
||||
"ui.ellipse": "Elipsa",
|
||||
"ui.emboss_wrap_note": "Profily z navzájem kolmých úseček, tečné k jednomu podporovanému válci, se obalí automaticky. Cíl zvolíte výběrem stěny.",
|
||||
"ui.end_radius": "Koncový poloměr",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Explicitní",
|
||||
"ui.equation_form": "Tvar",
|
||||
"ui.equation_note": "Proměnná je prosté číslo: sin(t) ji bere v radiánech. Výsledek bez jednotky je v jednotce návrhu.",
|
||||
"ui.equation_note_range": "Proměnná je délka, stejně jako její rozsah: kombinujte ji s parametry délky a pro sin() ji vydělte délkou. Výsledek bez jednotky je v jednotce návrhu.",
|
||||
"ui.equation_parametric": "Parametrický",
|
||||
"ui.equation_variable_unit": "Proměnná má jednotku rozsahu",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Skrýt počátek",
|
||||
"ui.hidePlanes": "Skrýt roviny",
|
||||
"ui.hideProfile": "Skrýt profil",
|
||||
"ui.hide_component_history": "Skrýt její historii",
|
||||
"ui.hide_origin_by_default": "Ve výchozím stavu skrýt počátek",
|
||||
"ui.hide_origin_note": "Nové návrhy začínají se skrytou složkou Počátek. Návrh si ponechá vlastní nastavení počátku, jakmile ho zobrazíte nebo skryjete.",
|
||||
"ui.history_back": "O krok zpět",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "dvakrát klikněte na hranu",
|
||||
"ui.history_first": "Přejít na začátek",
|
||||
"ui.history_forward": "O krok vpřed",
|
||||
"ui.history_hide_hidden": "Skrýt skryté komponenty",
|
||||
"ui.history_hide_names": "Skrýt názvy",
|
||||
"ui.history_last": "Přejít na konec",
|
||||
"ui.history_marker_tip": "Značka historie: přetažením vrátíte model zpět; nové prvky se vkládají sem",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Zobrazit tlačítko Přehrát",
|
||||
"ui.history_play_finish_action": "Před přehráním historie dokončete aktuální akci",
|
||||
"ui.history_play_roll_back": "Před přehráním posuňte značku historie zpět",
|
||||
"ui.history_show_hidden": "Zobrazit skryté komponenty",
|
||||
"ui.history_show_names": "Zobrazit názvy",
|
||||
"ui.history_sketch_listed_under": "Uvedeno pod prvkem {feature}",
|
||||
"ui.history_title": "Historie",
|
||||
"ui.history_toggle_names": "Zobrazit nebo skrýt názvy prvků",
|
||||
"ui.history_waits_for_editor": "Zpět, Znovu a Historie počkají, dokud se neotevře editor prvku",
|
||||
"ui.hole": "Otvor",
|
||||
"ui.hole_tap_type": "Typ závitu otvoru",
|
||||
"ui.hole_type": "Typ otvoru",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} obsahuje neuložené změny, proto byl vložen jeho uložený soubor. Uložte jej a pak použijte Aktualizovat odkazy, aby se změny převzaly.",
|
||||
"ui.insert_design.unsaved": "Neuložené změny",
|
||||
"ui.inspect": "Analýza",
|
||||
"ui.instances": "Instance",
|
||||
"ui.intersect": "Průnik",
|
||||
"ui.isolate": "Izolovat",
|
||||
"ui.join": "Sjednotit",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Klouby",
|
||||
"ui.keyboard_shortcuts": "Klávesové zkratky",
|
||||
"ui.language": "Jazyk",
|
||||
"ui.lasso_select": "Laso (tažením nakreslete volnou smyčku: vybere vše, co leží celé uvnitř)",
|
||||
"ui.layout_compact": "Kompaktní",
|
||||
"ui.layout_floating": "Plovoucí",
|
||||
"ui.length": "Délka",
|
||||
"ui.length_decimals": "Desetinná místa délky",
|
||||
"ui.light": "Světlý",
|
||||
"ui.line": "Úsečka",
|
||||
"ui.line_arc_hint": "Tečný oblouk: klikněte na konec oblouku. Znovu setrvejte na posledním bodu pro úsečky; dokončíte pravým kliknutím nebo klávesou Esc",
|
||||
"ui.link_copies": "Propojit shodné kopie",
|
||||
"ui.link_copies_keep": "Ponechat",
|
||||
"ui.link_copies_link": "Propojit",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Přestaví díl a nahradí všechny přidané prvky. Aktualizují se všechny výskyty této komponenty.",
|
||||
"ui.paste": "Vložit",
|
||||
"ui.path": "Cesta",
|
||||
"ui.pattern_object_type_tip": "Tělesa: pevné tvary vybrané v pohledu nebo v prohlížeči; každé se zkopíruje celé.\nPrvky: kroky Historie, například vysunutí nebo otvor, vybrané v Historii nebo na ploše, kterou vytvořily; krok se zopakuje.\nNáčrt není ani jedno: opakujte jeho křivky vlastním nástrojem Pole nebo Zrcadlit v náčrtu, nebo jej nejprve vysuňte.",
|
||||
"ui.pattern_on_path": "Pole po cestě",
|
||||
"ui.perforate_margin_default": "z průměru",
|
||||
"ui.perforate_pitch": "Rozteč",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Mnohoúhelník",
|
||||
"ui.preferences": "Předvolby",
|
||||
"ui.press_a_key": "stiskněte klávesu…",
|
||||
"ui.print_face_body_not_sent": "Těleso této plochy se neodesílá: nejprve ho přidejte do Tělesa",
|
||||
"ui.print_face_cleared": "{body}: tisková plocha zrušena",
|
||||
"ui.print_face_input": "Tisková plocha",
|
||||
"ui.print_face_one_body": "Tisková plocha patří jednomu tělesu: odešlete toto těleso samostatně, abyste ji změnili",
|
||||
"ui.print_face_pick": "Vyberte rovinnou plochu objemového tělesa, aby se stala tiskovou plochou",
|
||||
"ui.print_face_set": "{body}: tisková plocha nastavena; Odeslat do sliceru položí těleso na ni",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5053,7 +4908,6 @@
|
||||
"ui.showDimension": "Zobrazit kótu",
|
||||
"ui.showOrigin": "Zobrazit počátek",
|
||||
"ui.showPlanes": "Zobrazit roviny",
|
||||
"ui.show_component_history": "Zobrazit její historii",
|
||||
"ui.show_constraints": "Vazby",
|
||||
"ui.show_construction_geometries": "Konstrukční geometrie",
|
||||
"ui.show_dimensions": "Kóty",
|
||||
@@ -5170,15 +5024,12 @@
|
||||
"ui.view_angles": "Úhly pohledu",
|
||||
"ui.view_angles_convention": "Úhly ve stupních kolem svislé osy. Stáčení 0° je pohled zepředu, 90° zleva, −90° zprava, 180° zezadu; náklon 90° je pohled shora; kladné natočení otáčí model ve směru hodinových ručiček.",
|
||||
"ui.view_angles_help": "Zobrazuje náklon, stáčení a natočení pohledu ve stupních a jeho projekci pod orientačním ovladačem. Kliknutím na údaj zadáte přesné úhly.",
|
||||
"ui.view_angles_lock": "Zamknout {axis}",
|
||||
"ui.view_angles_ortho": "Orto",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Náklon",
|
||||
"ui.view_angles_readout": "Náklon {pitch} · Stáčení {yaw} · Natočení {roll}",
|
||||
"ui.view_angles_roll": "Natočení",
|
||||
"ui.view_angles_unlock": "Odemknout {axis}",
|
||||
"ui.view_angles_yaw": "Stáčení",
|
||||
"ui.view_angles_zero": "Nastavit {axis} na 0°",
|
||||
"ui.view_centre": "Střed pohledu",
|
||||
"ui.viewport_status_clear": "Vypnout {name}",
|
||||
"ui.viewport_status_clear_hint": "Vypnout {name} · Esc",
|
||||
@@ -5236,7 +5087,7 @@
|
||||
"update.check_unavailable": "Pro tuto instalaci není kontrola aktualizací dostupná.",
|
||||
"update.checking": "Kontrola…",
|
||||
"update.copy": "Kopírovat",
|
||||
"update.dmg_opened": "Obraz disku je otevřený a ověřený: ukončete SolidCraft, přetáhněte nový SolidCraft do Aplikací místo staré kopie a poté SolidCraft znovu otevřete.",
|
||||
"update.dmg_opened": "Obraz disku je otevřený a ověřený: přetáhněte SolidCraft do Aplikací místo staré kopie a poté SolidCraft restartujte.",
|
||||
"update.download": "Stáhnout",
|
||||
"update.download_open": "Stáhnout a otevřít",
|
||||
"update.downloading": "Stahování a ověřování… {done} z {total} MB",
|
||||
@@ -5280,7 +5131,6 @@
|
||||
"web.open_link": "Otevřít propojený návrh?",
|
||||
"web.open_link_confirm": "Existují neuložené změny. Otevřít propojený návrh na nové kartě?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ vybrat · Enter / Tab doplnit · Esc zavřít",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ výběr · Enter použije tuto hodnotu",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ výběr · Enter použije, co jste napsali · Esc zavře",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter pokračuje na GitHubu."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Rektangulær",
|
||||
"Rectangular Tube": "Rektangulært hulprofil",
|
||||
"Reference face": "Referenceflade",
|
||||
"Reference plane": "Referenceplan",
|
||||
"Relief Depth": "Aflastningsdybde",
|
||||
"Relief Width": "Aflastningsbredde",
|
||||
"Remove Tools": "Fjern værktøjsemner",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Snit",
|
||||
"Section (optional)": "Tværsnit (valgfrit)",
|
||||
"Section position": "Profilets placering",
|
||||
"Sections": "Tværsnit",
|
||||
"Sections (one sketch each)": "Tværsnit (én skitse til hvert)",
|
||||
"Select Other": "Vælg andet",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Vælg andet: Hold venstre museknap nede uden at flytte markøren på modellen (eller højreklik › Vælg andet…) for at vise alt under markøren. Klik igen samme sted for at vælge næste objekt. Dobbeltklik på den midterste museknap for at gå til Hjem (Indstillinger › Navigation).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (tilknytning mistet)",
|
||||
"browser.sketch_editing": "{name} (redigeres)",
|
||||
"browser.sketch_name": "Skitse{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "allerede i deres del",
|
||||
"browser.sketches_to_parts_design_body": "på et emne i selve designet",
|
||||
"browser.sketches_to_parts_moved": "Flyttede {moved} skitser til den del, de ligger på",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "på en flade uden nøjagtig tilknytning",
|
||||
"browser.sketches_to_parts_not_on_face": "ikke på en dels flade",
|
||||
"browser.sketches_to_parts_part_missing": "deres del findes ikke længere",
|
||||
"browser.sketches_to_parts_result": "Flyttede {moved} skitser til den del, de ligger på; {stayed} blev, hvor de var: {why}",
|
||||
"browser.units": "Enheder: {units}",
|
||||
"cam.flat": "Flad kontaktflade",
|
||||
"cam.follower": "Følger",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Udtræk til fil",
|
||||
"cmd.component_finish_edit": "Afslut redigering",
|
||||
"cmd.component_from_bodies": "Opret komponenter fra emner",
|
||||
"cmd.component_hide_history": "Skjul komponenthistorik",
|
||||
"cmd.component_insert_design": "Indsæt design",
|
||||
"cmd.component_links": "Vis forbindelser",
|
||||
"cmd.component_list": "Vis komponenter",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Flyt emner til komponent",
|
||||
"cmd.component_move_features": "Flyt features til komponent",
|
||||
"cmd.component_move_sketches": "Flyt skitser til komponent",
|
||||
"cmd.component_move_sketches_to_parts": "Flyt skitser til deres dele",
|
||||
"cmd.component_paste_from_design": "Indsæt fra et andet design",
|
||||
"cmd.component_paste_new": "Indsæt som ny",
|
||||
"cmd.component_properties": "Komponentens fysiske egenskaber",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Omdøb komponent",
|
||||
"cmd.component_replace_with_link": "Erstat med link",
|
||||
"cmd.component_revert_position": "Tilbagefør position",
|
||||
"cmd.component_show_history": "Vis komponenthistorik",
|
||||
"cmd.component_unlock": "Lås indhold op",
|
||||
"cmd.component_update_links": "Opdatér forbindelser",
|
||||
"cmd.config_activate": "Aktivér konfiguration",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Konfigurationsregel",
|
||||
"cmd.config_rules": "Konfigurationsregler",
|
||||
"cmd.config_table": "Vis konfigurationstabel",
|
||||
"cmd.construct.plane.axis_point": "Plan gennem akse og punkt",
|
||||
"cmd.construct_axis_edge": "Akse gennem kant",
|
||||
"cmd.construct_axis_normal_to_face": "Akse vinkelret på flade",
|
||||
"cmd.construct_axis_through_cylinder": "Akse gennem cylinder/kegle/torus",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Vis eksploderet visning",
|
||||
"cmd.expr_evaluate": "Beregn udtryk",
|
||||
"cmd.face_delete": "Slet flade",
|
||||
"cmd.file.export_3mf": "Eksportér 3MF",
|
||||
"cmd.file.export_obj": "Eksportér OBJ",
|
||||
"cmd.file.export_step": "Eksportér STEP",
|
||||
"cmd.file.export_stl": "Eksportér STL",
|
||||
"cmd.file.export_urdf": "Eksportér URDF",
|
||||
"cmd.file_export": "Eksportér",
|
||||
"cmd.file_insert_mesh": "Indsæt mesh",
|
||||
"cmd.file_insert_step": "Indsæt STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Aktivér komponentfarver",
|
||||
"cmd.inspect_colored_components_disable": "Deaktivér komponentfarver",
|
||||
"cmd.inspect_compare": "Sammenlign emner",
|
||||
"cmd.inspect_compare_picture": "Sammenlign billede",
|
||||
"cmd.inspect_continuity": "Kontinuitetsanalyse",
|
||||
"cmd.inspect_curvature_comb": "Krumningskamanalyse",
|
||||
"cmd.inspect_curvature_map": "Krumningskortanalyse",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Redigér punktsky",
|
||||
"cmd.pointcloud_insert": "Indsæt punktsky",
|
||||
"cmd.pointcloud_list": "Punktskyer",
|
||||
"cmd.render.compare.divider": "Flyt skillelinjen i renderingssammenligningen",
|
||||
"cmd.render.result.discard": "Kassér renderingsresultat",
|
||||
"cmd.render.result.select": "Vælg renderingsresultat",
|
||||
"cmd.render_aging_describe": "Lagdelt overfladeældning",
|
||||
"cmd.render_backends": "Renderingsmotorer",
|
||||
"cmd.render_batch": "Render alle optagelser",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline med kontrolpunkter (grad 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline gennem punkter",
|
||||
"cmd.sketch_spline_insert_point": "Tilføj splinepunkt",
|
||||
"cmd.sketch_spline_remove_point": "Fjern splinepunkt",
|
||||
"cmd.sketch_spline_reverse": "Vend splinens retning",
|
||||
"cmd.sketch_spun_profile": "Omdrejningsprofil",
|
||||
"cmd.sketch_toggle_diameter": "Skift mellem radius og diameter",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Flyt tilbagerulningsmarkør",
|
||||
"cmd.timeline_stop": "Stop historik",
|
||||
"cmd.timeline_suppress": "Undertryk feature",
|
||||
"cmd.ui.assistant": "Vis/skjul assistent",
|
||||
"cmd.view.render_browser": "Renderingsbrowser",
|
||||
"cmd.view.render_dock": "Flyt renderingsdock",
|
||||
"cmd.view.render_focus": "Fokusvisning af rendering",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Navigationsværktøj",
|
||||
"cmd.view_top": "Visning ovenfra",
|
||||
"cmd.view_visual_style": "Visuel stil",
|
||||
"color.blue": "Blå",
|
||||
"color.copy": "Klik for at kopiere farveværdier",
|
||||
"color.edit": "Klik for at redigere farve",
|
||||
"color.gamma": "Viser farveværdier i 0-255 gammarum",
|
||||
"color.green": "Grøn",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Angiv #rrggbb eller #rrggbbaa; seks cifre bevarer opaciteten",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Farvetone",
|
||||
"color.linear": "Viser farveværdier i 0-1 lineært rum",
|
||||
"color.recent": "Seneste farver",
|
||||
"color.recent_help": "Farver, du vælger i et farvefelt, vises her",
|
||||
"color.red": "Rød",
|
||||
"color.saturation": "Mætning (procent)",
|
||||
"color.saturation_value": "Mætning og værdi",
|
||||
"color.selected": "Valgt farve",
|
||||
"color.step_down": "Ét trin ned",
|
||||
"color.step_up": "Ét trin op",
|
||||
"color.value": "Værdi, lysstyrken (procent)",
|
||||
"config.column_filter_empty": "Ingen matchende kolonner",
|
||||
"config.rule_parameter_columns": "Kun parametre med en kolonne i tabellen vises. Tilføj en kolonne med Tilføj kolonne (+) for at bruge parameteren her.",
|
||||
"config.rule_suppression_columns": "Kun features med en Undertryk-kolonne i tabellen vises. Tilføj en kolonne med Tilføj kolonne (+) for at styre undertrykkelsen her.",
|
||||
"contact.components_count": "{count} komponenter",
|
||||
"contact.enabled_label": "aktiveret",
|
||||
"coupling.gear_1": "Tandhjul 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Mål: {name}",
|
||||
"dialog.edit_title": "REDIGÉR {title}",
|
||||
"dialog.no_shown_body": "Intet vist emne at ændre: Vis et, eller vælg Nyt emne",
|
||||
"dialog.pattern_sketch_not_object": "Vælg emner eller features: En skitse er ingen af delene. Gentag dens kurver med skitsens eget Mønster eller Spejling, eller ekstruder den først.",
|
||||
"dialog.select": "↖ Vælg",
|
||||
"dialog.selected_count": "↖ Valgte: {count}",
|
||||
"dialog.selection_constraint": "Binding {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · kurve {id}",
|
||||
"dialog.selection_guidance": "Vælg et input for at ændre det. Klik på valgte objekter for at fjerne dem; Ctrl/Cmd-klik skifter også deres valgstatus. Gennemgå forhåndsvisningen, og tryk derefter på OK.",
|
||||
"dialog.selection_midpoint": "Midtpunkt · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} af {total}: Vælg {input}",
|
||||
"dialog.step": "Trin",
|
||||
"document.changed_on_disk": "{name} er ændret på disken",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Opretter en konstruktionsakse gennem to punkter, hjørnepunkter eller skitsepunkter. Brug den til en akse mellem to kendte positioner.",
|
||||
"help.construct.plane.along_path": "Opretter et konstruktionsplan vinkelret på en kant eller kurve i en given position langs den. Brug det til at skitsere en profil til et sweep eller et snit af en bane.",
|
||||
"help.construct.plane.at_angle": "Opretter et konstruktionsplan, der er drejet med en vinkel fra et plan eller en flade omkring en akse eller kant. Brug det til skrå skitser, f.eks. et vinklet beslag.",
|
||||
"help.construct.plane.axis_point": "Opretter et konstruktionsplan, der indeholder en akse og et punkt uden for aksen. Vælg en akse fra nulpunktet eller en konstruktionsakse, en ret kant eller skitselinje og derefter et hjørnepunkt, skitsepunkt eller konstruktionspunkt. Et punkt på aksen kan ikke definere et entydigt plan.",
|
||||
"help.construct.plane.midplane": "Opretter et konstruktionsplan midt mellem to planer eller plane flader eller halverende dem, hvor de mødes i en vinkel. Brug det som symmetriplan til spejling.",
|
||||
"help.construct.plane.offset": "Opretter et konstruktionsplan parallelt med et plan eller en plan flade i en afstand eller gennem et punkt. Brug det til at skitsere i en bestemt højde over en flade.",
|
||||
"help.construct.plane.perpendicular": "Opretter et konstruktionsplan, der indeholder en linje eller kant og står vinkelret på et plan eller en flade. Brug det til at skitsere opretstående på en model langs en kant.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Kontrollér ledtypen (f.eks. Stiv), fastgørelse, bevægelsesgrænser for led og parameterstyrede værdier.",
|
||||
"joint_move.blocked_title": "Kan ikke flytte dette emne",
|
||||
"joint_move.coarse": "Rotationstrin nær aksen (°)",
|
||||
"joint_move.conflict": "Et led på dette emne er i konflikt med de andre: {joint}.",
|
||||
"joint_move.conflict_hint": "Redigér, undertryk eller slet det modstridende led, så de andre led kan placere emnet.",
|
||||
"joint_move.distance": "Afstand fra start",
|
||||
"joint_move.done": "Færdig",
|
||||
"joint_move.fine": "Rotationstrin langt fra aksen (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Spor {number}",
|
||||
"nav.alias.help": "Shift+Alt+træk med venstre museknap roterer visningen, Shift+Alt+midterste panorerer, Shift+Alt+højre zoomer; træk med midterste museknap panorerer også, og træk med højre roterer visningen",
|
||||
"nav.blender.help": "Træk med midterste museknap roterer visningen, Shift+midterste panorerer, Ctrl+midterste zoomer; træk med højre museknap påvirker ikke kameraet",
|
||||
"nav.creo.help": "Træk med midterste museknap roterer visningen, Shift+midterste panorerer, Ctrl+træk lodret med midterste zoomer (ned for at zoome ind); rulning med hjulet zoomer",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Musen og 3D-musen roterer gennem begge poler og bevarer rulning. Snap til akser med Shift er slået fra.",
|
||||
"nav.free_orbit.label": "Fri rotation af visningen",
|
||||
"nav.free_orbit.snap_help": "Musen og 3D-musen roterer gennem begge poler og bevarer rulning. Hold Shift nede under et rotationstræk for at snappe visningsretningen og rulningen.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+træk med venstre museknap panorerer, Shift+Alt+venstre zoomer, Ctrl+træk med venstre fra et tomt område roterer visningen",
|
||||
"nav.inventor.help": "Træk med midterste museknap panorerer, Shift+midterste roterer visningen, Ctrl+midterste zoomer, træk med højre roterer visningen",
|
||||
"nav.maya.help": "Alt+træk med venstre museknap roterer visningen, Alt+midterste panorerer, Alt+højre zoomer; træk med midterste museknap panorerer også",
|
||||
"nav.nx.help": "Træk med midterste museknap roterer visningen, Shift+midterste panorerer (NX's midterste + højre), Ctrl+midterste zoomer (NX's midterste + venstre); træk med højre museknap påvirker ikke kameraet",
|
||||
"nav.openscad.help": "Træk med venstre museknap i et tomt område roterer visningen, Shift+venstre markerer med en ramme, træk i skitsegeometri redigerer den; træk med højre eller midterste museknap panorerer, Shift+højre eller Shift+midterste zoomer",
|
||||
"nav.perspective.sketch": "Skitseredigering bruger ortografisk visning. Afslut skitsen for at skifte til perspektiv.",
|
||||
"nav.right_drag_orbits.help": "Slået fra: Træk med højre museknap påvirker ikke kameraet, og højre knap åbner kun genvejsmenuen. Hvis du vælger SolidWorks-musetildelingen, slås dette fra.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Rundhovedet skrue med indvendig sekskant",
|
||||
"parts.family.dowel_pin": "Cylindrisk stift (dyvel)",
|
||||
"parts.family.hex_bolt": "Sekskanthovedet bolt / skrue",
|
||||
"parts.family.hex_cap_screw_inch": "Sekskantskrue (tommer)",
|
||||
"parts.family.hex_nut": "Sekskantmøtrik",
|
||||
"parts.family.hex_nut_inch": "Sekskantmøtrik (tommer)",
|
||||
"parts.family.set_screw": "Stilleskrue med indvendig sekskant, flad spids",
|
||||
"parts.family.socket_head_cap_screw": "Cylinderskrue med indvendig sekskant",
|
||||
"parts.family.washer": "Almindelig skive",
|
||||
"parts.family.washer_sae": "Almindelig skive, SAE (smal)",
|
||||
"parts.family.washer_uss": "Almindelig skive, USS (bred)",
|
||||
"parts.holes": "Huller (valgfrit)",
|
||||
"parts.placement_hint": "vælg et eller flere huller for at sætte en del i hvert, eller tryk OK for at placere den ved nulpunktet",
|
||||
"parts.system": "Enhedssystem",
|
||||
"parts.system.inch": "Tommer",
|
||||
"parts.system.metric": "Metrisk",
|
||||
"pattern.alignment_2": "Justering 2",
|
||||
"pattern.alignment_hint": "Antal omfatter originalen. Centrér fordeler kopierne ligeligt; Vend vælger siden med den ekstra kopi ved et lige samlet antal.",
|
||||
"pattern.direction_1": "Retning 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Træk med venstre museknap",
|
||||
"prefs.button_middle": "Træk med midterste museknap",
|
||||
"prefs.button_right": "Træk med højre museknap",
|
||||
"prefs.carousel_next": "Næste",
|
||||
"prefs.carousel_previous": "Forrige",
|
||||
"prefs.choose_font": "Vælg skrifttypefil…",
|
||||
"prefs.click": "Klik",
|
||||
"prefs.contact_shading": "Blød kontaktskygning",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Krumme overflader",
|
||||
"prefs.curves": "Krumme overflader",
|
||||
"prefs.cut_preview_tint": "Vis fjernet materiale i rødt",
|
||||
"prefs.cut_preview_tint_help": "En forhåndsvisning udfylder det materiale, som en feature fjerner, og den form, den erstatter, med et rødt, gennemsigtigt spøgelse. Når indstillingen er slået fra, er udfyldningerne helt gennemsigtige, og kun deres omrids tegnes.",
|
||||
"prefs.dark_parts_shading": "Bevar formen på mørke dele",
|
||||
"prefs.dark_parts_shading_help": "Skygger visningen i lineært lys med en blød himmelfyld, så mørke flader beholder et farveforløb i stedet for at blive sorte",
|
||||
"prefs.dead_zone_note": "Det skraverede bånd er dødzonen: Bevægelser inden for det ignoreres.",
|
||||
"prefs.default": "standard",
|
||||
"prefs.design": "Standardindstillinger for design",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Kanter og skygning",
|
||||
"prefs.extend": "Udvid",
|
||||
"prefs.extra_navigation": "Ctrl+træk med venstre museknap i et tomt område roterer visningen; hold mellemrumstasten nede for at panorere.",
|
||||
"prefs.extrude_view_isometric": "Drej visningen til isometrisk, når Ekstrudering åbnes",
|
||||
"prefs.extrude_view_return": "Gå tilbage til den tidligere visning, når Ekstrudering lukkes",
|
||||
"prefs.follows_os": "Følger operativsystemet",
|
||||
"prefs.font": "Skrifttype",
|
||||
"prefs.font_fallback": "Tegn, som den valgte skrifttype mangler, vises med den indbyggede skrifttype, så ingen tekst viser en tom firkant.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automatisk",
|
||||
"prefs.graphics_card_missing": "Det gemte grafikkort er ikke tilgængeligt. Automatisk bruges i stedet.",
|
||||
"prefs.graphics_card_restart": "Træder i kraft efter genstart af SolidCraft. WGPU_ADAPTER_NAME tilsidesætter dette valg.",
|
||||
"prefs.graphics_card_unused": "Det gemte grafikkort blev ikke brugt til dette vindue. Kortet i brug vises i Hjælp › Om og i statuslinjen. Prøv Automatisk, eller sæt WGPU_ADAPTER_NAME til en entydig del af kortets navn.",
|
||||
"prefs.graphics_note": "Afvej hastighed mod udjævning. Hvert valg viser sin virkning på et eksempel.",
|
||||
"prefs.graphics_presets_note": "Forudindstillinger angiver de nedenstående valg samlet.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Skjul bindingssymboler, når der zoomes ud",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Når Skitser er sat til Under deres feature, viser historikken til venstre hver skitse ét niveau inde under den første feature, der er bygget på den, så snart den er bred nok til navne. Tidslinjen nederst bevarer altid oprettelsesrækkefølgen.",
|
||||
"prefs.history_sketches_under_feature": "Under deres feature",
|
||||
"prefs.hold_stop_snapping": "Hold nede for at slå snapping fra",
|
||||
"prefs.home_fit_size": "Størrelse ved Hjem og Tilpas",
|
||||
"prefs.home_fit_size_note": "Hvor meget af visningen modellen fylder, når Hjem, Tilpas, et åbnet design eller et skift af visning i navigatoren rammer den ind, uanset om indstillingen nedenfor er slået til. 100 %: Fylder visningen mellem panelerne, kompasset og navigationslinjen.",
|
||||
"prefs.icons_only": "Kun ikoner",
|
||||
"prefs.imported_file": "Importeret fil",
|
||||
"prefs.in_browser": "I modeltræet",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Sprog i brugergrænsefladen",
|
||||
"prefs.interface_note": "SolidCrafts udseende og placeringen af dets dele.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Vend de buede rulningspile om",
|
||||
"prefs.invert_curved_roll_arrows_note": "De to buede pile i kubens hjørne ruller visningen i skærmplanet. Slået til: Pilen med uret ruller mod uret, og pilen mod uret ruller med uret. Slået fra: Hver pil ruller visningen den vej, den krummer.",
|
||||
"prefs.invert_navigator_arrows": "Vend visningskubens rotationspile om",
|
||||
"prefs.invert_navigator_arrows_note": "Pilene rundt om kuben roterer kameraet i den retning, de peger, som i Fusion og Inventor: Pilen til venstre peger mod højre og svinger kameraet til højre. Slået fra: En pil drejer kuben mod den side, den sidder på, så venstre pil svinger kameraet til venstre. De buede rulningspile påvirkes ikke.",
|
||||
"prefs.keep_work_on_tab_switch": "Behold dialoger og værktøjer åbne, når du skifter design",
|
||||
"prefs.keep_work_on_tab_switch_note": "Hver designfane beholder sin åbne dialog eller sit åbne værktøj med det, du har valgt og skrevet i den, og sin fane på båndet. De er der igen, når du vender tilbage til designet. Slået fra: Skift af design annullerer dem og viser fanen Model.",
|
||||
"prefs.labels": "Etiketter",
|
||||
"prefs.language_system": "System",
|
||||
"prefs.layout": "Layout",
|
||||
"prefs.layout_note": "Kompakt fastgør panelerne til vinduets kanter. Gennemsigtighed i modelbrowseren er tilgængelig i Flydende. Skift assistentens side på siden Assistent.",
|
||||
"prefs.left": "Venstre",
|
||||
"prefs.left_click": "Venstreklik",
|
||||
"prefs.line_drag_draws_one": "Tryk og træk tegner én linje",
|
||||
"prefs.line_drag_draws_one_note": "I værktøjet Linje tegner tryk, træk og slip én linje fra trykket til slippet, og linjen slutter dér. Klik tegner stadig en kæde. Slået fra: Et træk placerer et punkt, hvor det slippes, ligesom et klik gør.",
|
||||
"prefs.line_hover_tangent_arc": "Hvil markøren på en linjes sidste punkt for at skifte til en tangentbue",
|
||||
"prefs.line_hover_tangent_arc_note": "Når et segment er tegnet i værktøjet Linje, så flyt markøren væk fra kædens sidste punkt, kom tilbage, og hold den stille på punktet: Næste klik afslutter en tangentbue, og samme bevægelse går tilbage til linjer. Slået fra: Det gør ingenting at hvile markøren der.",
|
||||
"prefs.linked_designs": "Linkede designs",
|
||||
"prefs.live_input": "Løbende input",
|
||||
"prefs.live_preview": "Løbende forhåndsvisning",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Musetildeling",
|
||||
"prefs.navigation": "Navigation",
|
||||
"prefs.navigation_note": "Hvordan musen, pegefeltet og 3D-musen styrer visningen.",
|
||||
"prefs.navigator_fit": "Tilpas modellen efter et skift af visning i navigatoren",
|
||||
"prefs.navigator_fit_note": "En flade, et hjørne eller en pil på visningskuben eller en akse på orienteringsgizmoen ser også mod modellens midte fra den ene afstand, der får den til at passe fra alle sider (dens omsluttende kugle). Hjem bruger samme zoom og centrum, mens dette er slået til, så visninger, der vælges bagefter, kun drejer. Slået fra: Visningen drejer på stedet og beholder sit mål og sin zoom.",
|
||||
"prefs.network_host_remove": "Fjern",
|
||||
"prefs.network_locations": "Tillad netværksplaceringer i designs",
|
||||
"prefs.network_locations_note": "Slået fra: Et designs linkede filer på en anden computer (\\\\server\\share) åbnes kun fra de servere, der er angivet her, eller efter at du har tilladt en, når du bliver spurgt.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Placering",
|
||||
"prefs.prefer_free_sketch_points": "Foretræk flytbare skitsepunkter, når punkter overlapper",
|
||||
"prefs.preview_choices": "Forhåndsvisning af dine valg",
|
||||
"prefs.preview_tint_new_faces": "Farv ny overflade i en forhåndsvisning",
|
||||
"prefs.preview_tint_new_faces_help": "En forhåndsvisning af en feature, der ændrer et emne, kan tegne den overflade, den tilføjer, i forhåndsvisningens farve. Når indstillingen er slået fra, tegnes emnet, som det er.",
|
||||
"prefs.print_face_highlight": "Fremhævning af printflade",
|
||||
"prefs.print_face_highlight_tip": "Hvor kraftigt et legemes printflade farves og omrids i visningen. 0 % viser ingen fremhævning.",
|
||||
"prefs.profile_active": "Aktiv profil",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Brug det tidligere geometribudget til forhåndsvisning af rendering",
|
||||
"prefs.render_previous_geometry_budget_help": "Gendan den tidligere faste geometrigrænse (512 MiB på 64-bit-computere, 128 MiB andre steder) i stedet for det enhedsbaserede budget.",
|
||||
"prefs.reports_saved": "{n} gemt",
|
||||
"prefs.ribbon_click_ends_tool": "Et klik på det kørende værktøjs knap afslutter det",
|
||||
"prefs.ribbon_click_ends_tool_note": "Et klik på den lysende knap på båndet for det skitseværktøj, der er i brug, afslutter værktøjet, så klik i visningen markerer igen. Slået fra: Klikket starter værktøjet igen.",
|
||||
"prefs.ribbon_reveal": "Vis søgeresultater på båndet",
|
||||
"prefs.ribbon_reveal_note": "Når du holder musen over et resultat i Søg efter kommandoer, vises det, hvor kommandoen sidder på båndet: dens fane, dens knap eller dens række i et panels rullemenu. En kommando, der startes fra søgningen, blinker dér, og en kørende kommando fra en rullemenu markerer sit panel.",
|
||||
"prefs.right_click": "Højreklik",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Vend tilbage til den forrige visning",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Vend tilbage, medmindre visningen er roteret",
|
||||
"prefs.sketch_exit_view_note": "Hvor visningen går hen efter Afslut skitse, Annullér eller et dobbelt tryk på Esc.",
|
||||
"prefs.sketch_face_activates_part": "Når du skitserer på en dels flade, bliver delen aktiv",
|
||||
"prefs.sketch_face_activates_part_note": "En skitse, der startes på en flade af en anden komponents emne, aktiverer først den komponent, så skitsen hører til den og bliver hos den del i modeltræet. Delen forbliver aktiv bagefter. Slået fra: Skitsen hører til den aktive komponent.",
|
||||
"prefs.sketch_open_look_at": "Vend visningen mod en skitse, når den åbnes",
|
||||
"prefs.sketch_open_look_at_note": "Slået fra: Når en skitse oprettes eller redigeres, forbliver visningen, som den er. Se på vender visningen mod skitsen, når du ønsker det.",
|
||||
"prefs.sketch_recent_snap": "Automatisk snap til nylige centre og midtpunkter",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Fejl",
|
||||
"prefs.status_selected": "Valgt",
|
||||
"prefs.status_warning": "Advarsel",
|
||||
"prefs.structure.appearance": "Udseende",
|
||||
"prefs.structure.appearance_note": "Farver, tekst og tilgængelighed.",
|
||||
"prefs.structure.in_profile": "I profil",
|
||||
"prefs.structure.layout": "Layout",
|
||||
"prefs.structure.layout_note": "Hvor vinduets dele sidder.",
|
||||
"prefs.structure.look": "Look",
|
||||
"prefs.structure.measure_pointer": "Mål og markør",
|
||||
"prefs.structure.mouse3d": "3D-mus",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse og SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Mus og pegefelt. 3D-musen har sin egen side.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Ændret, siden den blev gemt",
|
||||
"prefs.structure.profile_hover": "Gemt i indstillingsprofiler",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Skitse",
|
||||
"prefs.structure.tools": "Værktøjer",
|
||||
"prefs.structure.tools_note": "Hvordan modelleringsværktøjerne opfører sig.",
|
||||
"prefs.structure.work": "Arbejde",
|
||||
"prefs.supersampling_brief": "Tegner visningen i større størrelse og nedskalerer den med filtrering: meget skarpt og mere krævende.",
|
||||
"prefs.tab_accent_note": "Accentfarven følger den aktive fane",
|
||||
"prefs.theme_file": "temafil",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Basisfarve · sRGB",
|
||||
"render.base_metallic": "Metallisk andel",
|
||||
"render.base_opaque_only": "Denne editor bevarer emnets uigennemsigtighed. Brug de eksplicitte glasindstillinger til optisk transmission.",
|
||||
"render.batch_all_shots": "Alle optagelser ({count})",
|
||||
"render.batch_empty": "Gem en optagelse, før alle optagelser renderes.",
|
||||
"render.batch_limit": "Rendering af alle optagelser er begrænset til 32 optagelser.",
|
||||
"render.batch_status": "{running} kører · {waiting} venter",
|
||||
"render.bloom_enable": "Vis bloom",
|
||||
"render.bloom_help": "En kreativ glød, der kun påvirker output, ud fra positive lineære højlys og spredt med tre normaliserede box-pas. Radius er i outputpixels. Lægges til i lineært visningslys før sRGB; ikke en linseeffekt, en volumeneffekt eller en forbedring af konvergens. Den rå EXR er uændret.",
|
||||
"render.bloom_opaque": "Bloom kræver uigennemsigtigt output. Gennemsigtig PNG afvises og gøres ikke stiltiende uigennemsigtig.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Vælg først et udseende under Udseender",
|
||||
"render.chromatic_offset": "Kromatisk kantforskydning",
|
||||
"render.clear_stage": "Fjern gemt kulisse",
|
||||
"render.compare_divider": "Sammenligningens skillelinje",
|
||||
"render.compare_live": "Live",
|
||||
"render.compare_live_preview": "Live-forhåndsvisning",
|
||||
"render.compare_render": "Rendering {number}",
|
||||
"render.compare_side": "Rendering {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · registreret ved revision {revision}",
|
||||
"render.compare_swap": "Ombyt",
|
||||
"render.copy_request": "Kopiér JSON",
|
||||
"render.cpu_aa_help": "Rumlige samples: flere samples forbedrer kanter og øger renderingstiden.",
|
||||
"render.cpu_area_add": "Tilføj rektangulært CPU-lys",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Viser det seneste færdige billede; en nyere rendering har ikke erstattet det.",
|
||||
"render.result_sequence": "Kontrolpunkt",
|
||||
"render.result_title": "Renderingsresultat",
|
||||
"render.results_choose": "Bevarede resultater",
|
||||
"render.results_label": "Rendering {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [forældet]",
|
||||
"render.results_unnamed": "Billede",
|
||||
"render.return_design": "Tilbage til Design",
|
||||
"render.review_stale": "Denne gennemgang er forældet. Afklar den, eller kontrollér igen, før du anvender den.",
|
||||
"render.ribbon_aging": "Ældning",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Start med = for at bygge ordene ud fra parametre: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Kursiv",
|
||||
"sketch_text.loading_fonts": "Søger efter installerede skrifttyper…",
|
||||
"sketch_text.no_bold": "Den indbyggede skrifttype har ingen fed udgave: Vælg en installeret skrifttype",
|
||||
"sketch_text.on_path": "Teksten følger sin bane: Kurven bestemmer placeringen",
|
||||
"sketch_text.path_clear": "Frigør teksten fra dens kurve",
|
||||
"sketch_text.path_hint": "En kurve i skitsen, som teksten følger: Klik her og derefter på kurven",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "de to nulpunkter er på samme komponent",
|
||||
"thread.automatic_size": "Automatisk størrelse",
|
||||
"thread.designation": "Betegnelse",
|
||||
"thread.direction": "Gevindretning",
|
||||
"thread.iso_metric": "ISO-metrisk",
|
||||
"thread.left_hand": "Venstregænget",
|
||||
"thread.right_hand": "Højregænget",
|
||||
"thread.select_size": "Vælg størrelse",
|
||||
"timeline.delete_after_marker_one": "Slet 1 feature efter historikmarkøren",
|
||||
"timeline.delete_after_marker_other": "Slet {count} features efter historikmarkøren",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Kør dette i en terminal, og tryk derefter på Forbind igen:",
|
||||
"ui.agent_chat_auth_title": "Log ind hos agenten",
|
||||
"ui.agent_chat_cancel": "Annullér",
|
||||
"ui.agent_chat_cancel_timeout": "Agenten svarede ikke på Stop og blev afbrudt. Forbind igen for at fortsætte.",
|
||||
"ui.agent_chat_cannot_start": "Installeret, men den starter ikke: {error}",
|
||||
"ui.agent_chat_changes": "Ændringer: {n}, ét fortrydelsestrin",
|
||||
"ui.agent_chat_changes_n": "{n} ændringer",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Agentkommando",
|
||||
"ui.agent_chat_connect": "Forbind",
|
||||
"ui.agent_chat_copy": "Kopiér",
|
||||
"ui.agent_chat_copy_message": "Kopiér besked",
|
||||
"ui.agent_chat_ctx_bodies": "Emner",
|
||||
"ui.agent_chat_ctx_elements": "Elementer",
|
||||
"ui.agent_chat_ctx_features": "Features",
|
||||
"ui.agent_chat_ctx_more": "+{n} flere",
|
||||
"ui.agent_chat_ctx_other": "Andet",
|
||||
"ui.agent_chat_custom_heading": "Brugerdefineret model",
|
||||
"ui.agent_chat_custom_hint": "Ethvert program, der bruger Agent Client Protocol via stdin og stdout. Det køres uden en kommandoskal.",
|
||||
"ui.agent_chat_denied": "Afvist",
|
||||
"ui.agent_chat_deny": "Afvis",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Alt",
|
||||
"ui.agent_chat_mode_ask": "Spørg",
|
||||
"ui.agent_chat_mode_edits": "Ændringer",
|
||||
"ui.agent_chat_model_custom": "Brug brugerdefineret model: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} kan ikke bruge SolidCrafts værktøjer og kan derfor kun chatte. Vælg en model med understøttelse af værktøjer.",
|
||||
"ui.agent_chat_model_rejected": "Agenten accepterede ikke {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Søg efter modeller…",
|
||||
"ui.agent_chat_model_tip": "Modellen, som agenten bruger. Dit valg huskes for denne agent.",
|
||||
"ui.agent_chat_models_failed": "Kunne ikke hente listen over modeller: {error}",
|
||||
"ui.agent_chat_models_heading": "Tilgængelige modeller",
|
||||
"ui.agent_chat_models_listing": "Henter modeller…",
|
||||
"ui.agent_chat_models_none": "Endepunktet viser ingen modeller",
|
||||
"ui.agent_chat_models_not_a_list": "Svaret var ikke en liste over modeller",
|
||||
"ui.agent_chat_new": "Ny chat",
|
||||
"ui.agent_chat_new_confirm": "Start en ny chat? Den aktuelle chat ryddes.",
|
||||
"ui.agent_chat_next_picture": "Næste billede",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Tilladelser",
|
||||
"ui.ai_preset": "Forudindstilling",
|
||||
"ui.ai_protocol": "Protokol",
|
||||
"ui.ai_reasoning_effort": "Ræsonnementsindsats",
|
||||
"ui.ai_reasoning_effort_field_hint": "tom = udbyderens standard",
|
||||
"ui.ai_reasoning_effort_hint": "Valgfrit. Sendes til slutpunktet som `reasoning_effort`; accepterede værdier varierer fra udbyder til udbyder (for eksempel `low`, `high` eller `max`). En værdi, du angiver her, erstattes aldrig af SolidCraft. Lad feltet stå tomt for ikke at sende noget og beholde udbyderens standard.",
|
||||
"ui.ai_remove": "Fjern",
|
||||
"ui.ai_request_timed_out": "Modellen brugte mere end {seconds} s. Du kan hæve tidsgrænsen for anmodninger til dette endepunkt under Indstillinger › Assistent.",
|
||||
"ui.ai_request_timeout": "Tidsgrænse for anmodning",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Tangent: Vælg en cirkel/bue eller en åben spline/keglesnit, og vælg derefter røringspunktet (frie kurver: endepunkter)",
|
||||
"ui.construction.external_hint": "Tangent: Vælg en cirkel eller bue og et eksternt punkt, og vælg derefter den ønskede løsning",
|
||||
"ui.construction.free_hint": "Hjælpelinje: Klik på to punkter; højreklik for at starte forfra",
|
||||
"ui.construction.normal_needs_length": "En uendelig linje er altid en hjælpelinje: Skriv en længde for at tegne en normal linje",
|
||||
"ui.construction.point_hint": "Hjælpelinje: Klik på det punkt, linjen skal gå igennem",
|
||||
"ui.construction.reference_hint": "Hjælpelinje: Vælg en ret linje og derefter et punkt; højreklik for at skifte reference",
|
||||
"ui.construction.ribbon_label": "Hjælpelinjer",
|
||||
"ui.construction.side_hint": "Hjælpelinje: Klik på den side, linjen går mod; højreklik for at starte forfra",
|
||||
"ui.context_menu": "Genvejsmenu",
|
||||
"ui.continuity_crease": "Knæk",
|
||||
"ui.continuity_curvature": "Krumning",
|
||||
"ui.continuity_curvature_change": "Ændring i krumning",
|
||||
"ui.continuity_g0": "G0-knæk",
|
||||
"ui.continuity_g1": "G1-tangentkontinuitet",
|
||||
"ui.continuity_g2": "G2-krumningskontinuitet",
|
||||
"ui.continuity_gap": "Åbning mellem flader",
|
||||
"ui.continuity_position": "Positionskontinuitet",
|
||||
"ui.continuity_tangent": "Tangentkontinuitet",
|
||||
"ui.copy": "Kopiér",
|
||||
"ui.corner": "Hjørne",
|
||||
"ui.corners": "Hjørner",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Mørk",
|
||||
"ui.default_modelling_orientation": "Standardorientering for modellering",
|
||||
"ui.delete": "Slet",
|
||||
"ui.delete_select_first": "Vælg først, hvad der skal slettes: features, emner, komponenter eller skitsegeometri",
|
||||
"ui.depth": "Dybde",
|
||||
"ui.design": "Design",
|
||||
"ui.design_properties.author": "Forfatter",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Delen blev gemt i en anden fil; samlingen linker stadig til {name}",
|
||||
"ui.edit_in_place_wait": "Vent, til det, der kører i designet, er færdigt",
|
||||
"ui.edit_section_analysis": "Redigér snitanalyse",
|
||||
"ui.edit_sketch_empty": "Ingen skitser at redigere",
|
||||
"ui.ellipse": "Ellipse",
|
||||
"ui.emboss_wrap_note": "Ortogonale linjeprofiler, der tangerer én understøttet cylinder, vikles automatisk om. Vælg en væg for at vælge et mål.",
|
||||
"ui.end_radius": "Slutradius",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Eksplicit",
|
||||
"ui.equation_form": "Form",
|
||||
"ui.equation_note": "Variablen er et almindeligt tal: sin(t) tager den i radianer. Et resultat uden enhed er i designets enhed.",
|
||||
"ui.equation_note_range": "Variablen er en længde, ligesom dens interval er det: Kombinér den med længdeparametre, og divider den med en længde for sin(). Et resultat uden enhed er i designets enhed.",
|
||||
"ui.equation_parametric": "Parametrisk",
|
||||
"ui.equation_variable_unit": "Variablen har intervallets enhed",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Skjul nulpunkt",
|
||||
"ui.hidePlanes": "Skjul planer",
|
||||
"ui.hideProfile": "Skjul profil",
|
||||
"ui.hide_component_history": "Skjul dens historik",
|
||||
"ui.hide_origin_by_default": "Skjul nulpunktet som standard",
|
||||
"ui.hide_origin_note": "Nye designs starter med mappen Nulpunkt skjult. Et design beholder sin egen indstilling for nulpunktet, når du har vist eller skjult det.",
|
||||
"ui.history_back": "Gå ét trin tilbage",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "dobbeltklik på kanten",
|
||||
"ui.history_first": "Gå til begyndelsen",
|
||||
"ui.history_forward": "Gå ét trin frem",
|
||||
"ui.history_hide_hidden": "Skjul skjulte komponenter",
|
||||
"ui.history_hide_names": "Skjul navne",
|
||||
"ui.history_last": "Gå til slutningen",
|
||||
"ui.history_marker_tip": "Historikmarkør: Træk for at rulle modellen tilbage; nye features indsættes her",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Vis afspilningsknappen",
|
||||
"ui.history_play_finish_action": "Afslut den aktuelle handling, før historikken afspilles",
|
||||
"ui.history_play_roll_back": "Flyt historikmarkøren tilbage, før du afspiller",
|
||||
"ui.history_show_hidden": "Vis skjulte komponenter",
|
||||
"ui.history_show_names": "Vis navne",
|
||||
"ui.history_sketch_listed_under": "Vises under {feature}",
|
||||
"ui.history_title": "Historik",
|
||||
"ui.history_toggle_names": "Vis eller skjul featurenavne",
|
||||
"ui.history_waits_for_editor": "Fortryd, Gentag og Historik venter, indtil featureeditoren er åbnet",
|
||||
"ui.hole": "Hul",
|
||||
"ui.hole_tap_type": "Hullets gevindtype",
|
||||
"ui.hole_type": "Hultype",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} har ændringer, der ikke er gemt, så dens gemte fil blev indsat. Gem den, og kør derefter Opdatér forbindelser for at hente ændringerne.",
|
||||
"ui.insert_design.unsaved": "Ikke-gemte ændringer",
|
||||
"ui.inspect": "Inspicér",
|
||||
"ui.instances": "Forekomster",
|
||||
"ui.intersect": "Fællesvolumen",
|
||||
"ui.isolate": "Isolér",
|
||||
"ui.join": "Foren",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Led",
|
||||
"ui.keyboard_shortcuts": "Tastaturgenveje",
|
||||
"ui.language": "Sprog",
|
||||
"ui.lasso_select": "Lasso (træk en frihåndsløkke: Markerer det, der ligger helt indeni)",
|
||||
"ui.layout_compact": "Kompakt",
|
||||
"ui.layout_floating": "Flydende",
|
||||
"ui.length": "Længde",
|
||||
"ui.length_decimals": "Længdedecimaler",
|
||||
"ui.light": "Lys",
|
||||
"ui.line": "Linje",
|
||||
"ui.line_arc_hint": "Tangentbue: Klik på buens slutpunkt. Hvil markøren på det sidste punkt igen for linjer; højreklik eller Esc for at afslutte",
|
||||
"ui.link_copies": "Link identiske kopier",
|
||||
"ui.link_copies_keep": "Behold",
|
||||
"ui.link_copies_link": "Link",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Genopbygger delen og erstatter alle tilføjede features. Alle forekomster af komponenten opdateres.",
|
||||
"ui.paste": "Indsæt",
|
||||
"ui.path": "Bane",
|
||||
"ui.pattern_object_type_tip": "Emner: massive former, der vælges i visningen eller modeltræet; hvert kopieres helt.\nFeatures: trin i historikken, f.eks. en ekstrudering eller et hul, der vælges i historikken eller på en flade, de har lavet; trinnet gentages.\nEn skitse er ingen af delene: Gentag dens kurver med skitsens eget Mønster eller Spejling, eller ekstruder den først.",
|
||||
"ui.pattern_on_path": "Mønster langs bane",
|
||||
"ui.perforate_margin_default": "ud fra diameteren",
|
||||
"ui.perforate_pitch": "Deling",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Polygon",
|
||||
"ui.preferences": "Indstillinger",
|
||||
"ui.press_a_key": "tryk på en tast…",
|
||||
"ui.print_face_body_not_sent": "Den flades emne sendes ikke: føj det først til Emner",
|
||||
"ui.print_face_cleared": "{body}: printflade ryddet",
|
||||
"ui.print_face_input": "Printflade",
|
||||
"ui.print_face_one_body": "En printflade hører til ét legeme: send det legeme alene for at ændre den",
|
||||
"ui.print_face_pick": "Vælg en plan flade på et massivt legeme for at gøre den til printfladen",
|
||||
"ui.print_face_set": "{body}: printflade sat; Send til slicer lægger legemet på den",
|
||||
"ui.profile": "Profil",
|
||||
@@ -4959,7 +4814,6 @@
|
||||
"ui.properties.inertia_y": "Iyx, Iyy, Iyz",
|
||||
"ui.properties.inertia_z": "Izx, Izy, Izz",
|
||||
"ui.properties.measuring": "Måler…",
|
||||
"ui.properties.measuring_bodies": "Måler… {done} af {total} emner",
|
||||
"ui.properties.measuring_failed": "Målingen blev stoppet, før den var færdig.",
|
||||
"ui.properties.principal_axis": "Hovedakse {number}",
|
||||
"ui.properties.principal_moments": "Hovedmomenter",
|
||||
@@ -5053,7 +4907,6 @@
|
||||
"ui.showDimension": "Vis mål",
|
||||
"ui.showOrigin": "Vis nulpunkt",
|
||||
"ui.showPlanes": "Vis planer",
|
||||
"ui.show_component_history": "Vis dens historik",
|
||||
"ui.show_constraints": "Bindinger",
|
||||
"ui.show_construction_geometries": "Konstruktionsgeometri",
|
||||
"ui.show_dimensions": "Mål",
|
||||
@@ -5170,15 +5023,12 @@
|
||||
"ui.view_angles": "Visningsvinkler",
|
||||
"ui.view_angles_convention": "Grader om den opadgående akse. Krøjning 0° er visningen Forfra, 90° Fra venstre, −90° Fra højre, 180° Bagfra; stampning 90° er visningen Ovenfra; en positiv rulning drejer modellen med uret.",
|
||||
"ui.view_angles_help": "Viser visningens stampning, krøjning og rulning i grader samt dens projektion under orienteringsgizmoen. Klik på visningen for at skrive eksakte vinkler.",
|
||||
"ui.view_angles_lock": "Lås {axis}",
|
||||
"ui.view_angles_ortho": "Orto",
|
||||
"ui.view_angles_persp": "Persp",
|
||||
"ui.view_angles_pitch": "Stampning",
|
||||
"ui.view_angles_readout": "Stampning {pitch} · Krøjning {yaw} · Rulning {roll}",
|
||||
"ui.view_angles_roll": "Rulning",
|
||||
"ui.view_angles_unlock": "Lås {axis} op",
|
||||
"ui.view_angles_yaw": "Krøjning",
|
||||
"ui.view_angles_zero": "Sæt {axis} til 0°",
|
||||
"ui.view_centre": "Visningens centrum",
|
||||
"ui.viewport_status_clear": "Slå {name} fra",
|
||||
"ui.viewport_status_clear_hint": "Slå {name} fra · Esc",
|
||||
@@ -5236,7 +5086,7 @@
|
||||
"update.check_unavailable": "Søgning efter opdateringer er ikke tilgængelig for denne installation.",
|
||||
"update.checking": "Søger…",
|
||||
"update.copy": "Kopiér",
|
||||
"update.dmg_opened": "Diskbilledet er åbnet og verificeret: Afslut SolidCraft, træk det nye SolidCraft til Programmer, erstat den gamle kopi, og åbn derefter SolidCraft igen.",
|
||||
"update.dmg_opened": "Diskbilledet er åbnet og verificeret: Træk SolidCraft til Programmer, erstat den gamle kopi, og genstart SolidCraft.",
|
||||
"update.download": "Download",
|
||||
"update.download_open": "Download og åbn",
|
||||
"update.downloading": "Downloader og verificerer… {done} af {total} MB",
|
||||
@@ -5280,7 +5130,6 @@
|
||||
"web.open_link": "Åbn linket design?",
|
||||
"web.open_link_confirm": "Der er ændringer, som ikke er gemt. Skal det linkede design åbnes i en ny fane?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ vælg · Enter / Tab udfyld · Esc luk",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ vælg · Enter anvender denne værdi",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ vælg · Enter anvender det indtastede · Esc lukker",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter fortsætter på GitHub."
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"Mass Center": "Mass Centre",
|
||||
"Modeled": "Modelled",
|
||||
"Select the centre the pattern turns around first": "Select the centre the pattern turns around first",
|
||||
"Snap to face and edge centres": "Snap to centres",
|
||||
"Snap to face and edge centres": "Snap to face and edge centres",
|
||||
"Specialise": "Specialise",
|
||||
"cmd.appearance_favorite": "Favourite Look",
|
||||
"cmd.component_cycle_color": "Cycle Component Colour",
|
||||
@@ -69,28 +69,19 @@
|
||||
"help.solid.split_face": "Divides the selected faces along a plane, the face of another body or sketch curves, without cutting the body. Use it to give part of a face its own draft, colour or offset.",
|
||||
"help.third_party": "Third-party licences",
|
||||
"home.new_mm_hint": "Millimetres · opens in Design",
|
||||
"measure.line_to_centre": "Line to centre",
|
||||
"navbar.custom.anchor.bottom_centre": "Bottom centre",
|
||||
"navbar.custom.anchor.top_centre": "Top centre",
|
||||
"navbar.custom.customise": "Customise navigation bar…",
|
||||
"navbar.custom.position_centre": "Centre",
|
||||
"navbar.description.separator": "A thin line that groups neighbouring slots.",
|
||||
"pattern.alignment_hint": "Counts include the original. Centre balances copies; Flip chooses the extra side for even totals.",
|
||||
"prefs.appearance.colour_vision_help": "Changes the colours that carry a meaning: sketch states, axes, bends, analyses and icons.",
|
||||
"prefs.appearance.viewport_colours": "3D view colours",
|
||||
"prefs.bottom_centre": "Bottom centre",
|
||||
"prefs.design_tools.hole_snaps_help": "The middle of a face and the centres of its round edges.",
|
||||
"prefs.logo_theme": "Theme's colours",
|
||||
"prefs.max_file_size": "Largest file to open",
|
||||
"prefs.max_file_size_design": "Design files",
|
||||
"prefs.max_file_size_flag": "This run started with --max-file-size {size}, which applies until SolidCraft closes. These settings apply when it starts without it.",
|
||||
"prefs.max_file_size_note": "Defaults: 512 MB and 256 MB; at most 16 GB. Opening a file takes several times its size in memory. A design that keeps a large import may need a higher design file limit to save and reopen.",
|
||||
"prefs.max_file_size_step": "STEP and import files",
|
||||
"prefs.max_file_size_web": "The web app opens STEP and import files up to 512 MB and designs up to 256 MB: a browser tab can't hold larger files. The desktop app can raise these limits.",
|
||||
"prefs.megabytes": "MB",
|
||||
"prefs.network_locations_note": "For organisations that keep designs on file servers. Off: only servers you allow.",
|
||||
"prefs.sketch.center_arc": "Centre-point arc follows the cursor",
|
||||
"prefs.sketch.conflict_colour": "Conflict colour",
|
||||
"prefs.sketch.tracking_guides": "Centre and midpoint guides",
|
||||
"prefs.sketch.tracking_guides_note": "Temporary horizontal and vertical guides from hovered centres and edge midpoints.",
|
||||
"prefs.sketch_conflict_colour": "Conflicting geometry in the conflict colour",
|
||||
"prefs.sketch_conflict_colour_note": "While a sketch's constraints conflict, the curves and points a failing constraint holds are drawn in the conflict colour too, not only its glyph or dimension. Off: they keep their usual colours.",
|
||||
"prefs.sketch_construction_lines": "Extended construction line tools",
|
||||
@@ -258,7 +249,6 @@
|
||||
"ui.details_curvature_caption": "Faces are coloured by their local radius of curvature.",
|
||||
"ui.details_draft_caption": "Faces are coloured by their angle to the pull direction.",
|
||||
"ui.export_keymap_tip": "Keys, S box favourites and the toolbar, as a file",
|
||||
"ui.instances": "Instances",
|
||||
"ui.layout_compact": "Compact",
|
||||
"ui.layout_floating": "Floating",
|
||||
"ui.material_review.claims": "Sources and licences are unverified claims. Missing values remain unknown.",
|
||||
|
||||
@@ -1195,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline por puntos de control (grado 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline por puntos de ajuste",
|
||||
"cmd.sketch_spline_insert_point": "Añadir punto de spline",
|
||||
"cmd.sketch_spline_remove_point": "Eliminar punto de spline",
|
||||
"cmd.sketch_spline_reverse": "Invertir dirección del spline",
|
||||
"cmd.sketch_spun_profile": "Perfil de revolución",
|
||||
"cmd.sketch_toggle_diameter": "Alternar radio / diámetro",
|
||||
@@ -1358,7 +1357,6 @@
|
||||
"document.read_only_save": "Este diseño se abrió en solo lectura: guárdalo como un archivo nuevo",
|
||||
"document.save_changes": "¿Guardar los cambios de {name}?",
|
||||
"document.save_copy": "Guardar una copia…",
|
||||
"document.tab_unsaved_changes": "Cambios sin guardar",
|
||||
"document.unsaved_changes": "{name} tiene cambios sin guardar. Si no los guardas, se perderán.",
|
||||
"drive.rigid": "{joint} es una junta rígida: mantiene sus partes quietas, así que no tiene nada que impulsar.",
|
||||
"drive.stopped_by_contact": "Detenido en {value}: {a} atravesaría {b}",
|
||||
@@ -1807,19 +1805,12 @@
|
||||
"parts.family.button_head_cap_screw": "Tornillo cabeza botón",
|
||||
"parts.family.dowel_pin": "Pasador cilíndrico",
|
||||
"parts.family.hex_bolt": "Tornillo de cabeza hexagonal",
|
||||
"parts.family.hex_cap_screw_inch": "Tornillo de cabeza hexagonal (pulgadas)",
|
||||
"parts.family.hex_nut": "Tuerca hexagonal",
|
||||
"parts.family.hex_nut_inch": "Tuerca hexagonal (pulgadas)",
|
||||
"parts.family.set_screw": "Prisionero con hexágono interior, punta plana",
|
||||
"parts.family.socket_head_cap_screw": "Tornillo cilíndrico con hexágono interior",
|
||||
"parts.family.washer": "Arandela plana",
|
||||
"parts.family.washer_sae": "Arandela plana, SAE (estrecha)",
|
||||
"parts.family.washer_uss": "Arandela plana, USS (ancha)",
|
||||
"parts.holes": "Agujeros (opcional)",
|
||||
"parts.placement_hint": "elige uno o más agujeros para colocar una pieza en cada uno, o Aceptar la coloca en el origen",
|
||||
"parts.system": "Sistema de unidades",
|
||||
"parts.system.inch": "Pulgadas",
|
||||
"parts.system.metric": "Métrico",
|
||||
"pattern.alignment_2": "Alineación 2",
|
||||
"pattern.alignment_hint": "Los recuentos incluyen el original. Centrar equilibra las copias; Invertir elige el lado adicional cuando el total es par.",
|
||||
"pattern.direction_1": "Dirección 1",
|
||||
@@ -1872,8 +1863,6 @@
|
||||
"prefs.bottom_centre": "Centro abajo",
|
||||
"prefs.bottom_right": "Derecha abajo",
|
||||
"prefs.browser": "Explorador",
|
||||
"prefs.browser_components_open": "Componentes abiertos al inicio",
|
||||
"prefs.browser_components_open_note": "Cada componente del explorador empieza abierto, como antes, en lugar de cerrado hasta que lo abras.",
|
||||
"prefs.browser_eye_left": "Ojo junto a la flecha de plegado",
|
||||
"prefs.browser_eye_left_note": "Las filas del explorador muestran su ojo de mostrar/ocultar junto a la flecha de plegado, como antes, en lugar de",
|
||||
"prefs.browser_reveal_on_hover": "Mostrar al pasar el puntero",
|
||||
@@ -3600,7 +3589,10 @@
|
||||
"the two origins are on the same component": "los dos orígenes están en el mismo componente",
|
||||
"thread.automatic_size": "Tamaño automático",
|
||||
"thread.designation": "Designación",
|
||||
"thread.direction": "Dirección de la rosca",
|
||||
"thread.iso_metric": "Métrica ISO",
|
||||
"thread.left_hand": "Zurda",
|
||||
"thread.right_hand": "Diestra",
|
||||
"thread.select_size": "Seleccionar tamaño",
|
||||
"timeline.delete_after_marker_one": "Eliminar 1 operación después del marcador de la línea de tiempo",
|
||||
"timeline.delete_after_marker_other": "Eliminar {count} operaciones después del marcador de la línea de tiempo",
|
||||
@@ -4105,15 +4097,10 @@
|
||||
"ui.construction.reference_hint": "Línea de construcción: elige una línea recta, luego un punto; clic derecho para cambiar la",
|
||||
"ui.construction.ribbon_label": "X-Líneas",
|
||||
"ui.context_menu": "Menú contextual",
|
||||
"ui.continuity_crease": "Arista",
|
||||
"ui.continuity_curvature": "Curvatura",
|
||||
"ui.continuity_curvature_change": "Cambio de curvatura",
|
||||
"ui.continuity_g0": "G0 arista",
|
||||
"ui.continuity_g1": "G1 tangencia",
|
||||
"ui.continuity_g2": "G2 curvatura",
|
||||
"ui.continuity_gap": "Separación",
|
||||
"ui.continuity_position": "Posición",
|
||||
"ui.continuity_tangent": "Tangente",
|
||||
"ui.copy": "Copiar",
|
||||
"ui.corner": "Esquina",
|
||||
"ui.corners": "Esquinas",
|
||||
@@ -4370,7 +4357,6 @@
|
||||
"ui.insert_design.saved_file": "{name} tiene cambios sin guardar, así que se insertó su archivo guardado. Guárdalo y luego Actualizar vínculos para traer los cambios.",
|
||||
"ui.insert_design.unsaved": "Cambios sin guardar",
|
||||
"ui.inspect": "Inspeccionar",
|
||||
"ui.instances": "Instancias",
|
||||
"ui.intersect": "Intersecar",
|
||||
"ui.isolate": "Aislar",
|
||||
"ui.join": "Unir",
|
||||
@@ -4518,9 +4504,9 @@
|
||||
"ui.polygon": "Polígono",
|
||||
"ui.preferences": "Preferencias",
|
||||
"ui.press_a_key": "pulsa una tecla…",
|
||||
"ui.print_face_body_not_sent": "El cuerpo de esa cara no se envía: añádelo primero a Cuerpos",
|
||||
"ui.print_face_cleared": "{body}: cara de impresión limpiada",
|
||||
"ui.print_face_input": "Cara de impresión",
|
||||
"ui.print_face_one_body": "Se ha elegido una cara de impresión para un cuerpo: envía ese cuerpo solo para cambiarla",
|
||||
"ui.print_face_pick": "Selecciona una cara plana de un cuerpo sólido para hacerla la cara de impresión",
|
||||
"ui.print_face_set": "{body}: cara de impresión establecida; Enviar a Laminador coloca el cuerpo sobre ella",
|
||||
"ui.profile": "Perfil",
|
||||
@@ -4811,7 +4797,7 @@
|
||||
"update.check_unavailable": "Las comprobaciones de actualización no están disponibles para esta instalación.",
|
||||
"update.checking": "Comprobando…",
|
||||
"update.copy": "Copiar",
|
||||
"update.dmg_opened": "La imagen de disco está abierta y verificada: sal de SolidCraft, arrastra el nuevo SolidCraft a Aplicaciones, sustituye la copia anterior y vuelve a abrir SolidCraft.",
|
||||
"update.dmg_opened": "La imagen de disco está abierta y verificada: arrastra SolidCraft a Aplicaciones, sustituye la copia anterior y reinicia SolidCraft.",
|
||||
"update.download": "Descargar",
|
||||
"update.download_open": "Descargar y abrir",
|
||||
"update.downloading": "Descargando y verificando… {done} de {total} MB",
|
||||
|
||||
@@ -1191,7 +1191,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Ohjauspistesplini (aste 5)",
|
||||
"cmd.sketch_spline_fit_point": "Sovituspistesplini",
|
||||
"cmd.sketch_spline_insert_point": "Lisää splinipiste",
|
||||
"cmd.sketch_spline_remove_point": "Poista splinipiste",
|
||||
"cmd.sketch_spline_reverse": "Käännä splinin suunta",
|
||||
"cmd.sketch_spun_profile": "Pyöräytysprofiili",
|
||||
"cmd.sketch_toggle_diameter": "Vaihda säde / halkaisija",
|
||||
@@ -3564,7 +3563,10 @@
|
||||
"the two origins are on the same component": "molemmat origot ovat samassa komponentissa",
|
||||
"thread.automatic_size": "Automaattinen koko",
|
||||
"thread.designation": "Merkintä",
|
||||
"thread.direction": "Kierteen suunta",
|
||||
"thread.iso_metric": "ISO-metrinen",
|
||||
"thread.left_hand": "Vasenkätinen",
|
||||
"thread.right_hand": "Oikeakätinen",
|
||||
"thread.select_size": "Valitse koko",
|
||||
"timeline.delete_after_marker_one": "Poista 1 piirre historiamerkin jälkeen",
|
||||
"timeline.delete_after_marker_other": "Poista {count} piirrettä historiamerkin jälkeen",
|
||||
@@ -4319,7 +4321,6 @@
|
||||
"ui.insert_design.saved_file": "Mallissa {name} on tallentamattomia muutoksia, joten sen tallennettu tiedosto lisättiin. Tallenna se ja tuo muutokset valitsemalla Päivitä linkit.",
|
||||
"ui.insert_design.unsaved": "Tallentamattomia muutoksia",
|
||||
"ui.inspect": "Tarkastele",
|
||||
"ui.instances": "Esiintymät",
|
||||
"ui.intersect": "Leikkaus",
|
||||
"ui.isolate": "Eristä",
|
||||
"ui.join": "Yhdistä",
|
||||
@@ -4467,9 +4468,9 @@
|
||||
"ui.polygon": "Monikulmio",
|
||||
"ui.preferences": "Asetukset",
|
||||
"ui.press_a_key": "paina näppäintä…",
|
||||
"ui.print_face_body_not_sent": "Tämän pinnan kappaletta ei lähetetä: lisää se ensin kohtaan Kappaleet",
|
||||
"ui.print_face_cleared": "{body}: tulostuspinta poistettu",
|
||||
"ui.print_face_input": "Tulostuspinta",
|
||||
"ui.print_face_one_body": "Tulostuspinta on valittu yhdelle kappaleelle: lähetä kappale yksinään muuttaaksesi sitä",
|
||||
"ui.print_face_pick": "Valitse kiinteän kappaleen yksi tasainen pinta tulostuspinnaksi",
|
||||
"ui.print_face_set": "{body}: tulostuspinta asetettu; Lähetä viipalointiohjelmaan asettaa kappaleen sen varaan",
|
||||
"ui.profile": "Profiili",
|
||||
|
||||
@@ -556,7 +556,6 @@
|
||||
"Section": "Coupe",
|
||||
"Section (optional)": "Section (facultative)",
|
||||
"Section position": "Position de la section",
|
||||
"Sections": "Sections",
|
||||
"Sections (one sketch each)": "Sections (une esquisse chacune)",
|
||||
"Select Other": "Sélectionner un autre",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Sélectionner un autre élément : maintenir le bouton gauche immobile sur le modèle (ou clic droit › Sélectionner un autre…) pour lister tout ce qui se trouve sous le curseur ; cliquer de nouveau au même endroit pour sélectionner l'élément suivant. Double-cliquer avec le bouton du milieu pour revenir à l'accueil (Préférences › Navigation).",
|
||||
@@ -794,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (attache perdue)",
|
||||
"browser.sketch_editing": "{name} (en cours de modification)",
|
||||
"browser.sketch_name": "Esquisse{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "déjà dans leur pièce",
|
||||
"browser.sketches_to_parts_design_body": "sur un corps de la conception elle-même",
|
||||
"browser.sketches_to_parts_moved": "{moved} esquisses déplacées vers la pièce sur laquelle elles se trouvent",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "sur une face sans rattachement exact",
|
||||
"browser.sketches_to_parts_not_on_face": "pas sur la face d'une pièce",
|
||||
"browser.sketches_to_parts_part_missing": "leur pièce n'existe plus",
|
||||
"browser.sketches_to_parts_result": "{moved} esquisses déplacées vers la pièce sur laquelle elles se trouvent ; {stayed} sont restées en place : {why}",
|
||||
"browser.units": "Unités : {units}",
|
||||
"cam.flat": "Plateau",
|
||||
"cam.follower": "Suiveur",
|
||||
@@ -860,7 +852,6 @@
|
||||
"cmd.component_extract": "Extraire dans un fichier",
|
||||
"cmd.component_finish_edit": "Terminer la modification",
|
||||
"cmd.component_from_bodies": "Créer des composants à partir des corps",
|
||||
"cmd.component_hide_history": "Masquer l'historique du composant",
|
||||
"cmd.component_insert_design": "Insérer une conception",
|
||||
"cmd.component_links": "Lister les liens",
|
||||
"cmd.component_list": "Lister les composants",
|
||||
@@ -869,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Déplacer les corps vers le composant",
|
||||
"cmd.component_move_features": "Déplacer les fonctions vers le composant",
|
||||
"cmd.component_move_sketches": "Déplacer les esquisses vers le composant",
|
||||
"cmd.component_move_sketches_to_parts": "Déplacer les esquisses vers leurs pièces",
|
||||
"cmd.component_paste_from_design": "Coller depuis une autre conception",
|
||||
"cmd.component_paste_new": "Coller comme nouveau",
|
||||
"cmd.component_properties": "Propriétés physiques du composant",
|
||||
@@ -877,7 +867,6 @@
|
||||
"cmd.component_rename": "Renommer le composant",
|
||||
"cmd.component_replace_with_link": "Remplacer par un lien",
|
||||
"cmd.component_revert_position": "Rétablir la position",
|
||||
"cmd.component_show_history": "Afficher l'historique du composant",
|
||||
"cmd.component_unlock": "Déverrouiller le contenu",
|
||||
"cmd.component_update_links": "Mettre à jour les liens",
|
||||
"cmd.config_activate": "Activer la configuration",
|
||||
@@ -888,7 +877,6 @@
|
||||
"cmd.config_rule": "Règle de configuration",
|
||||
"cmd.config_rules": "Règles de configuration",
|
||||
"cmd.config_table": "Afficher la table des configurations",
|
||||
"cmd.construct.plane.axis_point": "Plan passant par un axe et un point",
|
||||
"cmd.construct_axis_edge": "Axe passant par une arête",
|
||||
"cmd.construct_axis_normal_to_face": "Axe perpendiculaire à une face",
|
||||
"cmd.construct_axis_through_cylinder": "Axe d'un cylindre/cône/tore",
|
||||
@@ -937,11 +925,6 @@
|
||||
"cmd.explode_show": "Afficher la vue éclatée",
|
||||
"cmd.expr_evaluate": "Évaluer une expression",
|
||||
"cmd.face_delete": "Supprimer la face",
|
||||
"cmd.file.export_3mf": "Exporter en 3MF",
|
||||
"cmd.file.export_obj": "Exporter en OBJ",
|
||||
"cmd.file.export_step": "Exporter en STEP",
|
||||
"cmd.file.export_stl": "Exporter en STL",
|
||||
"cmd.file.export_urdf": "Exporter en URDF",
|
||||
"cmd.file_export": "Exporter",
|
||||
"cmd.file_insert_mesh": "Insérer un maillage",
|
||||
"cmd.file_insert_step": "Insérer un STEP",
|
||||
@@ -959,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Activer les couleurs des composants",
|
||||
"cmd.inspect_colored_components_disable": "Désactiver les couleurs des composants",
|
||||
"cmd.inspect_compare": "Comparer les corps",
|
||||
"cmd.inspect_compare_picture": "Comparer les images",
|
||||
"cmd.inspect_continuity": "Analyse de continuité",
|
||||
"cmd.inspect_curvature_comb": "Analyse par peigne de courbure",
|
||||
"cmd.inspect_curvature_map": "Analyse par carte de courbure",
|
||||
@@ -1050,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Modifier le nuage de points",
|
||||
"cmd.pointcloud_insert": "Insérer un nuage de points",
|
||||
"cmd.pointcloud_list": "Nuages de points",
|
||||
"cmd.render.compare.divider": "Déplacer le séparateur de comparaison des rendus",
|
||||
"cmd.render.result.discard": "Écarter le résultat de rendu",
|
||||
"cmd.render.result.select": "Sélectionner le résultat de rendu",
|
||||
"cmd.render_aging_describe": "Vieillissement de surface en couches",
|
||||
"cmd.render_backends": "Moteurs de rendu",
|
||||
"cmd.render_batch": "Rendre toutes les prises de vue",
|
||||
@@ -1216,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline par points de contrôle (degré 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline par points",
|
||||
"cmd.sketch_spline_insert_point": "Ajouter un point de spline",
|
||||
"cmd.sketch_spline_remove_point": "Supprimer un point de spline",
|
||||
"cmd.sketch_spline_reverse": "Inverser le sens de la spline",
|
||||
"cmd.sketch_spun_profile": "Profil de révolution",
|
||||
"cmd.sketch_toggle_diameter": "Basculer rayon / diamètre",
|
||||
@@ -1267,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Déplacer le marqueur de chronologie",
|
||||
"cmd.timeline_stop": "Arrêter l'historique",
|
||||
"cmd.timeline_suppress": "Désactiver la fonction",
|
||||
"cmd.ui.assistant": "Afficher/masquer l'assistant",
|
||||
"cmd.view.render_browser": "Navigateur de rendu",
|
||||
"cmd.view.render_dock": "Déplacer le panneau de rendu",
|
||||
"cmd.view.render_focus": "Vue de rendu ciblée",
|
||||
@@ -1302,11 +1279,9 @@
|
||||
"cmd.view_tool": "Outil de navigation",
|
||||
"cmd.view_top": "Vue de dessus",
|
||||
"cmd.view_visual_style": "Style visuel",
|
||||
"color.blue": "Bleu",
|
||||
"color.copy": "Cliquer pour copier les valeurs de couleur",
|
||||
"color.edit": "Cliquer pour modifier la couleur",
|
||||
"color.gamma": "Valeurs de couleur affichées en espace gamma 0-255",
|
||||
"color.green": "Vert",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Saisissez #rrggbb ou #rrggbbaa ; six chiffres conservent l'opacité",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
@@ -1314,7 +1289,6 @@
|
||||
"color.linear": "Valeurs de couleur affichées en espace linéaire 0-1",
|
||||
"color.recent": "Couleurs récentes",
|
||||
"color.recent_help": "Les couleurs choisies dans n'importe quel champ de couleur apparaissent ici",
|
||||
"color.red": "Rouge",
|
||||
"color.saturation": "Saturation (pour cent)",
|
||||
"color.saturation_value": "Saturation et valeur",
|
||||
"color.selected": "Couleur sélectionnée",
|
||||
@@ -1322,8 +1296,6 @@
|
||||
"color.step_up": "Augmenter d'un pas",
|
||||
"color.value": "Valeur, la luminosité (pour cent)",
|
||||
"config.column_filter_empty": "Aucune colonne correspondante",
|
||||
"config.rule_parameter_columns": "Seuls les paramètres ayant une colonne dans la table sont listés. Ajouter une colonne avec Ajouter une colonne (+) pour l'utiliser ici.",
|
||||
"config.rule_suppression_columns": "Seules les fonctions ayant une colonne Désactiver dans la table sont listées. Ajouter une colonne avec Ajouter une colonne (+) pour la piloter ici.",
|
||||
"contact.components_count": "{count} composants",
|
||||
"contact.enabled_label": "activé",
|
||||
"coupling.gear_1": "Engrenage 1",
|
||||
@@ -1372,11 +1344,7 @@
|
||||
"dialog.pattern_sketch_not_object": "Choisissez des corps ou des fonctions : une esquisse n'est ni l'un ni l'autre. Répétez ses courbes avec la Répétition ou la Symétrie de l'esquisse, ou extrudez-la d'abord.",
|
||||
"dialog.select": "↖ Sélectionner",
|
||||
"dialog.selected_count": "↖ {count} sélectionné(s)",
|
||||
"dialog.selection_constraint": "Contrainte {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · courbe {id}",
|
||||
"dialog.selection_guidance": "Sélectionner une entrée pour la modifier. Cliquer sur un objet sélectionné pour le retirer ; Ctrl/Cmd-clic le bascule aussi. Vérifier l'aperçu, puis appuyer sur OK.",
|
||||
"dialog.selection_midpoint": "Point milieu · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} sur {total} : sélectionner {input}",
|
||||
"dialog.step": "Étape",
|
||||
"document.changed_on_disk": "{name} a été modifié sur le disque",
|
||||
@@ -1391,7 +1359,6 @@
|
||||
"document.read_only_save": "Cette conception a été ouverte en lecture seule : enregistrez-la dans un nouveau fichier",
|
||||
"document.save_changes": "Enregistrer les modifications de {name} ?",
|
||||
"document.save_copy": "Enregistrer une copie…",
|
||||
"document.tab_unsaved_changes": "Modifications non enregistrées",
|
||||
"document.unsaved_changes": "{name} contient des modifications non enregistrées. Si vous n'enregistrez pas, elles seront perdues.",
|
||||
"drive.rigid": "{joint} est une liaison rigide : elle maintient ses pièces immobiles, il n'y a donc rien à piloter. Pour les laisser bouger, changer son type dans Modifier la liaison : Revolute pour tourner, Slider pour coulisser, Cylindrical pour les deux.",
|
||||
"drive.stopped_by_contact": "Arrêté à {value} : {a} traverserait {b}",
|
||||
@@ -1460,7 +1427,6 @@
|
||||
"help.construct.axis.two_points": "Crée un axe de construction passant par deux points, sommets ou points d'esquisse. À utiliser pour un axe qui relie deux positions connues.",
|
||||
"help.construct.plane.along_path": "Crée un plan de construction perpendiculaire à une arête ou une courbe, à une position choisie le long de celle-ci. À utiliser pour esquisser le profil d'un balayage ou une coupe d'une trajectoire.",
|
||||
"help.construct.plane.at_angle": "Crée un plan de construction tourné d'un angle par rapport à un plan ou une face, autour d'un axe ou d'une arête. À utiliser pour des esquisses inclinées, par exemple une équerre à angle.",
|
||||
"help.construct.plane.axis_point": "Crée un plan de construction contenant un axe et un point situé hors de cet axe. Sélectionner une origine ou un axe de construction, une arête rectiligne ou une ligne d'esquisse, puis un sommet, un point d'esquisse ou un point de construction. Un point situé sur l'axe ne définit pas un plan unique.",
|
||||
"help.construct.plane.midplane": "Crée un plan de construction à mi-distance entre deux plans ou faces planes, ou bissecteur lorsqu'ils se rencontrent en formant un angle. À utiliser comme plan de symétrie.",
|
||||
"help.construct.plane.offset": "Crée un plan de construction parallèle à un plan ou une face plane, à une distance donnée ou passant par un point. À utiliser pour esquisser à une hauteur précise au-dessus d'une face.",
|
||||
"help.construct.plane.perpendicular": "Crée un plan de construction qui contient une droite ou une arête et qui est perpendiculaire à un plan ou une face. À utiliser pour esquisser à la verticale sur un modèle, le long d'une arête.",
|
||||
@@ -1837,8 +1803,6 @@
|
||||
"joint_move.blocked_hint": "Vérifiez le type de liaison (par exemple rigide), la fixation de la pièce, les limites de la liaison et les valeurs pilotées par des paramètres.",
|
||||
"joint_move.blocked_title": "Impossible de déplacer cette pièce",
|
||||
"joint_move.coarse": "Pas de rotation près de l’axe (°)",
|
||||
"joint_move.conflict": "Une liaison de cette pièce est en conflit avec les autres : {joint}.",
|
||||
"joint_move.conflict_hint": "Modifier, désactiver ou supprimer la liaison en conflit pour que les autres liaisons puissent placer la pièce.",
|
||||
"joint_move.distance": "Distance depuis le départ",
|
||||
"joint_move.done": "Terminé",
|
||||
"joint_move.fine": "Pas de rotation loin de l’axe (°)",
|
||||
@@ -1938,8 +1902,6 @@
|
||||
"motion.track_name": "Piste {number}",
|
||||
"nav.alias.help": "Maj+Alt+glisser gauche fait orbiter, Maj+Alt+milieu fait un panoramique, Maj+Alt+droit zoome ; glisser avec le milieu fait aussi un panoramique et glisser avec le droit fait orbiter",
|
||||
"nav.blender.help": "Glisser avec le milieu fait orbiter, Maj+milieu fait un panoramique, Ctrl+milieu zoome ; glisser avec le droit ne touche pas la caméra",
|
||||
"nav.creo.help": "Glisser avec le milieu fait orbiter, Maj+milieu fait un panoramique, Ctrl+glisser avec le milieu zoome verticalement (vers le bas pour zoomer) ; la molette zoome",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "La souris et la souris 3D tournent en passant par les deux pôles et conservent le roulis. L'alignement des axes avec Maj est désactivé.",
|
||||
"nav.free_orbit.label": "Orbite libre",
|
||||
"nav.free_orbit.snap_help": "La souris et la souris 3D tournent en passant par les deux pôles et conservent le roulis. Maintenir Maj pendant un glissement d'orbite pour aligner la direction de vue et le roulis.",
|
||||
@@ -1949,7 +1911,6 @@
|
||||
"nav.hfss.help": "Alt+glisser gauche fait un panoramique, Maj+Alt+gauche zoome, Ctrl+glisser gauche sur un espace vide fait orbiter",
|
||||
"nav.inventor.help": "Glisser avec le milieu fait un panoramique, Maj+milieu fait orbiter, Ctrl+milieu zoome, glisser avec le droit fait orbiter",
|
||||
"nav.maya.help": "Alt+glisser gauche fait orbiter, Alt+milieu fait un panoramique, Alt+droit zoome ; glisser avec le milieu fait aussi un panoramique",
|
||||
"nav.nx.help": "Glisser avec le milieu fait orbiter, Maj+milieu fait un panoramique (milieu + droit dans NX), Ctrl+milieu zoome (milieu + gauche dans NX) ; glisser avec le droit ne touche pas la caméra",
|
||||
"nav.openscad.help": "Glisser avec le gauche dans le vide fait orbiter, Maj+glisser gauche sélectionne par rectangle, glisser la géométrie d'esquisse la modifie ; glisser avec le droit ou le milieu fait un panoramique, Maj+droit ou Maj+milieu zoome",
|
||||
"nav.perspective.sketch": "La modification d'une esquisse utilise la vue orthographique. Terminer l'esquisse pour passer en perspective.",
|
||||
"nav.right_drag_orbits.help": "Désactivé : glisser avec le droit ne touche pas la caméra et le bouton droit ouvre seulement le menu contextuel. Choisir l'affectation des boutons de la souris SolidWorks le désactive.",
|
||||
@@ -2092,19 +2053,12 @@
|
||||
"parts.family.button_head_cap_screw": "Vis à tête bombée à six pans creux",
|
||||
"parts.family.dowel_pin": "Goupille cylindrique",
|
||||
"parts.family.hex_bolt": "Vis à tête hexagonale",
|
||||
"parts.family.hex_cap_screw_inch": "Vis à tête hexagonale (pouces)",
|
||||
"parts.family.hex_nut": "Écrou hexagonal",
|
||||
"parts.family.hex_nut_inch": "Écrou hexagonal (pouces)",
|
||||
"parts.family.set_screw": "Vis sans tête à six pans creux, bout plat",
|
||||
"parts.family.socket_head_cap_screw": "Vis à tête cylindrique à six pans creux",
|
||||
"parts.family.washer": "Rondelle plate",
|
||||
"parts.family.washer_sae": "Rondelle plate, SAE (étroite)",
|
||||
"parts.family.washer_uss": "Rondelle plate, USS (large)",
|
||||
"parts.holes": "Trous (facultatif)",
|
||||
"parts.placement_hint": "choisissez un ou plusieurs trous pour y loger une pièce chacun, ou OK la place à l'origine",
|
||||
"parts.system": "Système d'unités",
|
||||
"parts.system.inch": "Pouces",
|
||||
"parts.system.metric": "Métrique",
|
||||
"pattern.alignment_2": "Alignement 2",
|
||||
"pattern.alignment_hint": "La quantité inclut l’original. Le centrage répartit les copies de chaque côté ; si la quantité est paire, l’inversion choisit le côté qui reçoit la copie supplémentaire.",
|
||||
"pattern.direction_1": "Direction 1",
|
||||
@@ -2157,8 +2111,6 @@
|
||||
"prefs.bottom_centre": "Bas centre",
|
||||
"prefs.bottom_right": "Bas droite",
|
||||
"prefs.browser": "Navigateur",
|
||||
"prefs.browser_components_open": "Composants dépliés au départ",
|
||||
"prefs.browser_components_open_note": "Chaque composant du navigateur commence déplié, comme avant, au lieu de rester replié jusqu'à ce que vous le dépliiez.",
|
||||
"prefs.browser_eye_left": "Œil à côté de la flèche de dépliage",
|
||||
"prefs.browser_eye_left_note": "Les lignes du navigateur affichent leur œil d'affichage et de masquage à côté de la flèche de dépliage, comme avant, au lieu d'une colonne à l'extrémité droite des lignes.",
|
||||
"prefs.browser_reveal_on_hover": "Révéler au survol",
|
||||
@@ -2168,8 +2120,6 @@
|
||||
"prefs.button_left": "Glisser gauche",
|
||||
"prefs.button_middle": "Glisser milieu",
|
||||
"prefs.button_right": "Glisser droit",
|
||||
"prefs.carousel_next": "Suivant",
|
||||
"prefs.carousel_previous": "Précédent",
|
||||
"prefs.choose_font": "Choisir un fichier de police…",
|
||||
"prefs.click": "Clic",
|
||||
"prefs.contact_shading": "Ombrage de contact doux",
|
||||
@@ -2182,10 +2132,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Surfaces courbes",
|
||||
"prefs.curves": "Surfaces courbes",
|
||||
"prefs.cut_preview_tint": "Afficher en rouge la matière retirée",
|
||||
"prefs.cut_preview_tint_help": "Un aperçu remplit la matière qu'une fonction retire, et la forme qu'elle remplace, d'un fantôme rouge translucide. Désactivée, ces remplissages sont entièrement transparents et seuls leurs contours sont tracés.",
|
||||
"prefs.dark_parts_shading": "Conserver la forme des pièces sombres",
|
||||
"prefs.dark_parts_shading_help": "Ombrer la vue en lumière linéaire avec un léger éclairage de ciel, pour que les faces sombres gardent un dégradé au lieu de devenir noires",
|
||||
"prefs.dead_zone_note": "La bande hachurée est la zone morte : les mouvements à l'intérieur sont ignorés.",
|
||||
"prefs.default": "par défaut",
|
||||
"prefs.design": "Valeurs par défaut des conceptions",
|
||||
@@ -2200,8 +2146,6 @@
|
||||
"prefs.edges": "Arêtes et ombrage",
|
||||
"prefs.extend": "Étendre",
|
||||
"prefs.extra_navigation": "Ctrl+glisser gauche dans le vide fait orbiter ; maintenir Espace pour un panoramique.",
|
||||
"prefs.extrude_view_isometric": "Passer la vue en isométrique à l'ouverture de l'extrusion",
|
||||
"prefs.extrude_view_return": "Revenir à la vue précédente à la fermeture de l'extrusion",
|
||||
"prefs.follows_os": "Suit le système",
|
||||
"prefs.font": "Police",
|
||||
"prefs.font_fallback": "Les caractères absents de la police choisie utilisent la police intégrée, pour qu'aucun libellé n'affiche de case vide.",
|
||||
@@ -2217,7 +2161,6 @@
|
||||
"prefs.graphics_card_auto": "Automatique",
|
||||
"prefs.graphics_card_missing": "La carte graphique enregistrée n'est pas disponible ; Automatique est utilisé.",
|
||||
"prefs.graphics_card_restart": "Prend effet après le redémarrage de SolidCraft. WGPU_ADAPTER_NAME prévaut sur ce choix.",
|
||||
"prefs.graphics_card_unused": "La carte graphique enregistrée n'a pas été utilisée pour cette fenêtre ; la carte utilisée est indiquée dans Aide › À propos et dans la barre d'état. Essayer Automatique, ou définir WGPU_ADAPTER_NAME avec une partie unique du nom de la carte.",
|
||||
"prefs.graphics_note": "Compromis entre vitesse et fluidité. Chaque choix montre son effet sur un exemple.",
|
||||
"prefs.graphics_presets_note": "Les préréglages définissent ensemble les choix ci-dessous.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Masquer les symboles de contraintes en cas de zoom arrière",
|
||||
@@ -2232,8 +2175,6 @@
|
||||
"prefs.history_sketches_note": "Avec Esquisses réglé sur Sous leur fonction, l'historique de gauche liste chaque esquisse un niveau en retrait, sous la première fonction construite à partir d'elle, dès qu'il est assez large pour les noms. La chronologie en bas garde toujours l'ordre de création.",
|
||||
"prefs.history_sketches_under_feature": "Sous leur fonction",
|
||||
"prefs.hold_stop_snapping": "Maintenir pour désactiver l'accrochage",
|
||||
"prefs.home_fit_size": "Taille de Accueil et Cadrer",
|
||||
"prefs.home_fit_size_note": "Part de la vue que remplit le modèle quand Accueil, Cadrer, l'ouverture d'une conception ou une vue du repère de navigation recadre la vue, que le réglage ci-dessous soit activé ou non. 100 % : remplit la vue entre les panneaux, la boussole et la barre de navigation.",
|
||||
"prefs.icons_only": "Icônes seules",
|
||||
"prefs.imported_file": "Fichier importé",
|
||||
"prefs.in_browser": "Dans le navigateur",
|
||||
@@ -2242,22 +2183,15 @@
|
||||
"prefs.interface_language": "Langue de l'interface",
|
||||
"prefs.interface_note": "L'apparence de SolidCraft et la place de ses éléments.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Inverser les flèches courbes de roulis",
|
||||
"prefs.invert_curved_roll_arrows_note": "Les deux flèches courbes au coin du cube font rouler la vue dans le plan de l'écran. Activé : la flèche horaire fait rouler dans le sens antihoraire et la flèche antihoraire dans le sens horaire. Désactivé : chaque flèche fait rouler la vue dans le sens de sa courbure.",
|
||||
"prefs.invert_navigator_arrows": "Inverser les flèches de rotation du cube de vue",
|
||||
"prefs.invert_navigator_arrows_note": "Les flèches autour du cube font orbiter la caméra dans le sens où elles pointent, comme dans Fusion et Inventor : la flèche de gauche pointe vers la droite et fait pivoter la caméra vers la droite. Désactivé : une flèche fait tourner le cube vers le côté où elle se trouve, donc la flèche de gauche fait pivoter la caméra vers la gauche. Les flèches courbes de roulis ne sont pas concernées.",
|
||||
"prefs.keep_work_on_tab_switch": "Garder dialogues et outils ouverts en changeant de conception",
|
||||
"prefs.keep_work_on_tab_switch_note": "Chaque onglet de conception garde son dialogue ou son outil ouvert, avec ce que vous y avez sélectionné et saisi, ainsi que son onglet de barre d'outils. Vous les retrouvez en revenant à la conception. Désactivé : changer de conception les annule et affiche l'onglet Modèle.",
|
||||
"prefs.labels": "Libellés",
|
||||
"prefs.language_system": "Système",
|
||||
"prefs.layout": "Disposition",
|
||||
"prefs.layout_note": "Compacte : ancre les panneaux aux bords de la fenêtre. La transparence du navigateur est disponible en mode Flottante. Changez le côté de l'assistant dans la page Assistant.",
|
||||
"prefs.left": "Gauche",
|
||||
"prefs.left_click": "Clic gauche",
|
||||
"prefs.line_drag_draws_one": "Appuyer et glisser trace une seule ligne",
|
||||
"prefs.line_drag_draws_one_note": "Dans l'outil Ligne, appuyer, faire glisser puis relâcher trace une seule ligne, du point d'appui au point de relâchement, et le tracé s'arrête là. Les clics tracent toujours une chaîne. Désactivé : un glissement place un point là où il est relâché, comme un clic.",
|
||||
"prefs.line_hover_tangent_arc": "S'arrêter sur le dernier point d'une ligne pour passer à un arc tangent",
|
||||
"prefs.line_hover_tangent_arc_note": "Dans l'outil Ligne, une fois un segment tracé, éloigner le pointeur du dernier point de la chaîne, revenir et le maintenir immobile dessus : le clic suivant termine un arc tangent, et le même geste revient aux lignes. Désactivé : s'arrêter là ne fait rien.",
|
||||
"prefs.linked_designs": "Conceptions liées",
|
||||
"prefs.live_input": "Saisie en direct",
|
||||
"prefs.live_preview": "Aperçu en direct",
|
||||
@@ -2281,8 +2215,6 @@
|
||||
"prefs.mouse_mapping": "Affectation des boutons de la souris",
|
||||
"prefs.navigation": "Navigation",
|
||||
"prefs.navigation_note": "Comment la souris, le pavé tactile et la souris 3D déplacent la vue.",
|
||||
"prefs.navigator_fit": "Cadrer le modèle après un changement de vue du repère de navigation",
|
||||
"prefs.navigator_fit_note": "Une face, un coin ou une flèche du cube de vue, ou un axe du gizmo, regarde aussi le milieu du modèle depuis la distance unique qui le cadre sous tous les côtés (sa sphère englobante). Accueil utilise le même zoom et le même centre tant que cette option est activée, de sorte que les vues choisies ensuite ne font que tourner. Désactivé : la vue tourne sur place, en gardant sa cible et son zoom.",
|
||||
"prefs.network_host_remove": "Retirer",
|
||||
"prefs.network_locations": "Autoriser les emplacements réseau dans les conceptions",
|
||||
"prefs.network_locations_note": "Désactivé : les fichiers liés d'une conception situés sur un autre ordinateur (\\\\server\\share) ne sont ouverts que depuis les serveurs listés ici, ou après en avoir autorisé un sur demande.",
|
||||
@@ -2303,8 +2235,6 @@
|
||||
"prefs.placement": "Placement",
|
||||
"prefs.prefer_free_sketch_points": "Privilégier les points d'esquisse déplaçables quand des points se superposent",
|
||||
"prefs.preview_choices": "Aperçu de vos choix",
|
||||
"prefs.preview_tint_new_faces": "Teinter la nouvelle surface dans un aperçu",
|
||||
"prefs.preview_tint_new_faces_help": "L'aperçu d'une fonction qui modifie un corps peut tracer la surface qu'elle ajoute dans la couleur d'aperçu. Désactivée, le corps est tracé tel quel.",
|
||||
"prefs.print_face_highlight": "Mise en évidence de la face d’impression",
|
||||
"prefs.print_face_highlight_tip": "Intensité de la teinte et du contour de la face d’impression d’un corps dans la vue. 0 % n’affiche aucune mise en évidence.",
|
||||
"prefs.profile_active": "Profil actif",
|
||||
@@ -2333,8 +2263,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Utiliser l'ancien budget de géométrie de l'aperçu Rendu",
|
||||
"prefs.render_previous_geometry_budget_help": "Rétablir l'ancienne limite fixe de géométrie (512 Mio sur un ordinateur 64 bits, 128 Mio ailleurs) au lieu du budget basé sur l'appareil.",
|
||||
"prefs.reports_saved": "Enregistrés : {n}",
|
||||
"prefs.ribbon_click_ends_tool": "Cliquer sur le bouton de l'outil en cours le termine",
|
||||
"prefs.ribbon_click_ends_tool_note": "Un clic sur le bouton allumé du ruban de l'outil d'esquisse en cours termine l'outil, et les clics dans la vue sélectionnent de nouveau. Désactivé : le clic relance l'outil.",
|
||||
"prefs.ribbon_reveal": "Montrer les résultats de recherche dans le ruban",
|
||||
"prefs.ribbon_reveal_note": "Survoler un résultat dans Rechercher des commandes montre où se trouve la commande dans le ruban : son onglet, son bouton ou sa ligne dans le menu déroulant d'un panneau. Une commande lancée depuis la recherche y clignote, et une commande en cours issue d'un menu déroulant signale son panneau.",
|
||||
"prefs.right_click": "Clic droit",
|
||||
@@ -2364,8 +2292,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Revenir à la vue précédente",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Revenir, sauf si la vue a été tournée",
|
||||
"prefs.sketch_exit_view_note": "Où va la vue après Terminer l'esquisse, Annuler ou un double Échap.",
|
||||
"prefs.sketch_face_activates_part": "Esquisser sur la face d'une pièce active cette pièce",
|
||||
"prefs.sketch_face_activates_part_note": "Une esquisse commencée sur une face du corps d'un autre composant active d'abord ce composant, de sorte que l'esquisse lui appartient et reste avec cette pièce dans le navigateur. La pièce reste ensuite active. Désactivé : l'esquisse appartient au composant actif.",
|
||||
"prefs.sketch_open_look_at": "Se placer face à l'esquisse à son ouverture",
|
||||
"prefs.sketch_open_look_at_note": "Désactivé : créer ou modifier une esquisse laisse la vue telle quelle. Vue normale place la vue face à l'esquisse quand vous le souhaitez.",
|
||||
"prefs.sketch_recent_snap": "Accrocher automatiquement aux centres et points milieux récents",
|
||||
@@ -2397,24 +2323,7 @@
|
||||
"prefs.status_error": "Erreur",
|
||||
"prefs.status_selected": "Sélectionné",
|
||||
"prefs.status_warning": "Avertissement",
|
||||
"prefs.structure.appearance": "Apparence",
|
||||
"prefs.structure.appearance_note": "Couleurs, texte et accessibilité.",
|
||||
"prefs.structure.in_profile": "Dans le profil",
|
||||
"prefs.structure.layout": "Disposition",
|
||||
"prefs.structure.layout_note": "Où se placent les parties de la fenêtre.",
|
||||
"prefs.structure.look": "Aspect",
|
||||
"prefs.structure.measure_pointer": "Mesure et pointeur",
|
||||
"prefs.structure.mouse3d": "Souris 3D",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse et SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Souris et pavé tactile. La souris 3D a sa propre page.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Modifié depuis l'enregistrement",
|
||||
"prefs.structure.profile_hover": "Enregistré dans les profils de réglages",
|
||||
"prefs.structure.scale_percent": "{percent} %",
|
||||
"prefs.structure.sketch": "Esquisse",
|
||||
"prefs.structure.tools": "Outils",
|
||||
"prefs.structure.tools_note": "Comportement des outils de modélisation.",
|
||||
"prefs.structure.work": "Travail",
|
||||
"prefs.supersampling_brief": "Dessine la vue en plus grand puis la réduit par filtrage : très net, mais plus lourd.",
|
||||
"prefs.tab_accent_note": "La couleur d'accent suit l'onglet actif",
|
||||
"prefs.theme_file": "fichier de thème",
|
||||
@@ -2602,10 +2511,6 @@
|
||||
"render.base_color": "Couleur de base · sRVB",
|
||||
"render.base_metallic": "Fraction métallique",
|
||||
"render.base_opaque_only": "Cet éditeur conserve la sémantique des corps opaques. Utilisez les commandes de verre dédiées pour la transmission optique.",
|
||||
"render.batch_all_shots": "Toutes les prises de vue ({count})",
|
||||
"render.batch_empty": "Enregistrer une prise de vue avant de rendre toutes les prises de vue.",
|
||||
"render.batch_limit": "Le rendu de toutes les prises de vue est limité à 32 prises de vue.",
|
||||
"render.batch_status": "{running} en cours · {waiting} en attente",
|
||||
"render.bloom_enable": "Halo lumineux (bloom) à l'affichage",
|
||||
"render.bloom_help": "Lueur créative appliquée à la sortie seulement, à partir des hautes lumières linéaires positives, étalée par trois passes de flou normalisées. Le rayon est en pixels de sortie. Ajoutée en lumière d'affichage linéaire avant sRVB ; ce n'est ni un effet d'objectif, ni un effet volumétrique, ni une amélioration de la convergence. L'EXR brut est inchangé.",
|
||||
"render.bloom_opaque": "Le halo lumineux nécessite une sortie opaque. Un PNG transparent est refusé, pas aplati en silence.",
|
||||
@@ -2716,13 +2621,6 @@
|
||||
"render.choose_look": "Choisissez d'abord un aspect dans Apparences",
|
||||
"render.chromatic_offset": "Décalage chromatique des bords",
|
||||
"render.clear_stage": "Supprimer le décor enregistré",
|
||||
"render.compare_divider": "Séparateur de comparaison",
|
||||
"render.compare_live": "En direct",
|
||||
"render.compare_live_preview": "Aperçu en direct",
|
||||
"render.compare_render": "Rendu {number}",
|
||||
"render.compare_side": "Rendu {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · capturé à la révision {revision}",
|
||||
"render.compare_swap": "Inverser",
|
||||
"render.copy_request": "Copier le JSON",
|
||||
"render.cpu_aa_help": "Échantillons spatiaux : plus d'échantillons améliorent les bords et allongent le rendu.",
|
||||
"render.cpu_area_add": "Ajouter une lumière CPU rectangulaire",
|
||||
@@ -3472,10 +3370,6 @@
|
||||
"render.result_retained": "Affichage de la dernière image terminée ; un rendu plus récent ne l'a pas remplacée.",
|
||||
"render.result_sequence": "Point de restauration",
|
||||
"render.result_title": "Résultat du rendu",
|
||||
"render.results_choose": "Résultats conservés",
|
||||
"render.results_label": "Rendu {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [obsolète]",
|
||||
"render.results_unnamed": "Image",
|
||||
"render.return_design": "Revenir à la conception",
|
||||
"render.review_stale": "Cet examen est périmé. Résolvez ou vérifiez à nouveau avant d'appliquer.",
|
||||
"render.ribbon_aging": "Vieillissement",
|
||||
@@ -3927,7 +3821,6 @@
|
||||
"sketch_text.formula": "Commencez par = pour composer le texte avec des paramètres : ='L' + number(Largeur)",
|
||||
"sketch_text.italic": "Italique",
|
||||
"sketch_text.loading_fonts": "Recherche des polices installées…",
|
||||
"sketch_text.no_bold": "La police intégrée n'a pas de graisse grasse : choisir une police installée",
|
||||
"sketch_text.on_path": "Le texte suit sa trajectoire : la courbe le positionne",
|
||||
"sketch_text.path_clear": "Détacher le texte de sa courbe",
|
||||
"sketch_text.path_hint": "Une courbe de l'esquisse que le texte suit : cliquer ici, puis sur la courbe",
|
||||
@@ -3959,7 +3852,10 @@
|
||||
"the two origins are on the same component": "les deux origines se trouvent sur le même composant",
|
||||
"thread.automatic_size": "Taille automatique",
|
||||
"thread.designation": "Désignation",
|
||||
"thread.direction": "Sens du filetage",
|
||||
"thread.iso_metric": "Métrique ISO",
|
||||
"thread.left_hand": "À gauche",
|
||||
"thread.right_hand": "À droite",
|
||||
"thread.select_size": "Sélectionner la taille",
|
||||
"timeline.delete_after_marker_one": "Supprimer 1 fonction après le marqueur d'historique",
|
||||
"timeline.delete_after_marker_other": "Supprimer {count} fonctions après le marqueur d'historique",
|
||||
@@ -4142,13 +4038,11 @@
|
||||
"ui.agent_chat_command": "Commande de l'agent",
|
||||
"ui.agent_chat_connect": "Connecter",
|
||||
"ui.agent_chat_copy": "Copier",
|
||||
"ui.agent_chat_copy_message": "Copier le message",
|
||||
"ui.agent_chat_ctx_bodies": "Corps",
|
||||
"ui.agent_chat_ctx_elements": "Éléments",
|
||||
"ui.agent_chat_ctx_features": "Fonctions",
|
||||
"ui.agent_chat_ctx_more": "+{n} de plus",
|
||||
"ui.agent_chat_ctx_other": "Autre",
|
||||
"ui.agent_chat_custom_heading": "Modèle personnalisé",
|
||||
"ui.agent_chat_custom_hint": "Tout programme qui parle l'Agent Client Protocol sur stdin et stdout. Aucun shell ne le lance.",
|
||||
"ui.agent_chat_denied": "Refusé",
|
||||
"ui.agent_chat_deny": "Refuser",
|
||||
@@ -4192,16 +4086,8 @@
|
||||
"ui.agent_chat_mode_all": "Tout",
|
||||
"ui.agent_chat_mode_ask": "Demander",
|
||||
"ui.agent_chat_mode_edits": "Édition",
|
||||
"ui.agent_chat_model_custom": "Utiliser le modèle personnalisé : {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} ne peut pas utiliser les outils de SolidCraft : il peut seulement discuter. Choisissez un modèle qui prend en charge les outils.",
|
||||
"ui.agent_chat_model_rejected": "L'agent n'a pas accepté {model} : {error}",
|
||||
"ui.agent_chat_model_search": "Rechercher des modèles…",
|
||||
"ui.agent_chat_model_tip": "Le modèle utilisé par l'agent. Votre choix est mémorisé pour cet agent.",
|
||||
"ui.agent_chat_models_failed": "Impossible de lister les modèles : {error}",
|
||||
"ui.agent_chat_models_heading": "Modèles disponibles",
|
||||
"ui.agent_chat_models_listing": "Liste des modèles en cours…",
|
||||
"ui.agent_chat_models_none": "Le point d'accès ne liste aucun modèle",
|
||||
"ui.agent_chat_models_not_a_list": "La réponse n'était pas une liste de modèles",
|
||||
"ui.agent_chat_new": "Nouveau chat",
|
||||
"ui.agent_chat_new_confirm": "Démarrer un nouveau chat ? Le chat actuel sera effacé.",
|
||||
"ui.agent_chat_next_picture": "Image suivante",
|
||||
@@ -4337,9 +4223,6 @@
|
||||
"ui.ai_permissions": "Autorisations",
|
||||
"ui.ai_preset": "Préréglage",
|
||||
"ui.ai_protocol": "Protocole",
|
||||
"ui.ai_reasoning_effort": "Effort de raisonnement",
|
||||
"ui.ai_reasoning_effort_field_hint": "vide = valeur par défaut du fournisseur",
|
||||
"ui.ai_reasoning_effort_hint": "Facultatif. Envoyé au point d'accès sous le nom `reasoning_effort` ; les valeurs acceptées varient selon le fournisseur (par exemple `low`, `high` ou `max`). Une valeur saisie ici n'est jamais remplacée par SolidCraft. Laisser vide pour ne rien envoyer et garder la valeur par défaut du fournisseur.",
|
||||
"ui.ai_remove": "Retirer",
|
||||
"ui.ai_request_timed_out": "Le modèle a mis plus de {seconds} s. Vous pouvez augmenter le délai d'expiration des requêtes de ce point d'accès dans Préférences › Assistant.",
|
||||
"ui.ai_request_timeout": "Délai d'expiration des requêtes",
|
||||
@@ -4475,21 +4358,14 @@
|
||||
"ui.construction.contact_hint": "Tangente : sélectionnez un cercle/arc ou une spline/conique ouverte, puis le point de contact (courbes libres : extrémités)",
|
||||
"ui.construction.external_hint": "Tangente : sélectionnez un cercle ou un arc, un point extérieur, puis la solution souhaitée",
|
||||
"ui.construction.free_hint": "Droite de construction : cliquez sur deux points ; clic droit pour recommencer",
|
||||
"ui.construction.normal_needs_length": "Une ligne infinie est toujours de construction : saisir une longueur pour tracer une ligne normale",
|
||||
"ui.construction.point_hint": "Droite de construction : cliquez sur le point de passage",
|
||||
"ui.construction.reference_hint": "Droite de construction : sélectionnez une ligne droite, puis un point ; clic droit pour changer la référence",
|
||||
"ui.construction.ribbon_label": "Lignes aux.",
|
||||
"ui.construction.side_hint": "Ligne de construction : cliquer du côté vers lequel la ligne s'étend ; clic droit pour recommencer",
|
||||
"ui.context_menu": "Menu contextuel",
|
||||
"ui.continuity_crease": "Angle vif",
|
||||
"ui.continuity_curvature": "Courbure",
|
||||
"ui.continuity_curvature_change": "Variation de courbure",
|
||||
"ui.continuity_g0": "G0 angle vif",
|
||||
"ui.continuity_g1": "G1 tangence",
|
||||
"ui.continuity_g2": "G2 courbure",
|
||||
"ui.continuity_gap": "Écart",
|
||||
"ui.continuity_position": "Position",
|
||||
"ui.continuity_tangent": "Tangence",
|
||||
"ui.copy": "Copier",
|
||||
"ui.corner": "Angle",
|
||||
"ui.corners": "Angles",
|
||||
@@ -4512,7 +4388,6 @@
|
||||
"ui.dark": "Sombre",
|
||||
"ui.default_modelling_orientation": "Orientation de modélisation par défaut",
|
||||
"ui.delete": "Supprimer",
|
||||
"ui.delete_select_first": "Sélectionner d'abord ce qu'il faut supprimer : fonctions, corps, composants ou géométrie d'esquisse",
|
||||
"ui.depth": "Profondeur",
|
||||
"ui.design": "Conception",
|
||||
"ui.design_properties.author": "Auteur",
|
||||
@@ -4605,7 +4480,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "La pièce a été enregistrée dans un autre fichier ; l'assemblage reste lié à {name}",
|
||||
"ui.edit_in_place_wait": "Attendez la fin de ce qui s'exécute dans la conception",
|
||||
"ui.edit_section_analysis": "Modifier l'analyse de coupe",
|
||||
"ui.edit_sketch_empty": "Aucune esquisse à modifier",
|
||||
"ui.ellipse": "Ellipse",
|
||||
"ui.emboss_wrap_note": "Les profils de lignes orthogonales tangents à un cylindre pris en charge s'enroulent automatiquement. Choisir une paroi pour définir une cible.",
|
||||
"ui.end_radius": "Rayon final",
|
||||
@@ -4616,9 +4490,7 @@
|
||||
"ui.equation_explicit": "Explicite",
|
||||
"ui.equation_form": "Forme",
|
||||
"ui.equation_note": "La variable est un simple nombre : sin(t) la prend en radians. Un résultat sans unité est dans l'unité de la conception.",
|
||||
"ui.equation_note_range": "La variable est une longueur, comme sa plage : la combiner avec des paramètres de longueur, et la diviser par une longueur pour sin(). Un résultat sans unité est dans l'unité de la conception.",
|
||||
"ui.equation_parametric": "Paramétrique",
|
||||
"ui.equation_variable_unit": "La variable a l'unité de la plage",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4750,7 +4622,6 @@
|
||||
"ui.hideOrigin": "Masquer l'origine",
|
||||
"ui.hidePlanes": "Masquer les plans",
|
||||
"ui.hideProfile": "Masquer le profil",
|
||||
"ui.hide_component_history": "Masquer son historique",
|
||||
"ui.hide_origin_by_default": "Masquer l'origine par défaut",
|
||||
"ui.hide_origin_note": "Les nouvelles conceptions démarrent avec le dossier Origine masqué. Une conception garde son propre réglage d'Origine dès que vous l'affichez ou la masquez.",
|
||||
"ui.history_back": "Reculer d’une étape",
|
||||
@@ -4758,7 +4629,6 @@
|
||||
"ui.history_edge_hint": "double-cliquer sur le bord",
|
||||
"ui.history_first": "Aller au début",
|
||||
"ui.history_forward": "Avancer d’une étape",
|
||||
"ui.history_hide_hidden": "Masquer les composants masqués",
|
||||
"ui.history_hide_names": "Masquer les noms",
|
||||
"ui.history_last": "Aller à la fin",
|
||||
"ui.history_marker_tip": "Marqueur d'historique : faire glisser pour ramener le modèle en arrière ; les nouvelles fonctions s'insèrent ici",
|
||||
@@ -4768,7 +4638,6 @@
|
||||
"ui.history_play_button_show": "Afficher le bouton Lire",
|
||||
"ui.history_play_finish_action": "Terminez l'action en cours avant de lire l'historique",
|
||||
"ui.history_play_roll_back": "Reculez le marqueur d'historique avant de lire",
|
||||
"ui.history_show_hidden": "Afficher les composants masqués",
|
||||
"ui.history_show_names": "Afficher les noms",
|
||||
"ui.history_sketch_listed_under": "Listé sous {feature}",
|
||||
"ui.history_title": "Historique",
|
||||
@@ -4788,7 +4657,6 @@
|
||||
"ui.insert_design.saved_file": "{name} contient des modifications non enregistrées ; c'est donc son fichier enregistré qui a été inséré. Enregistrez-le, puis utilisez Mettre à jour les liens pour intégrer les modifications.",
|
||||
"ui.insert_design.unsaved": "Modifications non enregistrées",
|
||||
"ui.inspect": "Inspecter",
|
||||
"ui.instances": "Instances",
|
||||
"ui.intersect": "Intersection",
|
||||
"ui.isolate": "Isoler",
|
||||
"ui.join": "Joindre",
|
||||
@@ -4797,14 +4665,12 @@
|
||||
"ui.joints": "Liaisons",
|
||||
"ui.keyboard_shortcuts": "Raccourcis clavier",
|
||||
"ui.language": "Langue",
|
||||
"ui.lasso_select": "Lasso (faire glisser une boucle libre : prend ce qui est entièrement à l'intérieur)",
|
||||
"ui.layout_compact": "Compacte",
|
||||
"ui.layout_floating": "Flottante",
|
||||
"ui.length": "Longueur",
|
||||
"ui.length_decimals": "Décimales des longueurs",
|
||||
"ui.light": "Clair",
|
||||
"ui.line": "Ligne",
|
||||
"ui.line_arc_hint": "Arc tangent : cliquer sur l'extrémité de l'arc. S'arrêter de nouveau sur le dernier point pour revenir aux lignes ; clic droit ou Échap pour terminer",
|
||||
"ui.link_copies": "Lier les copies identiques",
|
||||
"ui.link_copies_keep": "Conserver",
|
||||
"ui.link_copies_link": "Lier",
|
||||
@@ -4939,9 +4805,9 @@
|
||||
"ui.polygon": "Polygone",
|
||||
"ui.preferences": "Préférences",
|
||||
"ui.press_a_key": "appuyez sur une touche…",
|
||||
"ui.print_face_body_not_sent": "Le corps de cette face n’est pas envoyé : ajoutez-le d’abord à Corps",
|
||||
"ui.print_face_cleared": "{body} : face d’impression effacée",
|
||||
"ui.print_face_input": "Face d’impression",
|
||||
"ui.print_face_one_body": "Une face d’impression appartient à un seul corps : envoyez ce corps seul pour la modifier",
|
||||
"ui.print_face_pick": "Sélectionnez une face plane d’un corps solide pour en faire la face d’impression",
|
||||
"ui.print_face_set": "{body} : face d’impression définie ; Envoyer au slicer pose le corps sur cette face",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5053,7 +4919,6 @@
|
||||
"ui.showDimension": "Afficher la cote",
|
||||
"ui.showOrigin": "Afficher l'origine",
|
||||
"ui.showPlanes": "Afficher les plans",
|
||||
"ui.show_component_history": "Afficher son historique",
|
||||
"ui.show_constraints": "Contraintes",
|
||||
"ui.show_construction_geometries": "Géométries de construction",
|
||||
"ui.show_dimensions": "Cotes",
|
||||
@@ -5170,15 +5035,12 @@
|
||||
"ui.view_angles": "Angles de vue",
|
||||
"ui.view_angles_convention": "Degrés autour de l'axe vertical. Lacet 0° = vue de face, 90° = vue de gauche, −90° = vue de droite, 180° = vue arrière ; tangage 90° = vue de dessus ; un roulis positif fait tourner le modèle dans le sens horaire.",
|
||||
"ui.view_angles_help": "Affiche le tangage, le lacet et le roulis de la vue en degrés, ainsi que sa projection, sous le gizmo d'orientation. Cliquez sur l'indicateur pour saisir des angles exacts.",
|
||||
"ui.view_angles_lock": "Verrouiller {axis}",
|
||||
"ui.view_angles_ortho": "Ortho",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Tangage",
|
||||
"ui.view_angles_readout": "Tangage {pitch} · Lacet {yaw} · Roulis {roll}",
|
||||
"ui.view_angles_roll": "Roulis",
|
||||
"ui.view_angles_unlock": "Déverrouiller {axis}",
|
||||
"ui.view_angles_yaw": "Lacet",
|
||||
"ui.view_angles_zero": "Mettre {axis} à 0°",
|
||||
"ui.view_centre": "Centre de la vue",
|
||||
"ui.viewport_status_clear": "Désactiver {name}",
|
||||
"ui.viewport_status_clear_hint": "Désactiver {name} · Échap",
|
||||
@@ -5236,7 +5098,7 @@
|
||||
"update.check_unavailable": "La recherche de mises à jour n’est pas disponible pour cette installation.",
|
||||
"update.checking": "Vérification…",
|
||||
"update.copy": "Copier",
|
||||
"update.dmg_opened": "L'image disque est ouverte et vérifiée : quittez SolidCraft, faites glisser le nouveau SolidCraft dans Applications en remplaçant l'ancienne copie, puis rouvrez SolidCraft.",
|
||||
"update.dmg_opened": "L'image disque est ouverte et vérifiée : faites glisser SolidCraft dans Applications en remplaçant l'ancienne copie, puis redémarrez SolidCraft.",
|
||||
"update.download": "Télécharger",
|
||||
"update.download_open": "Télécharger et ouvrir",
|
||||
"update.downloading": "Téléchargement et vérification… {done} sur {total} Mo",
|
||||
@@ -5280,7 +5142,6 @@
|
||||
"web.open_link": "Ouvrir la conception liée ?",
|
||||
"web.open_link_confirm": "Il y a des modifications non enregistrées. Ouvrir la conception liée dans un nouvel onglet ?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ choisir · Entrée / Tab compléter · Échap fermer",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ choisir · Entrée applique cette valeur",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ choisir · Entrée applique la saisie · Échap fermer",
|
||||
"⌘Enter continues on GitHub.": "⌘Entrée continue sur GitHub."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Rectangular",
|
||||
"Rectangular Tube": "Tubo rectangular",
|
||||
"Reference face": "Cara de referencia",
|
||||
"Reference plane": "Plano de referencia",
|
||||
"Relief Depth": "Profundidade do desafogo",
|
||||
"Relief Width": "Largura do desafogo",
|
||||
"Remove Tools": "Quitar as ferramentas",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Sección",
|
||||
"Section (optional)": "Sección (opcional)",
|
||||
"Section position": "Posición da sección",
|
||||
"Sections": "Seccións",
|
||||
"Sections (one sketch each)": "Seccións (un bosquexo cada unha)",
|
||||
"Select Other": "Seleccionar outro",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Seleccionar outro: mantén o botón esquerdo quieto sobre o modelo (ou clic dereito › Seleccionar outro…) para listar todo o que hai baixo o cursor; fai clic de novo no mesmo punto para seleccionar o seguinte. Fai dobre clic co botón central para ir ao Inicio (Preferencias › Navegación).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (ancoraxe perdida)",
|
||||
"browser.sketch_editing": "{name} (en edición)",
|
||||
"browser.sketch_name": "Bosquexo{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "xa na súa peza",
|
||||
"browser.sketches_to_parts_design_body": "nun corpo do propio deseño",
|
||||
"browser.sketches_to_parts_moved": "Movéronse {moved} bosquexos á peza na que están",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "nunha cara sen unha ancoraxe exacta",
|
||||
"browser.sketches_to_parts_not_on_face": "non na cara dunha peza",
|
||||
"browser.sketches_to_parts_part_missing": "a súa peza desapareceu",
|
||||
"browser.sketches_to_parts_result": "Movéronse {moved} bosquexos á peza na que están; {stayed} non se moveron: {why}",
|
||||
"browser.units": "Unidades: {units}",
|
||||
"cam.flat": "Cara plana",
|
||||
"cam.follower": "Seguidor",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Extraer a un ficheiro",
|
||||
"cmd.component_finish_edit": "Rematar a edición",
|
||||
"cmd.component_from_bodies": "Crear compoñentes a partir de corpos",
|
||||
"cmd.component_hide_history": "Ocultar o historial do compoñente",
|
||||
"cmd.component_insert_design": "Inserir deseño",
|
||||
"cmd.component_links": "Listar as ligazóns",
|
||||
"cmd.component_list": "Listar os compoñentes",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Mover corpos ao compoñente",
|
||||
"cmd.component_move_features": "Mover operacións ao compoñente",
|
||||
"cmd.component_move_sketches": "Mover bosquexos ao compoñente",
|
||||
"cmd.component_move_sketches_to_parts": "Mover os bosquexos ás súas pezas",
|
||||
"cmd.component_paste_from_design": "Pegar desde outro deseño",
|
||||
"cmd.component_paste_new": "Pegar como novo",
|
||||
"cmd.component_properties": "Propiedades físicas do compoñente",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Renomear o compoñente",
|
||||
"cmd.component_replace_with_link": "Substituír por unha ligazón",
|
||||
"cmd.component_revert_position": "Reverter a posición",
|
||||
"cmd.component_show_history": "Mostrar o historial do compoñente",
|
||||
"cmd.component_unlock": "Desbloquear o contido",
|
||||
"cmd.component_update_links": "Actualizar as ligazóns",
|
||||
"cmd.config_activate": "Activar a configuración",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Regra de configuración",
|
||||
"cmd.config_rules": "Regras de configuración",
|
||||
"cmd.config_table": "Mostrar a táboa de configuracións",
|
||||
"cmd.construct.plane.axis_point": "Plano por un eixe e un punto",
|
||||
"cmd.construct_axis_edge": "Eixe pola aresta",
|
||||
"cmd.construct_axis_normal_to_face": "Eixe perpendicular á cara",
|
||||
"cmd.construct_axis_through_cylinder": "Eixe por cilindro/cono/toro",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Mostrar a vista explosionada",
|
||||
"cmd.expr_evaluate": "Avaliar a expresión",
|
||||
"cmd.face_delete": "Eliminar a cara",
|
||||
"cmd.file.export_3mf": "Exportar 3MF",
|
||||
"cmd.file.export_obj": "Exportar OBJ",
|
||||
"cmd.file.export_step": "Exportar STEP",
|
||||
"cmd.file.export_stl": "Exportar STL",
|
||||
"cmd.file.export_urdf": "Exportar URDF",
|
||||
"cmd.file_export": "Exportar",
|
||||
"cmd.file_insert_mesh": "Inserir malla",
|
||||
"cmd.file_insert_step": "Inserir STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Activar as cores dos compoñentes",
|
||||
"cmd.inspect_colored_components_disable": "Desactivar as cores dos compoñentes",
|
||||
"cmd.inspect_compare": "Comparar corpos",
|
||||
"cmd.inspect_compare_picture": "Comparar a imaxe",
|
||||
"cmd.inspect_continuity": "Análise de continuidade",
|
||||
"cmd.inspect_curvature_comb": "Análise con pente de curvatura",
|
||||
"cmd.inspect_curvature_map": "Análise con mapa de curvatura",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Editar a nube de puntos",
|
||||
"cmd.pointcloud_insert": "Inserir nube de puntos",
|
||||
"cmd.pointcloud_list": "Nubes de puntos",
|
||||
"cmd.render.compare.divider": "Mover o divisor da comparación de renders",
|
||||
"cmd.render.result.discard": "Descartar o resultado do render",
|
||||
"cmd.render.result.select": "Seleccionar o resultado do render",
|
||||
"cmd.render_aging_describe": "Envellecemento da superficie por capas",
|
||||
"cmd.render_backends": "Motores de render",
|
||||
"cmd.render_batch": "Renderizar todas as tomas",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline por puntos de control (grao 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline por puntos de paso",
|
||||
"cmd.sketch_spline_insert_point": "Engadir punto ao spline",
|
||||
"cmd.sketch_spline_remove_point": "Eliminar punto do spline",
|
||||
"cmd.sketch_spline_reverse": "Inverter a dirección do spline",
|
||||
"cmd.sketch_spun_profile": "Perfil de revolución",
|
||||
"cmd.sketch_toggle_diameter": "Alternar raio / diámetro",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Mover o marcador da liña de tempo",
|
||||
"cmd.timeline_stop": "Deter a reprodución do historial",
|
||||
"cmd.timeline_suppress": "Suprimir a operación",
|
||||
"cmd.ui.assistant": "Mostrar/Ocultar o asistente",
|
||||
"cmd.view.render_browser": "Navegador de render",
|
||||
"cmd.view.render_dock": "Mover o panel de render",
|
||||
"cmd.view.render_focus": "Vista de foco do render",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Ferramenta de navegación",
|
||||
"cmd.view_top": "Vista superior",
|
||||
"cmd.view_visual_style": "Estilo visual",
|
||||
"color.blue": "Azul",
|
||||
"color.copy": "Preme para copiar os valores da cor",
|
||||
"color.edit": "Preme para editar a cor",
|
||||
"color.gamma": "Mostrando os valores da cor no espazo gamma 0-255",
|
||||
"color.green": "Verde",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Escribe #rrggbb ou #rrggbbaa; con seis díxitos consérvase a opacidade",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Ton",
|
||||
"color.linear": "Mostrando os valores da cor no espazo lineal 0-1",
|
||||
"color.recent": "Cores recentes",
|
||||
"color.recent_help": "As cores que escolles en calquera campo de cor aparecen aquí",
|
||||
"color.red": "Vermello",
|
||||
"color.saturation": "Saturación (porcentaxe)",
|
||||
"color.saturation_value": "Saturación e valor",
|
||||
"color.selected": "Cor seleccionada",
|
||||
"color.step_down": "Diminuír un paso",
|
||||
"color.step_up": "Aumentar un paso",
|
||||
"color.value": "Valor, a luminosidade (porcentaxe)",
|
||||
"config.column_filter_empty": "Non hai columnas que coincidan",
|
||||
"config.rule_parameter_columns": "Só se listan os parámetros que teñen unha columna na táboa. Engade unha con Engadir columna (+) para usala aquí.",
|
||||
"config.rule_suppression_columns": "Só se listan as operacións que teñen unha columna Suprimir na táboa. Engade unha con Engadir columna (+) para controlalas desde aquí.",
|
||||
"contact.components_count": "{count} compoñentes",
|
||||
"contact.enabled_label": "activado",
|
||||
"coupling.gear_1": "Engrenaxe 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Cota: {name}",
|
||||
"dialog.edit_title": "EDITAR {title}",
|
||||
"dialog.no_shown_body": "Non hai ningún corpo visible para modificar: mostra un ou escolle Corpo novo",
|
||||
"dialog.pattern_sketch_not_object": "Escolle corpos ou operacións: un bosquexo non é ningunha das dúas cousas. Repite as súas curvas co Patrón ou a Simetría do propio bosquexo, ou extrúeo primeiro.",
|
||||
"dialog.select": "↖ Seleccionar",
|
||||
"dialog.selected_count": "↖ {count} seleccionados",
|
||||
"dialog.selection_constraint": "Restrición {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · curva {id}",
|
||||
"dialog.selection_guidance": "Selecciona unha entrada para cambiala. Fai clic nos obxectos seleccionados para quitalos; Ctrl/Cmd-clic tamén os alterna. Revisa a previsualización e preme Aceptar.",
|
||||
"dialog.selection_midpoint": "Punto medio · {id}",
|
||||
"dialog.selection_profile": "{sketch} · perfil {number}",
|
||||
"dialog.selection_step": "{step} de {total}: selecciona {input}",
|
||||
"dialog.step": "Paso",
|
||||
"document.changed_on_disk": "{name} cambiou no disco",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Crea un eixe de construción por dous puntos, vértices ou puntos do bosquexo. Úsao para un eixe que vai entre dúas posicións coñecidas.",
|
||||
"help.construct.plane.along_path": "Crea un plano de construción perpendicular a unha aresta ou curva, nunha posición ao longo dela. Úsao para debuxar o perfil dun varrido ou unha sección dunha traxectoria.",
|
||||
"help.construct.plane.at_angle": "Crea un plano de construción xirado un ángulo a partir dun plano ou dunha cara, arredor dun eixe ou dunha aresta. Úsao para bosquexos inclinados, como unha escuadra en ángulo.",
|
||||
"help.construct.plane.axis_point": "Crea un plano de construción que contén un eixe e un punto fóra dese eixe. Escolle unha orixe ou un eixe de construción, unha aresta recta ou unha liña do bosquexo e despois un vértice, un punto do bosquexo ou un punto de construción. Un punto sobre o eixe non pode definir un plano único.",
|
||||
"help.construct.plane.midplane": "Crea un plano de construción a medio camiño entre dous planos ou caras planas, ou que os bisecta onde se atopan formando un ángulo. Úsao como plano de simetría.",
|
||||
"help.construct.plane.offset": "Crea un plano de construción paralelo a un plano ou a unha cara plana, a unha distancia ou por un punto. Úsao para debuxar a unha altura fixa sobre unha cara.",
|
||||
"help.construct.plane.perpendicular": "Crea un plano de construción que contén unha liña ou aresta e é perpendicular a un plano ou a unha cara. Úsao para debuxar en vertical sobre un modelo ao longo dunha aresta.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Comproba o tipo de unión (como Ríxida), a fixación ao chan, os límites da unión e os valores controlados por parámetros.",
|
||||
"joint_move.blocked_title": "Non se pode mover esta peza",
|
||||
"joint_move.coarse": "Paso de rotación preto do eixe (°)",
|
||||
"joint_move.conflict": "Unha unión desta peza está en conflito coas outras: {joint}.",
|
||||
"joint_move.conflict_hint": "Edita, suprime ou elimina a unión en conflito para que as outras unións poidan colocar a peza.",
|
||||
"joint_move.distance": "Distancia desde o inicio",
|
||||
"joint_move.done": "Feito",
|
||||
"joint_move.fine": "Paso de rotación lonxe do eixe (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Pista {number}",
|
||||
"nav.alias.help": "Shift+Alt+arrastrar co botón esquerdo orbita, Shift+Alt+botón central desprázase, Shift+Alt+botón dereito fai zoom; arrastrar co botón central tamén desprázase e arrastrar co botón dereito orbita",
|
||||
"nav.blender.help": "Arrastrar co botón central orbita, Shift+botón central desprázase, Ctrl+botón central fai zoom; arrastrar co botón dereito non move a cámara",
|
||||
"nav.creo.help": "Arrastrar co botón central orbita, Shift+botón central desprázase, Ctrl+botón central arrastrando en vertical fai zoom (cara abaixo para achegar); xira a roda do rato para facer zoom",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "O rato e o rato 3D xiran a vista a través dos dous polos e conservan o xiro sobre a vista. O axuste dos eixes con Shift está desactivado.",
|
||||
"nav.free_orbit.label": "Órbita libre",
|
||||
"nav.free_orbit.snap_help": "O rato e o rato 3D xiran a vista a través dos dous polos e conservan o xiro sobre a vista. Mantén Shift durante un arrastre de órbita para axustar a dirección da vista e o xiro.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+arrastrar co botón esquerdo desprázase, Shift+Alt+botón esquerdo fai zoom, Ctrl+arrastrar co botón esquerdo sobre un espazo baleiro orbita",
|
||||
"nav.inventor.help": "Arrastrar co botón central desprázase, Shift+botón central orbita, Ctrl+botón central fai zoom, arrastrar co botón dereito orbita",
|
||||
"nav.maya.help": "Alt+arrastrar co botón esquerdo orbita, Alt+botón central desprázase, Alt+botón dereito fai zoom; arrastrar co botón central tamén desprázase",
|
||||
"nav.nx.help": "Arrastrar co botón central orbita, Shift+botón central desprázase (botón central + dereito de NX), Ctrl+botón central fai zoom (botón central + esquerdo de NX); arrastrar co botón dereito non move a cámara",
|
||||
"nav.openscad.help": "Arrastrar co botón esquerdo sobre un espazo baleiro orbita, Shift+arrastrar co botón esquerdo selecciona por caixa, arrastrar a xeometría do bosquexo edítaa; arrastrar co botón dereito ou central desprázase, Shift+arrastrar co botón dereito ou central fai zoom",
|
||||
"nav.perspective.sketch": "A edición de bosquexos usa a vista ortogonal. Remata o bosquexo para cambiar á perspectiva.",
|
||||
"nav.right_drag_orbits.help": "Desactivado: arrastrar co botón dereito non move a cámara e o botón dereito só abre o menú contextual. Escoller a asignación do rato de SolidWorks desactívao.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Parafuso de cabeza abombada con hexágono interior",
|
||||
"parts.family.dowel_pin": "Pasador paralelo (espiga)",
|
||||
"parts.family.hex_bolt": "Parafuso / perno de cabeza hexagonal",
|
||||
"parts.family.hex_cap_screw_inch": "Parafuso de cabeza hexagonal (polgadas)",
|
||||
"parts.family.hex_nut": "Porca hexagonal",
|
||||
"parts.family.hex_nut_inch": "Porca hexagonal (polgadas)",
|
||||
"parts.family.set_screw": "Parafuso sen cabeza de hexágono interior, punta plana",
|
||||
"parts.family.socket_head_cap_screw": "Parafuso de cabeza cilíndrica con hexágono interior",
|
||||
"parts.family.washer": "Arandela plana",
|
||||
"parts.family.washer_sae": "Arandela plana, SAE (estreita)",
|
||||
"parts.family.washer_uss": "Arandela plana, USS (ancha)",
|
||||
"parts.holes": "Furados (opcional)",
|
||||
"parts.placement_hint": "escolle un ou máis furados para asentar unha peza en cada un, ou Aceptar colócaa na orixe",
|
||||
"parts.system": "Sistema de unidades",
|
||||
"parts.system.inch": "Polgadas",
|
||||
"parts.system.metric": "Métrico",
|
||||
"pattern.alignment_2": "Aliñamento 2",
|
||||
"pattern.alignment_hint": "O número inclúe o orixinal. Centrar equilibra as copias; Inverter escolle o lado da copia extra cando o total é par.",
|
||||
"pattern.direction_1": "Dirección 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Arrastrar co botón esquerdo",
|
||||
"prefs.button_middle": "Arrastrar co botón central",
|
||||
"prefs.button_right": "Arrastrar co botón dereito",
|
||||
"prefs.carousel_next": "Seguinte",
|
||||
"prefs.carousel_previous": "Anterior",
|
||||
"prefs.choose_font": "Escoller ficheiro de tipo de letra…",
|
||||
"prefs.click": "Clic",
|
||||
"prefs.contact_shading": "Sombreado suave de contacto",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Superficies curvas",
|
||||
"prefs.curves": "Superficies curvas",
|
||||
"prefs.cut_preview_tint": "Mostrar en vermello o material retirado",
|
||||
"prefs.cut_preview_tint_help": "Unha vista previa énchea o material que retira unha operación, e a forma que substitúe, cun fantasma vermello translúcido. Se está desactivado, eses recheos son totalmente transparentes e só se debuxan os seus contornos.",
|
||||
"prefs.dark_parts_shading": "Conservar a forma das pezas escuras",
|
||||
"prefs.dark_parts_shading_help": "Sombrea a vista en luz lineal cunha luz de recheo suave do ceo, para que as caras escuras manteñan un degradado en vez de volverse negras",
|
||||
"prefs.dead_zone_note": "A banda raiada é a zona morta: o movemento dentro dela ignórase.",
|
||||
"prefs.default": "predeterminado",
|
||||
"prefs.design": "Valores predeterminados do deseño",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Arestas e sombreado",
|
||||
"prefs.extend": "Estender",
|
||||
"prefs.extra_navigation": "Ctrl+arrastrar co botón esquerdo no espazo baleiro orbita; mantén premida a barra espaciadora para desprazar.",
|
||||
"prefs.extrude_view_isometric": "Cambiar a vista a isométrica ao abrir Extruír",
|
||||
"prefs.extrude_view_return": "Volver á vista anterior ao pechar Extruír",
|
||||
"prefs.follows_os": "Segue o sistema operativo",
|
||||
"prefs.font": "Tipo de letra",
|
||||
"prefs.font_fallback": "Os glifos que lle faltan ao tipo de letra escollido substitúense polos do tipo de letra integrado, así que ningunha etiqueta mostra unha caixa baleira.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automático",
|
||||
"prefs.graphics_card_missing": "A tarxeta gráfica gardada non está dispoñible; úsase Automático.",
|
||||
"prefs.graphics_card_restart": "Aplícase despois de reiniciar SolidCraft. WGPU_ADAPTER_NAME anula esta opción.",
|
||||
"prefs.graphics_card_unused": "A tarxeta gráfica gardada non se usou para esta xanela; a tarxeta en uso móstrase en Axuda › Acerca de e na barra de estado. Proba Automático ou define WGPU_ADAPTER_NAME cunha parte única do nome da tarxeta.",
|
||||
"prefs.graphics_note": "Troca velocidade por suavidade. Cada opción mostra o seu efecto nunha mostra.",
|
||||
"prefs.graphics_presets_note": "Os axustes predefinidos configuran xuntas as opcións de abaixo.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Ocultar as iconas de restricións ao reducir o zoom",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Con Bosquexos configurado en Baixo a súa operación, o Historial da esquerda lista cada bosquexo un nivel máis adentro, baixo a primeira operación construída a partir del, sempre que sexa o bastante ancho para mostrar os nomes. A liña de tempo da parte inferior mantén sempre a orde de creación.",
|
||||
"prefs.history_sketches_under_feature": "Baixo a súa operación",
|
||||
"prefs.hold_stop_snapping": "Manter premido para deixar de axustar",
|
||||
"prefs.home_fit_size": "Tamaño de Inicio e Axustar",
|
||||
"prefs.home_fit_size_note": "Canto da vista ocupa o modelo cando Inicio, Axustar, un deseño aberto ou un cambio de vista do navegador de vistas o encadran, estea ou non activado o axuste de abaixo. 100 %: ocupa a vista entre os paneis, a brúxula e a barra de navegación.",
|
||||
"prefs.icons_only": "Só iconas",
|
||||
"prefs.imported_file": "Ficheiro importado",
|
||||
"prefs.in_browser": "No navegador",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Idioma da interface",
|
||||
"prefs.interface_note": "Como se ve SolidCraft e onde están as súas partes.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Inverter as frechas curvas de balanceo",
|
||||
"prefs.invert_curved_roll_arrows_note": "As dúas frechas curvas da esquina do cubo fan xirar a vista no plano da pantalla. Activado: a frecha en sentido horario xira en sentido antihorario e a frecha en sentido antihorario xira en sentido horario. Desactivado: cada frecha xira a vista no sentido en que se curva.",
|
||||
"prefs.invert_navigator_arrows": "Invertir as frechas de rotación do cubo de vistas",
|
||||
"prefs.invert_navigator_arrows_note": "As frechas arredor do cubo fan orbitar a cámara na dirección na que apuntan, como en Fusion e Inventor: a frecha da esquerda apunta á dereita e move a cámara cara á dereita. Desactivado: unha frecha xira o cubo cara ao lado no que está, así que a frecha da esquerda move a cámara cara á esquerda. As frechas curvas de balanceo non se ven afectadas.",
|
||||
"prefs.keep_work_on_tab_switch": "Manter abertos os diálogos e as ferramentas ao cambiar de deseño",
|
||||
"prefs.keep_work_on_tab_switch_note": "Cada lapela de deseño conserva o seu diálogo ou ferramenta aberto, co que escolliches e escribiches nel, e a súa lapela da barra de ferramentas. Volven estar aí cando regresas ao deseño. Desactivado: cambiar de deseño cancélaos e mostra a lapela Modelo.",
|
||||
"prefs.labels": "Etiquetas",
|
||||
"prefs.language_system": "Sistema",
|
||||
"prefs.layout": "Disposición",
|
||||
"prefs.layout_note": "Compacta acopla os paneis aos bordos da xanela. A translucidez do navegador está dispoñible en Flotante. Cambia o lado do Asistente na páxina do Asistente.",
|
||||
"prefs.left": "Esquerda",
|
||||
"prefs.left_click": "Clic esquerdo",
|
||||
"prefs.line_drag_draws_one": "Premer e arrastrar debuxa unha liña",
|
||||
"prefs.line_drag_draws_one_note": "Na ferramenta Liña, premer, arrastrar e soltar debuxa unha liña desde onde se preme ata onde se solta, e remata alí. Os clics seguen debuxando unha cadea. Desactivado: un arrastre coloca un punto onde se solta, como fai un clic.",
|
||||
"prefs.line_hover_tangent_arc": "Manter o punteiro quieto no último punto dunha liña para cambiar a un arco tanxente",
|
||||
"prefs.line_hover_tangent_arc_note": "Na ferramenta Liña, unha vez debuxado un segmento, afástate do último punto da cadea, volve e mantén o punteiro quieto nel: o seguinte clic remata un arco tanxente, e o mesmo xesto volve ás liñas. Desactivado: manter o punteiro aí non fai nada.",
|
||||
"prefs.linked_designs": "Deseños ligados",
|
||||
"prefs.live_input": "Entrada en directo",
|
||||
"prefs.live_preview": "Vista previa en directo",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Asignación do rato",
|
||||
"prefs.navigation": "Navegación",
|
||||
"prefs.navigation_note": "Como moven a vista o rato, o panel táctil e o rato 3D.",
|
||||
"prefs.navigator_fit": "Axustar o modelo despois dun cambio de vista do navegador",
|
||||
"prefs.navigator_fit_note": "Unha cara, esquina ou frecha do cubo de vistas, ou un eixe do gizmo, tamén mira ao centro do modelo desde a única distancia que o abarca por todos os lados (a súa esfera delimitadora). Inicio usa o mesmo zoom e centro mentres isto está activado, así que as vistas escollidas despois só xiran. Desactivado: a vista xira no sitio, conservando o seu punto de mira e o seu zoom.",
|
||||
"prefs.network_host_remove": "Quitar",
|
||||
"prefs.network_locations": "Permitir ubicacións de rede nos deseños",
|
||||
"prefs.network_locations_note": "Desactivado: os ficheiros ligados dun deseño que están noutro ordenador (\\\\server\\share) só se abren desde os servidores listados aquí, ou despois de que permitas un cando se che pregunte.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Colocación",
|
||||
"prefs.prefer_free_sketch_points": "Preferir os puntos de bosquexo móbiles cando os puntos se solapan",
|
||||
"prefs.preview_choices": "Vista previa das túas opcións",
|
||||
"prefs.preview_tint_new_faces": "Colorear a superficie nova nunha vista previa",
|
||||
"prefs.preview_tint_new_faces_help": "A vista previa dunha operación que cambia un corpo pode debuxar a superficie que engade coa cor da vista previa. Se está desactivado, o corpo debúxase tal e como é.",
|
||||
"prefs.print_face_highlight": "Resaltado da cara de impresión",
|
||||
"prefs.print_face_highlight_tip": "Intensidade da tinguidura e do contorno da cara de impresión dun corpo na vista. 0 % non mostra resaltado.",
|
||||
"prefs.profile_active": "Perfil activo",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Usar o orzamento de xeometría anterior da vista previa de Render",
|
||||
"prefs.render_previous_geometry_budget_help": "Restaura o límite fixo de xeometría anterior (512 MiB en escritorio de 64 bits, 128 MiB noutros casos) en lugar do orzamento baseado no dispositivo.",
|
||||
"prefs.reports_saved": "{n} gardados",
|
||||
"prefs.ribbon_click_ends_tool": "Facer clic no botón da ferramenta en uso remata a ferramenta",
|
||||
"prefs.ribbon_click_ends_tool_note": "Un clic no botón resaltado da cinta da ferramenta de bosquexo en uso remata a ferramenta, e así os clics na vista volven seleccionar. Desactivado: o clic inicia a ferramenta de novo.",
|
||||
"prefs.ribbon_reveal": "Mostrar os resultados da busca na cinta",
|
||||
"prefs.ribbon_reveal_note": "Ao pasar o punteiro sobre un resultado en Buscar ordes, móstrase onde está a orde na cinta: a súa lapela, o seu botón ou a súa fila no despregable dun panel. Unha orde iniciada desde a busca escintila alí, e unha orde en execución desde un despregable marca o seu panel.",
|
||||
"prefs.right_click": "Clic dereito",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Volver á vista anterior",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Volver, salvo que se xirase",
|
||||
"prefs.sketch_exit_view_note": "A onde vai a vista despois de Finalizar o bosquexo, Cancelar ou un dobre Esc.",
|
||||
"prefs.sketch_face_activates_part": "Crear un bosquexo na cara dunha peza activa esa peza",
|
||||
"prefs.sketch_face_activates_part_note": "Un bosquexo iniciado na cara dun corpo doutro compoñente activa primeiro ese compoñente, de modo que o bosquexo lle pertence e queda con esa peza no navegador. Despois a peza segue activa. Desactivado: o bosquexo pertence ao compoñente activo.",
|
||||
"prefs.sketch_open_look_at": "Xirar para mirar cara ao bosquexo cando se abre",
|
||||
"prefs.sketch_open_look_at_note": "Desactivado: crear ou editar un bosquexo deixa a vista tal e como está. Mirar cara a orienta a vista cara ao bosquexo cando o queres.",
|
||||
"prefs.sketch_recent_snap": "Axustar automaticamente aos centros e puntos medios recentes",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Erro",
|
||||
"prefs.status_selected": "Seleccionado",
|
||||
"prefs.status_warning": "Aviso",
|
||||
"prefs.structure.appearance": "Aparencia",
|
||||
"prefs.structure.appearance_note": "Cores, texto e accesibilidade.",
|
||||
"prefs.structure.in_profile": "No perfil",
|
||||
"prefs.structure.layout": "Disposición",
|
||||
"prefs.structure.layout_note": "Onde se colocan as partes da xanela.",
|
||||
"prefs.structure.look": "Estilo",
|
||||
"prefs.structure.measure_pointer": "Medición e punteiro",
|
||||
"prefs.structure.mouse3d": "Rato 3D",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse e SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Rato e panel táctil. O rato 3D ten a súa propia páxina.",
|
||||
"prefs.structure.profile": "Perfil",
|
||||
"prefs.structure.profile_edited": "Cambiado desde que se gardou",
|
||||
"prefs.structure.profile_hover": "Gardado nos perfís de axustes",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Bosquexo",
|
||||
"prefs.structure.tools": "Ferramentas",
|
||||
"prefs.structure.tools_note": "Como se comportan as ferramentas de modelado.",
|
||||
"prefs.structure.work": "Traballo",
|
||||
"prefs.supersampling_brief": "Debuxa a vista máis grande e redúcea con filtrado: moi nítida, pero máis pesada.",
|
||||
"prefs.tab_accent_note": "O realce segue a pestana activa",
|
||||
"prefs.theme_file": "ficheiro de tema",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Cor base · sRGB",
|
||||
"render.base_metallic": "Fracción metálica",
|
||||
"render.base_opaque_only": "Este editor mantén a semántica de corpo opaco. Usa os controis explícitos de vidro para a transmisión óptica.",
|
||||
"render.batch_all_shots": "Todas as tomas ({count})",
|
||||
"render.batch_empty": "Garda unha toma antes de renderizar todas as tomas.",
|
||||
"render.batch_limit": "Renderizar todas as tomas está limitado a 32 tomas.",
|
||||
"render.batch_status": "{running} en curso · {waiting} en espera",
|
||||
"render.bloom_enable": "Mostrar resplandor",
|
||||
"render.bloom_help": "Brillo creativo só de saída a partir de realces lineais positivos, esparexido con tres pasadas de caixa normalizadas. O raio está en píxeles de saída. Engádese na luz de visualización lineal antes de sRGB; non é unha lente, un efecto volumétrico nin unha mellora da converxencia. O EXR en bruto non cambia.",
|
||||
"render.bloom_opaque": "O resplandor require unha saída opaca. O PNG transparente rexéitase; non se aplana sen avisar.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Escolle primeiro un estilo en Aparencias",
|
||||
"render.chromatic_offset": "Desprazamento cromático dos bordos",
|
||||
"render.clear_stage": "Quitar o escenario gardado",
|
||||
"render.compare_divider": "Divisor da comparación",
|
||||
"render.compare_live": "En directo",
|
||||
"render.compare_live_preview": "Vista previa en directo",
|
||||
"render.compare_render": "Render {number}",
|
||||
"render.compare_side": "Render {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · capturado na revisión {revision}",
|
||||
"render.compare_swap": "Intercambiar",
|
||||
"render.copy_request": "Copiar JSON",
|
||||
"render.cpu_aa_help": "Mostras espaciais: máis mostras melloran os bordos e aumentan o tempo de renderizado.",
|
||||
"render.cpu_area_add": "Engadir luz rectangular da CPU",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Móstrase a última imaxe completada; un renderizado máis recente non a substituíu.",
|
||||
"render.result_sequence": "Punto de control",
|
||||
"render.result_title": "Resultado do renderizado",
|
||||
"render.results_choose": "Resultados conservados",
|
||||
"render.results_label": "Render {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [desactualizado]",
|
||||
"render.results_unnamed": "Imaxe",
|
||||
"render.return_design": "Volver a Deseño",
|
||||
"render.review_stale": "Esta revisión está obsoleta. Resólvea ou comproba de novo antes de aplicar.",
|
||||
"render.ribbon_aging": "Envellecemento",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Comeza con = para construír as palabras a partir de parámetros: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Cursiva",
|
||||
"sketch_text.loading_fonts": "Buscando os tipos de letra instalados…",
|
||||
"sketch_text.no_bold": "O tipo de letra integrado non ten versión en negra: escolle un tipo de letra instalado",
|
||||
"sketch_text.on_path": "O texto segue a súa traxectoria: a curva colócao",
|
||||
"sketch_text.path_clear": "Separar o texto da súa curva",
|
||||
"sketch_text.path_hint": "Unha curva do bosquexo que segue o texto: fai clic aquí e despois na curva",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "as dúas orixes están no mesmo compoñente",
|
||||
"thread.automatic_size": "Tamaño automático",
|
||||
"thread.designation": "Designación",
|
||||
"thread.direction": "Dirección da rosca",
|
||||
"thread.iso_metric": "Métrica ISO",
|
||||
"thread.left_hand": "Á esquerda",
|
||||
"thread.right_hand": "Á dereita",
|
||||
"thread.select_size": "Seleccionar o tamaño",
|
||||
"timeline.delete_after_marker_one": "Eliminar 1 operación despois do marcador de historial",
|
||||
"timeline.delete_after_marker_other": "Eliminar {count} operacións despois do marcador de historial",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Executa isto nun terminal e despois preme Conectar de novo:",
|
||||
"ui.agent_chat_auth_title": "Iniciar sesión no axente",
|
||||
"ui.agent_chat_cancel": "Cancelar",
|
||||
"ui.agent_chat_cancel_timeout": "O axente non respondeu a Deter e desconectouse. Volve conectar para continuar.",
|
||||
"ui.agent_chat_cannot_start": "Instalado, pero non se inicia: {error}",
|
||||
"ui.agent_chat_changes": "Cambios: {n}, un só paso de desfacer",
|
||||
"ui.agent_chat_changes_n": "{n} cambios",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Orde do axente",
|
||||
"ui.agent_chat_connect": "Conectar",
|
||||
"ui.agent_chat_copy": "Copiar",
|
||||
"ui.agent_chat_copy_message": "Copiar a mensaxe",
|
||||
"ui.agent_chat_ctx_bodies": "Corpos",
|
||||
"ui.agent_chat_ctx_elements": "Elementos",
|
||||
"ui.agent_chat_ctx_features": "Operacións",
|
||||
"ui.agent_chat_ctx_more": "+{n} máis",
|
||||
"ui.agent_chat_ctx_other": "Outros",
|
||||
"ui.agent_chat_custom_heading": "Modelo personalizado",
|
||||
"ui.agent_chat_custom_hint": "Calquera programa que fale o Agent Client Protocol por stdin e stdout. Non se executa en ningún shell.",
|
||||
"ui.agent_chat_denied": "Denegado",
|
||||
"ui.agent_chat_deny": "Denegar",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Todo",
|
||||
"ui.agent_chat_mode_ask": "Preguntar",
|
||||
"ui.agent_chat_mode_edits": "Edicións",
|
||||
"ui.agent_chat_model_custom": "Usar o personalizado: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} non pode usar as ferramentas de SolidCraft, así que só pode conversar. Escolle un modelo que admita ferramentas.",
|
||||
"ui.agent_chat_model_rejected": "O axente non aceptou {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Buscar modelos…",
|
||||
"ui.agent_chat_model_tip": "O modelo que usa o axente. A túa escolla lémbrase para este axente.",
|
||||
"ui.agent_chat_models_failed": "Non se puideron listar os modelos: {error}",
|
||||
"ui.agent_chat_models_heading": "Modelos dispoñibles",
|
||||
"ui.agent_chat_models_listing": "Listando os modelos…",
|
||||
"ui.agent_chat_models_none": "O punto de acceso non lista ningún modelo",
|
||||
"ui.agent_chat_models_not_a_list": "A resposta non era unha lista de modelos",
|
||||
"ui.agent_chat_new": "Chat novo",
|
||||
"ui.agent_chat_new_confirm": "Comezar un chat novo? Borrarase o actual.",
|
||||
"ui.agent_chat_next_picture": "Imaxe seguinte",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Permisos",
|
||||
"ui.ai_preset": "Axuste predefinido",
|
||||
"ui.ai_protocol": "Protocolo",
|
||||
"ui.ai_reasoning_effort": "Esforzo de razoamento",
|
||||
"ui.ai_reasoning_effort_field_hint": "baleiro = valor predeterminado do provedor",
|
||||
"ui.ai_reasoning_effort_hint": "Opcional. Envíase ao punto de acceso como `reasoning_effort`; os valores aceptados difiren segundo o provedor (por exemplo `low`, `high` ou `max`). SolidCraft nunca substitúe un valor que definas aquí. Déixao baleiro para non enviar nada e manter o valor predeterminado do provedor.",
|
||||
"ui.ai_remove": "Quitar",
|
||||
"ui.ai_request_timed_out": "O modelo tardou máis de {seconds} s. Podes aumentar o tempo límite da solicitude deste punto de acceso en Preferencias › Asistente.",
|
||||
"ui.ai_request_timeout": "Tempo límite da solicitude",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Tanxente: escolle un círculo/arco ou unha spline/cónica aberta e despois o punto de tanxencia (curvas de forma libre: extremos)",
|
||||
"ui.construction.external_hint": "Tanxente: escolle un círculo ou arco, un punto exterior e despois a solución desexada",
|
||||
"ui.construction.free_hint": "Recta de construción: fai clic en dous puntos; clic dereito para reiniciar",
|
||||
"ui.construction.normal_needs_length": "Unha recta infinita é sempre de construción: escribe unha lonxitude para debuxar unha liña normal",
|
||||
"ui.construction.point_hint": "Recta de construción: fai clic no punto polo que debe pasar",
|
||||
"ui.construction.reference_hint": "Recta de construción: escolle unha recta e despois un punto; clic dereito para cambiar a referencia",
|
||||
"ui.construction.ribbon_label": "Liñas aux.",
|
||||
"ui.construction.side_hint": "Recta de construción: fai clic no lado cara ao que segue a recta; clic dereito para comezar de novo",
|
||||
"ui.context_menu": "Menú contextual",
|
||||
"ui.continuity_crease": "Aresta",
|
||||
"ui.continuity_curvature": "Curvatura",
|
||||
"ui.continuity_curvature_change": "Cambio de curvatura",
|
||||
"ui.continuity_g0": "G0 aresta",
|
||||
"ui.continuity_g1": "G1 tanxente",
|
||||
"ui.continuity_g2": "G2 curvatura",
|
||||
"ui.continuity_gap": "Separación",
|
||||
"ui.continuity_position": "Posición",
|
||||
"ui.continuity_tangent": "Tanxente",
|
||||
"ui.copy": "Copiar",
|
||||
"ui.corner": "Esquina",
|
||||
"ui.corners": "Esquinas",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Escuro",
|
||||
"ui.default_modelling_orientation": "Orientación de modelado predeterminada",
|
||||
"ui.delete": "Eliminar",
|
||||
"ui.delete_select_first": "Selecciona primeiro o que queres eliminar: operacións, corpos, compoñentes ou xeometría do bosquexo",
|
||||
"ui.depth": "Profundidade",
|
||||
"ui.design": "Deseño",
|
||||
"ui.design_properties.author": "Autor",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "A peza gardouse noutro ficheiro; a ensamblaxe segue ligando {name}",
|
||||
"ui.edit_in_place_wait": "Agarda a que remate o que se está a executar no deseño",
|
||||
"ui.edit_section_analysis": "Editar a análise de sección",
|
||||
"ui.edit_sketch_empty": "Non hai bosquexos para editar",
|
||||
"ui.ellipse": "Elipse",
|
||||
"ui.emboss_wrap_note": "Os perfís de liñas ortogonais tanxentes a un cilindro compatible envólvense automaticamente. Escolle unha parede para elixir un destino.",
|
||||
"ui.end_radius": "Raio final",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Explícita",
|
||||
"ui.equation_form": "Forma",
|
||||
"ui.equation_note": "A variable é un número sen unidade: sin(t) tómaa en radiáns. Un resultado sen unidade está na unidade do deseño.",
|
||||
"ui.equation_note_range": "A variable é unha lonxitude, igual que o seu intervalo: combínaa con parámetros de lonxitude e divídea entre unha lonxitude para sin(). Un resultado sen unidade está na unidade do deseño.",
|
||||
"ui.equation_parametric": "Paramétrica",
|
||||
"ui.equation_variable_unit": "A variable ten a unidade do intervalo",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Ocultar a orixe",
|
||||
"ui.hidePlanes": "Ocultar os planos",
|
||||
"ui.hideProfile": "Ocultar o perfil",
|
||||
"ui.hide_component_history": "Ocultar o seu historial",
|
||||
"ui.hide_origin_by_default": "Ocultar a orixe de forma predeterminada",
|
||||
"ui.hide_origin_note": "Os deseños novos comezan co cartafol Orixe oculto. Un deseño conserva o seu propio axuste de Orixe cando o mostras ou o ocultas.",
|
||||
"ui.history_back": "Retroceder un paso",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "fai dobre clic na aresta",
|
||||
"ui.history_first": "Ir ao comezo",
|
||||
"ui.history_forward": "Avanzar un paso",
|
||||
"ui.history_hide_hidden": "Ocultar os compoñentes ocultos",
|
||||
"ui.history_hide_names": "Ocultar os nomes",
|
||||
"ui.history_last": "Ir ao final",
|
||||
"ui.history_marker_tip": "Marcador de historial: arrastra para retroceder o modelo; as operacións novas van aquí",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Mostrar o botón Reproducir",
|
||||
"ui.history_play_finish_action": "Remata a acción actual antes de reproducir o historial",
|
||||
"ui.history_play_roll_back": "Move o marcador do historial cara atrás antes de reproducir",
|
||||
"ui.history_show_hidden": "Mostrar os compoñentes ocultos",
|
||||
"ui.history_show_names": "Mostrar os nomes",
|
||||
"ui.history_sketch_listed_under": "Listado en {feature}",
|
||||
"ui.history_title": "Historial",
|
||||
"ui.history_toggle_names": "Mostrar ou ocultar os nomes das operacións",
|
||||
"ui.history_waits_for_editor": "Desfacer, Refacer e Historial agardan ata que se abra o editor da operación",
|
||||
"ui.hole": "Furado",
|
||||
"ui.hole_tap_type": "Tipo de roscado do furado",
|
||||
"ui.hole_type": "Tipo de furado",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} ten cambios sen gardar, así que se inseriu o seu ficheiro gardado. Gárdao e despois usa Actualizar as ligazóns para incorporar os cambios.",
|
||||
"ui.insert_design.unsaved": "Cambios sen gardar",
|
||||
"ui.inspect": "Inspeccionar",
|
||||
"ui.instances": "Instancias",
|
||||
"ui.intersect": "Intersecar",
|
||||
"ui.isolate": "Illar",
|
||||
"ui.join": "Unir",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Unións",
|
||||
"ui.keyboard_shortcuts": "Atallos de teclado",
|
||||
"ui.language": "Idioma",
|
||||
"ui.lasso_select": "Lazo (arrastra un bucle a man alzada: colle o que queda totalmente dentro)",
|
||||
"ui.layout_compact": "Compacta",
|
||||
"ui.layout_floating": "Flotante",
|
||||
"ui.length": "Lonxitude",
|
||||
"ui.length_decimals": "Decimais das lonxitudes",
|
||||
"ui.light": "Claro",
|
||||
"ui.line": "Liña",
|
||||
"ui.line_arc_hint": "Arco tanxente: fai clic no final do arco. Mantén o punteiro quieto de novo no último punto para volver ás liñas; clic dereito ou Esc para finalizar",
|
||||
"ui.link_copies": "Ligar copias idénticas",
|
||||
"ui.link_copies_keep": "Manter",
|
||||
"ui.link_copies_link": "Ligar",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Reconstrúe a peza, substituíndo as operacións engadidas. Actualízanse todas as ocorrencias deste compoñente.",
|
||||
"ui.paste": "Pegar",
|
||||
"ui.path": "Traxectoria",
|
||||
"ui.pattern_object_type_tip": "Corpos: formas sólidas, escollidas na vista ou no Navegador; cada un cópiase enteiro.\nOperacións: pasos do Historial, como unha extrusión ou un furado, escollidos no Historial ou nunha cara que crearon; repítese o paso.\nUn bosquexo non é ningunha das dúas cousas: repite as súas curvas co Patrón ou a Simetría do propio bosquexo, ou extrúeo primeiro.",
|
||||
"ui.pattern_on_path": "Patrón nunha traxectoria",
|
||||
"ui.perforate_margin_default": "a partir do diámetro",
|
||||
"ui.perforate_pitch": "Paso",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Polígono",
|
||||
"ui.preferences": "Preferencias",
|
||||
"ui.press_a_key": "preme unha tecla…",
|
||||
"ui.print_face_body_not_sent": "O corpo desa cara non se envía: engádeo primeiro a Corpos",
|
||||
"ui.print_face_cleared": "{body}: cara de impresión quitada",
|
||||
"ui.print_face_input": "Cara de impresión",
|
||||
"ui.print_face_one_body": "Unha cara de impresión pertence a un só corpo: envía ese corpo só para cambiala",
|
||||
"ui.print_face_pick": "Selecciona unha cara plana dun corpo sólido para facela a cara de impresión",
|
||||
"ui.print_face_set": "{body}: cara de impresión definida; Enviar ao laminador apoia o corpo sobre ela",
|
||||
"ui.profile": "Perfil",
|
||||
@@ -5053,7 +4908,6 @@
|
||||
"ui.showDimension": "Mostrar a cota",
|
||||
"ui.showOrigin": "Mostrar a orixe",
|
||||
"ui.showPlanes": "Mostrar os planos",
|
||||
"ui.show_component_history": "Mostrar o seu historial",
|
||||
"ui.show_constraints": "Restricións",
|
||||
"ui.show_construction_geometries": "Xeometrías de construción",
|
||||
"ui.show_dimensions": "Cotas",
|
||||
@@ -5170,15 +5024,12 @@
|
||||
"ui.view_angles": "Ángulos da vista",
|
||||
"ui.view_angles_convention": "Graos arredor do eixe cara arriba. A guiñada 0° é a vista frontal, 90° a esquerda, −90° a dereita, 180° a posterior; un cabeceo de 90° é a vista superior; un balanceo positivo fai xirar o modelo en sentido horario.",
|
||||
"ui.view_angles_help": "Mostra o cabeceo, a guiñada e o balanceo da vista en graos e a súa proxección baixo o indicador de orientación. Fai clic na lectura para escribir ángulos exactos.",
|
||||
"ui.view_angles_lock": "Bloquear {axis}",
|
||||
"ui.view_angles_ortho": "Orto",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Cabeceo",
|
||||
"ui.view_angles_readout": "Cabeceo {pitch} · Guiñada {yaw} · Balanceo {roll}",
|
||||
"ui.view_angles_roll": "Balanceo",
|
||||
"ui.view_angles_unlock": "Desbloquear {axis}",
|
||||
"ui.view_angles_yaw": "Guiñada",
|
||||
"ui.view_angles_zero": "Poñer {axis} a 0°",
|
||||
"ui.view_centre": "Centro da vista",
|
||||
"ui.viewport_status_clear": "Desactivar {name}",
|
||||
"ui.viewport_status_clear_hint": "Desactivar {name} · Esc",
|
||||
@@ -5236,7 +5087,7 @@
|
||||
"update.check_unavailable": "A busca de actualizacións non está dispoñible para esta instalación.",
|
||||
"update.checking": "Comprobando…",
|
||||
"update.copy": "Copiar",
|
||||
"update.dmg_opened": "A imaxe de disco está aberta e verificada: sae de SolidCraft, arrastra o novo SolidCraft a Aplicacións, substituíndo a copia antiga, e despois volve abrir SolidCraft.",
|
||||
"update.dmg_opened": "A imaxe de disco está aberta e verificada: arrastra SolidCraft a Aplicacións, substituíndo a copia antiga, e despois reinicia SolidCraft.",
|
||||
"update.download": "Descargar",
|
||||
"update.download_open": "Descargar e abrir",
|
||||
"update.downloading": "Descargando e verificando… {done} de {total} MB",
|
||||
@@ -5280,7 +5131,6 @@
|
||||
"web.open_link": "Abrir o deseño ligado?",
|
||||
"web.open_link_confirm": "Hai cambios sen gardar. Abrir o deseño ligado nunha pestana nova?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ escoller · Intro / Tab completar · Esc pechar",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ escoller · Enter aplica este valor",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ escoller · Enter aplica o que escribiches · Esc pechar",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter continúa en GitHub."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Pravokutni",
|
||||
"Rectangular Tube": "Pravokutna cijev",
|
||||
"Reference face": "Referentno lice",
|
||||
"Reference plane": "Referentna ravnina",
|
||||
"Relief Depth": "Dubina rasterećenja",
|
||||
"Relief Width": "Širina rasterećenja",
|
||||
"Remove Tools": "Ukloni alate",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Presjek",
|
||||
"Section (optional)": "Presjek (neobavezno)",
|
||||
"Section position": "Položaj presjeka",
|
||||
"Sections": "Presjeci",
|
||||
"Sections (one sketch each)": "Presjeci (po jedna skica)",
|
||||
"Select Other": "Odaberi drugo",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Odaberi drugo: držite lijevu tipku mirno na modelu (ili desni klik › Odaberi drugo…) kako biste prikazali sve ispod pokazivača; ponovno kliknite na isto mjesto kako biste odabrali sljedeći element. Dvaput kliknite srednjom tipkom za Početni prikaz (Postavke › Navigacija).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (pričvršćenje izgubljeno)",
|
||||
"browser.sketch_editing": "{name} (uređuje se)",
|
||||
"browser.sketch_name": "Skica{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "već u svojem dijelu",
|
||||
"browser.sketches_to_parts_design_body": "na tijelu samog dizajna",
|
||||
"browser.sketches_to_parts_moved": "Skice premještene u dio na kojem se nalaze: {moved}",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "na licu bez točnog pričvršćenja",
|
||||
"browser.sketches_to_parts_not_on_face": "ne na licu dijela",
|
||||
"browser.sketches_to_parts_part_missing": "njihov dio više ne postoji",
|
||||
"browser.sketches_to_parts_result": "Skice premještene u dio na kojem se nalaze: {moved}; ostale na mjestu: {stayed} ({why})",
|
||||
"browser.units": "Jedinice: {units}",
|
||||
"cam.flat": "Ravno lice",
|
||||
"cam.follower": "Pratitelj",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Izdvoji u datoteku",
|
||||
"cmd.component_finish_edit": "Završi uređivanje",
|
||||
"cmd.component_from_bodies": "Izradi komponente iz tijela",
|
||||
"cmd.component_hide_history": "Sakrij vremensku traku komponente",
|
||||
"cmd.component_insert_design": "Umetni dizajn",
|
||||
"cmd.component_links": "Popis veza",
|
||||
"cmd.component_list": "Popis komponenti",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Premjesti tijela u komponentu",
|
||||
"cmd.component_move_features": "Premjesti značajke u komponentu",
|
||||
"cmd.component_move_sketches": "Premjesti skice u komponentu",
|
||||
"cmd.component_move_sketches_to_parts": "Premjesti skice u njihove dijelove",
|
||||
"cmd.component_paste_from_design": "Zalijepi iz drugog dizajna",
|
||||
"cmd.component_paste_new": "Zalijepi kao novo",
|
||||
"cmd.component_properties": "Fizička svojstva komponente",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Preimenuj komponentu",
|
||||
"cmd.component_replace_with_link": "Zamijeni vezom",
|
||||
"cmd.component_revert_position": "Vrati položaj",
|
||||
"cmd.component_show_history": "Prikaži vremensku traku komponente",
|
||||
"cmd.component_unlock": "Otključaj sadržaj",
|
||||
"cmd.component_update_links": "Ažuriraj veze",
|
||||
"cmd.config_activate": "Aktiviraj konfiguraciju",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Pravilo konfiguracije",
|
||||
"cmd.config_rules": "Pravila konfiguracije",
|
||||
"cmd.config_table": "Prikaži tablicu konfiguracija",
|
||||
"cmd.construct.plane.axis_point": "Ravnina kroz os i točku",
|
||||
"cmd.construct_axis_edge": "Os kroz brid",
|
||||
"cmd.construct_axis_normal_to_face": "Os okomita na lice",
|
||||
"cmd.construct_axis_through_cylinder": "Os kroz valjak/stožac/torus",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Prikaži rastavljeni prikaz",
|
||||
"cmd.expr_evaluate": "Izračunaj izraz",
|
||||
"cmd.face_delete": "Izbriši lice",
|
||||
"cmd.file.export_3mf": "Izvezi 3MF",
|
||||
"cmd.file.export_obj": "Izvezi OBJ",
|
||||
"cmd.file.export_step": "Izvezi STEP",
|
||||
"cmd.file.export_stl": "Izvezi STL",
|
||||
"cmd.file.export_urdf": "Izvezi URDF",
|
||||
"cmd.file_export": "Izvoz",
|
||||
"cmd.file_insert_mesh": "Umetni mrežu",
|
||||
"cmd.file_insert_step": "Umetni STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Omogući boje komponenti",
|
||||
"cmd.inspect_colored_components_disable": "Onemogući boje komponenti",
|
||||
"cmd.inspect_compare": "Usporedi tijela",
|
||||
"cmd.inspect_compare_picture": "Usporedi sliku",
|
||||
"cmd.inspect_continuity": "Analiza kontinuiteta",
|
||||
"cmd.inspect_curvature_comb": "Analiza češlja zakrivljenosti",
|
||||
"cmd.inspect_curvature_map": "Analiza mape zakrivljenosti",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Uredi oblak točaka",
|
||||
"cmd.pointcloud_insert": "Umetni oblak točaka",
|
||||
"cmd.pointcloud_list": "Oblaci točaka",
|
||||
"cmd.render.compare.divider": "Pomakni razdjelnik usporedbe renderiranja",
|
||||
"cmd.render.result.discard": "Odbaci rezultat renderiranja",
|
||||
"cmd.render.result.select": "Odaberi rezultat renderiranja",
|
||||
"cmd.render_aging_describe": "Slojevito starenje površine",
|
||||
"cmd.render_backends": "Pozadinski sustavi renderiranja",
|
||||
"cmd.render_batch": "Renderiraj sve kadrove",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline kontrolnih točaka (stupanj 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline kroz točke",
|
||||
"cmd.sketch_spline_insert_point": "Dodaj točku splinea",
|
||||
"cmd.sketch_spline_remove_point": "Ukloni točku splinea",
|
||||
"cmd.sketch_spline_reverse": "Obrni smjer splinea",
|
||||
"cmd.sketch_spun_profile": "Rotirani profil",
|
||||
"cmd.sketch_toggle_diameter": "Prebaci polumjer / promjer",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Pomakni oznaku vraćanja",
|
||||
"cmd.timeline_stop": "Zaustavi vremensku traku",
|
||||
"cmd.timeline_suppress": "Potisni značajku",
|
||||
"cmd.ui.assistant": "Prikaži ili sakrij Asistenta",
|
||||
"cmd.view.render_browser": "Stablo renderiranja",
|
||||
"cmd.view.render_dock": "Premjesti panel renderiranja",
|
||||
"cmd.view.render_focus": "Fokusni prikaz renderiranja",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Alat za navigaciju",
|
||||
"cmd.view_top": "Pogled odozgo",
|
||||
"cmd.view_visual_style": "Vizualni stil",
|
||||
"color.blue": "Plava",
|
||||
"color.copy": "Kliknite za kopiranje vrijednosti boje",
|
||||
"color.edit": "Kliknite za uređivanje boje",
|
||||
"color.gamma": "Prikaz vrijednosti boje u gama prostoru 0-255",
|
||||
"color.green": "Zelena",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Unesite #rrggbb ili #rrggbbaa; šest znamenki zadržava neprozirnost",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Nijansa",
|
||||
"color.linear": "Prikaz vrijednosti boje u linearnom prostoru 0-1",
|
||||
"color.recent": "Nedavne boje",
|
||||
"color.recent_help": "Ovdje se pojavljuju boje koje odaberete u bilo kojem polju za boju",
|
||||
"color.red": "Crvena",
|
||||
"color.saturation": "Zasićenost (postotak)",
|
||||
"color.saturation_value": "Zasićenost i vrijednost",
|
||||
"color.selected": "Odabrana boja",
|
||||
"color.step_down": "Smanji za korak",
|
||||
"color.step_up": "Povećaj za korak",
|
||||
"color.value": "Vrijednost, svjetlina (postotak)",
|
||||
"config.column_filter_empty": "Nema odgovarajućih stupaca",
|
||||
"config.rule_parameter_columns": "Navedeni su samo parametri koji imaju stupac u tablici. Dodajte stupac pomoću Dodaj stupac (+) kako biste parametar mogli upotrijebiti ovdje.",
|
||||
"config.rule_suppression_columns": "Navedene su samo značajke koje imaju stupac Potisni u tablici. Dodajte stupac pomoću Dodaj stupac (+) kako biste ovdje mogli upravljati značajkom.",
|
||||
"contact.components_count": "Komponente: {count}",
|
||||
"contact.enabled_label": "omogućeno",
|
||||
"coupling.gear_1": "Zupčanik 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Kota: {name}",
|
||||
"dialog.edit_title": "UREDI {title}",
|
||||
"dialog.no_shown_body": "Nema prikazanog tijela za promjenu: prikažite jedno ili odaberite Novo tijelo",
|
||||
"dialog.pattern_sketch_not_object": "Odaberite tijela ili značajke: skica nije ni jedno ni drugo. Ponovite njezine krivulje pomoću alata Niz ili Zrcali u samoj skici ili je najprije ekstrudirajte.",
|
||||
"dialog.select": "↖ Odaberi",
|
||||
"dialog.selected_count": "↖ Odabrano: {count}",
|
||||
"dialog.selection_constraint": "Ograničenje {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · krivulja {id}",
|
||||
"dialog.selection_guidance": "Odaberite ulaz kako biste ga promijenili. Kliknite odabrane objekte kako biste ih uklonili; Ctrl/Cmd-klik ih također uključuje i isključuje. Pogledajte pretpregled, a zatim pritisnite U redu.",
|
||||
"dialog.selection_midpoint": "Središnja točka · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} od {total}: Odaberite {input}",
|
||||
"dialog.step": "Korak",
|
||||
"document.changed_on_disk": "{name} je promijenjen na disku",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Izrađuje pomoćnu os kroz dvije točke, vrhove ili točke skice. Upotrijebite je za os koja prolazi između dvaju poznatih položaja.",
|
||||
"help.construct.plane.along_path": "Izrađuje pomoćnu ravninu okomitu na brid ili krivulju, na položaju duž njih. Upotrijebite je za skiciranje profila za povlačenje ili presjeka putanje.",
|
||||
"help.construct.plane.at_angle": "Izrađuje pomoćnu ravninu zakrenutu za kut u odnosu na ravninu ili lice, oko osi ili brida. Upotrijebite je za nagnute skice, primjerice kutnog nosača.",
|
||||
"help.construct.plane.axis_point": "Izrađuje pomoćnu ravninu koja sadrži os i točku izvan te osi. Odaberite os ishodišta ili pomoćnu os, ravni brid ili liniju skice, pa vrh, točku skice ili pomoćnu točku. Točka na osi ne može odrediti jedinstvenu ravninu.",
|
||||
"help.construct.plane.midplane": "Izrađuje pomoćnu ravninu na pola puta između dviju ravnina ili ravnih lica, ili ravninu koja raspolavlja kut kad se one sijeku pod kutom. Upotrijebite je kao ravninu simetrije za zrcaljenje.",
|
||||
"help.construct.plane.offset": "Izrađuje pomoćnu ravninu paralelnu s ravninom ili ravnim licem, na određenoj udaljenosti ili kroz točku. Upotrijebite je za skiciranje na zadanoj visini iznad lica.",
|
||||
"help.construct.plane.perpendicular": "Izrađuje pomoćnu ravninu koja sadrži liniju ili brid i okomita je na ravninu ili lice. Upotrijebite je za skiciranje uspravno na modelu duž brida.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Provjerite vrstu spoja (npr. Kruti), učvršćenje, granice spoja i vrijednosti kojima upravljaju parametri.",
|
||||
"joint_move.blocked_title": "Ovaj dio nije moguće pomaknuti",
|
||||
"joint_move.coarse": "Korak rotacije blizu osi (°)",
|
||||
"joint_move.conflict": "Jedan spoj ovog dijela u sukobu je s ostalima: {joint}.",
|
||||
"joint_move.conflict_hint": "Uredite, potisnite ili izbrišite spoj koji je u sukobu kako bi ostali spojevi mogli postaviti dio.",
|
||||
"joint_move.distance": "Udaljenost od početka",
|
||||
"joint_move.done": "Gotovo",
|
||||
"joint_move.fine": "Korak rotacije daleko od osi (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Staza {number}",
|
||||
"nav.alias.help": "Shift+Alt+povlačenje lijevom tipkom orbitira, Shift+Alt+srednjom pomiče, Shift+Alt+desnom zumira; povlačenje srednjom tipkom također pomiče, a desnom orbitira",
|
||||
"nav.blender.help": "Povlačenje srednjom tipkom orbitira, Shift+srednja pomiče, Ctrl+srednja zumira; povlačenje desnom tipkom ne dira kameru",
|
||||
"nav.creo.help": "Povlačenje srednjom tipkom orbitira, Shift+srednja pomiče, Ctrl+srednja uz okomito povlačenje zumira (prema dolje za približavanje); kotačić također zumira",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Miš i 3D miš rotiraju kroz oba pola i čuvaju nagib. Privlačenje osi tipkom Shift isključeno je.",
|
||||
"nav.free_orbit.label": "Slobodno orbitiranje",
|
||||
"nav.free_orbit.snap_help": "Miš i 3D miš rotiraju kroz oba pola i čuvaju nagib. Držite Shift tijekom povlačenja za orbitiranje kako biste privukli smjer pogleda i nagib.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+povlačenje lijevom tipkom pomiče, Shift+Alt+lijeva tipka zumira, Ctrl+povlačenje lijevom tipkom na praznom prostoru orbitira",
|
||||
"nav.inventor.help": "Povlačenje srednjom tipkom pomiče, Shift+srednja orbitira, Ctrl+srednja zumira, povlačenje desnom orbitira",
|
||||
"nav.maya.help": "Alt+povlačenje lijevom tipkom orbitira, Alt+srednja tipka pomiče, Alt+desna tipka zumira; povlačenje srednjom tipkom također pomiče",
|
||||
"nav.nx.help": "Povlačenje srednjom tipkom orbitira, Shift+srednja pomiče (u NX-u srednja + desna), Ctrl+srednja zumira (u NX-u srednja + lijeva); povlačenje desnom tipkom ne dira kameru",
|
||||
"nav.openscad.help": "Povlačenje lijevom tipkom po praznom prostoru orbitira, Shift+povlačenje lijevom odabire okvirom, povlačenje geometrije skice uređuje je; povlačenje desnom ili srednjom tipkom pomiče, Shift+desna ili Shift+srednja zumira",
|
||||
"nav.perspective.sketch": "Uređivanje skice koristi ortografski prikaz. Završite skicu kako biste prešli na perspektivu.",
|
||||
"nav.right_drag_orbits.help": "Isključeno: povlačenje desnom tipkom ne dira kameru, a desna tipka samo otvara kontekstni izbornik. Odabir mapiranja miša SolidWorks isključuje ovu opciju.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Vijak s poluokruglom glavom i unutarnjim šesterokutom",
|
||||
"parts.family.dowel_pin": "Cilindrični zatik",
|
||||
"parts.family.hex_bolt": "Vijak sa šesterokutnom glavom",
|
||||
"parts.family.hex_cap_screw_inch": "Vijak sa šesterokutnom glavom (inč)",
|
||||
"parts.family.hex_nut": "Šesterokutna matica",
|
||||
"parts.family.hex_nut_inch": "Šesterokutna matica (inč)",
|
||||
"parts.family.set_screw": "Bezglavi vijak s unutarnjim šesterokutom, ravni vrh",
|
||||
"parts.family.socket_head_cap_screw": "Vijak s cilindričnom glavom i unutarnjim šesterokutom",
|
||||
"parts.family.washer": "Obična podloška",
|
||||
"parts.family.washer_sae": "Obična podloška, SAE (uska)",
|
||||
"parts.family.washer_uss": "Obična podloška, USS (široka)",
|
||||
"parts.holes": "Provrti (neobavezno)",
|
||||
"parts.placement_hint": "odaberite jedan ili više provrta kako biste u svaki smjestili dio, ili U redu postavlja dio u ishodište",
|
||||
"parts.system": "Sustav jedinica",
|
||||
"parts.system.inch": "Inčni",
|
||||
"parts.system.metric": "Metrički",
|
||||
"pattern.alignment_2": "Poravnanje 2",
|
||||
"pattern.alignment_hint": "Broj uključuje izvornik. Središte ravnomjerno raspoređuje kopije; Obrni bira dodatnu stranu za parne ukupne brojeve.",
|
||||
"pattern.direction_1": "Smjer 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Povlačenje lijevom tipkom",
|
||||
"prefs.button_middle": "Povlačenje srednjom tipkom",
|
||||
"prefs.button_right": "Povlačenje desnom tipkom",
|
||||
"prefs.carousel_next": "Sljedeće",
|
||||
"prefs.carousel_previous": "Prethodno",
|
||||
"prefs.choose_font": "Odaberi datoteku fonta…",
|
||||
"prefs.click": "Klik",
|
||||
"prefs.contact_shading": "Meko sjenčanje dodira",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Zakrivljene plohe",
|
||||
"prefs.curves": "Zakrivljene plohe",
|
||||
"prefs.cut_preview_tint": "Prikaži uklonjeni materijal u crvenoj boji",
|
||||
"prefs.cut_preview_tint_help": "Pregled ispunjava materijal koji značajka uklanja i oblik koji zamjenjuje crvenom prozirnom sjenom. Kada je isključeno, te su ispune potpuno prozirne i crtaju se samo njihovi obrisi.",
|
||||
"prefs.dark_parts_shading": "Zadrži oblik tamnih dijelova",
|
||||
"prefs.dark_parts_shading_help": "Sjenča prikaz u linearnom svjetlu uz meko dopunsko svjetlo neba, tako da tamna lica zadrže gradijent umjesto da pocrne",
|
||||
"prefs.dead_zone_note": "Šrafirana traka je mrtva zona: kretanje unutar nje se zanemaruje.",
|
||||
"prefs.default": "zadano",
|
||||
"prefs.design": "Zadane postavke dizajna",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Bridovi i sjenčanje",
|
||||
"prefs.extend": "Produži",
|
||||
"prefs.extra_navigation": "Ctrl + povlačenje lijevom tipkom po praznom prostoru orbitira; držite razmaknicu za pomicanje.",
|
||||
"prefs.extrude_view_isometric": "Okreni prikaz u izometrijski kad se otvori Ekstrudiraj",
|
||||
"prefs.extrude_view_return": "Vrati se na prethodni prikaz kad se Ekstrudiraj zatvori",
|
||||
"prefs.follows_os": "Prati operacijski sustav",
|
||||
"prefs.font": "Font",
|
||||
"prefs.font_fallback": "Znakovi koji nedostaju odabranom fontu prikazuju se ugrađenim fontom, tako da nijedna oznaka ne prikazuje prazan kvadrat.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automatski",
|
||||
"prefs.graphics_card_missing": "Spremljena grafička kartica nije dostupna; koristi se Automatski.",
|
||||
"prefs.graphics_card_restart": "Stupa na snagu nakon ponovnog pokretanja SolidCrafta. WGPU_ADAPTER_NAME ima prednost nad ovim odabirom.",
|
||||
"prefs.graphics_card_unused": "Spremljena grafička kartica nije korištena za ovaj prozor; kartica koja se koristi prikazana je u Pomoć › O programu i u statusnoj traci. Pokušajte s opcijom Automatski ili postavite WGPU_ADAPTER_NAME na jedinstveni dio naziva kartice.",
|
||||
"prefs.graphics_note": "Žrtvujte brzinu za glatkoću. Svaki odabir pokazuje svoj učinak na primjeru.",
|
||||
"prefs.graphics_presets_note": "Unaprijed zadane vrijednosti postavljaju sve odabire ispod odjednom.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Sakrij simbole ograničenja kada je prikaz umanjen",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Kad je Skice postavljeno na Ispod svoje značajke, vremenska traka lijevo prikazuje svaku skicu jednu razinu uvučeno, ispod prve značajke izrađene iz nje, kad god je dovoljno široka za nazive. Vremenska traka na dnu uvijek zadržava redoslijed nastanka.",
|
||||
"prefs.history_sketches_under_feature": "Ispod svoje značajke",
|
||||
"prefs.hold_stop_snapping": "Držite kako biste isključili privlačenje",
|
||||
"prefs.home_fit_size": "Veličina za Početni prikaz i Uklopi",
|
||||
"prefs.home_fit_size_note": "Koliki dio prikaza model ispunjava kad ga uokviri Početni prikaz, Uklopi, otvaranje dizajna ili promjena prikaza u navigatoru, bez obzira na to je li postavka ispod uključena. 100 %: ispunjava prikaz između panela, kompasa i navigacijske trake.",
|
||||
"prefs.icons_only": "Samo ikone",
|
||||
"prefs.imported_file": "Uvezena datoteka",
|
||||
"prefs.in_browser": "U stablu modela",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Jezik sučelja",
|
||||
"prefs.interface_note": "Kako SolidCraft izgleda i gdje su njegovi dijelovi.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Obrni zakrivljene strelice za valjanje",
|
||||
"prefs.invert_curved_roll_arrows_note": "Dvije zakrivljene strelice u kutu kocke valjaju prikaz unutar ravnine zaslona. Uključeno: strelica u smjeru kazaljke na satu valja prikaz suprotno od smjera kazaljke na satu, a strelica suprotno od smjera kazaljke na satu valja ga u smjeru kazaljke na satu. Isključeno: svaka strelica valja prikaz onako kako je zakrivljena.",
|
||||
"prefs.invert_navigator_arrows": "Obrni strelice za rotaciju kocke prikaza",
|
||||
"prefs.invert_navigator_arrows_note": "Strelice oko kocke orbitiraju kameru u smjeru u kojem pokazuju, kao u programima Fusion i Inventor: strelica s lijeve strane pokazuje udesno i zakreće kameru udesno. Isključeno: strelica okreće kocku prema strani na kojoj se nalazi, pa lijeva strelica zakreće kameru ulijevo. Postavka ne utječe na zakrivljene strelice za valjanje.",
|
||||
"prefs.keep_work_on_tab_switch": "Zadrži dijaloge i alate otvorenima pri prebacivanju između dizajna",
|
||||
"prefs.keep_work_on_tab_switch_note": "Svaka kartica dizajna zadržava svoj otvoreni dijalog ili alat, s onim što ste u njemu odabrali i upisali, te svoju karticu alatne trake. Kad se vratite na dizajn, ponovno su tu. Isključeno: prebacivanje između dizajna poništava ih i prikazuje karticu Model.",
|
||||
"prefs.labels": "Oznake",
|
||||
"prefs.language_system": "Sustav",
|
||||
"prefs.layout": "Raspored",
|
||||
"prefs.layout_note": "Kompaktno pričvršćuje panele uz rubove prozora. Prozirnost stabla modela dostupna je u opciji Plutajuće. Stranu Asistenta promijenite na stranici Asistent.",
|
||||
"prefs.left": "Lijevo",
|
||||
"prefs.left_click": "Lijevi klik",
|
||||
"prefs.line_drag_draws_one": "Pritisak i povlačenje crta jednu liniju",
|
||||
"prefs.line_drag_draws_one_note": "U alatu Linija pritisak, povlačenje i otpuštanje crta jednu liniju od mjesta pritiska do mjesta otpuštanja i ondje završava. Klikovi i dalje crtaju lanac. Isključeno: povlačenje postavlja točku ondje gdje se otpusti, kao i klik.",
|
||||
"prefs.line_hover_tangent_arc": "Zadržite pokazivač na posljednjoj točki linije kako biste prešli na tangentni luk",
|
||||
"prefs.line_hover_tangent_arc_note": "U alatu Linija, nakon što je nacrtan segment, odmaknite pokazivač od posljednje točke lanca, vratite ga na nju i držite ga mirno: sljedeći klik završava tangentni luk, a isti pokret vraća na linije. Isključeno: zadržavanje na toj točki ne radi ništa.",
|
||||
"prefs.linked_designs": "Povezani dizajni",
|
||||
"prefs.live_input": "Ulaz uživo",
|
||||
"prefs.live_preview": "Pregled uživo",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Mapiranje miša",
|
||||
"prefs.navigation": "Navigacija",
|
||||
"prefs.navigation_note": "Kako miš, dodirna pločica i 3D miš pomiču prikaz.",
|
||||
"prefs.navigator_fit": "Uklopi model nakon promjene prikaza u navigatoru",
|
||||
"prefs.navigator_fit_note": "Lice, kut ili strelica kocke prikaza, odnosno os orijentacijskog gizma, također usmjerava pogled na sredinu modela s jedne udaljenosti na kojoj se uklapa iz svakog smjera (njegova granična sfera). Početni prikaz koristi isti zum i središte dok je ova opcija uključena, pa se prikazi koje odaberete poslije njega samo okreću. Isključeno: prikaz se okreće na mjestu i zadržava svoj cilj i zum.",
|
||||
"prefs.network_host_remove": "Ukloni",
|
||||
"prefs.network_locations": "Dopusti mrežne lokacije u dizajnima",
|
||||
"prefs.network_locations_note": "Isključeno: povezane datoteke dizajna na drugom računalu (\\\\server\\share) otvaraju se samo s poslužitelja navedenih ovdje ili nakon što ga dopustite kad se to zatraži.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Postavljanje",
|
||||
"prefs.prefer_free_sketch_points": "Daj prednost pomičnim točkama skice kad se točke preklapaju",
|
||||
"prefs.preview_choices": "Pregled vaših odabira",
|
||||
"prefs.preview_tint_new_faces": "Oboji novu plohu u pregledu",
|
||||
"prefs.preview_tint_new_faces_help": "Pregled značajke koja mijenja tijelo može nacrtati plohu koju dodaje u boji pregleda. Kada je isključeno, tijelo se crta kakvo jest.",
|
||||
"prefs.print_face_highlight": "Isticanje plohe ispisa",
|
||||
"prefs.print_face_highlight_tip": "Koliko se jako ploha ispisa tijela boji i obrubljuje u prikazu. 0 % ne prikazuje isticanje.",
|
||||
"prefs.profile_active": "Aktivni profil",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Koristi prethodni proračun geometrije za pregled renderiranja",
|
||||
"prefs.render_previous_geometry_budget_help": "Vrati prethodnu fiksnu granicu geometrije (512 MiB na 64-bitnom desktopu, 128 MiB drugdje) umjesto proračuna prema uređaju.",
|
||||
"prefs.reports_saved": "Spremljeno: {n}",
|
||||
"prefs.ribbon_click_ends_tool": "Klik na gumb aktivnog alata završava ga",
|
||||
"prefs.ribbon_click_ends_tool_note": "Klik na istaknuti gumb na vrpci alata za skiciranje koji je u uporabi završava taj alat, pa klikovi u prikazu ponovno služe za odabir. Isključeno: klik ponovno pokreće alat.",
|
||||
"prefs.ribbon_reveal": "Prikaži rezultate pretraživanja na vrpci",
|
||||
"prefs.ribbon_reveal_note": "Zadržavanje pokazivača iznad rezultata u Pretraži naredbe pokazuje gdje se naredba nalazi na vrpci: njezinu karticu, gumb ili redak u padajućem izborniku panela. Naredba pokrenuta iz pretraživanja ondje zatreperi, a pokrenuta naredba iz padajućeg izbornika označava svoj panel.",
|
||||
"prefs.right_click": "Desni klik",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Vrati se na prethodni prikaz",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Vrati se osim ako je rotirano",
|
||||
"prefs.sketch_exit_view_note": "Kamo prikaz ide nakon Završi skicu, Odustani ili dvostrukog Esc.",
|
||||
"prefs.sketch_face_activates_part": "Skiciranje na licu dijela čini taj dio aktivnim",
|
||||
"prefs.sketch_face_activates_part_note": "Skica započeta na licu tijela druge komponente najprije aktivira tu komponentu, pa skica pripada njoj i u stablu modela ostaje uz taj dio. Taj dio nakon toga ostaje aktivan. Isključeno: skica pripada aktivnoj komponenti.",
|
||||
"prefs.sketch_open_look_at": "Okreni kameru prema skici pri otvaranju",
|
||||
"prefs.sketch_open_look_at_note": "Isključeno: kad izradite ili uredite skicu, prikaz ostaje onakav kakav jest. Pogledaj okreće prikaz prema skici kad to želite.",
|
||||
"prefs.sketch_recent_snap": "Automatski privlači na nedavna središta i središnje točke",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Pogreška",
|
||||
"prefs.status_selected": "Odabrano",
|
||||
"prefs.status_warning": "Upozorenje",
|
||||
"prefs.structure.appearance": "Izgled",
|
||||
"prefs.structure.appearance_note": "Boje, tekst i pristupačnost.",
|
||||
"prefs.structure.in_profile": "U profilu",
|
||||
"prefs.structure.layout": "Raspored",
|
||||
"prefs.structure.layout_note": "Gdje se nalaze dijelovi prozora.",
|
||||
"prefs.structure.look": "Vizualno",
|
||||
"prefs.structure.measure_pointer": "Mjerenje i pokazivač",
|
||||
"prefs.structure.mouse3d": "3D miš",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse i SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Miš i dodirna pločica. 3D miš ima vlastitu stranicu.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Promijenjeno otkako je spremljeno",
|
||||
"prefs.structure.profile_hover": "Spremljeno u profilima postavki",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Skica",
|
||||
"prefs.structure.tools": "Alati",
|
||||
"prefs.structure.tools_note": "Kako se ponašaju alati za modeliranje.",
|
||||
"prefs.structure.work": "Rad",
|
||||
"prefs.supersampling_brief": "Iscrtava prikaz većim i smanjuje ga filtriranjem: vrlo oštro i zahtjevnije.",
|
||||
"prefs.tab_accent_note": "Naglasna boja prati aktivnu karticu",
|
||||
"prefs.theme_file": "datoteka teme",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Osnovna boja · sRGB",
|
||||
"render.base_metallic": "Metalni udio",
|
||||
"render.base_opaque_only": "Ovaj uređivač čuva semantiku neprozirnih tijela. Za optičko propuštanje upotrijebite izričite kontrole stakla.",
|
||||
"render.batch_all_shots": "Svi kadrovi ({count})",
|
||||
"render.batch_empty": "Spremite kadar prije renderiranja svih kadrova.",
|
||||
"render.batch_limit": "Renderiranje svih kadrova ograničeno je na 32 kadra.",
|
||||
"render.batch_status": "U tijeku: {running} · Na čekanju: {waiting}",
|
||||
"render.bloom_enable": "Sjaj prikaza",
|
||||
"render.bloom_help": "Kreativni sjaj samo na izlazu iz pozitivnih linearnih svijetlih dijelova, raširen kroz tri normalizirana prolaza kutijastog filtra. Polumjer je u pikselima izlaza. Dodaje se u linearnoj svjetlosti prikaza prije sRGB-a; nije objektiv, volumetrijski efekt niti poboljšanje konvergencije. Sirovi EXR ostaje nepromijenjen.",
|
||||
"render.bloom_opaque": "Sjaj zahtijeva neprozirni izlaz. Prozirni PNG odbija se, a ne spljoštava tiho.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Najprije odaberite izgled u Izgledima",
|
||||
"render.chromatic_offset": "Kromatski pomak rubova",
|
||||
"render.clear_stage": "Ukloni spremljenu scenu",
|
||||
"render.compare_divider": "Razdjelnik usporedbe",
|
||||
"render.compare_live": "Uživo",
|
||||
"render.compare_live_preview": "Pregled uživo",
|
||||
"render.compare_render": "Renderiranje {number}",
|
||||
"render.compare_side": "Renderiranje {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · zabilježeno u reviziji {revision}",
|
||||
"render.compare_swap": "Zamijeni strane",
|
||||
"render.copy_request": "Kopiraj JSON",
|
||||
"render.cpu_aa_help": "Prostorni uzorci: više uzoraka poboljšava rubove i produljuje renderiranje.",
|
||||
"render.cpu_area_add": "Dodaj pravokutno CPU svjetlo",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Prikazuje se posljednja dovršena slika; novije renderiranje još je nije zamijenilo.",
|
||||
"render.result_sequence": "Kontrolna točka",
|
||||
"render.result_title": "Rezultat renderiranja",
|
||||
"render.results_choose": "Zadržani rezultati",
|
||||
"render.results_label": "Renderiranje {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [zastarjelo]",
|
||||
"render.results_unnamed": "Slika",
|
||||
"render.return_design": "Natrag na Dizajn",
|
||||
"render.review_stale": "Ovaj pregled je zastario. Riješite ga ili ponovno provjerite prije primjene.",
|
||||
"render.ribbon_aging": "Starenje",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Počnite znakom = kako biste riječi izgradili iz parametara: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Kurziv",
|
||||
"sketch_text.loading_fonts": "Traženje instaliranih fontova…",
|
||||
"sketch_text.no_bold": "Ugrađeni font nema podebljanu varijantu: odaberite instalirani font",
|
||||
"sketch_text.on_path": "Tekst prati svoju putanju: krivulja ga postavlja",
|
||||
"sketch_text.path_clear": "Skini tekst s njegove krivulje",
|
||||
"sketch_text.path_hint": "Krivulja skice koju tekst prati: kliknite ovdje, a zatim krivulju",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "oba ishodišta nalaze se na istoj komponenti",
|
||||
"thread.automatic_size": "Automatska veličina",
|
||||
"thread.designation": "Oznaka",
|
||||
"thread.direction": "Smjer navoja",
|
||||
"thread.iso_metric": "ISO metrički",
|
||||
"thread.left_hand": "Lijevi",
|
||||
"thread.right_hand": "Desni",
|
||||
"thread.select_size": "Odaberite veličinu",
|
||||
"timeline.delete_after_marker_one": "Izbriši 1 značajku nakon oznake vraćanja",
|
||||
"timeline.delete_after_marker_other": "Izbriši značajke nakon oznake vraćanja: {count}",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Pokrenite ovo u terminalu, a zatim pritisnite Poveži ponovno:",
|
||||
"ui.agent_chat_auth_title": "Prijavi se kod agenta",
|
||||
"ui.agent_chat_cancel": "Odustani",
|
||||
"ui.agent_chat_cancel_timeout": "Agent nije odgovorio na Zaustavi pa je veza s njim prekinuta. Ponovno se povežite kako biste nastavili.",
|
||||
"ui.agent_chat_cannot_start": "Instalirano, ali se ne pokreće: {error}",
|
||||
"ui.agent_chat_changes": "Promjene: {n}, jedan korak poništavanja",
|
||||
"ui.agent_chat_changes_n": "Promjene: {n}",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Naredba agenta",
|
||||
"ui.agent_chat_connect": "Poveži",
|
||||
"ui.agent_chat_copy": "Kopiraj",
|
||||
"ui.agent_chat_copy_message": "Kopiraj poruku",
|
||||
"ui.agent_chat_ctx_bodies": "Tijela",
|
||||
"ui.agent_chat_ctx_elements": "Elementi",
|
||||
"ui.agent_chat_ctx_features": "Značajke",
|
||||
"ui.agent_chat_ctx_more": "+još {n}",
|
||||
"ui.agent_chat_ctx_other": "Ostalo",
|
||||
"ui.agent_chat_custom_heading": "Prilagođeni model",
|
||||
"ui.agent_chat_custom_hint": "Bilo koji program koji govori Agent Client Protocol na stdin i stdout. Ne pokreće ga nikakva ljuska.",
|
||||
"ui.agent_chat_denied": "Odbijeno",
|
||||
"ui.agent_chat_deny": "Odbij",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Sve",
|
||||
"ui.agent_chat_mode_ask": "Pitaj",
|
||||
"ui.agent_chat_mode_edits": "Izmjene",
|
||||
"ui.agent_chat_model_custom": "Koristi prilagođeni: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} ne može koristiti SolidCraft alate, pa može samo razgovarati. Odaberite model s podrškom za alate.",
|
||||
"ui.agent_chat_model_rejected": "Agent nije prihvatio model {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Pretraži modele…",
|
||||
"ui.agent_chat_model_tip": "Model koji agent koristi. Vaš odabir pamti se za ovog agenta.",
|
||||
"ui.agent_chat_models_failed": "Popis modela nije moguće učitati: {error}",
|
||||
"ui.agent_chat_models_heading": "Dostupni modeli",
|
||||
"ui.agent_chat_models_listing": "Učitavanje popisa modela…",
|
||||
"ui.agent_chat_models_none": "Krajnja točka ne navodi nijedan model",
|
||||
"ui.agent_chat_models_not_a_list": "Odgovor nije popis modela",
|
||||
"ui.agent_chat_new": "Novi razgovor",
|
||||
"ui.agent_chat_new_confirm": "Započeti novi razgovor? Trenutni će biti obrisan.",
|
||||
"ui.agent_chat_next_picture": "Sljedeća slika",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Dopuštenja",
|
||||
"ui.ai_preset": "Unaprijed zadano",
|
||||
"ui.ai_protocol": "Protokol",
|
||||
"ui.ai_reasoning_effort": "Razina zaključivanja",
|
||||
"ui.ai_reasoning_effort_field_hint": "prazno = zadana vrijednost pružatelja",
|
||||
"ui.ai_reasoning_effort_hint": "Neobavezno. Šalje se krajnjoj točki kao `reasoning_effort`; prihvaćene vrijednosti razlikuju se od pružatelja do pružatelja (na primjer `low`, `high` ili `max`). SolidCraft nikad ne mijenja vrijednost koju ovdje postavite. Ostavite prazno da se ništa ne šalje i da se zadrži zadana vrijednost pružatelja.",
|
||||
"ui.ai_remove": "Ukloni",
|
||||
"ui.ai_request_timed_out": "Model je trajao dulje od {seconds} s. Vremensko ograničenje zahtjeva za ovu krajnju točku možete povećati u Postavke › Asistent.",
|
||||
"ui.ai_request_timeout": "Vremensko ograničenje zahtjeva",
|
||||
@@ -4474,11 +4348,9 @@
|
||||
"ui.construction.contact_hint": "Tangenta: odaberite kružnicu/luk ili otvoreni spline/koniku, pa točku dodira (krivulje slobodnog oblika: krajnje točke)",
|
||||
"ui.construction.external_hint": "Tangenta: odaberite kružnicu ili luk, vanjsku točku, pa željeno rješenje",
|
||||
"ui.construction.free_hint": "Pomoćni pravac: kliknite dvije točke; desnim klikom počnite ispočetka",
|
||||
"ui.construction.normal_needs_length": "Beskonačna linija uvijek je pomoćna: upišite duljinu kako biste nacrtali običnu liniju",
|
||||
"ui.construction.point_hint": "Pomoćni pravac: kliknite točku kroz koju prolazi",
|
||||
"ui.construction.reference_hint": "Pomoćni pravac: odaberite ravnu liniju, pa točku; desnim klikom promijenite referencu",
|
||||
"ui.construction.ribbon_label": "Pomoćne",
|
||||
"ui.construction.side_hint": "Pomoćni pravac: kliknite stranu prema kojoj pravac ide; desnim klikom počnite ispočetka",
|
||||
"ui.context_menu": "Kontekstni izbornik",
|
||||
"ui.continuity_g0": "G0 pregib",
|
||||
"ui.continuity_g1": "G1 tangentno",
|
||||
@@ -4506,7 +4378,6 @@
|
||||
"ui.dark": "Tamna",
|
||||
"ui.default_modelling_orientation": "Zadana orijentacija modeliranja",
|
||||
"ui.delete": "Izbriši",
|
||||
"ui.delete_select_first": "Najprije odaberite što želite izbrisati: značajke, tijela, komponente ili geometriju skice",
|
||||
"ui.depth": "Dubina",
|
||||
"ui.design": "Dizajn",
|
||||
"ui.design_properties.author": "Autor",
|
||||
@@ -4599,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Dio je spremljen u drugu datoteku; sklop i dalje povezuje {name}",
|
||||
"ui.edit_in_place_wait": "Pričekajte da završi ono što se izvodi u dizajnu",
|
||||
"ui.edit_section_analysis": "Uredi analizu presjeka",
|
||||
"ui.edit_sketch_empty": "Nema skica za uređivanje",
|
||||
"ui.ellipse": "Elipsa",
|
||||
"ui.emboss_wrap_note": "Ortogonalni linijski profili tangentni na jedan podržani valjak automatski se omataju. Odaberite stijenku kako biste odabrali cilj.",
|
||||
"ui.end_radius": "Krajnji polumjer",
|
||||
@@ -4610,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Eksplicitni",
|
||||
"ui.equation_form": "Oblik",
|
||||
"ui.equation_note": "Varijabla je običan broj: sin(t) je uzima u radijanima. Rezultat bez jedinice izražen je u jedinici dizajna.",
|
||||
"ui.equation_note_range": "Varijabla je duljina, kao i njezin raspon: kombinirajte je s parametrima duljine, a za sin() je podijelite duljinom. Rezultat bez jedinice izražen je u jedinici dizajna.",
|
||||
"ui.equation_parametric": "Parametarski",
|
||||
"ui.equation_variable_unit": "Varijabla ima jedinicu raspona",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4744,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Sakrij ishodište",
|
||||
"ui.hidePlanes": "Sakrij ravnine",
|
||||
"ui.hideProfile": "Sakrij profil",
|
||||
"ui.hide_component_history": "Sakrij njezinu vremensku traku",
|
||||
"ui.hide_origin_by_default": "Zadano sakrij ishodište",
|
||||
"ui.hide_origin_note": "Novi dizajni počinju sa skrivenom mapom Ishodište. Dizajn zadržava vlastitu postavku Ishodišta kad ga prikažete ili sakrijete.",
|
||||
"ui.history_back": "Idi korak natrag",
|
||||
@@ -4752,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "dvaput kliknite brid",
|
||||
"ui.history_first": "Idi na početak",
|
||||
"ui.history_forward": "Idi korak naprijed",
|
||||
"ui.history_hide_hidden": "Sakrij skrivene komponente",
|
||||
"ui.history_hide_names": "Sakrij nazive",
|
||||
"ui.history_last": "Idi na kraj",
|
||||
"ui.history_marker_tip": "Oznaka vraćanja: povucite kako biste vratili model unatrag; nove značajke dolaze ovdje",
|
||||
@@ -4762,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Prikaži tipku za reprodukciju",
|
||||
"ui.history_play_finish_action": "Završite trenutnu radnju prije reprodukcije vremenske trake",
|
||||
"ui.history_play_roll_back": "Pomaknite oznaku vraćanja unatrag prije reprodukcije",
|
||||
"ui.history_show_hidden": "Prikaži skrivene komponente",
|
||||
"ui.history_show_names": "Prikaži nazive",
|
||||
"ui.history_sketch_listed_under": "Navedeno ispod {feature}",
|
||||
"ui.history_title": "Vremenska traka",
|
||||
"ui.history_toggle_names": "Prikaži ili sakrij nazive značajki",
|
||||
"ui.history_waits_for_editor": "Poništi, Ponovi i vremenska traka čekaju dok se ne otvori uređivač značajke",
|
||||
"ui.hole": "Provrt",
|
||||
"ui.hole_tap_type": "Vrsta navoja provrta",
|
||||
"ui.hole_type": "Vrsta provrta",
|
||||
@@ -4783,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} ima nespremljene promjene, pa je umetnuta njegova spremljena datoteka. Spremite ga, a zatim pokrenite Ažuriraj veze kako biste unijeli promjene.",
|
||||
"ui.insert_design.unsaved": "Nespremljene promjene",
|
||||
"ui.inspect": "Pregledaj",
|
||||
"ui.instances": "Instance",
|
||||
"ui.intersect": "Presjek",
|
||||
"ui.isolate": "Izoliraj",
|
||||
"ui.join": "Spoji",
|
||||
@@ -4792,14 +4655,12 @@
|
||||
"ui.joints": "Spojevi",
|
||||
"ui.keyboard_shortcuts": "Tipkovnički prečaci",
|
||||
"ui.language": "Jezik",
|
||||
"ui.lasso_select": "Laso (povucite petlju slobodnom rukom: obuhvaća sve što je u cijelosti unutra)",
|
||||
"ui.layout_compact": "Kompaktno",
|
||||
"ui.layout_floating": "Plutajuće",
|
||||
"ui.length": "Duljina",
|
||||
"ui.length_decimals": "Decimale duljine",
|
||||
"ui.light": "Svijetla",
|
||||
"ui.line": "Linija",
|
||||
"ui.line_arc_hint": "Tangentni luk: kliknite kraj luka. Ponovno se zadržite na posljednjoj točki za linije; desni klik ili Esc za završetak",
|
||||
"ui.link_copies": "Poveži identične kopije",
|
||||
"ui.link_copies_keep": "Zadrži",
|
||||
"ui.link_copies_link": "Poveži",
|
||||
@@ -4888,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Ponovno gradi dio, zamjenjujući sve dodane značajke. Svi primjerci ove komponente ažuriraju se.",
|
||||
"ui.paste": "Zalijepi",
|
||||
"ui.path": "Putanja",
|
||||
"ui.pattern_object_type_tip": "Tijela: puni oblici, odabiru se u prikazu ili u stablu modela; svako se kopira u cijelosti.\nZnačajke: koraci vremenske trake, poput ekstruzije ili provrta, odabiru se na vremenskoj traci ili na licu koje su izradili; korak se ponavlja.\nSkica nije ni jedno ni drugo: ponovite njezine krivulje pomoću alata Niz ili Zrcali u samoj skici ili je najprije ekstrudirajte.",
|
||||
"ui.pattern_on_path": "Niz duž putanje",
|
||||
"ui.perforate_margin_default": "iz promjera",
|
||||
"ui.perforate_pitch": "Korak",
|
||||
@@ -4934,9 +4794,9 @@
|
||||
"ui.polygon": "Mnogokut",
|
||||
"ui.preferences": "Postavke",
|
||||
"ui.press_a_key": "pritisnite tipku…",
|
||||
"ui.print_face_body_not_sent": "Tijelo te plohe ne šalje se: najprije ga dodajte u Tijela",
|
||||
"ui.print_face_cleared": "{body}: ploha ispisa uklonjena",
|
||||
"ui.print_face_input": "Ploha ispisa",
|
||||
"ui.print_face_one_body": "Ploha ispisa pripada jednom tijelu: pošaljite to tijelo samo da biste je promijenili",
|
||||
"ui.print_face_pick": "Odaberite ravnu plohu punog tijela da postane ploha ispisa",
|
||||
"ui.print_face_set": "{body}: ploha ispisa postavljena; Pošalji u slicer polaže tijelo na nju",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5048,7 +4908,6 @@
|
||||
"ui.showDimension": "Prikaži kotu",
|
||||
"ui.showOrigin": "Prikaži ishodište",
|
||||
"ui.showPlanes": "Prikaži ravnine",
|
||||
"ui.show_component_history": "Prikaži njezinu vremensku traku",
|
||||
"ui.show_constraints": "Ograničenja",
|
||||
"ui.show_construction_geometries": "Pomoćna geometrija",
|
||||
"ui.show_dimensions": "Kote",
|
||||
@@ -5165,15 +5024,12 @@
|
||||
"ui.view_angles": "Kutovi prikaza",
|
||||
"ui.view_angles_convention": "Stupnjevi oko osi prema gore. Skretanje 0° je Pogled sprijeda, 90° Pogled slijeva, −90° Pogled zdesna, 180° Pogled straga; nagib 90° je Pogled odozgo; pozitivno valjanje okreće model u smjeru kazaljke na satu.",
|
||||
"ui.view_angles_help": "Prikazuje nagib, skretanje i valjanje prikaza u stupnjevima te njegovu projekciju ispod orijentacijskog gizma. Kliknite očitanje kako biste upisali točne kutove.",
|
||||
"ui.view_angles_lock": "Zaključaj {axis}",
|
||||
"ui.view_angles_ortho": "Ortogr.",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Nagib",
|
||||
"ui.view_angles_readout": "Nagib {pitch} · Skretanje {yaw} · Valjanje {roll}",
|
||||
"ui.view_angles_roll": "Valjanje",
|
||||
"ui.view_angles_unlock": "Otključaj {axis}",
|
||||
"ui.view_angles_yaw": "Skretanje",
|
||||
"ui.view_angles_zero": "Postavi {axis} na 0°",
|
||||
"ui.view_centre": "Središte prikaza",
|
||||
"ui.viewport_status_clear": "Isključi {name}",
|
||||
"ui.viewport_status_clear_hint": "Isključi {name} · Esc",
|
||||
@@ -5275,7 +5131,6 @@
|
||||
"web.open_link": "Otvoriti povezani dizajn?",
|
||||
"web.open_link_confirm": "Postoje nespremljene promjene. Otvoriti povezani dizajn u novoj kartici?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ odaberi · Enter / Tab dovrši · Esc odbaci",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ odabir · Enter primjenjuje ovu vrijednost",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ odaberi · Enter primjenjuje ono što ste upisali · Esc odbaci",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter nastavlja na GitHubu."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Téglalap alakú",
|
||||
"Rectangular Tube": "Téglalap alakú cső",
|
||||
"Reference face": "Referencialap",
|
||||
"Reference plane": "Referenciasík",
|
||||
"Relief Depth": "Tehermentesítés mélysége",
|
||||
"Relief Width": "Tehermentesítés szélessége",
|
||||
"Remove Tools": "Szerszámok eltávolítása",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Metszet",
|
||||
"Section (optional)": "Keresztmetszet (nem kötelező)",
|
||||
"Section position": "Szelvény helyzete",
|
||||
"Sections": "Keresztmetszetek",
|
||||
"Sections (one sketch each)": "Keresztmetszetek (egy-egy vázlat)",
|
||||
"Select Other": "Másik kijelölése",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Más kijelölése: tartsa nyomva a bal gombot egy helyen a modellen (vagy jobb kattintás › Más kijelölése…) a kurzor alatti elemek listázásához; kattintson újra ugyanarra a helyre a következő elem kijelöléséhez. A középső gomb dupla kattintása a kezdőnézetre vált (Beállítások › Navigáció).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (rögzítés elveszett)",
|
||||
"browser.sketch_editing": "{name} (szerkesztés alatt)",
|
||||
"browser.sketch_name": "Vázlat{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "már az alkatrészükben vannak",
|
||||
"browser.sketches_to_parts_design_body": "magának a tervnek egy testén vannak",
|
||||
"browser.sketches_to_parts_moved": "{moved} vázlat áthelyezve abba az alkatrészbe, amelyen van",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "pontos rögzítés nélküli lapon vannak",
|
||||
"browser.sketches_to_parts_not_on_face": "nem egy alkatrész lapján vannak",
|
||||
"browser.sketches_to_parts_part_missing": "az alkatrészük már nincs meg",
|
||||
"browser.sketches_to_parts_result": "{moved} vázlat áthelyezve abba az alkatrészbe, amelyen van; {stayed} a helyén maradt: {why}",
|
||||
"browser.units": "Egységek: {units}",
|
||||
"cam.flat": "Sík lap",
|
||||
"cam.follower": "Követő",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Kivonás fájlba",
|
||||
"cmd.component_finish_edit": "Szerkesztés befejezése",
|
||||
"cmd.component_from_bodies": "Komponensek létrehozása testekből",
|
||||
"cmd.component_hide_history": "Komponens előzményeinek elrejtése",
|
||||
"cmd.component_insert_design": "Terv beszúrása",
|
||||
"cmd.component_links": "Kapcsolatok listázása",
|
||||
"cmd.component_list": "Komponensek listázása",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Testek áthelyezése komponensbe",
|
||||
"cmd.component_move_features": "Elemek áthelyezése komponensbe",
|
||||
"cmd.component_move_sketches": "Vázlatok áthelyezése komponensbe",
|
||||
"cmd.component_move_sketches_to_parts": "Vázlatok áthelyezése az alkatrészükbe",
|
||||
"cmd.component_paste_from_design": "Beillesztés másik tervből",
|
||||
"cmd.component_paste_new": "Beillesztés újként",
|
||||
"cmd.component_properties": "Komponens fizikai tulajdonságai",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Komponens átnevezése",
|
||||
"cmd.component_replace_with_link": "Csere hivatkozásra",
|
||||
"cmd.component_revert_position": "Pozíció visszaállítása",
|
||||
"cmd.component_show_history": "Komponens előzményeinek megjelenítése",
|
||||
"cmd.component_unlock": "Tartalom feloldása",
|
||||
"cmd.component_update_links": "Kapcsolatok frissítése",
|
||||
"cmd.config_activate": "Konfiguráció aktiválása",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Konfigurációs szabály",
|
||||
"cmd.config_rules": "Konfigurációs szabályok",
|
||||
"cmd.config_table": "Konfigurációs táblázat megjelenítése",
|
||||
"cmd.construct.plane.axis_point": "Sík tengelyen és ponton át",
|
||||
"cmd.construct_axis_edge": "Tengely élen át",
|
||||
"cmd.construct_axis_normal_to_face": "Lapra merőleges tengely",
|
||||
"cmd.construct_axis_through_cylinder": "Tengely hengeren/kúpon/tóruszon át",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Robbantott nézet megjelenítése",
|
||||
"cmd.expr_evaluate": "Kifejezés kiértékelése",
|
||||
"cmd.face_delete": "Lap törlése",
|
||||
"cmd.file.export_3mf": "3MF exportálása",
|
||||
"cmd.file.export_obj": "OBJ exportálása",
|
||||
"cmd.file.export_step": "STEP exportálása",
|
||||
"cmd.file.export_stl": "STL exportálása",
|
||||
"cmd.file.export_urdf": "URDF exportálása",
|
||||
"cmd.file_export": "Exportálás",
|
||||
"cmd.file_insert_mesh": "Háló beszúrása",
|
||||
"cmd.file_insert_step": "STEP beszúrása",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Komponensszínek bekapcsolása",
|
||||
"cmd.inspect_colored_components_disable": "Komponensszínek kikapcsolása",
|
||||
"cmd.inspect_compare": "Testek összehasonlítása",
|
||||
"cmd.inspect_compare_picture": "Kép összehasonlítása",
|
||||
"cmd.inspect_continuity": "Folytonosságelemzés",
|
||||
"cmd.inspect_curvature_comb": "Görbületi fésű elemzése",
|
||||
"cmd.inspect_curvature_map": "Görbülettérkép-elemzés",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Pontfelhő szerkesztése",
|
||||
"cmd.pointcloud_insert": "Pontfelhő beszúrása",
|
||||
"cmd.pointcloud_list": "Pontfelhők",
|
||||
"cmd.render.compare.divider": "Renderösszehasonlító elválasztó mozgatása",
|
||||
"cmd.render.result.discard": "Renderelési eredmény elvetése",
|
||||
"cmd.render.result.select": "Renderelési eredmény kiválasztása",
|
||||
"cmd.render_aging_describe": "Rétegzett felületöregedés",
|
||||
"cmd.render_backends": "Renderelő motorok",
|
||||
"cmd.render_batch": "Összes felvétel renderelése",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Vezérlőpontos spline (5. fokú)",
|
||||
"cmd.sketch_spline_fit_point": "Illesztőpontos spline",
|
||||
"cmd.sketch_spline_insert_point": "Splinepont hozzáadása",
|
||||
"cmd.sketch_spline_remove_point": "Splinepont eltávolítása",
|
||||
"cmd.sketch_spline_reverse": "Spline irányának megfordítása",
|
||||
"cmd.sketch_spun_profile": "Forgatott profil",
|
||||
"cmd.sketch_toggle_diameter": "Sugár / átmérő váltása",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Idővonal-marker mozgatása",
|
||||
"cmd.timeline_stop": "Előzmények leállítása",
|
||||
"cmd.timeline_suppress": "Elem elnyomása",
|
||||
"cmd.ui.assistant": "Asszisztens megjelenítése/elrejtése",
|
||||
"cmd.view.render_browser": "Renderböngésző",
|
||||
"cmd.view.render_dock": "Renderpanel áthelyezése",
|
||||
"cmd.view.render_focus": "Renderfókusz nézet",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Navigációs eszköz",
|
||||
"cmd.view_top": "Felülnézet",
|
||||
"cmd.view_visual_style": "Vizuális stílus",
|
||||
"color.blue": "Kék",
|
||||
"color.copy": "Kattintson a színértékek másolásához",
|
||||
"color.edit": "Kattintson a szín szerkesztéséhez",
|
||||
"color.gamma": "Színértékek megjelenítése 0–255 gamma térben",
|
||||
"color.green": "Zöld",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Adja meg: #rrggbb vagy #rrggbbaa; hat számjegy esetén az átlátszatlanság megmarad",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Árnyalat",
|
||||
"color.linear": "Színértékek megjelenítése 0–1 lineáris térben",
|
||||
"color.recent": "Legutóbbi színek",
|
||||
"color.recent_help": "A bármelyik színmezőben kiválasztott színek itt jelennek meg",
|
||||
"color.red": "Piros",
|
||||
"color.saturation": "Telítettség (százalék)",
|
||||
"color.saturation_value": "Telítettség és érték",
|
||||
"color.selected": "Kijelölt szín",
|
||||
"color.step_down": "Lépés lefelé",
|
||||
"color.step_up": "Lépés felfelé",
|
||||
"color.value": "Érték, a fényerő (százalék)",
|
||||
"config.column_filter_empty": "Nincs egyező oszlop",
|
||||
"config.rule_parameter_columns": "Csak azok a paraméterek szerepelnek, amelyeknek van oszlopa a táblázatban. Az Oszlop hozzáadása (+) paranccsal vehet fel egyet, hogy itt használhassa.",
|
||||
"config.rule_suppression_columns": "Csak azok az elemek szerepelnek, amelyeknek van Elnyomás oszlopa a táblázatban. Az Oszlop hozzáadása (+) paranccsal vehet fel egyet, hogy innen vezérelje.",
|
||||
"contact.components_count": "{count} komponens",
|
||||
"contact.enabled_label": "engedélyezve",
|
||||
"coupling.gear_1": "1. fogaskerék",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Méret: {name}",
|
||||
"dialog.edit_title": "{title} SZERKESZTÉSE",
|
||||
"dialog.no_shown_body": "Nincs módosítható megjelenített test: jelenítsen meg egyet, vagy válassza az Új test lehetőséget",
|
||||
"dialog.pattern_sketch_not_object": "Válasszon testeket vagy elemeket: a vázlat egyik sem. Ismételje a görbéit a vázlat saját Minta vagy Tükrözés parancsával, vagy húzza ki előbb.",
|
||||
"dialog.select": "↖ Kijelölés",
|
||||
"dialog.selected_count": "↖ {count} kijelölve",
|
||||
"dialog.selection_constraint": "Kényszer {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · görbe {id}",
|
||||
"dialog.selection_guidance": "Válasszon ki egy bemenetet a módosításhoz. A kijelölt objektumokra kattintva eltávolíthatja őket; a Ctrl/Cmd-kattintás is váltja a kijelölést. Tekintse át az előnézetet, majd nyomja meg az OK gombot.",
|
||||
"dialog.selection_midpoint": "Felezőpont · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step}/{total}: {input} kijelölése",
|
||||
"dialog.step": "Lépés",
|
||||
"document.changed_on_disk": "A(z) {name} megváltozott a lemezen",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Szerkesztőtengelyt hoz létre két ponton, csúcson vagy vázlatponton át. Használja két ismert helyzet között húzódó tengelyhez.",
|
||||
"help.construct.plane.along_path": "Szerkesztősíkot hoz létre egy élre vagy görbére merőlegesen, annak egy adott helyén. Használja söpréshez való profil vagy egy útvonal keresztmetszetének megrajzolására.",
|
||||
"help.construct.plane.at_angle": "Szerkesztősíkot hoz létre, amely egy síktól vagy laptól egy tengely vagy él körül adott szöggel van elforgatva. Használja ferde vázlatokhoz, például szögben álló konzolhoz.",
|
||||
"help.construct.plane.axis_point": "Szerkesztősíkot hoz létre, amely tartalmaz egy tengelyt és egy, a tengelyen kívül eső pontot. Válasszon egy origótengelyt vagy szerkesztőtengelyt, egy egyenes élt vagy vázlatvonalat, majd egy csúcsot, vázlatpontot vagy szerkesztőpontot. A tengelyen lévő pont nem határoz meg egyértelmű síkot.",
|
||||
"help.construct.plane.midplane": "Szerkesztősíkot hoz létre két sík vagy sík lap között félúton, vagy, ha szögben találkoznak, felezve őket. Használja tükrözés szimmetriasíkjaként.",
|
||||
"help.construct.plane.offset": "Szerkesztősíkot hoz létre egy síkkal vagy sík lappal párhuzamosan, adott távolságra vagy egy ponton át. Használja, hogy egy lap fölött meghatározott magasságban rajzoljon vázlatot.",
|
||||
"help.construct.plane.perpendicular": "Szerkesztősíkot hoz létre, amely tartalmaz egy egyenest vagy élt, és merőleges egy síkra vagy lapra. Használja, hogy egy modellen egy él mentén függőlegesen álló vázlatot rajzoljon.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Ellenőrizze a csukló típusát (például Merev), a földhöz rögzítést, a csuklókorlátokat és a paraméterrel vezérelt értékeket.",
|
||||
"joint_move.blocked_title": "Ez az alkatrész nem mozgatható",
|
||||
"joint_move.coarse": "Forgatási lépés a tengely közelében (°)",
|
||||
"joint_move.conflict": "Ennek az alkatrésznek egy csuklója ütközik a többivel: {joint}.",
|
||||
"joint_move.conflict_hint": "Szerkessze, nyomja el vagy törölje az ütköző csuklót, hogy a többi csukló elhelyezhesse az alkatrészt.",
|
||||
"joint_move.distance": "Távolság a kezdőponttól",
|
||||
"joint_move.done": "Kész",
|
||||
"joint_move.fine": "Forgatási lépés a tengelytől távol (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "{number}. sáv",
|
||||
"nav.alias.help": "Shift+Alt+bal húzás: keringés, Shift+Alt+középső húzás: pásztázás, Shift+Alt+jobb húzás: nagyítás; a középső húzás is pásztáz, a jobb húzás is keringést végez",
|
||||
"nav.blender.help": "Középső húzás: keringés, Shift+középső húzás: pásztázás, Ctrl+középső húzás: nagyítás; a jobb húzás nem mozgatja a kamerát",
|
||||
"nav.creo.help": "Középső húzás: keringés, Shift+középső húzás: pásztázás, Ctrl+középső függőleges húzás: nagyítás (lefelé húzva közelít); az egérgörgő görgetése: nagyítás",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Az egér és a 3D-egér mindkét póluson átforgat, és megőrzi az elfordulást. A Shiftre történő tengelyhez illesztés ki van kapcsolva.",
|
||||
"nav.free_orbit.label": "Szabad keringés",
|
||||
"nav.free_orbit.snap_help": "Az egér és a 3D-egér mindkét póluson átforgat, és megőrzi az elfordulást. Keringéskor tartsa lenyomva a Shiftet a nézetirány és az elfordulás illesztéséhez.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+bal húzás: pásztázás, Shift+Alt+bal húzás: nagyítás, Ctrl+bal húzás üres területen: keringés",
|
||||
"nav.inventor.help": "Középső húzás: pásztázás, Shift+középső húzás: keringés, Ctrl+középső húzás: nagyítás, jobb húzás: keringés",
|
||||
"nav.maya.help": "Alt+bal húzás: keringés, Alt+középső húzás: pásztázás, Alt+jobb húzás: nagyítás; a középső húzás is pásztáz",
|
||||
"nav.nx.help": "Középső húzás: keringés, Shift+középső húzás: pásztázás (az NX-ben középső + jobb gomb), Ctrl+középső húzás: nagyítás (az NX-ben középső + bal gomb); a jobb húzás nem mozgatja a kamerát",
|
||||
"nav.openscad.help": "Bal húzás üres helyen: keringés, Shift+bal húzás: kijelölés kerettel, a vázlatgeometria húzása szerkeszt; jobb vagy középső húzás: pásztázás, Shift+jobb vagy Shift+középső húzás: nagyítás",
|
||||
"nav.perspective.sketch": "A vázlatszerkesztés ortografikus nézetet használ. A perspektívára váltáshoz fejezze be a vázlatot.",
|
||||
"nav.right_drag_orbits.help": "Ki: a jobb gombos húzás nem mozgatja a kamerát, és a jobb gomb csak a helyi menüt nyitja meg. A SolidWorks egérkiosztás kiválasztása kikapcsolja.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Belső kulcsnyílású lencsefejű csavar",
|
||||
"parts.family.dowel_pin": "Hengeres illesztőcsap",
|
||||
"parts.family.hex_bolt": "Hatlapfejű csavar",
|
||||
"parts.family.hex_cap_screw_inch": "Hatlapfejű csavar (hüvelykes)",
|
||||
"parts.family.hex_nut": "Hatlapú anya",
|
||||
"parts.family.hex_nut_inch": "Hatlapú anya (hüvelykes)",
|
||||
"parts.family.set_screw": "Belső kulcsnyílású szárnélküli csavar, lapos végű",
|
||||
"parts.family.socket_head_cap_screw": "Belső kulcsnyílású hengeresfejű csavar",
|
||||
"parts.family.washer": "Sima alátét",
|
||||
"parts.family.washer_sae": "Sima alátét, SAE (keskeny)",
|
||||
"parts.family.washer_uss": "Sima alátét, USS (széles)",
|
||||
"parts.holes": "Furatok (opcionális)",
|
||||
"parts.placement_hint": "jelöljön ki egy vagy több furatot, hogy mindegyikbe beillesszen egy alkatrészt, vagy az OK az origóba helyezi",
|
||||
"parts.system": "Mértékegység-rendszer",
|
||||
"parts.system.inch": "Hüvelyk",
|
||||
"parts.system.metric": "Metrikus",
|
||||
"pattern.alignment_2": "2. igazítás",
|
||||
"pattern.alignment_hint": "A darabszám tartalmazza az eredetit. A Közép kiegyensúlyozza a másolatokat; a Megfordítás páros összegnél kijelöli a többletoldalt.",
|
||||
"pattern.direction_1": "1. irány",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Húzás bal gombbal",
|
||||
"prefs.button_middle": "Húzás középső gombbal",
|
||||
"prefs.button_right": "Húzás jobb gombbal",
|
||||
"prefs.carousel_next": "Következő",
|
||||
"prefs.carousel_previous": "Előző",
|
||||
"prefs.choose_font": "Betűtípusfájl kiválasztása…",
|
||||
"prefs.click": "Kattintás",
|
||||
"prefs.contact_shading": "Lágy érintkezési árnyalás",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Görbült felületek",
|
||||
"prefs.curves": "Görbült felületek",
|
||||
"prefs.cut_preview_tint": "Az eltávolított anyag megjelenítése pirossal",
|
||||
"prefs.cut_preview_tint_help": "Az előnézet az elem által eltávolított anyagot és a lecserélt alakzatot piros, áttetsző szellemképpel tölti ki. Kikapcsolva ezek a kitöltések teljesen átlátszóak, és csak a körvonalaik láthatók.",
|
||||
"prefs.dark_parts_shading": "A sötét alkatrészek formájának megőrzése",
|
||||
"prefs.dark_parts_shading_help": "A nézet árnyalása lineáris fényben, lágy égbolt-kitöltéssel, hogy a sötét lapokon megmaradjon az átmenet, és ne váljanak feketévé",
|
||||
"prefs.dead_zone_note": "A sraffozott sáv a holtsáv: az azon belüli mozgást figyelmen kívül hagyja.",
|
||||
"prefs.default": "alapértelmezett",
|
||||
"prefs.design": "Terv alapbeállításai",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Élek és árnyalás",
|
||||
"prefs.extend": "Meghosszabbítás",
|
||||
"prefs.extra_navigation": "A Ctrl+bal egérgombos húzás az üres területen keringést végez; a Szóköz nyomva tartásával pásztázhat.",
|
||||
"prefs.extrude_view_isometric": "A nézet izometrikusra fordítása a Kihúzás megnyitásakor",
|
||||
"prefs.extrude_view_return": "Visszatérés a korábbi nézethez a Kihúzás bezárásakor",
|
||||
"prefs.follows_os": "Az operációs rendszert követi",
|
||||
"prefs.font": "Betűtípus",
|
||||
"prefs.font_fallback": "A kiválasztott betűtípusból hiányzó karakterek a beépített betűtípusból pótlódnak, így egyetlen felirat sem mutat üres négyzetet.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automatikus",
|
||||
"prefs.graphics_card_missing": "A mentett videokártya nem érhető el; az Automatikus beállítás van használatban.",
|
||||
"prefs.graphics_card_restart": "A SolidCraft újraindítása után lép életbe. A WGPU_ADAPTER_NAME felülbírálja ezt a választást.",
|
||||
"prefs.graphics_card_unused": "A mentett videokártyát nem használta ez az ablak; a ténylegesen használt kártya a Súgó › A SolidCraftról ablakban és az állapotsorban látható. Próbálja az Automatikus beállítást, vagy a WGPU_ADAPTER_NAME értékét állítsa a kártya nevének egy egyedi részletére.",
|
||||
"prefs.graphics_note": "Cserélje a sebességet simaságra. Minden választás hatását egy minta mutatja.",
|
||||
"prefs.graphics_presets_note": "Az előbeállítások az alábbi beállításokat együtt állítják be.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Kényszerjelek elrejtése kicsinyítéskor",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Ha a Vázlatok beállítása „Elemük alatt”, a bal oldali Előzmények minden vázlatot egy szinttel beljebb, az első belőle készült elem alatt sorol fel, ha elég széles a nevekhez. Az alul lévő idővonal mindig a létrehozás sorrendjét tartja meg.",
|
||||
"prefs.history_sketches_under_feature": "Elemük alatt",
|
||||
"prefs.hold_stop_snapping": "Nyomva tartva leállítja az illesztést",
|
||||
"prefs.home_fit_size": "A Kezdőnézet és az Illesztés mérete",
|
||||
"prefs.home_fit_size_note": "Mekkora részét tölti ki a modell a nézetnek, amikor a Kezdőnézet, az Illesztés, egy megnyitott terv vagy egy navigátornézet-váltás keretezi, függetlenül attól, hogy az alábbi beállítás be van-e kapcsolva. 100 %: kitölti a nézetet a panelek, az iránytű és a navigációs sáv között.",
|
||||
"prefs.icons_only": "Csak ikonok",
|
||||
"prefs.imported_file": "Importált fájl",
|
||||
"prefs.in_browser": "A böngészőben",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Felület nyelve",
|
||||
"prefs.interface_note": "A SolidCraft megjelenése és elemeinek elhelyezése.",
|
||||
"prefs.interval_minutes": "{n} perc",
|
||||
"prefs.invert_curved_roll_arrows": "Az íves gördülőnyilak megfordítása",
|
||||
"prefs.invert_curved_roll_arrows_note": "A nézetkocka sarkában lévő két íves nyíl a nézetet a képernyő síkjában gördíti. Be: az óramutató járásával megegyező nyíl ellentétes irányba gördít, az ellentétes nyíl pedig az óramutató járásával megegyező irányba. Ki: minden nyíl abba az irányba gördíti a nézetet, amerre ível.",
|
||||
"prefs.invert_navigator_arrows": "A nézetkocka forgatónyilainak megfordítása",
|
||||
"prefs.invert_navigator_arrows_note": "A kocka körüli nyilak úgy keringetik a kamerát, ahogy mutatnak, mint a Fusion és az Inventor esetében: a bal oldali nyíl jobbra mutat, és a kamerát jobbra lendíti. Ki: a nyíl a kockát afelé az oldal felé forgatja, amelyiken van, így a bal nyíl a kamerát balra lendíti. Az íves gördülőnyilakat ez nem érinti.",
|
||||
"prefs.keep_work_on_tab_switch": "A párbeszédablakok és eszközök nyitva tartása tervek közötti váltáskor",
|
||||
"prefs.keep_work_on_tab_switch_note": "Minden tervfül megtartja a nyitott párbeszédablakát vagy eszközét azzal együtt, amit kijelölt és beírt benne, valamint a menüszalag-fülét. A tervhez visszatérve újra ott vannak. Ki: a tervek közötti váltás megszakítja őket, és a Modell fület mutatja.",
|
||||
"prefs.labels": "Feliratok",
|
||||
"prefs.language_system": "Rendszer",
|
||||
"prefs.layout": "Elrendezés",
|
||||
"prefs.layout_note": "A Kompakt a paneleket az ablak széleihez rögzíti. A Böngésző áttetszősége Lebegő módban érhető el. Az Asszisztens oldalát az Asszisztens oldalon módosíthatja.",
|
||||
"prefs.left": "Bal",
|
||||
"prefs.left_click": "Bal kattintás",
|
||||
"prefs.line_drag_draws_one": "Lenyomás és húzás egy vonalat rajzol",
|
||||
"prefs.line_drag_draws_one_note": "A Vonal eszközben a lenyomás, húzás és felengedés egyetlen vonalat rajzol a lenyomás helyétől a felengedés helyéig, és ott véget ér. A kattintások továbbra is láncot rajzolnak. Ki: a húzás a felengedés helyén pontot helyez el, ahogy a kattintás.",
|
||||
"prefs.line_hover_tangent_arc": "Egy vonal utolsó pontján megállva váltás érintő ívre",
|
||||
"prefs.line_hover_tangent_arc_note": "A Vonal eszközben, miután megrajzolt egy szakaszt, mozdítsa el a mutatót a lánc utolsó pontjától, térjen vissza, és tartsa mozdulatlanul rajta: a következő kattintás egy érintő ívet fejez be, ugyanez a mozdulat pedig visszavált vonalakra. Ki: az ott megállás nem csinál semmit.",
|
||||
"prefs.linked_designs": "Kapcsolt tervek",
|
||||
"prefs.live_input": "Élő bevitel",
|
||||
"prefs.live_preview": "Élő előnézet",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Egérkiosztás",
|
||||
"prefs.navigation": "Navigáció",
|
||||
"prefs.navigation_note": "Hogyan mozgatja a nézetet az egér, az érintőpad és a 3D-egér.",
|
||||
"prefs.navigator_fit": "A modell illesztése navigátornézet-váltás után",
|
||||
"prefs.navigator_fit_note": "A nézetkocka egy lapja, sarka vagy nyila, illetve a gizmo egy tengelye a modell közepére is ránéz abból az egyetlen távolságból, amelyből minden oldalról belefér (a határoló gömbje). Amíg ez be van kapcsolva, a Kezdőnézet ugyanazt a nagyítást és középpontot használja, így az utána választott nézetek csak elfordulnak. Ki: a nézet a helyén fordul el, megtartva a célpontját és a nagyítását.",
|
||||
"prefs.network_host_remove": "Eltávolítás",
|
||||
"prefs.network_locations": "Hálózati helyek engedélyezése a tervekben",
|
||||
"prefs.network_locations_note": "Ki: egy terv másik számítógépen lévő hivatkozott fájljai (\\\\server\\share) csak az itt felsorolt kiszolgálókról nyílnak meg, vagy miután kérdésre engedélyez egyet.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Elhelyezés",
|
||||
"prefs.prefer_free_sketch_points": "Átfedő pontoknál a mozgatható vázlatpontok előnyben részesítése",
|
||||
"prefs.preview_choices": "A választások előnézete",
|
||||
"prefs.preview_tint_new_faces": "Az új felület színezése az előnézetben",
|
||||
"prefs.preview_tint_new_faces_help": "Egy testet módosító elem előnézete az általa hozzáadott felületet az előnézeti színnel rajzolhatja ki. Kikapcsolva a test önmagaként jelenik meg.",
|
||||
"prefs.print_face_highlight": "Nyomtatási lap kiemelése",
|
||||
"prefs.print_face_highlight_tip": "Milyen erősen színezi és körvonalazza a nézet a test nyomtatási lapját. 0 % esetén nincs kiemelés.",
|
||||
"prefs.profile_active": "Aktív profil",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Korábbi geometriakeret használata a renderelési előnézethez",
|
||||
"prefs.render_previous_geometry_budget_help": "A korábbi rögzített geometriakorlát visszaállítása (64 bites asztali gépen 512 MiB, máshol 128 MiB) az eszközalapú keret helyett.",
|
||||
"prefs.reports_saved": "{n} mentve",
|
||||
"prefs.ribbon_click_ends_tool": "A futó eszköz gombjára kattintva az eszköz befejeződik",
|
||||
"prefs.ribbon_click_ends_tool_note": "A használatban lévő vázlateszköz kivilágított menüszalag-gombjára kattintva az eszköz befejeződik, így a nézetben a kattintások újra kijelölnek. Ki: a kattintás újra elindítja az eszközt.",
|
||||
"prefs.ribbon_reveal": "Keresési találatok megmutatása a menüszalagon",
|
||||
"prefs.ribbon_reveal_note": "Ha a Parancsok keresése egy találata fölé viszi a mutatót, megjelenik, hol található a parancs a menüszalagon: a füle, a gombja vagy a sora egy panel legördülő listájában. A keresésből indított parancs ott felvillan, a legördülő listából futó parancs pedig megjelöli a panelját.",
|
||||
"prefs.right_click": "Jobb kattintás",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Visszatérés az előző nézethez",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Visszatérés, ha nem lett forgatva",
|
||||
"prefs.sketch_exit_view_note": "Hová kerül a nézet a Vázlat befejezése, a Mégse vagy a dupla Esc után.",
|
||||
"prefs.sketch_face_activates_part": "Ha egy alkatrész lapjára rajzol vázlatot, az az alkatrész aktív lesz",
|
||||
"prefs.sketch_face_activates_part_note": "Egy másik komponens testének lapján indított vázlat előbb aktiválja azt a komponenst, így a vázlat ahhoz tartozik, és a böngészőben ennél az alkatrésznél marad. Az alkatrész utána is aktív marad. Ki: a vázlat az aktív komponenshez tartozik.",
|
||||
"prefs.sketch_open_look_at": "Vázlat megnyitásakor a nézet a vázlatra fordul",
|
||||
"prefs.sketch_open_look_at_note": "Ki: vázlat létrehozása vagy szerkesztése nem változtatja a nézetet. A Ránézés a vázlatra fordítja a nézetet, amikor szeretné.",
|
||||
"prefs.sketch_recent_snap": "Automatikus illesztés a legutóbbi középpontokhoz és felezőpontokhoz",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Hiba",
|
||||
"prefs.status_selected": "Kijelölve",
|
||||
"prefs.status_warning": "Figyelmeztetés",
|
||||
"prefs.structure.appearance": "Megjelenés",
|
||||
"prefs.structure.appearance_note": "Színek, szöveg és kisegítő lehetőségek.",
|
||||
"prefs.structure.in_profile": "Profilban",
|
||||
"prefs.structure.layout": "Elrendezés",
|
||||
"prefs.structure.layout_note": "Az ablak részeinek elhelyezkedése.",
|
||||
"prefs.structure.look": "Kinézet",
|
||||
"prefs.structure.measure_pointer": "Mérés és mutató",
|
||||
"prefs.structure.mouse3d": "3D-egér",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse és SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Egér és érintőpad. A 3D-egérnek saját oldala van.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "A mentés óta módosítva",
|
||||
"prefs.structure.profile_hover": "Mentve a beállításprofilokban",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Vázlat",
|
||||
"prefs.structure.tools": "Szerszámok",
|
||||
"prefs.structure.tools_note": "Hogyan viselkednek a modellezőszerszámok.",
|
||||
"prefs.structure.work": "Munka",
|
||||
"prefs.supersampling_brief": "A nézetet nagyobbra rajzolja, majd leszűri: nagyon éles, de erőforrásigényesebb.",
|
||||
"prefs.tab_accent_note": "A hangsúlyszín az aktív fület követi",
|
||||
"prefs.theme_file": "témafájl",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Alapszín · sRGB",
|
||||
"render.base_metallic": "Fémes hányad",
|
||||
"render.base_opaque_only": "Ez a szerkesztő megőrzi az átlátszatlan test szemantikáját. Az optikai áteresztéshez használja a külön üvegvezérlőket.",
|
||||
"render.batch_all_shots": "Összes felvétel ({count})",
|
||||
"render.batch_empty": "Mentsen el egy felvételt, mielőtt az összes felvételt renderelné.",
|
||||
"render.batch_limit": "Az összes felvétel renderelése legfeljebb 32 felvételre korlátozott.",
|
||||
"render.batch_status": "{running} fut · {waiting} vár",
|
||||
"render.bloom_enable": "Bloom megjelenítése",
|
||||
"render.bloom_help": "Kreatív, csak a kimenetre vonatkozó fénykisugárzás a pozitív lineáris csúcsfényekből, három normalizált dobozszűrő-menettel szétterítve. A sugár kimeneti pixelben értendő. Lineáris megjelenítési fényhez adódik az sRGB előtt; nem lencsehatás, nem térfogati effektus és nem javítja a konvergenciát. A nyers EXR változatlan.",
|
||||
"render.bloom_opaque": "A bloomhoz átlátszatlan kimenet szükséges. Az átlátszó PNG-t a program elutasítja, nem lapítja csendben.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Először válasszon stílust a Megjelenések között",
|
||||
"render.chromatic_offset": "Kromatikus éleltolás",
|
||||
"render.clear_stage": "Mentett díszlet eltávolítása",
|
||||
"render.compare_divider": "Összehasonlító elválasztó",
|
||||
"render.compare_live": "Élő",
|
||||
"render.compare_live_preview": "Élő előnézet",
|
||||
"render.compare_render": "{number}. render",
|
||||
"render.compare_side": "{number}. render · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · rögzítve, revízió: {revision}",
|
||||
"render.compare_swap": "Csere",
|
||||
"render.copy_request": "JSON másolása",
|
||||
"render.cpu_aa_help": "Térbeli minták: a több minta javítja az éleket, és növeli a renderelési időt.",
|
||||
"render.cpu_area_add": "Téglalap alakú CPU-fényforrás hozzáadása",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Az utolsó kész kép látható; újabb renderelés még nem váltotta le.",
|
||||
"render.result_sequence": "Ellenőrzőpont",
|
||||
"render.result_title": "Renderelési eredmény",
|
||||
"render.results_choose": "Megtartott eredmények",
|
||||
"render.results_label": "{number}. render · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [elavult]",
|
||||
"render.results_unnamed": "Kép",
|
||||
"render.return_design": "Vissza a Tervezéshez",
|
||||
"render.review_stale": "Ez az áttekintés elavult. Az alkalmazás előtt oldja fel, vagy ellenőrizze újra.",
|
||||
"render.ribbon_aging": "Öregítés",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Kezdje egyenlőségjellel (=), hogy a szavakat paraméterekből építse fel: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Dőlt",
|
||||
"sketch_text.loading_fonts": "Telepített betűtípusok keresése…",
|
||||
"sketch_text.no_bold": "A beépített betűtípusnak nincs félkövér változata: válasszon telepített betűtípust",
|
||||
"sketch_text.on_path": "A szöveg követi az útvonalát: a görbe helyezi el",
|
||||
"sketch_text.path_clear": "Szöveg levétele a görbéről",
|
||||
"sketch_text.path_hint": "A vázlat egy görbéje, amelyet a szöveg követ: kattintson ide, majd a görbére",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "a két origó ugyanazon a komponensen van",
|
||||
"thread.automatic_size": "Automatikus méret",
|
||||
"thread.designation": "Jelölés",
|
||||
"thread.direction": "Menet iránya",
|
||||
"thread.iso_metric": "ISO metrikus",
|
||||
"thread.left_hand": "Balmenetes",
|
||||
"thread.right_hand": "Jobbmenetes",
|
||||
"thread.select_size": "Méret kiválasztása",
|
||||
"timeline.delete_after_marker_one": "1 elem törlése az előzményjelölő után",
|
||||
"timeline.delete_after_marker_other": "{count} elem törlése az előzményjelölő után",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Futtassa ezt egy terminálban, majd nyomja meg újra a Csatlakozás gombot:",
|
||||
"ui.agent_chat_auth_title": "Bejelentkezés az ügynökbe",
|
||||
"ui.agent_chat_cancel": "Mégse",
|
||||
"ui.agent_chat_cancel_timeout": "Az ügynök nem válaszolt a Leállításra, ezért le lett választva. A folytatáshoz csatlakozzon újra.",
|
||||
"ui.agent_chat_cannot_start": "Telepítve van, de nem indul el: {error}",
|
||||
"ui.agent_chat_changes": "Módosítások: {n}, egy visszavonási lépés",
|
||||
"ui.agent_chat_changes_n": "{n} módosítás",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Ügynök parancsa",
|
||||
"ui.agent_chat_connect": "Csatlakozás",
|
||||
"ui.agent_chat_copy": "Másolás",
|
||||
"ui.agent_chat_copy_message": "Üzenet másolása",
|
||||
"ui.agent_chat_ctx_bodies": "Testek",
|
||||
"ui.agent_chat_ctx_elements": "Geometriai elemek",
|
||||
"ui.agent_chat_ctx_features": "Elemek",
|
||||
"ui.agent_chat_ctx_more": "+{n} további",
|
||||
"ui.agent_chat_ctx_other": "Egyéb",
|
||||
"ui.agent_chat_custom_heading": "Egyéni modell",
|
||||
"ui.agent_chat_custom_hint": "Bármely program, amely az Agent Client Protocolt használja stdin-en és stdout-on. Shell nem futtatja.",
|
||||
"ui.agent_chat_denied": "Elutasítva",
|
||||
"ui.agent_chat_deny": "Elutasítás",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Minden",
|
||||
"ui.agent_chat_mode_ask": "Kérdez",
|
||||
"ui.agent_chat_mode_edits": "Szerkesztés",
|
||||
"ui.agent_chat_model_custom": "Egyéni használata: {model}",
|
||||
"ui.agent_chat_model_no_tools": "A(z) {model} nem tudja használni a SolidCraft eszközeit, ezért csak csevegni lehet vele. Válasszon eszköztámogatással rendelkező modellt.",
|
||||
"ui.agent_chat_model_rejected": "Az ügynök nem fogadta el a(z) {model} modellt: {error}",
|
||||
"ui.agent_chat_model_search": "Modellek keresése…",
|
||||
"ui.agent_chat_model_tip": "Az ügynök által használt modell. A választás megmarad ennél az ügynöknél.",
|
||||
"ui.agent_chat_models_failed": "A modellek nem listázhatók: {error}",
|
||||
"ui.agent_chat_models_heading": "Elérhető modellek",
|
||||
"ui.agent_chat_models_listing": "Modellek listázása…",
|
||||
"ui.agent_chat_models_none": "A végpont nem listáz modelleket",
|
||||
"ui.agent_chat_models_not_a_list": "A válasz nem modellek listája volt",
|
||||
"ui.agent_chat_new": "Új csevegés",
|
||||
"ui.agent_chat_new_confirm": "Új csevegést indít? A jelenlegi törlődik.",
|
||||
"ui.agent_chat_next_picture": "Következő kép",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Jogosultságok",
|
||||
"ui.ai_preset": "Előbeállítás",
|
||||
"ui.ai_protocol": "Protokoll",
|
||||
"ui.ai_reasoning_effort": "Gondolkodási szint",
|
||||
"ui.ai_reasoning_effort_field_hint": "üres = a szolgáltató alapértelmezése",
|
||||
"ui.ai_reasoning_effort_hint": "Nem kötelező. `reasoning_effort` néven kerül elküldésre a végpontnak; az elfogadott értékek szolgáltatónként eltérnek (például `low`, `high` vagy `max`). Az itt megadott értéket a SolidCraft soha nem cseréli le. Hagyja üresen, ha nem szeretne semmit küldeni, és meg szeretné tartani a szolgáltató alapértelmezését.",
|
||||
"ui.ai_remove": "Eltávolítás",
|
||||
"ui.ai_request_timed_out": "A modell nem válaszolt {seconds} s alatt. A kérés időkorlátját ehhez a végponthoz a Beállítások › Asszisztens alatt emelheti meg.",
|
||||
"ui.ai_request_timeout": "Kérés időkorlátja",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Érintő: válasszon egy kört/ívet vagy nyitott spline-t/kúpgörbét, majd az érintési pontot (szabadformájú görbék: végpontok)",
|
||||
"ui.construction.external_hint": "Érintő: válasszon egy kört vagy ívet, egy külső pontot, majd a kívánt megoldást",
|
||||
"ui.construction.free_hint": "Szerkesztőegyenes: kattintson két pontra; jobb kattintással újrakezdheti",
|
||||
"ui.construction.normal_needs_length": "A végtelen egyenes mindig szerkesztőegyenes: normál vonal rajzolásához adjon meg hosszt",
|
||||
"ui.construction.point_hint": "Szerkesztőegyenes: kattintson arra a pontra, amelyen át kell haladnia",
|
||||
"ui.construction.reference_hint": "Szerkesztőegyenes: válasszon egy egyenest, majd egy pontot; jobb kattintással módosíthatja a referenciát",
|
||||
"ui.construction.ribbon_label": "Segédvonalak",
|
||||
"ui.construction.side_hint": "Szerkesztőegyenes: kattintson arra az oldalra, amerre a vonal halad; jobb kattintással újrakezdheti",
|
||||
"ui.context_menu": "Helyi menü",
|
||||
"ui.continuity_crease": "Törés",
|
||||
"ui.continuity_curvature": "Görbület",
|
||||
"ui.continuity_curvature_change": "Görbületváltozás",
|
||||
"ui.continuity_g0": "G0 törés",
|
||||
"ui.continuity_g1": "G1 érintő",
|
||||
"ui.continuity_g2": "G2 görbület",
|
||||
"ui.continuity_gap": "Rés",
|
||||
"ui.continuity_position": "Pozíció",
|
||||
"ui.continuity_tangent": "Érintő",
|
||||
"ui.copy": "Másolás",
|
||||
"ui.corner": "Sarok",
|
||||
"ui.corners": "Sarkok",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Sötét",
|
||||
"ui.default_modelling_orientation": "Alapértelmezett modellezési tájolás",
|
||||
"ui.delete": "Törlés",
|
||||
"ui.delete_select_first": "Először jelölje ki a törlendőt: elemeket, testeket, komponenseket vagy vázlatgeometriát",
|
||||
"ui.depth": "Mélység",
|
||||
"ui.design": "Tervezés",
|
||||
"ui.design_properties.author": "Szerző",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Az alkatrész másik fájlba lett mentve; az összeállítás továbbra is ide hivatkozik: {name}",
|
||||
"ui.edit_in_place_wait": "Várja meg, amíg a tervben futó művelet befejeződik",
|
||||
"ui.edit_section_analysis": "Metszetelemzés szerkesztése",
|
||||
"ui.edit_sketch_empty": "Nincs szerkeszthető vázlat",
|
||||
"ui.ellipse": "Ellipszis",
|
||||
"ui.emboss_wrap_note": "Az egyetlen támogatott hengerhez érintő, merőleges vonalprofilok automatikusan a henger köré tekerednek. Válasszon ki egy falat a cél kiválasztásához.",
|
||||
"ui.end_radius": "Végi sugár",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Explicit",
|
||||
"ui.equation_form": "Alak",
|
||||
"ui.equation_note": "A változó egyszerű szám: a sin(t) radiánban értelmezi. A mértékegység nélküli eredmény a terv mértékegységében értendő.",
|
||||
"ui.equation_note_range": "A változó hossz, ahogy a tartománya is: keverje hosszparaméterekkel, és a sin() előtt ossza el egy hosszal. A mértékegység nélküli eredmény a terv mértékegységében értendő.",
|
||||
"ui.equation_parametric": "Parametrikus",
|
||||
"ui.equation_variable_unit": "A változó a tartomány mértékegységét használja",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Origó elrejtése",
|
||||
"ui.hidePlanes": "Síkok elrejtése",
|
||||
"ui.hideProfile": "Profil elrejtése",
|
||||
"ui.hide_component_history": "Előzményeinek elrejtése",
|
||||
"ui.hide_origin_by_default": "Origó elrejtése alapértelmezetten",
|
||||
"ui.hide_origin_note": "Az új tervek az Origó mappa elrejtésével indulnak. A terv megtartja a saját Origó-beállítását, amint megjeleníti vagy elrejti.",
|
||||
"ui.history_back": "Egy lépéssel vissza",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "kattintson duplán az élre",
|
||||
"ui.history_first": "Ugrás az elejére",
|
||||
"ui.history_forward": "Egy lépéssel előre",
|
||||
"ui.history_hide_hidden": "Rejtett komponensek elrejtése",
|
||||
"ui.history_hide_names": "Nevek elrejtése",
|
||||
"ui.history_last": "Ugrás a végére",
|
||||
"ui.history_marker_tip": "Előzményjelölő: húzással visszagörgetheti a modellt; az új elemek ide kerülnek",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Lejátszás gomb megjelenítése",
|
||||
"ui.history_play_finish_action": "Az Előzmények lejátszása előtt fejezze be az aktuális műveletet",
|
||||
"ui.history_play_roll_back": "Lejátszás előtt mozgassa vissza az előzménymarkert",
|
||||
"ui.history_show_hidden": "Rejtett komponensek megjelenítése",
|
||||
"ui.history_show_names": "Nevek megjelenítése",
|
||||
"ui.history_sketch_listed_under": "Itt szerepel: {feature}",
|
||||
"ui.history_title": "Előzmények",
|
||||
"ui.history_toggle_names": "Elemnevek megjelenítése vagy elrejtése",
|
||||
"ui.history_waits_for_editor": "A Visszavonás, a Mégis és az Előzmények addig várnak, amíg az elemszerkesztő meg nem nyílik",
|
||||
"ui.hole": "Furat",
|
||||
"ui.hole_tap_type": "Furat menettípusa",
|
||||
"ui.hole_type": "Furat típusa",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "A(z) {name} nem mentett módosításokat tartalmaz, ezért a mentett fájlja lett beszúrva. Mentse el, majd a Kapcsolatok frissítése paranccsal hozza át a módosításokat.",
|
||||
"ui.insert_design.unsaved": "Nem mentett módosítások",
|
||||
"ui.inspect": "Vizsgálat",
|
||||
"ui.instances": "Példányok",
|
||||
"ui.intersect": "Metszet",
|
||||
"ui.isolate": "Elkülönítés",
|
||||
"ui.join": "Egyesítés",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Csuklók",
|
||||
"ui.keyboard_shortcuts": "Billentyűparancsok",
|
||||
"ui.language": "Nyelv",
|
||||
"ui.lasso_select": "Lasszó (húzzon szabadkézi hurkot: azt jelöli ki, ami teljesen belül van)",
|
||||
"ui.layout_compact": "Kompakt",
|
||||
"ui.layout_floating": "Lebegő",
|
||||
"ui.length": "Hossz",
|
||||
"ui.length_decimals": "Hossz tizedesjegyei",
|
||||
"ui.light": "Világos",
|
||||
"ui.line": "Vonal",
|
||||
"ui.line_arc_hint": "Érintő ív: kattintson az ív végpontjára. Vonalakhoz álljon meg újra az utolsó ponton; jobb kattintás vagy Esc a befejezéshez",
|
||||
"ui.link_copies": "Azonos másolatok összekapcsolása",
|
||||
"ui.link_copies_keep": "Megtartás",
|
||||
"ui.link_copies_link": "Összekapcsolás",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Újraépíti az alkatrészt, a hozzáadott elemeket lecserélve. A komponens minden előfordulása frissül.",
|
||||
"ui.paste": "Beillesztés",
|
||||
"ui.path": "Útvonal",
|
||||
"ui.pattern_object_type_tip": "Testek: tömör alakzatok, a nézetben vagy a Böngészőben kijelölve; mindegyik egészében másolódik.\nElemek: az Előzmények lépései, például egy kihúzás vagy egy furat, az Előzményekben vagy az általuk létrehozott lapon kijelölve; a lépés megismétlődik.\nA vázlat egyik sem: a görbéit a vázlat saját Minta vagy Tükrözés parancsával ismételje, vagy húzza ki előbb.",
|
||||
"ui.pattern_on_path": "Minta útvonalon",
|
||||
"ui.perforate_margin_default": "az átmérőből",
|
||||
"ui.perforate_pitch": "Osztás",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Sokszög",
|
||||
"ui.preferences": "Beállítások",
|
||||
"ui.press_a_key": "nyomjon meg egy billentyűt…",
|
||||
"ui.print_face_body_not_sent": "Ennek a lapnak a teste nincs elküldve: előbb add hozzá a Testekhez",
|
||||
"ui.print_face_cleared": "{body}: nyomtatási lap törölve",
|
||||
"ui.print_face_input": "Nyomtatási lap",
|
||||
"ui.print_face_one_body": "A nyomtatási lap egy testhez tartozik: a módosításhoz küldd el azt a testet egyedül",
|
||||
"ui.print_face_pick": "Válassz ki egy tömör test egy sík lapját, hogy az legyen a nyomtatási lap",
|
||||
"ui.print_face_set": "{body}: nyomtatási lap beállítva; a Küldés szeletelőnek erre a lapra fekteti a testet",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5053,7 +4908,6 @@
|
||||
"ui.showDimension": "Méret megjelenítése",
|
||||
"ui.showOrigin": "Origó megjelenítése",
|
||||
"ui.showPlanes": "Síkok megjelenítése",
|
||||
"ui.show_component_history": "Előzményeinek megjelenítése",
|
||||
"ui.show_constraints": "Kényszerek",
|
||||
"ui.show_construction_geometries": "Szerkesztő geometriák",
|
||||
"ui.show_dimensions": "Méretek",
|
||||
@@ -5170,15 +5024,12 @@
|
||||
"ui.view_angles": "Nézetszögek",
|
||||
"ui.view_angles_convention": "Fok a felfelé mutató tengely körül. Az elfordulás 0° az elölnézet, 90° a bal oldali, −90° a jobb oldali, 180° a hátulnézet; a 90°-os billentés a felülnézet; a pozitív gördülés az óramutató járásával megegyező irányba forgatja a modellt.",
|
||||
"ui.view_angles_help": "Megjeleníti a nézet billentését, elfordulását és gördülését fokban, valamint a vetítési módját a tájolásjelző alatt. Kattintson a kijelzőre a pontos szögek beírásához.",
|
||||
"ui.view_angles_lock": "{axis} zárolása",
|
||||
"ui.view_angles_ortho": "Ortog.",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Billentés",
|
||||
"ui.view_angles_readout": "Billentés {pitch} · Elfordulás {yaw} · Gördülés {roll}",
|
||||
"ui.view_angles_roll": "Gördülés",
|
||||
"ui.view_angles_unlock": "{axis} feloldása",
|
||||
"ui.view_angles_yaw": "Elfordulás",
|
||||
"ui.view_angles_zero": "{axis} beállítása 0°-ra",
|
||||
"ui.view_centre": "Nézet középpontja",
|
||||
"ui.viewport_status_clear": "Kikapcsolás: {name}",
|
||||
"ui.viewport_status_clear_hint": "Kikapcsolás: {name} · Esc",
|
||||
@@ -5236,7 +5087,7 @@
|
||||
"update.check_unavailable": "Ehhez a telepítéshez nem érhető el a frissítések keresése.",
|
||||
"update.checking": "Keresés…",
|
||||
"update.copy": "Másolás",
|
||||
"update.dmg_opened": "A lemezkép meg van nyitva és ellenőrizve: lépjen ki a SolidCraftból, húzza az új SolidCraftot az Alkalmazások mappába, lecserélve a régi példányt, majd nyissa meg újra a SolidCraftot.",
|
||||
"update.dmg_opened": "A lemezkép meg van nyitva és ellenőrizve: húzza a SolidCraftot az Alkalmazások mappába, lecserélve a régi példányt, majd indítsa újra a SolidCraftot.",
|
||||
"update.download": "Letöltés",
|
||||
"update.download_open": "Letöltés és megnyitás",
|
||||
"update.downloading": "Letöltés és ellenőrzés… {done}/{total} MB",
|
||||
@@ -5280,7 +5131,6 @@
|
||||
"web.open_link": "Megnyitja a csatolt tervet?",
|
||||
"web.open_link_confirm": "Mentetlen módosítások vannak. Megnyitja a csatolt tervet új fülön?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ választás · Enter / Tab kiegészítés · Esc elvetés",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ választás · Enter alkalmazza ezt az értéket",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ választás · Enter alkalmazza a beírtakat · Esc elvetés",
|
||||
"⌘Enter continues on GitHub.": "A ⌘Enter a GitHubon folytatja."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Persegi panjang",
|
||||
"Rectangular Tube": "Pipa Persegi Panjang",
|
||||
"Reference face": "Muka referensi",
|
||||
"Reference plane": "Bidang referensi",
|
||||
"Relief Depth": "Kedalaman Relief",
|
||||
"Relief Width": "Lebar Relief",
|
||||
"Remove Tools": "Hapus Alat",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Penampang",
|
||||
"Section (optional)": "Penampang (opsional)",
|
||||
"Section position": "Posisi penampang",
|
||||
"Sections": "Penampang",
|
||||
"Sections (one sketch each)": "Penampang (satu sketsa per penampang)",
|
||||
"Select Other": "Pilih Lainnya",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Select Other: tahan tombol kiri diam di model (atau klik kanan › Select Other…) untuk mendaftar semua yang ada di bawah kursor; klik lagi di titik yang sama untuk memilih benda berikutnya. Klik dua kali tombol tengah untuk ke Home (Preferensi › Navigasi).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (lampiran hilang)",
|
||||
"browser.sketch_editing": "{name} (sedang diedit)",
|
||||
"browser.sketch_name": "Sketsa{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "sudah berada di part-nya",
|
||||
"browser.sketches_to_parts_design_body": "pada bodi desain itu sendiri",
|
||||
"browser.sketches_to_parts_moved": "{moved} sketsa dipindahkan ke part tempat sketsa itu berada",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "pada muka tanpa lampiran yang tepat",
|
||||
"browser.sketches_to_parts_not_on_face": "tidak berada di muka sebuah part",
|
||||
"browser.sketches_to_parts_part_missing": "part-nya sudah tidak ada",
|
||||
"browser.sketches_to_parts_result": "{moved} sketsa dipindahkan ke part tempat sketsa itu berada; {stayed} tetap di tempatnya: {why}",
|
||||
"browser.units": "Satuan: {units}",
|
||||
"cam.flat": "Muka datar",
|
||||
"cam.follower": "Pengikut",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Ekstrak ke File",
|
||||
"cmd.component_finish_edit": "Selesai Edit",
|
||||
"cmd.component_from_bodies": "Buat Komponen dari Bodi",
|
||||
"cmd.component_hide_history": "Sembunyikan Riwayat Komponen",
|
||||
"cmd.component_insert_design": "Sisipkan Desain",
|
||||
"cmd.component_links": "Daftar Tautan",
|
||||
"cmd.component_list": "Daftar Komponen",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Pindahkan Bodi ke Komponen",
|
||||
"cmd.component_move_features": "Pindahkan Fitur ke Komponen",
|
||||
"cmd.component_move_sketches": "Pindahkan Sketsa ke Komponen",
|
||||
"cmd.component_move_sketches_to_parts": "Pindahkan Sketsa ke Part Masing-masing",
|
||||
"cmd.component_paste_from_design": "Tempel dari Desain Lain",
|
||||
"cmd.component_paste_new": "Tempel Baru",
|
||||
"cmd.component_properties": "Properti Fisik Komponen",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Ganti Nama Komponen",
|
||||
"cmd.component_replace_with_link": "Ganti dengan Tautan",
|
||||
"cmd.component_revert_position": "Kembalikan Posisi",
|
||||
"cmd.component_show_history": "Tampilkan Riwayat Komponen",
|
||||
"cmd.component_unlock": "Buka Kunci Isi",
|
||||
"cmd.component_update_links": "Perbarui Tautan",
|
||||
"cmd.config_activate": "Aktifkan Konfigurasi",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Aturan Konfigurasi",
|
||||
"cmd.config_rules": "Aturan Konfigurasi",
|
||||
"cmd.config_table": "Tampilkan Tabel Konfigurasi",
|
||||
"cmd.construct.plane.axis_point": "Bidang Melalui Sumbu dan Titik",
|
||||
"cmd.construct_axis_edge": "Sumbu Melalui Tepi",
|
||||
"cmd.construct_axis_normal_to_face": "Sumbu Tegak Lurus Muka",
|
||||
"cmd.construct_axis_through_cylinder": "Sumbu Melalui Silinder/Kerucut/Torus",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Tampilkan Tampilan Urai",
|
||||
"cmd.expr_evaluate": "Evaluasi Ekspresi",
|
||||
"cmd.face_delete": "Hapus Muka",
|
||||
"cmd.file.export_3mf": "Ekspor 3MF",
|
||||
"cmd.file.export_obj": "Ekspor OBJ",
|
||||
"cmd.file.export_step": "Ekspor STEP",
|
||||
"cmd.file.export_stl": "Ekspor STL",
|
||||
"cmd.file.export_urdf": "Ekspor URDF",
|
||||
"cmd.file_export": "Ekspor",
|
||||
"cmd.file_insert_mesh": "Sisipkan Mesh",
|
||||
"cmd.file_insert_step": "Sisipkan STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Aktifkan Warna Komponen",
|
||||
"cmd.inspect_colored_components_disable": "Nonaktifkan Warna Komponen",
|
||||
"cmd.inspect_compare": "Bandingkan Bodi",
|
||||
"cmd.inspect_compare_picture": "Bandingkan dengan Gambar",
|
||||
"cmd.inspect_continuity": "Analisis Kontinuitas",
|
||||
"cmd.inspect_curvature_comb": "Analisis Sisir Kelengkungan",
|
||||
"cmd.inspect_curvature_map": "Analisis Peta Kelengkungan",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Edit Awan Titik",
|
||||
"cmd.pointcloud_insert": "Sisipkan Awan Titik",
|
||||
"cmd.pointcloud_list": "Awan Titik",
|
||||
"cmd.render.compare.divider": "Pindahkan Pembagi Perbandingan Render",
|
||||
"cmd.render.result.discard": "Buang Hasil Render",
|
||||
"cmd.render.result.select": "Pilih Hasil Render",
|
||||
"cmd.render_aging_describe": "Penuaan Permukaan Berlapis",
|
||||
"cmd.render_backends": "Backend Render",
|
||||
"cmd.render_batch": "Render Semua Bidikan",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline Titik Kontrol (Derajat 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline Titik Fit",
|
||||
"cmd.sketch_spline_insert_point": "Tambah Titik Spline",
|
||||
"cmd.sketch_spline_remove_point": "Hapus Titik Spline",
|
||||
"cmd.sketch_spline_reverse": "Balik Arah Spline",
|
||||
"cmd.sketch_spun_profile": "Profil Putar",
|
||||
"cmd.sketch_toggle_diameter": "Beralih Radius / Diameter",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Pindahkan Penanda Linimasa",
|
||||
"cmd.timeline_stop": "Hentikan Riwayat",
|
||||
"cmd.timeline_suppress": "Tekan Fitur",
|
||||
"cmd.ui.assistant": "Alihkan Asisten",
|
||||
"cmd.view.render_browser": "Penjelajah Render",
|
||||
"cmd.view.render_dock": "Pindah Dok Render",
|
||||
"cmd.view.render_focus": "Tampilan Fokus Render",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Alat navigasi",
|
||||
"cmd.view_top": "Tampilan Atas",
|
||||
"cmd.view_visual_style": "Gaya visual",
|
||||
"color.blue": "Biru",
|
||||
"color.copy": "Klik untuk menyalin nilai warna",
|
||||
"color.edit": "Klik untuk mengedit warna",
|
||||
"color.gamma": "Menampilkan nilai warna dalam ruang gamma 0-255",
|
||||
"color.green": "Hijau",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Masukkan #rrggbb atau #rrggbbaa; enam digit mempertahankan opasitas",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Rona",
|
||||
"color.linear": "Menampilkan nilai warna dalam ruang linear 0-1",
|
||||
"color.recent": "Warna terbaru",
|
||||
"color.recent_help": "Warna yang Anda pilih di kolom warna mana pun muncul di sini",
|
||||
"color.red": "Merah",
|
||||
"color.saturation": "Saturasi (persen)",
|
||||
"color.saturation_value": "Saturasi dan nilai",
|
||||
"color.selected": "Warna terpilih",
|
||||
"color.step_down": "Turunkan",
|
||||
"color.step_up": "Naikkan",
|
||||
"color.value": "Nilai, yaitu kecerahan (persen)",
|
||||
"config.column_filter_empty": "Tidak ada kolom yang cocok",
|
||||
"config.rule_parameter_columns": "Hanya parameter yang memiliki kolom di tabel yang dicantumkan. Tambahkan satu dengan Tambah Kolom (+) untuk memakainya di sini.",
|
||||
"config.rule_suppression_columns": "Hanya fitur yang memiliki kolom Tekan di tabel yang dicantumkan. Tambahkan satu dengan Tambah Kolom (+) untuk mengendalikannya di sini.",
|
||||
"contact.components_count": "{count} komponen",
|
||||
"contact.enabled_label": "aktif",
|
||||
"coupling.gear_1": "Roda Gigi 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Dimensi: {name}",
|
||||
"dialog.edit_title": "EDIT {title}",
|
||||
"dialog.no_shown_body": "Tidak ada bodi yang ditampilkan untuk diubah: tampilkan satu, atau pilih Bodi Baru",
|
||||
"dialog.pattern_sketch_not_object": "Pilih bodi atau fitur: sketsa bukan keduanya. Ulangi kurvanya dengan Pola atau Cermin milik sketsa itu sendiri, atau ekstrusi dulu.",
|
||||
"dialog.select": "↖ Pilih",
|
||||
"dialog.selected_count": "↖ {count} terpilih",
|
||||
"dialog.selection_constraint": "Batasan {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · kurva {id}",
|
||||
"dialog.selection_guidance": "Pilih input untuk mengubahnya. Klik objek terpilih untuk menghapusnya; Ctrl/Cmd-klik juga mengalihkannya. Tinjau pratinjau, lalu tekan OK.",
|
||||
"dialog.selection_midpoint": "Titik tengah · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} dari {total}: Pilih {input}",
|
||||
"dialog.step": "Langkah",
|
||||
"document.changed_on_disk": "{name} berubah di disk",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Membuat sumbu konstruksi melalui dua titik, titik sudut, atau titik sketsa. Gunakan untuk sumbu yang membentang di antara dua posisi yang diketahui.",
|
||||
"help.construct.plane.along_path": "Membuat bidang konstruksi tegak lurus terhadap sebuah tepi atau kurva, pada suatu posisi di sepanjangnya. Gunakan untuk menggambar sketsa profil bagi sweep atau penampang sebuah jalur.",
|
||||
"help.construct.plane.at_angle": "Membuat bidang konstruksi yang diputar dengan suatu sudut dari sebuah bidang atau muka, terhadap sebuah sumbu atau tepi. Gunakan untuk sketsa miring, seperti braket bersudut.",
|
||||
"help.construct.plane.axis_point": "Membuat bidang konstruksi yang memuat sebuah sumbu dan sebuah titik di luar sumbu itu. Pilih sebuah origin atau sumbu konstruksi, sebuah tepi lurus atau garis sketsa, lalu sebuah titik sudut, titik sketsa, atau titik konstruksi. Titik yang berada pada sumbu tidak dapat menentukan satu bidang yang unik.",
|
||||
"help.construct.plane.midplane": "Membuat bidang konstruksi tepat di tengah antara dua bidang atau muka datar, atau membagi dua keduanya di tempat mereka bertemu pada suatu sudut. Gunakan sebagai bidang simetri untuk pencerminan.",
|
||||
"help.construct.plane.offset": "Membuat bidang konstruksi yang sejajar dengan sebuah bidang atau muka datar, pada suatu jarak atau melalui sebuah titik. Gunakan untuk menggambar sketsa pada ketinggian tertentu di atas sebuah muka.",
|
||||
"help.construct.plane.perpendicular": "Membuat bidang konstruksi yang memuat sebuah garis atau tepi dan berdiri tegak lurus terhadap sebuah bidang atau muka. Gunakan untuk menggambar sketsa tegak pada model sepanjang sebuah tepi.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Periksa tipe sambungan (misalnya Kaku), status ground, batas sambungan, dan nilai yang digerakkan parameter.",
|
||||
"joint_move.blocked_title": "Tidak dapat memindahkan part ini",
|
||||
"joint_move.coarse": "Langkah rotasi dekat sumbu (°)",
|
||||
"joint_move.conflict": "Sebuah sambungan part ini berkonflik dengan yang lain: {joint}.",
|
||||
"joint_move.conflict_hint": "Edit, tekan, atau hapus sambungan yang berkonflik agar sambungan lain dapat menempatkan part.",
|
||||
"joint_move.distance": "Jarak dari awal",
|
||||
"joint_move.done": "Selesai",
|
||||
"joint_move.fine": "Langkah rotasi jauh dari sumbu (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Track {number}",
|
||||
"nav.alias.help": "Shift+Alt+seret kiri memutar orbit, Shift+Alt+tombol tengah menggeser, Shift+Alt+klik kanan memperbesar/memperkecil; seret tombol tengah juga menggeser dan seret kanan memutar orbit",
|
||||
"nav.blender.help": "Seret tombol tengah memutar orbit, Shift+tombol tengah menggeser, Ctrl+tombol tengah memperbesar/memperkecil; seret kanan tidak menggerakkan kamera",
|
||||
"nav.creo.help": "Seret tombol tengah memutar orbit, Shift+tombol tengah menggeser, Ctrl+seret tombol tengah secara vertikal memperbesar/memperkecil (ke bawah untuk memperbesar); gulir roda untuk zoom",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Mouse dan mouse 3D berputar melewati kedua kutub dan mempertahankan roll. Penjepretan sumbu dengan Shift dinonaktifkan.",
|
||||
"nav.free_orbit.label": "Orbit bebas",
|
||||
"nav.free_orbit.snap_help": "Mouse dan mouse 3D berputar melewati kedua kutub dan mempertahankan roll. Tahan Shift saat menyeret orbit untuk menjepret arah tampilan dan roll.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+seret kiri menggeser, Shift+Alt+kiri memperbesar/memperkecil, Ctrl+seret kiri di area kosong mengorbit",
|
||||
"nav.inventor.help": "Seret tombol tengah menggeser, Shift+tombol tengah memutar orbit, Ctrl+tombol tengah memperbesar/memperkecil, seret kanan memutar orbit",
|
||||
"nav.maya.help": "Alt+seret kiri mengorbit, Alt+tengah menggeser, Alt+kanan memperbesar/memperkecil; seret tengah juga menggeser",
|
||||
"nav.nx.help": "Seret tombol tengah memutar orbit, Shift+tombol tengah menggeser (tombol tengah + kanan di NX), Ctrl+tombol tengah memperbesar/memperkecil (tombol tengah + kiri di NX); seret kanan tidak menggerakkan kamera",
|
||||
"nav.openscad.help": "Seret kiri di ruang kosong memutar orbit, Shift+seret kiri memilih dengan kotak, seret geometri sketsa mengeditnya; seret kanan atau tombol tengah menggeser, Shift+seret kanan atau Shift+seret tombol tengah memperbesar/memperkecil",
|
||||
"nav.perspective.sketch": "Pengeditan sketsa memakai tampilan ortografis. Selesaikan sketsa untuk beralih ke perspektif.",
|
||||
"nav.right_drag_orbits.help": "Mati: seret kanan tidak menggerakkan kamera dan tombol kanan hanya membuka menu konteks. Memilih pemetaan mouse SolidWorks akan mematikannya.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Sekrup kepala bulat (button head)",
|
||||
"parts.family.dowel_pin": "Pin paralel (dowel)",
|
||||
"parts.family.hex_bolt": "Baut / sekrup kepala segi enam",
|
||||
"parts.family.hex_cap_screw_inch": "Sekrup kepala segi enam (cap screw, inci)",
|
||||
"parts.family.hex_nut": "Mur segi enam",
|
||||
"parts.family.hex_nut_inch": "Mur segi enam (inci)",
|
||||
"parts.family.set_screw": "Sekrup set soket segi enam, ujung datar",
|
||||
"parts.family.socket_head_cap_screw": "Sekrup kepala soket (cap screw)",
|
||||
"parts.family.washer": "Ring datar (washer)",
|
||||
"parts.family.washer_sae": "Ring datar (washer), SAE (sempit)",
|
||||
"parts.family.washer_uss": "Ring datar (washer), USS (lebar)",
|
||||
"parts.holes": "Lubang (opsional)",
|
||||
"parts.placement_hint": "pilih satu lubang atau lebih untuk menempatkan part di masing-masing, atau OK menempatkannya di origin",
|
||||
"parts.system": "Sistem satuan",
|
||||
"parts.system.inch": "Inci",
|
||||
"parts.system.metric": "Metrik",
|
||||
"pattern.alignment_2": "Perataan 2",
|
||||
"pattern.alignment_hint": "Jumlah termasuk yang asli. Center menyeimbangkan salinan; Flip memilih sisi tambahan untuk total genap.",
|
||||
"pattern.direction_1": "Arah 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Seret kiri",
|
||||
"prefs.button_middle": "Seret tengah",
|
||||
"prefs.button_right": "Seret kanan",
|
||||
"prefs.carousel_next": "Berikutnya",
|
||||
"prefs.carousel_previous": "Sebelumnya",
|
||||
"prefs.choose_font": "Pilih file font…",
|
||||
"prefs.click": "Klik",
|
||||
"prefs.contact_shading": "Bayangan kontak lembut",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Permukaan melengkung",
|
||||
"prefs.curves": "Permukaan melengkung",
|
||||
"prefs.cut_preview_tint": "Tampilkan material yang dihilangkan dengan warna merah",
|
||||
"prefs.cut_preview_tint_help": "Pratinjau mengisi material yang dihilangkan sebuah fitur, dan bentuk yang digantikannya, dengan bayangan merah tembus pandang. Jika mati, isian itu sepenuhnya transparan dan hanya garis luarnya yang digambar.",
|
||||
"prefs.dark_parts_shading": "Pertahankan bentuk part yang gelap",
|
||||
"prefs.dark_parts_shading_help": "Melakukan pewarnaan tampilan dalam cahaya linear dengan cahaya pengisi langit yang lembut, sehingga muka yang gelap tetap memiliki gradasi dan tidak menjadi hitam",
|
||||
"prefs.dead_zone_note": "Pita berarsir adalah zona mati: gerakan di dalamnya diabaikan.",
|
||||
"prefs.default": "default",
|
||||
"prefs.design": "Default desain",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Tepi dan pewarnaan",
|
||||
"prefs.extend": "Perpanjang",
|
||||
"prefs.extra_navigation": "Ctrl+seret kiri pada ruang kosong untuk orbit; tahan Space untuk geser.",
|
||||
"prefs.extrude_view_isometric": "Putar tampilan ke isometrik saat Ekstrusi dibuka",
|
||||
"prefs.extrude_view_return": "Kembali ke tampilan sebelumnya saat Ekstrusi ditutup",
|
||||
"prefs.follows_os": "Mengikuti OS",
|
||||
"prefs.font": "Font",
|
||||
"prefs.font_fallback": "Glif yang tidak dimiliki font pilihan akan memakai font bawaan, sehingga tidak ada label yang menampilkan kotak kosong.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Otomatis",
|
||||
"prefs.graphics_card_missing": "Kartu grafis yang disimpan tidak tersedia; Otomatis dipakai.",
|
||||
"prefs.graphics_card_restart": "Berlaku setelah SolidCraft dimulai ulang. WGPU_ADAPTER_NAME menggantikan pilihan ini.",
|
||||
"prefs.graphics_card_unused": "Kartu grafis yang tersimpan tidak dipakai untuk jendela ini; kartu yang sedang dipakai ditampilkan di Bantuan › Tentang dan di bilah status. Coba Otomatis, atau atur WGPU_ADAPTER_NAME ke bagian unik dari nama kartu.",
|
||||
"prefs.graphics_note": "Tukar kecepatan dengan kehalusan. Setiap pilihan menampilkan efeknya pada sebuah contoh.",
|
||||
"prefs.graphics_presets_note": "Preset mengatur pilihan di bawah secara bersamaan.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Sembunyikan glif batasan saat zoom out",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Jika Sketsa diatur ke Di bawah fiturnya, Riwayat di sisi kiri mencantumkan setiap sketsa satu tingkat ke dalam, di bawah fitur pertama yang dibuat darinya, selama cukup lebar untuk menampilkan nama. Timeline di bagian bawah selalu mempertahankan urutan pembuatan.",
|
||||
"prefs.history_sketches_under_feature": "Di bawah fiturnya",
|
||||
"prefs.hold_stop_snapping": "Tahan untuk menghentikan snap",
|
||||
"prefs.home_fit_size": "Ukuran Awal dan Pas",
|
||||
"prefs.home_fit_size_note": "Seberapa besar bagian tampilan yang diisi model saat Awal, Pas, desain yang baru dibuka, atau perubahan tampilan lewat navigator tampilan membingkainya, baik pengaturan di bawah ini aktif maupun tidak. 100 %: mengisi tampilan di antara panel, kompas, dan bilah navigasi.",
|
||||
"prefs.icons_only": "Hanya ikon",
|
||||
"prefs.imported_file": "File yang diimpor",
|
||||
"prefs.in_browser": "Di dalam penjelajah",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Bahasa antarmuka",
|
||||
"prefs.interface_note": "Tampilan SolidCraft dan letak bagian-bagiannya.",
|
||||
"prefs.interval_minutes": "{n} mnt",
|
||||
"prefs.invert_curved_roll_arrows": "Balikkan panah roll melengkung",
|
||||
"prefs.invert_curved_roll_arrows_note": "Dua panah melengkung di sudut kubus memutar (roll) tampilan di dalam bidang layar. Aktif: panah searah jarum jam memutar berlawanan arah jarum jam dan panah berlawanan arah jarum jam memutar searah jarum jam. Mati: tiap panah memutar tampilan sesuai arah lengkungannya.",
|
||||
"prefs.invert_navigator_arrows": "Balikkan panah rotasi kubus tampilan",
|
||||
"prefs.invert_navigator_arrows_note": "Panah di sekeliling kubus memutar orbit kamera ke arah yang ditunjuknya, seperti di Fusion dan Inventor: panah di kiri menunjuk ke kanan dan mengayunkan kamera ke kanan. Mati: panah memutar kubus ke sisi tempatnya berada, sehingga panah kiri mengayunkan kamera ke kiri. Panah roll yang melengkung tidak terpengaruh.",
|
||||
"prefs.keep_work_on_tab_switch": "Biarkan dialog dan alat tetap terbuka saat berpindah desain",
|
||||
"prefs.keep_work_on_tab_switch_note": "Setiap tab desain mempertahankan dialog atau alat yang terbuka, beserta apa yang Anda pilih dan ketik di dalamnya, dan tab toolbar-nya. Semuanya kembali saat Anda kembali ke desain itu. Mati: berpindah desain membatalkannya dan menampilkan tab Model.",
|
||||
"prefs.labels": "Label",
|
||||
"prefs.language_system": "Sistem",
|
||||
"prefs.layout": "Tata letak",
|
||||
"prefs.layout_note": "Ringkas menempelkan panel ke tepi jendela. Translusensi penjelajah tersedia di Mengambang. Ubah sisi Asisten di halaman Asisten.",
|
||||
"prefs.left": "Kiri",
|
||||
"prefs.left_click": "Klik kiri",
|
||||
"prefs.line_drag_draws_one": "Tekan dan seret menggambar satu garis",
|
||||
"prefs.line_drag_draws_one_note": "Di alat Garis, menekan, menyeret, lalu melepas menggambar satu garis dari titik tekan hingga titik lepas, dan garis berakhir di sana. Klik tetap menggambar rantai. Mati: seretan menaruh titik di tempat dilepas, seperti klik.",
|
||||
"prefs.line_hover_tangent_arc": "Diamkan penunjuk di titik terakhir garis untuk beralih ke busur tangen",
|
||||
"prefs.line_hover_tangent_arc_note": "Di alat Garis, setelah satu segmen digambar, jauhkan penunjuk dari titik terakhir rantai, kembali, lalu diamkan penunjuk di titik itu: klik berikutnya menentukan ujung busur tangen, dan gerakan yang sama kembali ke garis. Mati: berdiam di sana tidak berpengaruh.",
|
||||
"prefs.linked_designs": "Desain tertaut",
|
||||
"prefs.live_input": "Input langsung",
|
||||
"prefs.live_preview": "Pratinjau langsung",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Pemetaan mouse",
|
||||
"prefs.navigation": "Navigasi",
|
||||
"prefs.navigation_note": "Cara mouse, trackpad, dan mouse 3D menggerakkan tampilan.",
|
||||
"prefs.navigator_fit": "Buat model pas di tampilan setelah perubahan tampilan lewat navigator",
|
||||
"prefs.navigator_fit_note": "Sebuah muka, sudut, atau panah pada kubus tampilan, atau sumbu pada gizmo, juga menghadap ke tengah model dari satu jarak yang membuatnya pas dari segala sisi (bola pembatasnya). Awal memakai zoom dan pusat yang sama selama opsi ini aktif, sehingga tampilan yang dipilih setelahnya hanya berputar. Mati: tampilan berputar di tempat, dengan target dan zoom tetap.",
|
||||
"prefs.network_host_remove": "Hapus",
|
||||
"prefs.network_locations": "Izinkan lokasi jaringan di desain",
|
||||
"prefs.network_locations_note": "Nonaktif: file tertaut sebuah desain di komputer lain (\\\\server\\share) hanya dibuka dari server yang tercantum di sini, atau setelah Anda mengizinkan salah satunya saat ditanya.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Penempatan",
|
||||
"prefs.prefer_free_sketch_points": "Utamakan titik sketsa yang dapat digerakkan saat titik saling tumpang tindih",
|
||||
"prefs.preview_choices": "Pratinjau pilihan Anda",
|
||||
"prefs.preview_tint_new_faces": "Warnai permukaan baru di pratinjau",
|
||||
"prefs.preview_tint_new_faces_help": "Pratinjau fitur yang mengubah sebuah bodi dapat menggambar permukaan yang ditambahkannya dengan warna pratinjau. Jika mati, bodi digambar apa adanya.",
|
||||
"prefs.print_face_highlight": "Sorotan permukaan cetak",
|
||||
"prefs.print_face_highlight_tip": "Seberapa kuat permukaan cetak sebuah bodi diwarnai dan diberi garis tepi di tampilan. 0 % tidak menampilkan sorotan.",
|
||||
"prefs.profile_active": "Profil aktif",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Gunakan anggaran geometri pratinjau Render sebelumnya",
|
||||
"prefs.render_previous_geometry_budget_help": "Pulihkan batas geometri tetap sebelumnya (512 MiB di desktop 64-bit, 128 MiB di tempat lain) alih-alih anggaran berbasis perangkat.",
|
||||
"prefs.reports_saved": "{n} tersimpan",
|
||||
"prefs.ribbon_click_ends_tool": "Mengklik tombol alat yang sedang berjalan mengakhirinya",
|
||||
"prefs.ribbon_click_ends_tool_note": "Klik pada tombol ribbon yang menyala dari alat sketsa yang sedang dipakai mengakhiri alat itu, sehingga klik di tampilan kembali memilih. Mati: klik memulai alat itu lagi.",
|
||||
"prefs.ribbon_reveal": "Tampilkan hasil pencarian di ribbon",
|
||||
"prefs.ribbon_reveal_note": "Mengarahkan kursor ke hasil di Cari perintah menunjukkan letak perintah itu di ribbon: tab-nya, tombolnya, atau barisnya di dropdown panel. Perintah yang dimulai dari pencarian berkedip di sana, dan perintah yang berjalan dari dropdown menandai panelnya.",
|
||||
"prefs.right_click": "Klik kanan",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Kembali ke tampilan sebelumnya",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Kembali kecuali diputar",
|
||||
"prefs.sketch_exit_view_note": "Ke mana tampilan beralih setelah Selesai Sketsa, Batal, atau Esc dua kali.",
|
||||
"prefs.sketch_face_activates_part": "Menggambar sketsa di muka part membuat part itu aktif",
|
||||
"prefs.sketch_face_activates_part_note": "Sketsa yang dimulai di muka bodi milik komponen lain mengaktifkan komponen itu lebih dulu, sehingga sketsa menjadi milik komponen tersebut dan tetap bersama part itu di penjelajah. Part itu tetap aktif setelahnya. Mati: sketsa menjadi milik komponen aktif.",
|
||||
"prefs.sketch_open_look_at": "Putar untuk menghadap sketsa saat dibuka",
|
||||
"prefs.sketch_open_look_at_note": "Mati: membuat atau mengedit sketsa membiarkan tampilan apa adanya. Look At menghadapkan tampilan ke sketsa saat Anda menginginkannya.",
|
||||
"prefs.sketch_recent_snap": "Snap otomatis ke pusat dan titik tengah terbaru",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Error",
|
||||
"prefs.status_selected": "Terpilih",
|
||||
"prefs.status_warning": "Peringatan",
|
||||
"prefs.structure.appearance": "Tampilan",
|
||||
"prefs.structure.appearance_note": "Warna, teks, dan aksesibilitas.",
|
||||
"prefs.structure.in_profile": "Dalam profil",
|
||||
"prefs.structure.layout": "Tata letak",
|
||||
"prefs.structure.layout_note": "Letak bagian-bagian jendela.",
|
||||
"prefs.structure.look": "Rupa",
|
||||
"prefs.structure.measure_pointer": "Ukur dan penunjuk",
|
||||
"prefs.structure.mouse3d": "Mouse 3D",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse dan SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Mouse dan trackpad. Mouse 3D punya halamannya sendiri.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Berubah sejak disimpan",
|
||||
"prefs.structure.profile_hover": "Disimpan di profil pengaturan",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Sketsa",
|
||||
"prefs.structure.tools": "Alat",
|
||||
"prefs.structure.tools_note": "Cara kerja alat pemodelan.",
|
||||
"prefs.structure.work": "Kerja",
|
||||
"prefs.supersampling_brief": "Menggambar tampilan lebih besar lalu menyaringnya turun: sangat tajam, tetapi lebih berat.",
|
||||
"prefs.tab_accent_note": "Aksen mengikuti tab aktif",
|
||||
"prefs.theme_file": "file tema",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Warna dasar · sRGB",
|
||||
"render.base_metallic": "Fraksi metalik",
|
||||
"render.base_opaque_only": "Editor ini mempertahankan semantik bodi opak. Gunakan kontrol kaca eksplisit untuk transmisi optik.",
|
||||
"render.batch_all_shots": "Semua bidikan ({count})",
|
||||
"render.batch_empty": "Simpan sebuah bidikan sebelum merender semua bidikan.",
|
||||
"render.batch_limit": "Render Semua Bidikan dibatasi hingga 32 bidikan.",
|
||||
"render.batch_status": "{running} berjalan · {waiting} menunggu",
|
||||
"render.bloom_enable": "Tampilkan bloom",
|
||||
"render.bloom_help": "Cahaya kreatif khusus keluaran dari sorotan linear positif, disebar dengan tiga lintasan kotak ternormalisasi. Radius dalam piksel keluaran. Ditambahkan dalam cahaya tampilan linear sebelum sRGB; bukan lensa, efek volumetrik, atau peningkatan konvergensi. EXR mentah tidak berubah.",
|
||||
"render.bloom_opaque": "Bloom memerlukan keluaran opak. PNG transparan ditolak, tidak diratakan secara diam-diam.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Pilih look di Tampilan terlebih dahulu",
|
||||
"render.chromatic_offset": "Offset tepi kromatik",
|
||||
"render.clear_stage": "Hapus panggung tersimpan",
|
||||
"render.compare_divider": "Pembagi perbandingan",
|
||||
"render.compare_live": "Langsung",
|
||||
"render.compare_live_preview": "Pratinjau langsung",
|
||||
"render.compare_render": "Render {number}",
|
||||
"render.compare_side": "Render {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} d · {renderer} · ditangkap pada revisi {revision}",
|
||||
"render.compare_swap": "Tukar",
|
||||
"render.copy_request": "Salin JSON",
|
||||
"render.cpu_aa_help": "Sampel spasial: lebih banyak sampel memperbaiki tepi dan menambah waktu render.",
|
||||
"render.cpu_area_add": "Tambah lampu persegi panjang CPU",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Menampilkan gambar selesai terakhir; render yang lebih baru belum menggantikannya.",
|
||||
"render.result_sequence": "Checkpoint",
|
||||
"render.result_title": "Hasil Render",
|
||||
"render.results_choose": "Hasil yang dipertahankan",
|
||||
"render.results_label": "Render {number} · {shot} · {seconds} d",
|
||||
"render.results_stale_label": "{result} [usang]",
|
||||
"render.results_unnamed": "Gambar",
|
||||
"render.return_design": "Kembali ke Desain",
|
||||
"render.review_stale": "Tinjauan ini sudah usang. Selesaikan atau periksa lagi sebelum menerapkan.",
|
||||
"render.ribbon_aging": "Penuaan",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Mulai dengan = untuk menyusun kata dari parameter: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Miring",
|
||||
"sketch_text.loading_fonts": "Mencari font terpasang…",
|
||||
"sketch_text.no_bold": "Font bawaan tidak memiliki varian tebal: pilih font yang terpasang",
|
||||
"sketch_text.on_path": "Teks mengikuti jalurnya: kurva yang menempatkannya",
|
||||
"sketch_text.path_clear": "Lepaskan teks dari kurvanya",
|
||||
"sketch_text.path_hint": "Kurva sketsa yang diikuti teks: klik di sini, lalu kurvanya",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "kedua origin berada pada komponen yang sama",
|
||||
"thread.automatic_size": "Ukuran otomatis",
|
||||
"thread.designation": "Penunjukan",
|
||||
"thread.direction": "Arah ulir",
|
||||
"thread.iso_metric": "ISO metrik",
|
||||
"thread.left_hand": "Ulir kiri",
|
||||
"thread.right_hand": "Ulir kanan",
|
||||
"thread.select_size": "Pilih ukuran",
|
||||
"timeline.delete_after_marker_one": "Hapus 1 Fitur Setelah Penanda Riwayat",
|
||||
"timeline.delete_after_marker_other": "Hapus {count} Fitur Setelah Penanda Riwayat",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Jalankan ini di terminal, lalu tekan Hubungkan lagi:",
|
||||
"ui.agent_chat_auth_title": "Masuk ke agen",
|
||||
"ui.agent_chat_cancel": "Batal",
|
||||
"ui.agent_chat_cancel_timeout": "Agen tidak merespons Berhenti dan terputus. Hubungkan lagi untuk melanjutkan.",
|
||||
"ui.agent_chat_cannot_start": "Terpasang, tetapi tidak dapat dimulai: {error}",
|
||||
"ui.agent_chat_changes": "Perubahan: {n}, satu langkah urung",
|
||||
"ui.agent_chat_changes_n": "{n} perubahan",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Perintah agen",
|
||||
"ui.agent_chat_connect": "Hubungkan",
|
||||
"ui.agent_chat_copy": "Salin",
|
||||
"ui.agent_chat_copy_message": "Salin pesan",
|
||||
"ui.agent_chat_ctx_bodies": "Bodi",
|
||||
"ui.agent_chat_ctx_elements": "Elemen",
|
||||
"ui.agent_chat_ctx_features": "Fitur",
|
||||
"ui.agent_chat_ctx_more": "+{n} lagi",
|
||||
"ui.agent_chat_ctx_other": "Lainnya",
|
||||
"ui.agent_chat_custom_heading": "Model kustom",
|
||||
"ui.agent_chat_custom_hint": "Program apa pun yang berbicara Agent Client Protocol lewat stdin dan stdout. Tidak dijalankan oleh shell.",
|
||||
"ui.agent_chat_denied": "Ditolak",
|
||||
"ui.agent_chat_deny": "Tolak",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Semua",
|
||||
"ui.agent_chat_mode_ask": "Tanya",
|
||||
"ui.agent_chat_mode_edits": "Edit",
|
||||
"ui.agent_chat_model_custom": "Gunakan kustom: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} tidak dapat memakai alat SolidCraft, jadi hanya bisa mengobrol. Pilih model yang mendukung alat.",
|
||||
"ui.agent_chat_model_rejected": "Agen tidak menerima {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Cari model…",
|
||||
"ui.agent_chat_model_tip": "Model yang dipakai agen. Pilihan Anda diingat untuk agen ini.",
|
||||
"ui.agent_chat_models_failed": "Tidak dapat mencantumkan model: {error}",
|
||||
"ui.agent_chat_models_heading": "Model yang tersedia",
|
||||
"ui.agent_chat_models_listing": "Mencantumkan model…",
|
||||
"ui.agent_chat_models_none": "Endpoint tidak mencantumkan model",
|
||||
"ui.agent_chat_models_not_a_list": "Jawabannya bukan daftar model",
|
||||
"ui.agent_chat_new": "Chat baru",
|
||||
"ui.agent_chat_new_confirm": "Mulai chat baru? Chat saat ini akan dibersihkan.",
|
||||
"ui.agent_chat_next_picture": "Gambar berikutnya",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Izin",
|
||||
"ui.ai_preset": "Preset",
|
||||
"ui.ai_protocol": "Protokol",
|
||||
"ui.ai_reasoning_effort": "Upaya penalaran",
|
||||
"ui.ai_reasoning_effort_field_hint": "kosong = default penyedia",
|
||||
"ui.ai_reasoning_effort_hint": "Opsional. Dikirim ke endpoint sebagai `reasoning_effort`; nilai yang diterima berbeda untuk setiap penyedia (misalnya `low`, `high`, atau `max`). Nilai yang Anda atur di sini tidak pernah diganti oleh SolidCraft. Biarkan kosong agar tidak ada yang dikirim dan default penyedia tetap berlaku.",
|
||||
"ui.ai_remove": "Hapus",
|
||||
"ui.ai_request_timed_out": "Model membutuhkan waktu lebih dari {seconds} s. Anda dapat menaikkan batas waktu permintaan untuk endpoint ini di Preferensi › Asisten.",
|
||||
"ui.ai_request_timeout": "Batas waktu permintaan",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Garis singgung: pilih lingkaran/busur atau spline/kurva konik terbuka, lalu titik singgung (kurva bentuk bebas: titik ujung)",
|
||||
"ui.construction.external_hint": "Garis singgung: pilih lingkaran atau busur, sebuah titik luar, lalu solusi yang diinginkan",
|
||||
"ui.construction.free_hint": "Garis bantu: klik dua titik; klik kanan untuk mengulang",
|
||||
"ui.construction.normal_needs_length": "Garis tak hingga selalu berupa garis bantu: ketik panjang untuk menggambar garis normal",
|
||||
"ui.construction.point_hint": "Garis bantu: klik titik yang akan dilalui",
|
||||
"ui.construction.reference_hint": "Garis bantu: pilih garis lurus, lalu sebuah titik; klik kanan untuk mengganti referensi",
|
||||
"ui.construction.ribbon_label": "Garis bantu",
|
||||
"ui.construction.side_hint": "Garis bantu: klik sisi tempat garis mengarah; klik kanan untuk mengulang",
|
||||
"ui.context_menu": "Menu konteks",
|
||||
"ui.continuity_crease": "Lipatan",
|
||||
"ui.continuity_curvature": "Kelengkungan",
|
||||
"ui.continuity_curvature_change": "Perubahan kelengkungan",
|
||||
"ui.continuity_g0": "Lipatan G0",
|
||||
"ui.continuity_g1": "Tangen G1",
|
||||
"ui.continuity_g2": "Kelengkungan G2",
|
||||
"ui.continuity_gap": "Celah",
|
||||
"ui.continuity_position": "Posisi",
|
||||
"ui.continuity_tangent": "Tangen",
|
||||
"ui.copy": "Salin",
|
||||
"ui.corner": "Sudut",
|
||||
"ui.corners": "Sudut",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Gelap",
|
||||
"ui.default_modelling_orientation": "Orientasi pemodelan default",
|
||||
"ui.delete": "Hapus",
|
||||
"ui.delete_select_first": "Pilih dulu yang akan dihapus: fitur, bodi, komponen, atau geometri sketsa",
|
||||
"ui.depth": "Kedalaman",
|
||||
"ui.design": "Desain",
|
||||
"ui.design_properties.author": "Pembuat",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Part disimpan ke file lain; rakitan masih menautkan {name}",
|
||||
"ui.edit_in_place_wait": "Tunggu sampai proses yang berjalan di desain selesai",
|
||||
"ui.edit_section_analysis": "Edit Analisis Penampang",
|
||||
"ui.edit_sketch_empty": "Tidak ada sketsa untuk diedit",
|
||||
"ui.ellipse": "Elips",
|
||||
"ui.emboss_wrap_note": "Profil garis ortogonal yang tangen pada satu silinder yang didukung dibungkus otomatis. Pilih dinding untuk menentukan target.",
|
||||
"ui.end_radius": "Radius Akhir",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Eksplisit",
|
||||
"ui.equation_form": "Bentuk",
|
||||
"ui.equation_note": "Variabelnya berupa angka biasa: sin(t) menganggapnya dalam radian. Hasil tanpa satuan memakai satuan desain.",
|
||||
"ui.equation_note_range": "Variabelnya berupa panjang, seperti rentangnya: campurkan dengan parameter panjang, dan bagi dengan sebuah panjang untuk sin(). Hasil tanpa satuan memakai satuan desain.",
|
||||
"ui.equation_parametric": "Parametrik",
|
||||
"ui.equation_variable_unit": "Variabel memakai satuan rentang",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Sembunyikan Origin",
|
||||
"ui.hidePlanes": "Sembunyikan Bidang",
|
||||
"ui.hideProfile": "Sembunyikan Profil",
|
||||
"ui.hide_component_history": "Sembunyikan Riwayatnya",
|
||||
"ui.hide_origin_by_default": "Sembunyikan origin secara default",
|
||||
"ui.hide_origin_note": "Desain baru dimulai dengan folder Origin tersembunyi. Desain mempertahankan pengaturan Origin-nya sendiri setelah Anda menampilkan atau menyembunyikannya.",
|
||||
"ui.history_back": "Mundur satu langkah",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "klik dua kali tepinya",
|
||||
"ui.history_first": "Ke awal",
|
||||
"ui.history_forward": "Maju satu langkah",
|
||||
"ui.history_hide_hidden": "Sembunyikan Komponen Tersembunyi",
|
||||
"ui.history_hide_names": "Sembunyikan nama",
|
||||
"ui.history_last": "Ke akhir",
|
||||
"ui.history_marker_tip": "Penanda riwayat: seret untuk memundurkan model; fitur baru ditaruh di sini",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Tampilkan Tombol Putar",
|
||||
"ui.history_play_finish_action": "Selesaikan aksi saat ini sebelum memutar Riwayat",
|
||||
"ui.history_play_roll_back": "Pindahkan penanda Riwayat ke belakang sebelum memutar",
|
||||
"ui.history_show_hidden": "Tampilkan Komponen Tersembunyi",
|
||||
"ui.history_show_names": "Tampilkan nama",
|
||||
"ui.history_sketch_listed_under": "Terdaftar di bawah {feature}",
|
||||
"ui.history_title": "Riwayat",
|
||||
"ui.history_toggle_names": "Tampilkan atau sembunyikan nama fitur",
|
||||
"ui.history_waits_for_editor": "Urungkan, Ulangi, dan Riwayat menunggu hingga editor fitur terbuka",
|
||||
"ui.hole": "Lubang",
|
||||
"ui.hole_tap_type": "Tipe Tap Lubang",
|
||||
"ui.hole_type": "Tipe Lubang",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} memiliki perubahan yang belum disimpan, sehingga file tersimpannya yang disisipkan. Simpan desain itu, lalu jalankan Perbarui Tautan untuk memasukkan perubahannya.",
|
||||
"ui.insert_design.unsaved": "Perubahan belum disimpan",
|
||||
"ui.inspect": "Inspeksi",
|
||||
"ui.instances": "Instans",
|
||||
"ui.intersect": "Irisan",
|
||||
"ui.isolate": "Isolasi",
|
||||
"ui.join": "Gabung",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Sambungan",
|
||||
"ui.keyboard_shortcuts": "Pintasan Keyboard",
|
||||
"ui.language": "Bahasa",
|
||||
"ui.lasso_select": "Lasso (seret lengkung tertutup bebas: memilih yang seluruhnya berada di dalam)",
|
||||
"ui.layout_compact": "Ringkas",
|
||||
"ui.layout_floating": "Mengambang",
|
||||
"ui.length": "Panjang",
|
||||
"ui.length_decimals": "Desimal panjang",
|
||||
"ui.light": "Terang",
|
||||
"ui.line": "Garis",
|
||||
"ui.line_arc_hint": "Busur tangen: klik ujung busur. Diamkan lagi di titik terakhir untuk garis; klik kanan atau Esc untuk selesai",
|
||||
"ui.link_copies": "Tautkan Salinan Identik",
|
||||
"ui.link_copies_keep": "Pertahankan",
|
||||
"ui.link_copies_link": "Tautkan",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Membangun ulang part, menggantikan fitur tambahan apa pun. Semua kemunculan komponen ini diperbarui.",
|
||||
"ui.paste": "Tempel",
|
||||
"ui.path": "Jalur",
|
||||
"ui.pattern_object_type_tip": "Bodi: bentuk solid, dipilih di tampilan atau Penjelajah; masing-masing disalin utuh.\nFitur: langkah-langkah Riwayat, seperti ekstrusi atau lubang, dipilih di Riwayat atau pada muka yang dibuatnya; langkah itu diulang.\nSketsa bukan keduanya: ulangi kurvanya dengan Pola atau Cermin milik sketsa itu sendiri, atau ekstrusi dulu.",
|
||||
"ui.pattern_on_path": "Pola pada Jalur",
|
||||
"ui.perforate_margin_default": "dari diameter",
|
||||
"ui.perforate_pitch": "Pitch",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Poligon",
|
||||
"ui.preferences": "Preferensi",
|
||||
"ui.press_a_key": "tekan tombol…",
|
||||
"ui.print_face_body_not_sent": "Bodi permukaan itu tidak dikirim: tambahkan dulu ke Bodi",
|
||||
"ui.print_face_cleared": "{body}: permukaan cetak dihapus",
|
||||
"ui.print_face_input": "Permukaan cetak",
|
||||
"ui.print_face_one_body": "Permukaan cetak milik satu bodi: kirim bodi itu sendiri untuk mengubahnya",
|
||||
"ui.print_face_pick": "Pilih satu permukaan datar dari bodi padat untuk dijadikan permukaan cetak",
|
||||
"ui.print_face_set": "{body}: permukaan cetak diatur; Kirim ke slicer meletakkan bodi di atasnya",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5053,7 +4908,6 @@
|
||||
"ui.showDimension": "Tampilkan Dimensi",
|
||||
"ui.showOrigin": "Tampilkan Origin",
|
||||
"ui.showPlanes": "Tampilkan Bidang",
|
||||
"ui.show_component_history": "Tampilkan Riwayatnya",
|
||||
"ui.show_constraints": "Batasan",
|
||||
"ui.show_construction_geometries": "Geometri Konstruksi",
|
||||
"ui.show_dimensions": "Dimensi",
|
||||
@@ -5170,15 +5024,12 @@
|
||||
"ui.view_angles": "Sudut tampilan",
|
||||
"ui.view_angles_convention": "Derajat terhadap sumbu atas. Yaw 0° adalah tampilan Depan, 90° Kiri, −90° Kanan, 180° Belakang; pitch 90° adalah tampilan Atas; roll positif memutar model searah jarum jam.",
|
||||
"ui.view_angles_help": "Menampilkan pitch, yaw, dan roll tampilan dalam derajat serta proyeksinya di bawah gizmo orientasi. Klik pembacaan untuk mengetik sudut yang tepat.",
|
||||
"ui.view_angles_lock": "Kunci {axis}",
|
||||
"ui.view_angles_ortho": "Ortho",
|
||||
"ui.view_angles_persp": "Persp",
|
||||
"ui.view_angles_pitch": "Pitch",
|
||||
"ui.view_angles_readout": "Pitch {pitch} · Yaw {yaw} · Roll {roll}",
|
||||
"ui.view_angles_roll": "Roll",
|
||||
"ui.view_angles_unlock": "Buka kunci {axis}",
|
||||
"ui.view_angles_yaw": "Yaw",
|
||||
"ui.view_angles_zero": "Atur {axis} ke 0°",
|
||||
"ui.view_centre": "Pusat tampilan",
|
||||
"ui.viewport_status_clear": "Matikan {name}",
|
||||
"ui.viewport_status_clear_hint": "Matikan {name} · Esc",
|
||||
@@ -5236,7 +5087,7 @@
|
||||
"update.check_unavailable": "Pemeriksaan pembaruan tidak tersedia untuk instalasi ini.",
|
||||
"update.checking": "Memeriksa…",
|
||||
"update.copy": "Salin",
|
||||
"update.dmg_opened": "Disk image terbuka dan terverifikasi: keluar dari SolidCraft, seret SolidCraft yang baru ke Applications, ganti salinan lama, lalu buka SolidCraft lagi.",
|
||||
"update.dmg_opened": "Disk image terbuka dan terverifikasi: seret SolidCraft ke Applications, ganti salinan lama, lalu mulai ulang SolidCraft.",
|
||||
"update.download": "Unduh",
|
||||
"update.download_open": "Unduh dan buka",
|
||||
"update.downloading": "Mengunduh dan memverifikasi… {done} dari {total} MB",
|
||||
@@ -5280,7 +5131,6 @@
|
||||
"web.open_link": "Buka desain tertaut?",
|
||||
"web.open_link_confirm": "Ada perubahan yang belum disimpan. Buka desain tertaut di tab baru?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ pilih · Enter / Tab lengkapi · Esc tutup",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ pilih · Enter menerapkan nilai ini",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ pilih · Enter menerapkan yang Anda ketik · Esc tutup",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter melanjutkan di GitHub."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Rettangolare",
|
||||
"Rectangular Tube": "Tubo rettangolare",
|
||||
"Reference face": "Faccia di riferimento",
|
||||
"Reference plane": "Piano di riferimento",
|
||||
"Relief Depth": "Profondità di scarico",
|
||||
"Relief Width": "Larghezza di scarico",
|
||||
"Remove Tools": "Rimuovi corpi utensile",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Sezione",
|
||||
"Section (optional)": "Sezione (facoltativa)",
|
||||
"Section position": "Posizione della sezione",
|
||||
"Sections": "Sezioni",
|
||||
"Sections (one sketch each)": "Sezioni (uno schizzo ciascuna)",
|
||||
"Select Other": "Seleziona altro",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Seleziona altro: tieni premuto il pulsante sinistro senza muovere il puntatore sul modello (o fai clic destro › Seleziona altro…) per elencare gli oggetti sotto il cursore; fai di nuovo clic nello stesso punto per selezionare l'oggetto successivo. Fai doppio clic con il pulsante centrale per tornare alla vista iniziale (Preferenze › Navigazione).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (aggancio perso)",
|
||||
"browser.sketch_editing": "{name} (in modifica)",
|
||||
"browser.sketch_name": "Schizzo{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "già nella loro parte",
|
||||
"browser.sketches_to_parts_design_body": "su un corpo del progetto stesso",
|
||||
"browser.sketches_to_parts_moved": "Spostati {moved} schizzi nella parte su cui si trovano",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "su una faccia senza un collegamento esatto",
|
||||
"browser.sketches_to_parts_not_on_face": "non sulla faccia di una parte",
|
||||
"browser.sketches_to_parts_part_missing": "la loro parte non esiste più",
|
||||
"browser.sketches_to_parts_result": "Spostati {moved} schizzi nella parte su cui si trovano; {stayed} sono rimasti dove erano: {why}",
|
||||
"browser.units": "Unità: {units}",
|
||||
"cam.flat": "Faccia piana",
|
||||
"cam.follower": "Cedente",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Estrai in file",
|
||||
"cmd.component_finish_edit": "Termina modifica",
|
||||
"cmd.component_from_bodies": "Crea componenti da corpi",
|
||||
"cmd.component_hide_history": "Nascondi cronologia del componente",
|
||||
"cmd.component_insert_design": "Inserisci progetto",
|
||||
"cmd.component_links": "Elenca collegamenti",
|
||||
"cmd.component_list": "Elenca componenti",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Sposta corpi nel componente",
|
||||
"cmd.component_move_features": "Sposta lavorazioni nel componente",
|
||||
"cmd.component_move_sketches": "Sposta schizzi nel componente",
|
||||
"cmd.component_move_sketches_to_parts": "Sposta schizzi nelle rispettive parti",
|
||||
"cmd.component_paste_from_design": "Incolla da un altro progetto",
|
||||
"cmd.component_paste_new": "Incolla come nuovo",
|
||||
"cmd.component_properties": "Proprietà fisiche del componente",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Rinomina componente",
|
||||
"cmd.component_replace_with_link": "Sostituisci con collegamento",
|
||||
"cmd.component_revert_position": "Ripristina posizione",
|
||||
"cmd.component_show_history": "Mostra cronologia del componente",
|
||||
"cmd.component_unlock": "Sblocca contenuto",
|
||||
"cmd.component_update_links": "Aggiorna collegamenti",
|
||||
"cmd.config_activate": "Attiva configurazione",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Regola di configurazione",
|
||||
"cmd.config_rules": "Regole di configurazione",
|
||||
"cmd.config_table": "Mostra tabella delle configurazioni",
|
||||
"cmd.construct.plane.axis_point": "Piano per un asse e un punto",
|
||||
"cmd.construct_axis_edge": "Asse lungo uno spigolo",
|
||||
"cmd.construct_axis_normal_to_face": "Asse perpendicolare a una faccia",
|
||||
"cmd.construct_axis_through_cylinder": "Asse di cilindro/cono/toro",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Mostra vista esplosa",
|
||||
"cmd.expr_evaluate": "Valuta espressione",
|
||||
"cmd.face_delete": "Elimina faccia",
|
||||
"cmd.file.export_3mf": "Esporta 3MF",
|
||||
"cmd.file.export_obj": "Esporta OBJ",
|
||||
"cmd.file.export_step": "Esporta STEP",
|
||||
"cmd.file.export_stl": "Esporta STL",
|
||||
"cmd.file.export_urdf": "Esporta URDF",
|
||||
"cmd.file_export": "Esporta",
|
||||
"cmd.file_insert_mesh": "Inserisci mesh",
|
||||
"cmd.file_insert_step": "Inserisci STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Attiva colori dei componenti",
|
||||
"cmd.inspect_colored_components_disable": "Disattiva colori dei componenti",
|
||||
"cmd.inspect_compare": "Confronta corpi",
|
||||
"cmd.inspect_compare_picture": "Confronta immagine",
|
||||
"cmd.inspect_continuity": "Analisi di continuità",
|
||||
"cmd.inspect_curvature_comb": "Analisi del pettine di curvatura",
|
||||
"cmd.inspect_curvature_map": "Analisi della mappa di curvatura",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Modifica nuvola di punti",
|
||||
"cmd.pointcloud_insert": "Inserisci nuvola di punti",
|
||||
"cmd.pointcloud_list": "Nuvole di punti",
|
||||
"cmd.render.compare.divider": "Sposta divisore del confronto di rendering",
|
||||
"cmd.render.result.discard": "Scarta risultato di rendering",
|
||||
"cmd.render.result.select": "Seleziona risultato di rendering",
|
||||
"cmd.render_aging_describe": "Invecchiamento a strati delle superfici",
|
||||
"cmd.render_backends": "Motori di rendering",
|
||||
"cmd.render_batch": "Renderizza tutte le inquadrature",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline per punti di controllo (grado 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline interpolante",
|
||||
"cmd.sketch_spline_insert_point": "Aggiungi punto alla spline",
|
||||
"cmd.sketch_spline_remove_point": "Rimuovi punto dalla spline",
|
||||
"cmd.sketch_spline_reverse": "Inverti direzione della spline",
|
||||
"cmd.sketch_spun_profile": "Profilo di tornitura",
|
||||
"cmd.sketch_toggle_diameter": "Alterna raggio / diametro",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Sposta marcatore della sequenza temporale",
|
||||
"cmd.timeline_stop": "Arresta riproduzione cronologia",
|
||||
"cmd.timeline_suppress": "Sospendi lavorazione",
|
||||
"cmd.ui.assistant": "Mostra/Nascondi assistente",
|
||||
"cmd.view.render_browser": "Struttura del rendering",
|
||||
"cmd.view.render_dock": "Sposta pannello di rendering",
|
||||
"cmd.view.render_focus": "Vista focalizzata sul rendering",
|
||||
@@ -1303,11 +1279,9 @@
|
||||
"cmd.view_tool": "Strumento di navigazione",
|
||||
"cmd.view_top": "Vista dall'alto",
|
||||
"cmd.view_visual_style": "Stile di visualizzazione",
|
||||
"color.blue": "Blu",
|
||||
"color.copy": "Fai clic per copiare i valori del colore",
|
||||
"color.edit": "Fai clic per modificare il colore",
|
||||
"color.gamma": "Valori del colore mostrati nello spazio gamma 0-255",
|
||||
"color.green": "Verde",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Inserisci #rrggbb o #rrggbbaa; con sei cifre l'opacità resta invariata",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
@@ -1315,7 +1289,6 @@
|
||||
"color.linear": "Valori del colore mostrati nello spazio lineare 0-1",
|
||||
"color.recent": "Colori recenti",
|
||||
"color.recent_help": "I colori scelti in qualsiasi campo colore compaiono qui",
|
||||
"color.red": "Rosso",
|
||||
"color.saturation": "Saturazione (percentuale)",
|
||||
"color.saturation_value": "Saturazione e valore",
|
||||
"color.selected": "Colore selezionato",
|
||||
@@ -1323,8 +1296,6 @@
|
||||
"color.step_up": "Aumenta di un passo",
|
||||
"color.value": "Valore, la luminosità (percentuale)",
|
||||
"config.column_filter_empty": "Nessuna colonna corrispondente",
|
||||
"config.rule_parameter_columns": "Sono elencati solo i parametri che hanno una colonna nella tabella. Aggiungine una con Aggiungi colonna (+) per usarla qui.",
|
||||
"config.rule_suppression_columns": "Sono elencate solo le lavorazioni che hanno una colonna Sospendi nella tabella. Aggiungine una con Aggiungi colonna (+) per comandarle da qui.",
|
||||
"contact.components_count": "{count} componenti",
|
||||
"contact.enabled_label": "abilitato",
|
||||
"coupling.gear_1": "Ruota dentata 1",
|
||||
@@ -1370,14 +1341,9 @@
|
||||
"dialog.dimension_name": "Quota: {name}",
|
||||
"dialog.edit_title": "MODIFICA {title}",
|
||||
"dialog.no_shown_body": "Nessun corpo visibile da modificare: mostrane uno o scegli Nuovo corpo",
|
||||
"dialog.pattern_sketch_not_object": "Seleziona corpi o lavorazioni: uno schizzo non è nessuno dei due. Ripeti le sue curve con Ripetizione o Specchia dello schizzo stesso, oppure estrudilo prima.",
|
||||
"dialog.select": "↖ Seleziona",
|
||||
"dialog.selected_count": "↖ Selezionati: {count}",
|
||||
"dialog.selection_constraint": "Vincolo {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · curva {id}",
|
||||
"dialog.selection_guidance": "Seleziona un dato di ingresso per modificarlo. Fai clic sugli oggetti selezionati per rimuoverli; anche Ctrl/Cmd-clic ne alterna la selezione. Controlla l'anteprima, poi premi OK.",
|
||||
"dialog.selection_midpoint": "Punto medio · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profilo {number}",
|
||||
"dialog.selection_step": "{step} di {total}: seleziona {input}",
|
||||
"dialog.step": "Passo",
|
||||
"document.changed_on_disk": "{name} è stato modificato sul disco",
|
||||
@@ -1392,7 +1358,6 @@
|
||||
"document.read_only_save": "Questa progettazione è stata aperta in sola lettura: salvala come nuovo file",
|
||||
"document.save_changes": "Salvare le modifiche a {name}?",
|
||||
"document.save_copy": "Salva una copia…",
|
||||
"document.tab_unsaved_changes": "Modifiche non salvate",
|
||||
"document.unsaved_changes": "{name} contiene modifiche non salvate. Se non salvi, andranno perse.",
|
||||
"drive.rigid": "{joint} è un giunto rigido: tiene ferme le sue parti, quindi non c'è nulla da azionare. Per farle muovere, cambia il suo tipo in Modifica giunto: Rotante per ruotare, Scorrevole per scorrere, Cilindrico per entrambi.",
|
||||
"drive.stopped_by_contact": "Arrestato a {value}: {a} attraverserebbe {b}",
|
||||
@@ -1461,7 +1426,6 @@
|
||||
"help.construct.axis.two_points": "Crea un asse di costruzione passante per due punti, vertici o punti dello schizzo. Usalo per un asse che collega due posizioni note.",
|
||||
"help.construct.plane.along_path": "Crea un piano di costruzione perpendicolare a uno spigolo o a una curva, in una posizione lungo di essa. Usalo per disegnare il profilo di uno sweep o una sezione di un percorso.",
|
||||
"help.construct.plane.at_angle": "Crea un piano di costruzione ruotato di un angolo rispetto a un piano o a una faccia, attorno a un asse o a uno spigolo. Usalo per schizzi inclinati, ad esempio una staffa angolata.",
|
||||
"help.construct.plane.axis_point": "Crea un piano di costruzione che contiene un asse e un punto esterno all'asse. Seleziona un'origine o un asse di costruzione, uno spigolo rettilineo o una linea dello schizzo, poi un vertice, un punto dello schizzo o un punto di costruzione. Un punto sull'asse non può definire un piano univoco.",
|
||||
"help.construct.plane.midplane": "Crea un piano di costruzione a metà tra due piani o facce piane, oppure che li biseca dove si incontrano ad angolo. Usalo come piano di simmetria per specchiare.",
|
||||
"help.construct.plane.offset": "Crea un piano di costruzione parallelo a un piano o a una faccia piana, a una certa distanza o passante per un punto. Usalo per disegnare a un'altezza stabilita sopra una faccia.",
|
||||
"help.construct.plane.perpendicular": "Crea un piano di costruzione che contiene una linea o uno spigolo ed è perpendicolare a un piano o a una faccia. Usalo per disegnare in verticale sul modello lungo uno spigolo.",
|
||||
@@ -1838,8 +1802,6 @@
|
||||
"joint_move.blocked_hint": "Controlla il tipo di giunto (ad esempio Rigido), il fissaggio a terra, i limiti del giunto e i valori comandati da parametri.",
|
||||
"joint_move.blocked_title": "Impossibile spostare questa parte",
|
||||
"joint_move.coarse": "Passo di rotazione vicino all'asse (°)",
|
||||
"joint_move.conflict": "Un giunto di questa parte è in conflitto con gli altri: {joint}.",
|
||||
"joint_move.conflict_hint": "Modifica, sospendi o elimina il giunto in conflitto, così gli altri giunti potranno posizionare la parte.",
|
||||
"joint_move.distance": "Distanza dall'inizio",
|
||||
"joint_move.done": "Fatto",
|
||||
"joint_move.fine": "Passo di rotazione lontano dall'asse (°)",
|
||||
@@ -1939,8 +1901,6 @@
|
||||
"motion.track_name": "Traccia {number}",
|
||||
"nav.alias.help": "Shift+Alt+trascinamento sinistro orbita, Shift+Alt+centrale fa la panoramica, Shift+Alt+destro fa lo zoom; anche il trascinamento centrale fa la panoramica e il destro orbita",
|
||||
"nav.blender.help": "Il trascinamento centrale orbita, Shift+centrale fa la panoramica, Ctrl+centrale fa lo zoom; il trascinamento destro lascia ferma la vista",
|
||||
"nav.creo.help": "Il trascinamento centrale orbita, Shift+centrale fa la panoramica, il trascinamento verticale con Ctrl+centrale fa lo zoom (verso il basso per avvicinare); scorri la rotellina per fare lo zoom",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Mouse e mouse 3D ruotano oltre entrambi i poli e conservano il rollio. L'aggancio degli assi con Shift è disattivato.",
|
||||
"nav.free_orbit.label": "Orbita libera",
|
||||
"nav.free_orbit.snap_help": "Mouse e mouse 3D ruotano oltre entrambi i poli e conservano il rollio. Tieni premuto Shift durante il trascinamento dell'orbita per agganciare la direzione della vista e il rollio.",
|
||||
@@ -1950,7 +1910,6 @@
|
||||
"nav.hfss.help": "Alt+trascinamento con il pulsante sinistro esegue la panoramica, Shift+Alt+pulsante sinistro lo zoom, Ctrl+trascinamento con il pulsante sinistro su uno spazio vuoto orbita",
|
||||
"nav.inventor.help": "Il trascinamento centrale fa la panoramica, Shift+centrale orbita, Ctrl+centrale fa lo zoom, il trascinamento destro orbita",
|
||||
"nav.maya.help": "Alt+trascinamento con il pulsante sinistro orbita, Alt+pulsante centrale esegue la panoramica, Alt+pulsante destro lo zoom; anche il trascinamento con il pulsante centrale esegue la panoramica",
|
||||
"nav.nx.help": "Il trascinamento centrale orbita, Shift+centrale fa la panoramica (centrale + destro di NX), Ctrl+centrale fa lo zoom (centrale + sinistro di NX); il trascinamento destro lascia ferma la vista",
|
||||
"nav.openscad.help": "Il trascinamento sinistro nello spazio vuoto orbita, Shift+trascinamento sinistro seleziona con un riquadro, il trascinamento sulla geometria dello schizzo la modifica; il trascinamento destro o centrale fa la panoramica, Shift+destro o Shift+centrale fa lo zoom",
|
||||
"nav.perspective.sketch": "La modifica dello schizzo usa la vista ortogonale. Termina lo schizzo per passare alla prospettiva.",
|
||||
"nav.right_drag_orbits.help": "Disattivato: il trascinamento con il pulsante destro non muove la camera e il pulsante destro apre solo il menu contestuale. Scegliendo l'assegnazione del mouse SolidWorks l'opzione si disattiva.",
|
||||
@@ -2093,19 +2052,12 @@
|
||||
"parts.family.button_head_cap_screw": "Vite a testa bombata con esagono incassato",
|
||||
"parts.family.dowel_pin": "Spina cilindrica",
|
||||
"parts.family.hex_bolt": "Vite a testa esagonale",
|
||||
"parts.family.hex_cap_screw_inch": "Vite a testa esagonale (pollici)",
|
||||
"parts.family.hex_nut": "Dado esagonale",
|
||||
"parts.family.hex_nut_inch": "Dado esagonale (pollici)",
|
||||
"parts.family.set_screw": "Grano a esagono incassato, punta piana",
|
||||
"parts.family.socket_head_cap_screw": "Vite a testa cilindrica con esagono incassato",
|
||||
"parts.family.washer": "Rondella piana",
|
||||
"parts.family.washer_sae": "Rondella piana, SAE (stretta)",
|
||||
"parts.family.washer_uss": "Rondella piana, USS (larga)",
|
||||
"parts.holes": "Fori (facoltativo)",
|
||||
"parts.placement_hint": "scegli uno o più fori per alloggiare una parte in ciascuno, oppure OK la colloca nell'origine",
|
||||
"parts.system": "Sistema di unità",
|
||||
"parts.system.inch": "Pollici",
|
||||
"parts.system.metric": "Metrico",
|
||||
"pattern.alignment_2": "Allineamento 2",
|
||||
"pattern.alignment_hint": "Il conteggio include l'originale. Centro distribuisce le copie sui due lati; Inverti sceglie il lato con la copia in più per totali pari.",
|
||||
"pattern.direction_1": "Direzione 1",
|
||||
@@ -2158,8 +2110,6 @@
|
||||
"prefs.bottom_centre": "In basso al centro",
|
||||
"prefs.bottom_right": "In basso a destra",
|
||||
"prefs.browser": "Struttura",
|
||||
"prefs.browser_components_open": "Componenti aperti all'inizio",
|
||||
"prefs.browser_components_open_note": "Ogni componente nel browser inizia aperto, come prima, invece che chiuso finché non lo apri.",
|
||||
"prefs.browser_eye_left": "Occhio accanto alla freccia di espansione",
|
||||
"prefs.browser_eye_left_note": "Le righe della Struttura mostrano l'occhio mostra/nascondi accanto alla freccia di espansione, come prima, invece che in una colonna all'estremità destra delle righe.",
|
||||
"prefs.browser_reveal_on_hover": "Mostra al passaggio del puntatore",
|
||||
@@ -2169,8 +2119,6 @@
|
||||
"prefs.button_left": "Trascinamento sinistro",
|
||||
"prefs.button_middle": "Trascinamento centrale",
|
||||
"prefs.button_right": "Trascinamento destro",
|
||||
"prefs.carousel_next": "Successivo",
|
||||
"prefs.carousel_previous": "Precedente",
|
||||
"prefs.choose_font": "Scegli il file del carattere…",
|
||||
"prefs.click": "Clic",
|
||||
"prefs.contact_shading": "Ombreggiatura di contatto morbida",
|
||||
@@ -2183,10 +2131,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Superfici curve",
|
||||
"prefs.curves": "Superfici curve",
|
||||
"prefs.cut_preview_tint": "Mostra in rosso il materiale rimosso",
|
||||
"prefs.cut_preview_tint_help": "Un'anteprima riempie il materiale che una lavorazione rimuove, e la forma che sostituisce, con un fantasma rosso semitrasparente. Se disattivato, questi riempimenti sono completamente trasparenti e vengono disegnati solo i loro contorni.",
|
||||
"prefs.dark_parts_shading": "Mantieni la forma delle parti scure",
|
||||
"prefs.dark_parts_shading_help": "Ombreggia la vista in luce lineare con un morbido riempimento di luce dal cielo, così le facce scure mantengono una sfumatura invece di diventare nere",
|
||||
"prefs.dead_zone_note": "La fascia tratteggiata è la zona morta: il movimento al suo interno viene ignorato.",
|
||||
"prefs.default": "predefinito",
|
||||
"prefs.design": "Impostazioni predefinite del progetto",
|
||||
@@ -2201,8 +2145,6 @@
|
||||
"prefs.edges": "Spigoli e ombreggiatura",
|
||||
"prefs.extend": "Estendi",
|
||||
"prefs.extra_navigation": "Ctrl+trascina con il sinistro sullo spazio vuoto per orbitare; tieni premuto Space per la panoramica.",
|
||||
"prefs.extrude_view_isometric": "Porta la vista in isometrica all'apertura di Estrusione",
|
||||
"prefs.extrude_view_return": "Torna alla vista precedente alla chiusura di Estrusione",
|
||||
"prefs.follows_os": "Segue il sistema operativo",
|
||||
"prefs.font": "Carattere",
|
||||
"prefs.font_fallback": "I simboli che mancano nel carattere scelto passano a quello integrato, così nessuna etichetta mostra un riquadro vuoto.",
|
||||
@@ -2218,7 +2160,6 @@
|
||||
"prefs.graphics_card_auto": "Automatica",
|
||||
"prefs.graphics_card_missing": "La scheda grafica salvata non è disponibile; viene usata Automatica.",
|
||||
"prefs.graphics_card_restart": "Ha effetto dopo il riavvio di SolidCraft. WGPU_ADAPTER_NAME prevale su questa scelta.",
|
||||
"prefs.graphics_card_unused": "La scheda grafica salvata non è stata usata per questa finestra; la scheda in uso è indicata in Aiuto › Informazioni su e nella barra di stato. Prova Automatica, oppure imposta WGPU_ADAPTER_NAME su una parte univoca del nome della scheda.",
|
||||
"prefs.graphics_note": "Scegli tra velocità e fluidità dell'immagine. Ogni scelta mostra il suo effetto su un esempio.",
|
||||
"prefs.graphics_presets_note": "Una preimpostazione regola insieme le scelte qui sotto.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Nascondi i simboli dei vincoli quando lo zoom è ridotto",
|
||||
@@ -2233,8 +2174,6 @@
|
||||
"prefs.history_sketches_note": "Con Schizzi impostato su Sotto la lavorazione, la Cronologia a sinistra elenca ogni schizzo rientrato di un livello, sotto la prima lavorazione creata a partire da esso, quando è abbastanza larga da mostrare i nomi. La cronologia in basso mantiene sempre l'ordine di creazione.",
|
||||
"prefs.history_sketches_under_feature": "Sotto la lavorazione",
|
||||
"prefs.hold_stop_snapping": "Tieni premuto per disattivare l'aggancio",
|
||||
"prefs.home_fit_size": "Dimensione di Inizio e Adatta",
|
||||
"prefs.home_fit_size_note": "Quanta parte della vista occupa il modello quando Inizio, Adatta, un progetto aperto o un cambio di vista dal navigatore della vista ne impostano l'inquadratura, sia o no attiva l'impostazione qui sotto. 100 %: riempie la vista tra i pannelli, la bussola e la barra di navigazione.",
|
||||
"prefs.icons_only": "Solo icone",
|
||||
"prefs.imported_file": "File importato",
|
||||
"prefs.in_browser": "Nella Struttura",
|
||||
@@ -2243,22 +2182,13 @@
|
||||
"prefs.interface_language": "Lingua dell'interfaccia",
|
||||
"prefs.interface_note": "Aspetto di SolidCraft e disposizione dei suoi elementi.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Inverti le frecce curve di rollio",
|
||||
"prefs.invert_curved_roll_arrows_note": "Le due frecce curve all'angolo del cubo fanno ruotare la vista nel piano dello schermo. Attivato: la freccia oraria ruota in senso antiorario e la freccia antioraria ruota in senso orario. Disattivato: ogni freccia ruota la vista nel verso in cui si curva.",
|
||||
"prefs.invert_navigator_arrows": "Inverti le frecce di rotazione del cubo della vista",
|
||||
"prefs.invert_navigator_arrows_note": "Le frecce attorno al cubo fanno orbitare la camera nella direzione in cui puntano, come in Fusion e Inventor: la freccia a sinistra punta a destra e sposta la camera a destra. Disattivato: una freccia ruota il cubo verso il lato in cui si trova, quindi la freccia sinistra sposta la camera a sinistra. Le frecce curve di rollio non sono interessate.",
|
||||
"prefs.keep_work_on_tab_switch": "Mantieni aperti finestre di dialogo e strumenti quando cambi progetto",
|
||||
"prefs.keep_work_on_tab_switch_note": "Ogni scheda di progetto conserva la finestra di dialogo o lo strumento aperto, con ciò che hai scelto e digitato, e la propria scheda della barra degli strumenti. Li ritrovi quando torni al progetto. Disattivato: cambiando progetto vengono annullati e compare la scheda Modella.",
|
||||
"prefs.labels": "Etichette",
|
||||
"prefs.language_system": "Sistema",
|
||||
"prefs.layout": "Disposizione",
|
||||
"prefs.layout_note": "Compatta: pannelli ancorati ai bordi della finestra. La trasparenza della Struttura è disponibile in Flottante. Cambia il lato dell'Assistente nella pagina Assistente.",
|
||||
"prefs.left": "Sinistra",
|
||||
"prefs.left_click": "Clic sinistro",
|
||||
"prefs.line_drag_draws_one": "Premi e trascina per disegnare una linea",
|
||||
"prefs.line_drag_draws_one_note": "Nello strumento Linea, premere, trascinare e rilasciare disegna una linea dal punto di pressione a quello di rilascio, e il disegno termina lì. I clic disegnano comunque una catena. Disattivato: un trascinamento posiziona un punto dove viene rilasciato, come un clic.",
|
||||
"prefs.line_hover_tangent_arc": "Fermati sull'ultimo punto di una linea per passare a un arco tangente",
|
||||
"prefs.line_hover_tangent_arc_note": "Nello strumento Linea, dopo aver disegnato un segmento, allontanati dall'ultimo punto della catena, torna indietro e tieni fermo il puntatore su di esso: il clic successivo termina un arco tangente, e lo stesso gesto riporta alle linee. Disattivato: fermarsi lì non fa nulla.",
|
||||
"prefs.linked_designs": "Progetti collegati",
|
||||
"prefs.live_input": "Input in tempo reale",
|
||||
"prefs.live_preview": "Anteprima dal vivo",
|
||||
@@ -2282,8 +2212,6 @@
|
||||
"prefs.mouse_mapping": "Assegnazione del mouse",
|
||||
"prefs.navigation": "Navigazione",
|
||||
"prefs.navigation_note": "Come mouse, trackpad e mouse 3D spostano la vista.",
|
||||
"prefs.navigator_fit": "Adatta il modello dopo un cambio di vista dal navigatore",
|
||||
"prefs.navigator_fit_note": "Una faccia, un angolo o una freccia del cubo della vista, o un asse del gizmo, guarda anche il centro del modello dall'unica distanza che lo inquadra da ogni lato (la sua sfera di ingombro). Inizio usa lo stesso zoom e lo stesso centro finché questa opzione è attiva, quindi le viste scelte dopo si limitano a ruotare. Disattivato: la vista ruota sul posto, mantenendo punto di mira e zoom.",
|
||||
"prefs.network_host_remove": "Rimuovi",
|
||||
"prefs.network_locations": "Consenti posizioni di rete nei progetti",
|
||||
"prefs.network_locations_note": "Disattivato: i file collegati di un progetto su un altro computer (\\\\server\\share) vengono aperti solo dai server elencati qui, o dopo che ne consenti uno quando richiesto.",
|
||||
@@ -2304,8 +2232,6 @@
|
||||
"prefs.placement": "Posizione",
|
||||
"prefs.prefer_free_sketch_points": "Preferisci i punti dello schizzo mobili quando i punti si sovrappongono",
|
||||
"prefs.preview_choices": "Anteprima delle tue scelte",
|
||||
"prefs.preview_tint_new_faces": "Colora la nuova superficie in un'anteprima",
|
||||
"prefs.preview_tint_new_faces_help": "L'anteprima di una lavorazione che modifica un corpo può disegnare la superficie aggiunta con il colore dell'anteprima. Se disattivato, il corpo viene disegnato com'è.",
|
||||
"prefs.print_face_highlight": "Evidenziazione della faccia di stampa",
|
||||
"prefs.print_face_highlight_tip": "Intensità della tinta e del contorno della faccia di stampa di un corpo nella vista. 0 % non mostra evidenziazione.",
|
||||
"prefs.profile_active": "Profilo attivo",
|
||||
@@ -2334,8 +2260,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Usa il budget di geometria precedente per l'anteprima di Rendering",
|
||||
"prefs.render_previous_geometry_budget_help": "Ripristina il limite fisso di geometria precedente (512 MiB su desktop a 64 bit, 128 MiB altrove) invece del budget basato sul dispositivo.",
|
||||
"prefs.reports_saved": "{n} salvati",
|
||||
"prefs.ribbon_click_ends_tool": "Un clic sul pulsante dello strumento in uso lo termina",
|
||||
"prefs.ribbon_click_ends_tool_note": "Un clic sul pulsante evidenziato nella barra multifunzione dello strumento di schizzo in uso termina lo strumento, così i clic nella vista tornano a selezionare. Disattivato: il clic avvia di nuovo lo strumento.",
|
||||
"prefs.ribbon_reveal": "Mostra i risultati della ricerca nella barra multifunzione",
|
||||
"prefs.ribbon_reveal_note": "Passando il puntatore su un risultato in Cerca comandi si vede dove si trova il comando nella barra multifunzione: la sua scheda, il suo pulsante o la sua riga nel menu a discesa di un pannello. Un comando avviato dalla ricerca lampeggia lì, e un comando in esecuzione da un menu a discesa ne evidenzia il pannello.",
|
||||
"prefs.right_click": "Clic destro",
|
||||
@@ -2365,8 +2289,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Torna alla vista precedente",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Torna, se non ruotata",
|
||||
"prefs.sketch_exit_view_note": "Dove va la vista dopo Termina schizzo, Annulla o un doppio Esc.",
|
||||
"prefs.sketch_face_activates_part": "Creare uno schizzo sulla faccia di una parte rende attiva quella parte",
|
||||
"prefs.sketch_face_activates_part_note": "Uno schizzo avviato sulla faccia di un corpo di un altro componente attiva prima quel componente, così lo schizzo gli appartiene e resta con quella parte nella Struttura. In seguito la parte resta attiva. Disattivato: lo schizzo appartiene al componente attivo.",
|
||||
"prefs.sketch_open_look_at": "Ruota la vista verso lo schizzo quando si apre",
|
||||
"prefs.sketch_open_look_at_note": "Disattivato: creando o modificando uno schizzo la vista resta com'è. Vista normale orienta la vista sullo schizzo quando vuoi.",
|
||||
"prefs.sketch_recent_snap": "Aggancia automaticamente ai centri e punti medi recenti",
|
||||
@@ -2398,24 +2320,6 @@
|
||||
"prefs.status_error": "Errore",
|
||||
"prefs.status_selected": "Selezionato",
|
||||
"prefs.status_warning": "Avviso",
|
||||
"prefs.structure.appearance": "Aspetto",
|
||||
"prefs.structure.appearance_note": "Colori, testo e accessibilità.",
|
||||
"prefs.structure.in_profile": "Nel profilo",
|
||||
"prefs.structure.layout": "Disposizione",
|
||||
"prefs.structure.layout_note": "Dove si trovano le parti della finestra.",
|
||||
"prefs.structure.look": "Aspetto visivo",
|
||||
"prefs.structure.measure_pointer": "Misura e puntatore",
|
||||
"prefs.structure.mouse3d": "Mouse 3D",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse e SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Mouse e trackpad. Il mouse 3D ha una pagina propria.",
|
||||
"prefs.structure.profile": "Profilo",
|
||||
"prefs.structure.profile_edited": "Modificato dopo il salvataggio",
|
||||
"prefs.structure.profile_hover": "Salvato nei profili delle impostazioni",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Schizzo",
|
||||
"prefs.structure.tools": "Strumenti",
|
||||
"prefs.structure.tools_note": "Come si comportano gli strumenti di modellazione.",
|
||||
"prefs.structure.work": "Lavoro",
|
||||
"prefs.supersampling_brief": "Disegna la vista più grande e poi la riduce con un filtro: molto nitida, ma più pesante.",
|
||||
"prefs.tab_accent_note": "L'accento segue la scheda attiva",
|
||||
"prefs.theme_file": "file del tema",
|
||||
@@ -2603,10 +2507,6 @@
|
||||
"render.base_color": "Colore di base · sRGB",
|
||||
"render.base_metallic": "Frazione metallica",
|
||||
"render.base_opaque_only": "Questo editor mantiene la semantica dei corpi opachi. Per la trasmissione ottica usa i controlli espliciti del vetro.",
|
||||
"render.batch_all_shots": "Tutte le inquadrature ({count})",
|
||||
"render.batch_empty": "Salva un'inquadratura prima di renderizzare tutte le inquadrature.",
|
||||
"render.batch_limit": "Il rendering di tutte le inquadrature è limitato a 32 inquadrature.",
|
||||
"render.batch_status": "{running} in corso · {waiting} in attesa",
|
||||
"render.bloom_enable": "Bloom di visualizzazione",
|
||||
"render.bloom_help": "Alone creativo solo in uscita, ricavato dalle alte luci lineari positive e diffuso con tre passate box normalizzate. Il raggio è in pixel di uscita. Viene aggiunto nella luce di visualizzazione lineare prima della conversione sRGB; non è un effetto di lente o volumetrico né un miglioramento della convergenza. L'EXR grezzo resta invariato.",
|
||||
"render.bloom_opaque": "Il bloom richiede un'uscita opaca. Il PNG trasparente viene rifiutato, non appiattito in silenzio.",
|
||||
@@ -2717,13 +2617,6 @@
|
||||
"render.choose_look": "Scegli prima un aspetto in Aspetti",
|
||||
"render.chromatic_offset": "Scostamento cromatico dei bordi",
|
||||
"render.clear_stage": "Rimuovi la scenografia salvata",
|
||||
"render.compare_divider": "Divisore del confronto",
|
||||
"render.compare_live": "Live",
|
||||
"render.compare_live_preview": "Anteprima dal vivo",
|
||||
"render.compare_render": "Rendering {number}",
|
||||
"render.compare_side": "Rendering {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · acquisito alla revisione {revision}",
|
||||
"render.compare_swap": "Scambia",
|
||||
"render.copy_request": "Copia JSON",
|
||||
"render.cpu_aa_help": "Campioni spaziali: più campioni migliorano i bordi e aumentano il tempo di rendering.",
|
||||
"render.cpu_area_add": "Aggiungi luce rettangolare CPU",
|
||||
@@ -3473,10 +3366,6 @@
|
||||
"render.result_retained": "Viene mostrata l'ultima immagine completata; un rendering più recente non l'ha ancora sostituita.",
|
||||
"render.result_sequence": "Punto di ripristino",
|
||||
"render.result_title": "Risultato del rendering",
|
||||
"render.results_choose": "Risultati conservati",
|
||||
"render.results_label": "Rendering {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [obsoleto]",
|
||||
"render.results_unnamed": "Immagine",
|
||||
"render.return_design": "Torna a Progettazione",
|
||||
"render.review_stale": "Questa revisione è obsoleta. Risolvi o verifica di nuovo prima di applicare.",
|
||||
"render.ribbon_aging": "Invecchiamento",
|
||||
@@ -3928,7 +3817,6 @@
|
||||
"sketch_text.formula": "Inizia con = per costruire le parole dai parametri: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Corsivo",
|
||||
"sketch_text.loading_fonts": "Ricerca dei caratteri installati…",
|
||||
"sketch_text.no_bold": "Il carattere integrato non ha il grassetto: scegli un carattere installato",
|
||||
"sketch_text.on_path": "Il testo segue il percorso: la curva ne determina la posizione",
|
||||
"sketch_text.path_clear": "Scollega il testo dalla curva",
|
||||
"sketch_text.path_hint": "Una curva dello schizzo seguita dal testo: fai clic qui, poi sulla curva",
|
||||
@@ -3960,7 +3848,10 @@
|
||||
"the two origins are on the same component": "le due origini sono sullo stesso componente",
|
||||
"thread.automatic_size": "Dimensione automatica",
|
||||
"thread.designation": "Designazione",
|
||||
"thread.direction": "Verso del filetto",
|
||||
"thread.iso_metric": "Metrica ISO",
|
||||
"thread.left_hand": "Sinistro",
|
||||
"thread.right_hand": "Destro",
|
||||
"thread.select_size": "Seleziona dimensione",
|
||||
"timeline.delete_after_marker_one": "Elimina 1 lavorazione dopo il marcatore della cronologia",
|
||||
"timeline.delete_after_marker_other": "Elimina {count} lavorazioni dopo il marcatore della cronologia",
|
||||
@@ -4134,7 +4025,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Esegui questo comando in un terminale, poi premi di nuovo Connetti:",
|
||||
"ui.agent_chat_auth_title": "Accedi all'agente",
|
||||
"ui.agent_chat_cancel": "Annulla",
|
||||
"ui.agent_chat_cancel_timeout": "L'agente non ha risposto ad Arresta ed è stato disconnesso. Riconnetti per continuare.",
|
||||
"ui.agent_chat_cannot_start": "Installato, ma non si avvia: {error}",
|
||||
"ui.agent_chat_changes": "Modifiche: {n}, un solo passo di annullamento",
|
||||
"ui.agent_chat_changes_n": "{n} modifiche",
|
||||
@@ -4144,13 +4034,11 @@
|
||||
"ui.agent_chat_command": "Comando dell'agente",
|
||||
"ui.agent_chat_connect": "Connetti",
|
||||
"ui.agent_chat_copy": "Copia",
|
||||
"ui.agent_chat_copy_message": "Copia messaggio",
|
||||
"ui.agent_chat_ctx_bodies": "Corpi",
|
||||
"ui.agent_chat_ctx_elements": "Elementi",
|
||||
"ui.agent_chat_ctx_features": "Lavorazioni",
|
||||
"ui.agent_chat_ctx_more": "+{n} altri",
|
||||
"ui.agent_chat_ctx_other": "Altro",
|
||||
"ui.agent_chat_custom_heading": "Modello personalizzato",
|
||||
"ui.agent_chat_custom_hint": "Qualsiasi programma che comunica tramite Agent Client Protocol su stdin e stdout. Non viene eseguito da una shell.",
|
||||
"ui.agent_chat_denied": "Negato",
|
||||
"ui.agent_chat_deny": "Nega",
|
||||
@@ -4194,16 +4082,8 @@
|
||||
"ui.agent_chat_mode_all": "Tutto",
|
||||
"ui.agent_chat_mode_ask": "Chiedi",
|
||||
"ui.agent_chat_mode_edits": "Modifiche",
|
||||
"ui.agent_chat_model_custom": "Usa personalizzato: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} non può usare gli strumenti di SolidCraft, quindi può solo chattare. Scegli un modello con supporto per gli strumenti.",
|
||||
"ui.agent_chat_model_rejected": "L'agente non ha accettato {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Cerca modelli…",
|
||||
"ui.agent_chat_model_tip": "Il modello usato dall'agente. La scelta viene memorizzata per questo agente.",
|
||||
"ui.agent_chat_models_failed": "Impossibile elencare i modelli: {error}",
|
||||
"ui.agent_chat_models_heading": "Modelli disponibili",
|
||||
"ui.agent_chat_models_listing": "Elenco dei modelli in corso…",
|
||||
"ui.agent_chat_models_none": "L'endpoint non elenca alcun modello",
|
||||
"ui.agent_chat_models_not_a_list": "La risposta non era un elenco di modelli",
|
||||
"ui.agent_chat_new": "Nuova chat",
|
||||
"ui.agent_chat_new_confirm": "Avviare una nuova chat? Quella corrente verrà cancellata.",
|
||||
"ui.agent_chat_next_picture": "Immagine successiva",
|
||||
@@ -4339,9 +4219,6 @@
|
||||
"ui.ai_permissions": "Autorizzazioni",
|
||||
"ui.ai_preset": "Preimpostazione",
|
||||
"ui.ai_protocol": "Protocollo",
|
||||
"ui.ai_reasoning_effort": "Livello di ragionamento",
|
||||
"ui.ai_reasoning_effort_field_hint": "vuoto = predefinito del provider",
|
||||
"ui.ai_reasoning_effort_hint": "Facoltativo. Inviato all'endpoint come `reasoning_effort`; i valori accettati differiscono da provider a provider (ad esempio `low`, `high` o `max`). Un valore impostato qui non viene mai sostituito da SolidCraft. Lascia vuoto per non inviare nulla e mantenere il valore predefinito del provider.",
|
||||
"ui.ai_remove": "Rimuovi",
|
||||
"ui.ai_request_timed_out": "Il modello ha impiegato più di {seconds} s. Puoi aumentare il timeout della richiesta per questo endpoint in Preferenze › Assistente.",
|
||||
"ui.ai_request_timeout": "Timeout della richiesta",
|
||||
@@ -4477,21 +4354,14 @@
|
||||
"ui.construction.contact_hint": "Tangente: seleziona un cerchio/arco o una spline/conica aperta, poi il punto di contatto (curve a forma libera: estremi)",
|
||||
"ui.construction.external_hint": "Tangente: seleziona un cerchio o un arco, un punto esterno, poi la soluzione desiderata",
|
||||
"ui.construction.free_hint": "Retta di costruzione: fai clic su due punti; clic destro per ricominciare",
|
||||
"ui.construction.normal_needs_length": "Una retta infinita è sempre di costruzione: digita una lunghezza per disegnare una linea normale",
|
||||
"ui.construction.point_hint": "Retta di costruzione: fai clic sul punto di passaggio",
|
||||
"ui.construction.reference_hint": "Retta di costruzione: seleziona una linea retta, poi un punto; clic destro per cambiare il riferimento",
|
||||
"ui.construction.ribbon_label": "Linee aus.",
|
||||
"ui.construction.side_hint": "Retta di costruzione: fai clic sul lato verso cui prosegue la retta; clic destro per ricominciare",
|
||||
"ui.context_menu": "Menu contestuale",
|
||||
"ui.continuity_crease": "Spigolo vivo",
|
||||
"ui.continuity_curvature": "Curvatura",
|
||||
"ui.continuity_curvature_change": "Variazione di curvatura",
|
||||
"ui.continuity_g0": "G0 spigolo vivo",
|
||||
"ui.continuity_g1": "G1 tangenza",
|
||||
"ui.continuity_g2": "G2 curvatura",
|
||||
"ui.continuity_gap": "Gioco",
|
||||
"ui.continuity_position": "Posizione",
|
||||
"ui.continuity_tangent": "Tangente",
|
||||
"ui.copy": "Copia",
|
||||
"ui.corner": "Angolo",
|
||||
"ui.corners": "Angoli",
|
||||
@@ -4514,7 +4384,6 @@
|
||||
"ui.dark": "Scuro",
|
||||
"ui.default_modelling_orientation": "Orientamento di modellazione predefinito",
|
||||
"ui.delete": "Elimina",
|
||||
"ui.delete_select_first": "Seleziona prima cosa eliminare: lavorazioni, corpi, componenti o geometria dello schizzo",
|
||||
"ui.depth": "Profondità",
|
||||
"ui.design": "Progettazione",
|
||||
"ui.design_properties.author": "Autore",
|
||||
@@ -4607,7 +4476,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "La parte è stata salvata in un altro file; l'assieme è ancora collegato a {name}",
|
||||
"ui.edit_in_place_wait": "Attendi il termine di ciò che è in esecuzione nel progetto",
|
||||
"ui.edit_section_analysis": "Modifica analisi in sezione",
|
||||
"ui.edit_sketch_empty": "Nessuno schizzo da modificare",
|
||||
"ui.ellipse": "Ellisse",
|
||||
"ui.emboss_wrap_note": "I profili di linee ortogonali tangenti a un cilindro supportato si avvolgono automaticamente. Scegliere una parete per definire la destinazione.",
|
||||
"ui.end_radius": "Raggio finale",
|
||||
@@ -4618,9 +4486,7 @@
|
||||
"ui.equation_explicit": "Esplicita",
|
||||
"ui.equation_form": "Forma",
|
||||
"ui.equation_note": "La variabile è un numero puro: sin(t) la interpreta in radianti. Un risultato senza unità è nell'unità del progetto.",
|
||||
"ui.equation_note_range": "La variabile è una lunghezza, come il suo intervallo: combinala con parametri di lunghezza e dividila per una lunghezza per sin(). Un risultato senza unità è nell'unità del progetto.",
|
||||
"ui.equation_parametric": "Parametrica",
|
||||
"ui.equation_variable_unit": "La variabile ha l'unità dell'intervallo",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4752,7 +4618,6 @@
|
||||
"ui.hideOrigin": "Nascondi origine",
|
||||
"ui.hidePlanes": "Nascondi piani",
|
||||
"ui.hideProfile": "Nascondi profilo",
|
||||
"ui.hide_component_history": "Nascondi la sua cronologia",
|
||||
"ui.hide_origin_by_default": "Nascondi l'origine per impostazione predefinita",
|
||||
"ui.hide_origin_note": "I nuovi progetti partono con la cartella Origine nascosta. Un progetto conserva la propria impostazione dell'origine dopo che l'hai mostrata o nascosta.",
|
||||
"ui.history_back": "Indietro di un passaggio",
|
||||
@@ -4760,7 +4625,6 @@
|
||||
"ui.history_edge_hint": "fai doppio clic sullo spigolo",
|
||||
"ui.history_first": "Vai all’inizio",
|
||||
"ui.history_forward": "Avanti di un passaggio",
|
||||
"ui.history_hide_hidden": "Nascondi componenti nascosti",
|
||||
"ui.history_hide_names": "Nascondi i nomi",
|
||||
"ui.history_last": "Vai alla fine",
|
||||
"ui.history_marker_tip": "Marcatore della cronologia: trascinalo per far tornare indietro il modello; le nuove lavorazioni vanno qui",
|
||||
@@ -4770,12 +4634,10 @@
|
||||
"ui.history_play_button_show": "Mostra pulsante Riproduci",
|
||||
"ui.history_play_finish_action": "Termina l'azione corrente prima di riprodurre la cronologia",
|
||||
"ui.history_play_roll_back": "Sposta indietro il marcatore della cronologia prima di riprodurre",
|
||||
"ui.history_show_hidden": "Mostra componenti nascosti",
|
||||
"ui.history_show_names": "Mostra nomi",
|
||||
"ui.history_sketch_listed_under": "Elencato sotto {feature}",
|
||||
"ui.history_title": "Cronologia",
|
||||
"ui.history_toggle_names": "Mostra o nascondi i nomi delle lavorazioni",
|
||||
"ui.history_waits_for_editor": "Annulla, Ripeti e Cronologia restano in attesa finché l'editor della lavorazione non si è aperto",
|
||||
"ui.hole": "Foro",
|
||||
"ui.hole_tap_type": "Tipo di maschiatura del foro",
|
||||
"ui.hole_type": "Tipo di foro",
|
||||
@@ -4791,7 +4653,6 @@
|
||||
"ui.insert_design.saved_file": "{name} contiene modifiche non salvate, quindi è stato inserito il file salvato. Salvalo, poi usa Aggiorna collegamenti per includere le modifiche.",
|
||||
"ui.insert_design.unsaved": "Modifiche non salvate",
|
||||
"ui.inspect": "Esamina",
|
||||
"ui.instances": "Istanze",
|
||||
"ui.intersect": "Interseca",
|
||||
"ui.isolate": "Isola",
|
||||
"ui.join": "Unisci",
|
||||
@@ -4800,14 +4661,12 @@
|
||||
"ui.joints": "Giunti",
|
||||
"ui.keyboard_shortcuts": "Scorciatoie da tastiera",
|
||||
"ui.language": "Lingua",
|
||||
"ui.lasso_select": "Lazo (trascina un anello a mano libera: prende ciò che sta interamente all'interno)",
|
||||
"ui.layout_compact": "Compatta",
|
||||
"ui.layout_floating": "Flottante",
|
||||
"ui.length": "Lunghezza",
|
||||
"ui.length_decimals": "Decimali delle lunghezze",
|
||||
"ui.light": "Chiaro",
|
||||
"ui.line": "Linea",
|
||||
"ui.line_arc_hint": "Arco tangente: fai clic sulla fine dell'arco. Fermati di nuovo sull'ultimo punto per tornare alle linee; clic destro o Esc per terminare",
|
||||
"ui.link_copies": "Collega copie identiche",
|
||||
"ui.link_copies_keep": "Mantieni",
|
||||
"ui.link_copies_link": "Collega",
|
||||
@@ -4896,7 +4755,6 @@
|
||||
"ui.part_size_shared": "Ricostruisce la parte, sostituendo le eventuali lavorazioni aggiunte. Si aggiornano tutte le occorrenze del componente.",
|
||||
"ui.paste": "Incolla",
|
||||
"ui.path": "Percorso",
|
||||
"ui.pattern_object_type_tip": "Corpi: forme solide, selezionate nella vista o nella Struttura; ciascuno viene copiato per intero.\nLavorazioni: passaggi della Cronologia, come un'estrusione o un foro, selezionati nella Cronologia o su una faccia da essi creata; il passaggio viene ripetuto.\nUno schizzo non è nessuno dei due: ripeti le sue curve con Ripetizione o Specchia dello schizzo stesso, oppure estrudilo prima.",
|
||||
"ui.pattern_on_path": "Ripetizione su percorso",
|
||||
"ui.perforate_margin_default": "dal diametro",
|
||||
"ui.perforate_pitch": "Passo",
|
||||
@@ -4942,9 +4800,9 @@
|
||||
"ui.polygon": "Poligono",
|
||||
"ui.preferences": "Preferenze",
|
||||
"ui.press_a_key": "premi un tasto…",
|
||||
"ui.print_face_body_not_sent": "Il corpo di quella faccia non viene inviato: aggiungilo prima a Corpi",
|
||||
"ui.print_face_cleared": "{body}: faccia di stampa rimossa",
|
||||
"ui.print_face_input": "Faccia di stampa",
|
||||
"ui.print_face_one_body": "Una faccia di stampa appartiene a un solo corpo: invia quel corpo da solo per cambiarla",
|
||||
"ui.print_face_pick": "Seleziona una faccia piana di un corpo solido per renderla la faccia di stampa",
|
||||
"ui.print_face_set": "{body}: faccia di stampa impostata; Invia allo slicer appoggia il corpo su di essa",
|
||||
"ui.profile": "Profilo",
|
||||
@@ -5056,7 +4914,6 @@
|
||||
"ui.showDimension": "Mostra quota",
|
||||
"ui.showOrigin": "Mostra origine",
|
||||
"ui.showPlanes": "Mostra piani",
|
||||
"ui.show_component_history": "Mostra la sua cronologia",
|
||||
"ui.show_constraints": "Vincoli",
|
||||
"ui.show_construction_geometries": "Geometrie di costruzione",
|
||||
"ui.show_dimensions": "Quote",
|
||||
@@ -5173,15 +5030,12 @@
|
||||
"ui.view_angles": "Angoli della vista",
|
||||
"ui.view_angles_convention": "Gradi attorno all'asse verticale. Imbardata 0° è la vista frontale, 90° sinistra, −90° destra, 180° posteriore; beccheggio 90° è la vista dall'alto; un rollio positivo ruota il modello in senso orario.",
|
||||
"ui.view_angles_help": "Mostra il beccheggio, l'imbardata e il rollio della vista in gradi e la sua proiezione sotto il gizmo di orientamento. Fai clic sull'indicatore per digitare angoli esatti.",
|
||||
"ui.view_angles_lock": "Blocca {axis}",
|
||||
"ui.view_angles_ortho": "Ortogonale",
|
||||
"ui.view_angles_persp": "Prospettica",
|
||||
"ui.view_angles_pitch": "Beccheggio",
|
||||
"ui.view_angles_readout": "Beccheggio {pitch} · Imbardata {yaw} · Rollio {roll}",
|
||||
"ui.view_angles_roll": "Rollio",
|
||||
"ui.view_angles_unlock": "Sblocca {axis}",
|
||||
"ui.view_angles_yaw": "Imbardata",
|
||||
"ui.view_angles_zero": "Imposta {axis} a 0°",
|
||||
"ui.view_centre": "Centro della vista",
|
||||
"ui.viewport_status_clear": "Disattiva {name}",
|
||||
"ui.viewport_status_clear_hint": "Disattiva {name} · Esc",
|
||||
@@ -5239,7 +5093,7 @@
|
||||
"update.check_unavailable": "La verifica degli aggiornamenti non è disponibile per questa installazione.",
|
||||
"update.checking": "Controllo…",
|
||||
"update.copy": "Copia",
|
||||
"update.dmg_opened": "L'immagine disco è aperta e verificata: esci da SolidCraft, trascina il nuovo SolidCraft in Applicazioni sostituendo la copia precedente, poi riapri SolidCraft.",
|
||||
"update.dmg_opened": "L'immagine disco è aperta e verificata: trascina SolidCraft in Applicazioni sostituendo la copia precedente, poi riavvia SolidCraft.",
|
||||
"update.download": "Scarica",
|
||||
"update.download_open": "Scarica e apri",
|
||||
"update.downloading": "Download e verifica… {done} di {total} MB",
|
||||
@@ -5283,7 +5137,6 @@
|
||||
"web.open_link": "Aprire il progetto collegato?",
|
||||
"web.open_link_confirm": "Ci sono modifiche non salvate. Aprire il progetto collegato in una nuova scheda?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ scegli · Invio / Tab completa · Esc chiudi",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ scegli · Enter applica questo valore",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ scegli · Enter applica quanto digitato · Esc chiudi",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter continua su GitHub."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Segi empat tepat",
|
||||
"Rectangular Tube": "Tiub Segi Empat Tepat",
|
||||
"Reference face": "Muka rujukan",
|
||||
"Reference plane": "Satah rujukan",
|
||||
"Relief Depth": "Kedalaman Pelepasan",
|
||||
"Relief Width": "Lebar Pelepasan",
|
||||
"Remove Tools": "Buang Alat",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Keratan",
|
||||
"Section (optional)": "Keratan (pilihan)",
|
||||
"Section position": "Kedudukan keratan",
|
||||
"Sections": "Keratan",
|
||||
"Sections (one sketch each)": "Keratan (satu lakaran setiap satu)",
|
||||
"Select Other": "Pilih Yang Lain",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Pilih Lain: tahan butang kiri pada model tanpa bergerak (atau klik kanan › Pilih Lain…) untuk senarai objek di bawah kursor. Klik tempat sama untuk objek seterusnya. Klik dua kali butang tengah untuk ke Utama (Tetapan › Navigasi).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (pautan hilang)",
|
||||
"browser.sketch_editing": "{name} (sedang disunting)",
|
||||
"browser.sketch_name": "Lakaran{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "sudah berada dalam bahagiannya",
|
||||
"browser.sketches_to_parts_design_body": "pada jasad reka bentuk itu sendiri",
|
||||
"browser.sketches_to_parts_moved": "{moved} lakaran dialihkan ke bahagian tempat lakaran itu berada",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "pada muka tanpa pautan yang tepat",
|
||||
"browser.sketches_to_parts_not_on_face": "bukan pada muka sesuatu bahagian",
|
||||
"browser.sketches_to_parts_part_missing": "bahagiannya sudah tiada",
|
||||
"browser.sketches_to_parts_result": "{moved} lakaran dialihkan ke bahagian tempat lakaran itu berada; {stayed} kekal di tempatnya: {why}",
|
||||
"browser.units": "Unit: {units}",
|
||||
"cam.flat": "Muka rata",
|
||||
"cam.follower": "Pengikut",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Ekstrak ke Fail",
|
||||
"cmd.component_finish_edit": "Selesai Sunting",
|
||||
"cmd.component_from_bodies": "Cipta Komponen daripada Jasad",
|
||||
"cmd.component_hide_history": "Sembunyikan Sejarah Komponen",
|
||||
"cmd.component_insert_design": "Sisip Reka Bentuk",
|
||||
"cmd.component_links": "Senarai Pautan",
|
||||
"cmd.component_list": "Senarai Komponen",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Alih Jasad ke Komponen",
|
||||
"cmd.component_move_features": "Alih Ciri ke Komponen",
|
||||
"cmd.component_move_sketches": "Alih Lakaran ke Komponen",
|
||||
"cmd.component_move_sketches_to_parts": "Alihkan Lakaran ke Bahagian Masing-masing",
|
||||
"cmd.component_paste_from_design": "Tampal daripada Reka Bentuk Lain",
|
||||
"cmd.component_paste_new": "Tampal Baharu",
|
||||
"cmd.component_properties": "Sifat Fizikal Komponen",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Tukar Nama Komponen",
|
||||
"cmd.component_replace_with_link": "Gantikan dengan Pautan",
|
||||
"cmd.component_revert_position": "Kembalikan Kedudukan",
|
||||
"cmd.component_show_history": "Papar Sejarah Komponen",
|
||||
"cmd.component_unlock": "Buka Kunci Kandungan",
|
||||
"cmd.component_update_links": "Kemas Kini Pautan",
|
||||
"cmd.config_activate": "Aktifkan Konfigurasi",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Peraturan Konfigurasi",
|
||||
"cmd.config_rules": "Peraturan Konfigurasi",
|
||||
"cmd.config_table": "Paparkan Jadual Konfigurasi",
|
||||
"cmd.construct.plane.axis_point": "Satah Melalui Paksi dan Titik",
|
||||
"cmd.construct_axis_edge": "Paksi Melalui Tepi",
|
||||
"cmd.construct_axis_normal_to_face": "Paksi Serenjang dengan Muka",
|
||||
"cmd.construct_axis_through_cylinder": "Paksi Melalui Silinder/Kon/Torus",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Papar Pandangan Terlerai",
|
||||
"cmd.expr_evaluate": "Nilaikan Ungkapan",
|
||||
"cmd.face_delete": "Padam Muka",
|
||||
"cmd.file.export_3mf": "Eksport 3MF",
|
||||
"cmd.file.export_obj": "Eksport OBJ",
|
||||
"cmd.file.export_step": "Eksport STEP",
|
||||
"cmd.file.export_stl": "Eksport STL",
|
||||
"cmd.file.export_urdf": "Eksport URDF",
|
||||
"cmd.file_export": "Eksport",
|
||||
"cmd.file_insert_mesh": "Sisip Mesh",
|
||||
"cmd.file_insert_step": "Sisip STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Aktifkan Warna Komponen",
|
||||
"cmd.inspect_colored_components_disable": "Nyahaktifkan Warna Komponen",
|
||||
"cmd.inspect_compare": "Bandingkan Jasad",
|
||||
"cmd.inspect_compare_picture": "Banding dengan Imej",
|
||||
"cmd.inspect_continuity": "Analisis Keselanjaran",
|
||||
"cmd.inspect_curvature_comb": "Analisis Sisir Kelengkungan",
|
||||
"cmd.inspect_curvature_map": "Analisis Peta Kelengkungan",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Sunting Awan Titik",
|
||||
"cmd.pointcloud_insert": "Sisip Awan Titik",
|
||||
"cmd.pointcloud_list": "Awan Titik",
|
||||
"cmd.render.compare.divider": "Alih Pembahagi Perbandingan Render",
|
||||
"cmd.render.result.discard": "Buang Hasil Render",
|
||||
"cmd.render.result.select": "Pilih Hasil Render",
|
||||
"cmd.render_aging_describe": "Penuaan Permukaan Berlapis",
|
||||
"cmd.render_backends": "Enjin Render",
|
||||
"cmd.render_batch": "Render Semua Syot",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Splin Titik Kawalan (Darjah 5)",
|
||||
"cmd.sketch_spline_fit_point": "Splin Titik Padanan",
|
||||
"cmd.sketch_spline_insert_point": "Tambah Titik Splin",
|
||||
"cmd.sketch_spline_remove_point": "Buang Titik Splin",
|
||||
"cmd.sketch_spline_reverse": "Songsangkan Arah Splin",
|
||||
"cmd.sketch_spun_profile": "Profil Putaran",
|
||||
"cmd.sketch_toggle_diameter": "Togol Jejari / Diameter",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Alih Penanda Garis Masa",
|
||||
"cmd.timeline_stop": "Hentikan Main Sejarah",
|
||||
"cmd.timeline_suppress": "Nyahaktifkan Ciri",
|
||||
"cmd.ui.assistant": "Togol Pembantu",
|
||||
"cmd.view.render_browser": "Pelayar Render",
|
||||
"cmd.view.render_dock": "Alih Dok Render",
|
||||
"cmd.view.render_focus": "Pandangan Fokus Render",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Alat navigasi",
|
||||
"cmd.view_top": "Pandangan Atas",
|
||||
"cmd.view_visual_style": "Gaya visual",
|
||||
"color.blue": "Biru",
|
||||
"color.copy": "Klik untuk menyalin nilai warna",
|
||||
"color.edit": "Klik untuk menyunting warna",
|
||||
"color.gamma": "Memaparkan nilai warna dalam ruang gamma 0-255",
|
||||
"color.green": "Hijau",
|
||||
"color.hex": "Heks",
|
||||
"color.hex_help": "Masukkan #rrggbb atau #rrggbbaa; enam digit mengekalkan kelegapan",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Rona",
|
||||
"color.linear": "Memaparkan nilai warna dalam ruang linear 0-1",
|
||||
"color.recent": "Warna terkini",
|
||||
"color.recent_help": "Warna yang anda pilih dalam mana-mana medan warna dipaparkan di sini",
|
||||
"color.red": "Merah",
|
||||
"color.saturation": "Ketepuan (peratus)",
|
||||
"color.saturation_value": "Ketepuan dan nilai",
|
||||
"color.selected": "Warna dipilih",
|
||||
"color.step_down": "Turunkan",
|
||||
"color.step_up": "Naikkan",
|
||||
"color.value": "Nilai, iaitu kecerahan (peratus)",
|
||||
"config.column_filter_empty": "Tiada lajur yang sepadan",
|
||||
"config.rule_parameter_columns": "Hanya parameter yang mempunyai lajur dalam jadual disenaraikan. Tambah satu dengan Tambah Lajur (+) untuk menggunakannya di sini.",
|
||||
"config.rule_suppression_columns": "Hanya ciri yang mempunyai lajur Nyahaktifkan dalam jadual disenaraikan. Tambah satu dengan Tambah Lajur (+) untuk mengawalnya di sini.",
|
||||
"contact.components_count": "{count} komponen",
|
||||
"contact.enabled_label": "diaktifkan",
|
||||
"coupling.gear_1": "Gear 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Dimensi: {name}",
|
||||
"dialog.edit_title": "SUNTING {title}",
|
||||
"dialog.no_shown_body": "Tiada jasad dipaparkan untuk diubah: paparkan satu, atau pilih Jasad Baharu",
|
||||
"dialog.pattern_sketch_not_object": "Pilih jasad atau ciri: lakaran bukan kedua-duanya. Ulang lengkungnya dengan Corak atau Cermin milik lakaran itu sendiri, atau semperit dahulu.",
|
||||
"dialog.select": "↖ Pilih",
|
||||
"dialog.selected_count": "↖ {count} dipilih",
|
||||
"dialog.selection_constraint": "Kekangan {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · lengkung {id}",
|
||||
"dialog.selection_guidance": "Pilih input untuk diubah. Klik objek dipilih untuk nyahpilih; Ctrl/Cmd+klik juga menogol pilihan. Semak pratonton, kemudian tekan OK.",
|
||||
"dialog.selection_midpoint": "Titik tengah · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} daripada {total}: Pilih {input}",
|
||||
"dialog.step": "Langkah",
|
||||
"document.changed_on_disk": "{name} berubah pada cakera",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Mencipta paksi binaan melalui dua titik, bucu atau titik lakaran. Gunakan untuk paksi yang menghubungkan dua kedudukan yang diketahui.",
|
||||
"help.construct.plane.along_path": "Mencipta satah binaan yang serenjang dengan tepi atau lengkung, pada satu kedudukan sepanjangnya. Gunakan untuk melakar profil bagi Sapu atau keratan sesuatu laluan.",
|
||||
"help.construct.plane.at_angle": "Mencipta satah binaan yang dipusingkan pada satu sudut daripada satah atau muka, pada paksi atau tepi. Gunakan untuk lakaran condong, seperti braket bersudut.",
|
||||
"help.construct.plane.axis_point": "Mencipta satah binaan yang mengandungi satu paksi dan satu titik di luar paksi itu. Pilih titik asal atau paksi binaan, tepi lurus atau garis lakaran, kemudian bucu, titik lakaran atau titik binaan. Titik pada paksi tidak dapat menentukan satu satah yang unik.",
|
||||
"help.construct.plane.midplane": "Mencipta satah binaan di tengah-tengah antara dua satah atau muka rata, atau yang membahagi dua kedua-duanya di tempat ia bertemu pada satu sudut. Gunakan sebagai satah simetri untuk pencerminan.",
|
||||
"help.construct.plane.offset": "Mencipta satah binaan yang selari dengan satah atau muka rata, pada satu jarak atau melalui satu titik. Gunakan untuk melakar pada ketinggian tertentu di atas sesuatu muka.",
|
||||
"help.construct.plane.perpendicular": "Mencipta satah binaan yang memuatkan garis atau tepi dan berdiri serenjang dengan satah atau muka. Gunakan untuk melakar secara tegak pada model sepanjang tepi.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Semak jenis sendi (seperti Tegar), status tetap, had sendi dan nilai yang dipacu parameter.",
|
||||
"joint_move.blocked_title": "Tidak dapat mengalihkan bahagian ini",
|
||||
"joint_move.coarse": "Langkah putaran dekat paksi (°)",
|
||||
"joint_move.conflict": "Satu sendi bagi bahagian ini bercanggah dengan yang lain: {joint}.",
|
||||
"joint_move.conflict_hint": "Sunting, nyahaktifkan atau padam sendi yang bercanggah supaya sendi lain dapat meletakkan bahagian itu.",
|
||||
"joint_move.distance": "Jarak dari mula",
|
||||
"joint_move.done": "Selesai",
|
||||
"joint_move.fine": "Langkah putaran jauh dari paksi (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Trek {number}",
|
||||
"nav.alias.help": "Shift+Alt+seret kiri mengorbit, Shift+Alt+seret tengah menyorot, Shift+Alt+seret kanan menzum; seret tengah juga menyorot dan seret kanan mengorbit",
|
||||
"nav.blender.help": "Seret tengah mengorbit, Shift+tengah menyorot, Ctrl+tengah menzum; seret kanan tidak menggerakkan kamera",
|
||||
"nav.creo.help": "Seret tengah mengorbit, Shift+tengah menyorot, Ctrl+seret tengah secara menegak menzum (ke bawah untuk zum masuk); tatal roda untuk zum",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Tetikus dan tetikus 3D berputar melalui kedua-dua kutub dan mengekalkan gelek. Pelekapan paksi dengan Shift dilumpuhkan.",
|
||||
"nav.free_orbit.label": "Orbit bebas",
|
||||
"nav.free_orbit.snap_help": "Tetikus dan tetikus 3D berputar melalui kedua-dua kutub dan mengekalkan gelek. Tahan Shift semasa menyeret orbit untuk melekapkan arah pandangan dan gelek.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+seret kiri menyorot, Shift+Alt+seret kiri menzum, Ctrl+seret kiri pada ruang kosong mengorbit",
|
||||
"nav.inventor.help": "Seret tengah menyorot, Shift+tengah mengorbit, Ctrl+tengah menzum, seret kanan mengorbit",
|
||||
"nav.maya.help": "Alt+seret kiri mengorbit, Alt+seret tengah menyorot, Alt+seret kanan menzum; seret tengah juga menyorot",
|
||||
"nav.nx.help": "Seret tengah mengorbit, Shift+tengah menyorot (tengah + kanan dalam NX), Ctrl+tengah menzum (tengah + kiri dalam NX); seret kanan tidak menggerakkan kamera",
|
||||
"nav.openscad.help": "Seret kiri pada ruang kosong mengorbit, Shift+seret kiri memilih dengan kotak, seretan geometri lakaran menyunting; seret kanan atau tengah menyorot, Shift+seret kanan atau Shift+seret tengah menzum",
|
||||
"nav.perspective.sketch": "Penyuntingan lakaran menggunakan pandangan ortografik. Siapkan lakaran untuk bertukar ke perspektif.",
|
||||
"nav.right_drag_orbits.help": "Mati: seret kanan tidak menggerakkan kamera dan butang kanan hanya membuka menu konteks. Memilih pemetaan tetikus SolidWorks akan mematikannya.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Skru kepala butang",
|
||||
"parts.family.dowel_pin": "Pin selari (dowel)",
|
||||
"parts.family.hex_bolt": "Bolt / skru kepala heks",
|
||||
"parts.family.hex_cap_screw_inch": "Skru kepala heks (cap screw, inci)",
|
||||
"parts.family.hex_nut": "Nat heks",
|
||||
"parts.family.hex_nut_inch": "Nat heks (inci)",
|
||||
"parts.family.set_screw": "Skru penetap soket heks, hujung rata",
|
||||
"parts.family.socket_head_cap_screw": "Skru kepala soket",
|
||||
"parts.family.washer": "Sesendal biasa",
|
||||
"parts.family.washer_sae": "Sesendal biasa, SAE (sempit)",
|
||||
"parts.family.washer_uss": "Sesendal biasa, USS (lebar)",
|
||||
"parts.holes": "Lubang (pilihan)",
|
||||
"parts.placement_hint": "pilih satu atau lebih lubang untuk meletakkan bahagian pada setiap satu, atau tekan OK untuk meletakkannya di titik asal",
|
||||
"parts.system": "Sistem unit",
|
||||
"parts.system.inch": "Inci",
|
||||
"parts.system.metric": "Metrik",
|
||||
"pattern.alignment_2": "Penjajaran 2",
|
||||
"pattern.alignment_hint": "Bilangan termasuk asal. Tengah seimbangkan salinan; Balik pilih sisi lebih untuk bilangan genap.",
|
||||
"pattern.direction_1": "Arah 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Seret kiri",
|
||||
"prefs.button_middle": "Seret tengah",
|
||||
"prefs.button_right": "Seret kanan",
|
||||
"prefs.carousel_next": "Seterusnya",
|
||||
"prefs.carousel_previous": "Sebelumnya",
|
||||
"prefs.choose_font": "Pilih fail fon…",
|
||||
"prefs.click": "Klik",
|
||||
"prefs.contact_shading": "Lorekan sentuhan lembut",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Permukaan melengkung",
|
||||
"prefs.curves": "Permukaan melengkung",
|
||||
"prefs.cut_preview_tint": "Papar bahan yang dibuang dalam warna merah",
|
||||
"prefs.cut_preview_tint_help": "Pratonton mengisi bahan yang dibuang oleh sesuatu ciri, dan bentuk yang digantikannya, dengan bayang merah lut sinar. Apabila dimatikan, isian itu telus sepenuhnya dan hanya garis luarnya dilukis.",
|
||||
"prefs.dark_parts_shading": "Kekalkan bentuk bahagian yang gelap",
|
||||
"prefs.dark_parts_shading_help": "Lorekkan pandangan dalam cahaya linear dengan cahaya isian langit yang lembut, supaya muka yang gelap mengekalkan kecerunan dan tidak menjadi hitam",
|
||||
"prefs.dead_zone_note": "Jalur berlorek ialah zon mati: gerakan di dalamnya diabaikan.",
|
||||
"prefs.default": "lalai",
|
||||
"prefs.design": "Lalai reka bentuk",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Tepi dan teduhan",
|
||||
"prefs.extend": "Panjangkan",
|
||||
"prefs.extra_navigation": "Seret kiri dengan Ctrl pada ruang kosong untuk mengorbit; tahan Space untuk menyorot.",
|
||||
"prefs.extrude_view_isometric": "Putar pandangan ke isometrik apabila Semperit dibuka",
|
||||
"prefs.extrude_view_return": "Kembali ke pandangan terdahulu apabila Semperit ditutup",
|
||||
"prefs.follows_os": "Ikut OS",
|
||||
"prefs.font": "Fon",
|
||||
"prefs.font_fallback": "Glif yang tiada dalam fon pilihan akan beralih kepada fon terbina dalam, jadi tiada label yang memaparkan kotak kosong.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automatik",
|
||||
"prefs.graphics_card_missing": "Kad grafik yang disimpan tidak tersedia; Automatik digunakan.",
|
||||
"prefs.graphics_card_restart": "Berkuat kuasa selepas SolidCraft dimulakan semula. WGPU_ADAPTER_NAME mengatasi pilihan ini.",
|
||||
"prefs.graphics_card_unused": "Kad grafik yang disimpan tidak digunakan untuk tetingkap ini; kad yang sedang digunakan dipaparkan dalam Bantuan › Tentang dan dalam bar status. Cuba Automatik, atau tetapkan WGPU_ADAPTER_NAME kepada bahagian unik pada nama kad itu.",
|
||||
"prefs.graphics_note": "Tukar kelajuan dengan kelicinan. Setiap pilihan menunjukkan kesannya pada contoh.",
|
||||
"prefs.graphics_presets_note": "Pratetap menetapkan pilihan di bawah sekali gus.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Sembunyikan glif kekangan apabila dizum keluar",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Apabila Lakaran ditetapkan kepada Di bawah cirinya, Sejarah di sebelah kiri menyenaraikan setiap lakaran satu tahap ke dalam, di bawah ciri pertama yang dibina daripadanya, apabila ruangnya cukup lebar untuk nama. Garis masa di bahagian bawah sentiasa mengekalkan urutan penciptaan.",
|
||||
"prefs.history_sketches_under_feature": "Di bawah cirinya",
|
||||
"prefs.hold_stop_snapping": "Tahan untuk menghentikan pelekapan",
|
||||
"prefs.home_fit_size": "Saiz Utama dan Muatkan",
|
||||
"prefs.home_fit_size_note": "Seberapa banyak pandangan yang diisi oleh model apabila Utama, Muatkan, reka bentuk yang baru dibuka atau perubahan pandangan melalui kawalan pandangan membingkainya, sama ada tetapan di bawah dihidupkan atau tidak. 100 %: memenuhi pandangan di antara panel, kompas dan bar navigasi.",
|
||||
"prefs.icons_only": "Ikon sahaja",
|
||||
"prefs.imported_file": "Fail yang diimport",
|
||||
"prefs.in_browser": "Dalam pelayar",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Bahasa antara muka",
|
||||
"prefs.interface_note": "Rupa SolidCraft dan kedudukan bahagiannya.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Songsangkan anak panah gelek melengkung",
|
||||
"prefs.invert_curved_roll_arrows_note": "Dua anak panah melengkung di sudut kubus menggelek pandangan dalam satah skrin. Hidup: anak panah ikut arah jam menggelek lawan arah jam dan anak panah lawan arah jam menggelek ikut arah jam. Mati: setiap anak panah menggelek pandangan mengikut arah lengkungannya.",
|
||||
"prefs.invert_navigator_arrows": "Songsangkan anak panah putaran kubus pandangan",
|
||||
"prefs.invert_navigator_arrows_note": "Anak panah di sekeliling kubus mengorbit kamera mengikut arah yang ditunjuknya, seperti dalam Fusion dan Inventor: anak panah di kiri menunjuk ke kanan dan mengayunkan kamera ke kanan. Mati: anak panah memutarkan kubus ke arah sisi tempat ia berada, jadi anak panah kiri mengayunkan kamera ke kiri. Anak panah gelek yang melengkung tidak terjejas.",
|
||||
"prefs.keep_work_on_tab_switch": "Kekalkan dialog dan alat terbuka apabila menukar reka bentuk",
|
||||
"prefs.keep_work_on_tab_switch_note": "Setiap tab reka bentuk mengekalkan dialog atau alat yang dibukanya, bersama apa yang anda pilih dan taip di dalamnya, serta tab bar alatnya. Semuanya ada semula apabila anda kembali ke reka bentuk itu. Mati: menukar reka bentuk membatalkannya dan menunjukkan tab Model.",
|
||||
"prefs.labels": "Label",
|
||||
"prefs.language_system": "Sistem",
|
||||
"prefs.layout": "Susun atur",
|
||||
"prefs.layout_note": "Padat melabuhkan panel pada tepi tetingkap. Kelutsinaran pelayar tersedia dalam Terapung. Tukar sisi Pembantu pada halaman Pembantu.",
|
||||
"prefs.left": "Kiri",
|
||||
"prefs.left_click": "Klik kiri",
|
||||
"prefs.line_drag_draws_one": "Tekan dan seret melukis satu garis",
|
||||
"prefs.line_drag_draws_one_note": "Dalam alat Garis, menekan, menyeret dan melepaskan melukis satu garis dari titik tekan hingga titik lepas, dan ia tamat di situ. Klik masih melukis rantaian. Mati: seretan meletakkan titik di tempat ia dilepaskan, seperti klik.",
|
||||
"prefs.line_hover_tangent_arc": "Berhenti pada titik terakhir garis untuk bertukar kepada lengkok tangen",
|
||||
"prefs.line_hover_tangent_arc_note": "Dalam alat Garis, selepas satu segmen dilukis, alihkan penuding menjauhi titik terakhir rantaian, kembali dan tahan penuding diam di situ: klik seterusnya menentukan hujung lengkok tangen, dan gerak isyarat yang sama kembali kepada garis. Mati: berhenti di situ tidak berbuat apa-apa.",
|
||||
"prefs.linked_designs": "Reka bentuk terpaut",
|
||||
"prefs.live_input": "Input langsung",
|
||||
"prefs.live_preview": "Pratonton langsung",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Pemetaan tetikus",
|
||||
"prefs.navigation": "Navigasi",
|
||||
"prefs.navigation_note": "Cara tetikus, pad jejak dan tetikus 3D menggerakkan pandangan.",
|
||||
"prefs.navigator_fit": "Muatkan model selepas perubahan pandangan navigator",
|
||||
"prefs.navigator_fit_note": "Muka, sudut atau anak panah pada kubus pandangan, atau paksi pada gizmo, turut menghadap ke tengah model dari satu jarak yang memuatkannya dari semua sisi (sfera pembatasnya). Utama menggunakan zum dan pusat yang sama selagi ini dihidupkan, jadi pandangan yang dipilih selepasnya hanya berputar. Mati: pandangan berputar di tempat, dengan sasaran dan zumnya kekal.",
|
||||
"prefs.network_host_remove": "Buang",
|
||||
"prefs.network_locations": "Benarkan lokasi rangkaian dalam reka bentuk",
|
||||
"prefs.network_locations_note": "Dimatikan: fail terpaut bagi reka bentuk pada komputer lain (\\\\server\\share) hanya dibuka daripada pelayan yang disenaraikan di sini, atau selepas anda membenarkannya apabila ditanya.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Penempatan",
|
||||
"prefs.prefer_free_sketch_points": "Utamakan titik lakaran yang boleh digerakkan apabila titik bertindih",
|
||||
"prefs.preview_choices": "Pratonton pilihan anda",
|
||||
"prefs.preview_tint_new_faces": "Warnakan permukaan baharu dalam pratonton",
|
||||
"prefs.preview_tint_new_faces_help": "Pratonton ciri yang mengubah sesuatu jasad boleh melukis permukaan yang ditambahnya dalam warna pratonton. Apabila dimatikan, jasad dilukis seperti biasa.",
|
||||
"prefs.print_face_highlight": "Serlahan muka cetakan",
|
||||
"prefs.print_face_highlight_tip": "Sejauh mana muka cetakan sesuatu jasad diwarnakan dan digaris dalam paparan. 0 % tidak menunjukkan serlahan.",
|
||||
"prefs.profile_active": "Profil aktif",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Gunakan bajet geometri pratonton Render sebelumnya",
|
||||
"prefs.render_previous_geometry_budget_help": "Pulihkan had geometri tetap sebelumnya (512 MiB pada desktop 64-bit, 128 MiB di tempat lain) dan bukannya bajet berdasarkan peranti.",
|
||||
"prefs.reports_saved": "{n} disimpan",
|
||||
"prefs.ribbon_click_ends_tool": "Mengklik butang alat yang sedang berjalan menamatkannya",
|
||||
"prefs.ribbon_click_ends_tool_note": "Satu klik pada butang reben yang menyala bagi alat lakaran yang sedang digunakan menamatkan alat itu, jadi klik dalam pandangan memilih semula. Mati: klik memulakan alat itu semula.",
|
||||
"prefs.ribbon_reveal": "Tunjukkan hasil carian dalam reben",
|
||||
"prefs.ribbon_reveal_note": "Melalukan kursor pada hasil dalam Cari arahan menunjukkan kedudukan arahan itu dalam reben: tabnya, butangnya atau barisnya dalam senarai juntai sesuatu panel. Arahan yang dimulakan daripada carian berkelip di situ, dan arahan yang sedang berjalan daripada senarai juntai menandakan panelnya.",
|
||||
"prefs.right_click": "Klik kanan",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Kembali ke pandangan sebelumnya",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Kembali melainkan diputar",
|
||||
"prefs.sketch_exit_view_note": "Ke mana pandangan beralih selepas Siap Lakaran, Batal atau Esc dua kali.",
|
||||
"prefs.sketch_face_activates_part": "Melakar pada muka sesuatu bahagian menjadikan bahagian itu aktif",
|
||||
"prefs.sketch_face_activates_part_note": "Lakaran yang dimulakan pada muka jasad milik komponen lain mengaktifkan komponen itu terlebih dahulu, jadi lakaran itu menjadi milik komponen tersebut dan kekal bersama bahagian itu dalam pelayar. Bahagian itu kekal aktif selepas itu. Mati: lakaran menjadi milik komponen aktif.",
|
||||
"prefs.sketch_open_look_at": "Putar menghadap lakaran apabila dibuka",
|
||||
"prefs.sketch_open_look_at_note": "Mati: mencipta atau menyunting lakaran membiarkan pandangan seperti sedia ada. Pandang Tepat menghadapkan pandangan ke lakaran apabila anda mahu.",
|
||||
"prefs.sketch_recent_snap": "Lekap auto pada pusat dan titik tengah terkini",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Ralat",
|
||||
"prefs.status_selected": "Dipilih",
|
||||
"prefs.status_warning": "Amaran",
|
||||
"prefs.structure.appearance": "Penampilan",
|
||||
"prefs.structure.appearance_note": "Warna, teks dan kebolehcapaian.",
|
||||
"prefs.structure.in_profile": "Dalam profil",
|
||||
"prefs.structure.layout": "Susun atur",
|
||||
"prefs.structure.layout_note": "Kedudukan bahagian-bahagian tetingkap.",
|
||||
"prefs.structure.look": "Gaya",
|
||||
"prefs.structure.measure_pointer": "Ukur dan penuding",
|
||||
"prefs.structure.mouse3d": "Tetikus 3D",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse dan SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Tetikus dan pad jejak. Tetikus 3D mempunyai halamannya sendiri.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Berubah sejak disimpan",
|
||||
"prefs.structure.profile_hover": "Disimpan dalam profil tetapan",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Lakaran",
|
||||
"prefs.structure.tools": "Alat",
|
||||
"prefs.structure.tools_note": "Cara alat pemodelan berfungsi.",
|
||||
"prefs.structure.work": "Kerja",
|
||||
"prefs.supersampling_brief": "Melukis pandangan pada saiz lebih besar lalu menapisnya ke bawah: sangat tajam, tetapi lebih berat.",
|
||||
"prefs.tab_accent_note": "Aksen mengikut tab aktif",
|
||||
"prefs.theme_file": "fail tema",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Warna asas · sRGB",
|
||||
"render.base_metallic": "Pecahan logam",
|
||||
"render.base_opaque_only": "Penyunting ini mengekalkan semantik jasad legap. Gunakan kawalan kaca yang khusus untuk transmisi optik.",
|
||||
"render.batch_all_shots": "Semua syot ({count})",
|
||||
"render.batch_empty": "Simpan satu syot sebelum merender semua syot.",
|
||||
"render.batch_limit": "Render Semua Syot dihadkan kepada 32 syot.",
|
||||
"render.batch_status": "{running} sedang berjalan · {waiting} menunggu",
|
||||
"render.bloom_enable": "Papar bloom",
|
||||
"render.bloom_help": "Pendaran kreatif untuk keluaran sahaja daripada serlahan linear positif, disebarkan dengan tiga laluan kotak ternormal. Jejari dalam piksel keluaran. Ditambah dalam cahaya paparan linear sebelum sRGB; bukan kesan kanta, kesan volumetrik atau peningkatan penumpuan. EXR mentah tidak berubah.",
|
||||
"render.bloom_opaque": "Bloom memerlukan keluaran legap. PNG telus ditolak, bukan diratakan secara senyap.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Pilih gaya dalam Penampilan dahulu",
|
||||
"render.chromatic_offset": "Ofset tepi kromatik",
|
||||
"render.clear_stage": "Buang pentas yang disimpan",
|
||||
"render.compare_divider": "Pembahagi perbandingan",
|
||||
"render.compare_live": "Langsung",
|
||||
"render.compare_live_preview": "Pratonton langsung",
|
||||
"render.compare_render": "Render {number}",
|
||||
"render.compare_side": "Render {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · dirakam pada semakan {revision}",
|
||||
"render.compare_swap": "Tukar",
|
||||
"render.copy_request": "Salin JSON",
|
||||
"render.cpu_aa_help": "Sampel ruang: lebih banyak sampel menambah baik tepi dan menambah masa render.",
|
||||
"render.cpu_area_add": "Tambah lampu segi empat tepat CPU",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Memaparkan imej siap yang terakhir; render yang lebih baharu belum menggantikannya.",
|
||||
"render.result_sequence": "Titik Semak",
|
||||
"render.result_title": "Hasil Render",
|
||||
"render.results_choose": "Hasil yang dikekalkan",
|
||||
"render.results_label": "Render {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [lapuk]",
|
||||
"render.results_unnamed": "Imej",
|
||||
"render.return_design": "Kembali ke Reka Bentuk",
|
||||
"render.review_stale": "Tinjauan ini sudah lapuk. Selesaikan atau semak semula sebelum menggunakan.",
|
||||
"render.ribbon_aging": "Penuaan",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Mulakan dengan = untuk membina perkataan daripada parameter: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Condong",
|
||||
"sketch_text.loading_fonts": "Mencari fon yang dipasang…",
|
||||
"sketch_text.no_bold": "Fon terbina dalam tiada versi tebal: pilih fon yang dipasang",
|
||||
"sketch_text.on_path": "Teks mengikut laluan lengkung, yang menentukan kedudukannya",
|
||||
"sketch_text.path_clear": "Pisahkan teks daripada lengkung",
|
||||
"sketch_text.path_hint": "Lengkung lakaran yang akan diikuti teks: klik di sini, kemudian klik lengkung",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "kedua-dua titik asal berada pada komponen yang sama",
|
||||
"thread.automatic_size": "Saiz automatik",
|
||||
"thread.designation": "Penamaan",
|
||||
"thread.direction": "Arah bebenang",
|
||||
"thread.iso_metric": "Metrik ISO",
|
||||
"thread.left_hand": "Tangan kiri",
|
||||
"thread.right_hand": "Tangan kanan",
|
||||
"thread.select_size": "Pilih saiz",
|
||||
"timeline.delete_after_marker_one": "Padam 1 Ciri Selepas Penanda Sejarah",
|
||||
"timeline.delete_after_marker_other": "Padam {count} Ciri Selepas Penanda Sejarah",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Jalankan arahan ini dalam terminal, kemudian tekan Sambung semula:",
|
||||
"ui.agent_chat_auth_title": "Log masuk ke ejen",
|
||||
"ui.agent_chat_cancel": "Batal",
|
||||
"ui.agent_chat_cancel_timeout": "Ejen tidak bertindak balas kepada Hentikan dan telah diputuskan sambungannya. Sambung semula untuk meneruskan.",
|
||||
"ui.agent_chat_cannot_start": "Terpasang, tetapi tidak bermula: {error}",
|
||||
"ui.agent_chat_changes": "{n} perubahan, satu Buat Asal",
|
||||
"ui.agent_chat_changes_n": "{n} perubahan",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Arahan ejen",
|
||||
"ui.agent_chat_connect": "Sambung",
|
||||
"ui.agent_chat_copy": "Salin",
|
||||
"ui.agent_chat_copy_message": "Salin mesej",
|
||||
"ui.agent_chat_ctx_bodies": "Jasad",
|
||||
"ui.agent_chat_ctx_elements": "Elemen",
|
||||
"ui.agent_chat_ctx_features": "Ciri",
|
||||
"ui.agent_chat_ctx_more": "+{n} lagi",
|
||||
"ui.agent_chat_ctx_other": "Lain-lain",
|
||||
"ui.agent_chat_custom_heading": "Model tersuai",
|
||||
"ui.agent_chat_custom_hint": "Program yang guna Agent Client Protocol melalui stdin dan stdout. Dijalankan tanpa shell.",
|
||||
"ui.agent_chat_denied": "Ditolak",
|
||||
"ui.agent_chat_deny": "Tolak",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Semua",
|
||||
"ui.agent_chat_mode_ask": "Tanya",
|
||||
"ui.agent_chat_mode_edits": "Suntingan",
|
||||
"ui.agent_chat_model_custom": "Guna tersuai: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} tidak dapat menggunakan alat SolidCraft, jadi hanya boleh berbual. Pilih model yang menyokong alat.",
|
||||
"ui.agent_chat_model_rejected": "Ejen tidak menerima {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Cari model…",
|
||||
"ui.agent_chat_model_tip": "Model yang digunakan oleh ejen. Pilihan anda disimpan untuk ejen ini.",
|
||||
"ui.agent_chat_models_failed": "Tidak dapat menyenaraikan model: {error}",
|
||||
"ui.agent_chat_models_heading": "Model yang tersedia",
|
||||
"ui.agent_chat_models_listing": "Menyenaraikan model…",
|
||||
"ui.agent_chat_models_none": "Titik akhir tidak menyenaraikan sebarang model",
|
||||
"ui.agent_chat_models_not_a_list": "Jawapan itu bukan senarai model",
|
||||
"ui.agent_chat_new": "Sembang baharu",
|
||||
"ui.agent_chat_new_confirm": "Mulakan sembang baharu? Sembang semasa akan dikosongkan.",
|
||||
"ui.agent_chat_next_picture": "Gambar seterusnya",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Kebenaran",
|
||||
"ui.ai_preset": "Pratetap",
|
||||
"ui.ai_protocol": "Protokol",
|
||||
"ui.ai_reasoning_effort": "Usaha penaakulan",
|
||||
"ui.ai_reasoning_effort_field_hint": "kosong = lalai pembekal",
|
||||
"ui.ai_reasoning_effort_hint": "Pilihan. Dihantar kepada titik akhir sebagai `reasoning_effort`; nilai yang diterima berbeza bagi setiap pembekal (contohnya `low`, `high` atau `max`). Nilai yang anda tetapkan di sini tidak sekali-kali diganti oleh SolidCraft. Biarkan kosong untuk tidak menghantar apa-apa dan mengekalkan lalai pembekal.",
|
||||
"ui.ai_remove": "Buang",
|
||||
"ui.ai_request_timed_out": "Model mengambil masa lebih daripada {seconds} s. Anda boleh menaikkan had masa permintaan untuk titik akhir ini dalam Tetapan › Pembantu.",
|
||||
"ui.ai_request_timeout": "Had masa permintaan",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Tangen: pilih bulatan/lengkok atau splin/lengkung kon terbuka, kemudian titik sentuh (lengkung bentuk bebas: titik hujung)",
|
||||
"ui.construction.external_hint": "Tangen: pilih bulatan atau lengkok, satu titik luar, kemudian penyelesaian yang dikehendaki",
|
||||
"ui.construction.free_hint": "Garis binaan: klik dua titik; klik kanan untuk mula semula",
|
||||
"ui.construction.normal_needs_length": "Garis tak terhingga sentiasa garis binaan: taip panjang untuk melukis garis biasa",
|
||||
"ui.construction.point_hint": "Garis binaan: klik titik yang akan dilalui",
|
||||
"ui.construction.reference_hint": "Garis binaan: pilih garis lurus, kemudian satu titik; klik kanan untuk menukar rujukan",
|
||||
"ui.construction.ribbon_label": "Garis bantu",
|
||||
"ui.construction.side_hint": "Garis binaan: klik sisi yang dituju garis; klik kanan untuk mula semula",
|
||||
"ui.context_menu": "Menu konteks",
|
||||
"ui.continuity_crease": "Lipatan",
|
||||
"ui.continuity_curvature": "Kelengkungan",
|
||||
"ui.continuity_curvature_change": "Perubahan kelengkungan",
|
||||
"ui.continuity_g0": "Lipatan G0",
|
||||
"ui.continuity_g1": "Tangen G1",
|
||||
"ui.continuity_g2": "Kelengkungan G2",
|
||||
"ui.continuity_gap": "Sela",
|
||||
"ui.continuity_position": "Kedudukan",
|
||||
"ui.continuity_tangent": "Tangen",
|
||||
"ui.copy": "Salin",
|
||||
"ui.corner": "Sudut",
|
||||
"ui.corners": "Sudut",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Gelap",
|
||||
"ui.default_modelling_orientation": "Orientasi pemodelan lalai",
|
||||
"ui.delete": "Padam",
|
||||
"ui.delete_select_first": "Pilih dahulu apa yang hendak dipadam: ciri, jasad, komponen atau geometri lakaran",
|
||||
"ui.depth": "Kedalaman",
|
||||
"ui.design": "Reka",
|
||||
"ui.design_properties.author": "Pengarang",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Bahagian ini disimpan ke fail lain; pemasangan masih memaut {name}",
|
||||
"ui.edit_in_place_wait": "Tunggu sehingga apa yang sedang berjalan dalam reka bentuk selesai",
|
||||
"ui.edit_section_analysis": "Sunting Analisis Keratan",
|
||||
"ui.edit_sketch_empty": "Tiada lakaran untuk disunting",
|
||||
"ui.ellipse": "Elips",
|
||||
"ui.emboss_wrap_note": "Profil garis ortogon yang tangen pada satu silinder yang disokong dibalut secara automatik. Pilih dinding untuk memilih sasaran.",
|
||||
"ui.end_radius": "Jejari Akhir",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Eksplisit",
|
||||
"ui.equation_form": "Bentuk",
|
||||
"ui.equation_note": "Pemboleh ubah ialah nombor biasa: sin(t) mengambilnya dalam radian. Hasil tanpa unit adalah dalam unit reka bentuk.",
|
||||
"ui.equation_note_range": "Pemboleh ubah ialah panjang, begitu juga julatnya: campurkannya dengan parameter panjang, dan bahagikannya dengan satu panjang untuk sin(). Hasil tanpa unit adalah dalam unit reka bentuk.",
|
||||
"ui.equation_parametric": "Parametrik",
|
||||
"ui.equation_variable_unit": "Pemboleh ubah menggunakan unit julat",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Sembunyi Titik Asal",
|
||||
"ui.hidePlanes": "Sembunyi Satah",
|
||||
"ui.hideProfile": "Sembunyi Profil",
|
||||
"ui.hide_component_history": "Sembunyikan Sejarahnya",
|
||||
"ui.hide_origin_by_default": "Sembunyi titik asal secara lalai",
|
||||
"ui.hide_origin_note": "Reka bentuk baharu bermula dengan folder Titik Asal disembunyikan. Sesuatu reka bentuk mengekalkan tetapan Titik Asalnya sendiri sebaik sahaja anda memaparkan atau menyembunyikannya.",
|
||||
"ui.history_back": "Undur satu langkah",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "klik dua kali pada tepi",
|
||||
"ui.history_first": "Pergi ke permulaan",
|
||||
"ui.history_forward": "Maju satu langkah",
|
||||
"ui.history_hide_hidden": "Sembunyikan Komponen Tersembunyi",
|
||||
"ui.history_hide_names": "Sembunyi nama",
|
||||
"ui.history_last": "Pergi ke penghujung",
|
||||
"ui.history_marker_tip": "Penanda sejarah: seret untuk mengundurkan model; ciri baharu diletakkan di sini",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Papar Butang Main",
|
||||
"ui.history_play_finish_action": "Selesaikan tindakan semasa sebelum memainkan Sejarah",
|
||||
"ui.history_play_roll_back": "Alih penanda Sejarah ke belakang sebelum memainkan",
|
||||
"ui.history_show_hidden": "Papar Komponen Tersembunyi",
|
||||
"ui.history_show_names": "Papar nama",
|
||||
"ui.history_sketch_listed_under": "Disenaraikan di bawah {feature}",
|
||||
"ui.history_title": "Sejarah",
|
||||
"ui.history_toggle_names": "Papar atau sembunyikan nama ciri",
|
||||
"ui.history_waits_for_editor": "Buat Asal, Buat Semula dan Sejarah menunggu sehingga penyunting ciri dibuka",
|
||||
"ui.hole": "Lubang",
|
||||
"ui.hole_tap_type": "Jenis Bebenang Lubang",
|
||||
"ui.hole_type": "Jenis Lubang",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} mempunyai perubahan yang belum disimpan, jadi fail tersimpannya disisipkan. Simpan reka bentuk itu, kemudian gunakan Kemas Kini Pautan untuk membawa masuk perubahan.",
|
||||
"ui.insert_design.unsaved": "Perubahan belum disimpan",
|
||||
"ui.inspect": "Periksa",
|
||||
"ui.instances": "Salinan",
|
||||
"ui.intersect": "Silang",
|
||||
"ui.isolate": "Asingkan",
|
||||
"ui.join": "Cantum",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Sendi",
|
||||
"ui.keyboard_shortcuts": "Pintasan Kekunci",
|
||||
"ui.language": "Bahasa",
|
||||
"ui.lasso_select": "Lasso (seret gelung bebas: memilih yang sepenuhnya berada di dalam)",
|
||||
"ui.layout_compact": "Padat",
|
||||
"ui.layout_floating": "Terapung",
|
||||
"ui.length": "Panjang",
|
||||
"ui.length_decimals": "Perpuluhan panjang",
|
||||
"ui.light": "Cerah",
|
||||
"ui.line": "Garis",
|
||||
"ui.line_arc_hint": "Lengkok tangen: klik hujung lengkok. Berhenti lagi pada titik terakhir untuk garis; klik kanan atau Esc untuk selesai",
|
||||
"ui.link_copies": "Pautkan Salinan Serupa",
|
||||
"ui.link_copies_keep": "Kekalkan",
|
||||
"ui.link_copies_link": "Pautkan",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Membina semula bahagian, menggantikan sebarang ciri yang ditambah. Semua kejadian komponen ini dikemas kini.",
|
||||
"ui.paste": "Tampal",
|
||||
"ui.path": "Laluan",
|
||||
"ui.pattern_object_type_tip": "Jasad: bentuk pepejal, dipilih dalam pandangan atau Pelayar; setiap satu disalin keseluruhannya.\nCiri: langkah Sejarah, seperti semperit atau lubang, dipilih dalam Sejarah atau pada muka yang dihasilkannya; langkah itu diulang.\nLakaran bukan kedua-duanya: ulang lengkungnya dengan Corak atau Cermin milik lakaran itu sendiri, atau semperit dahulu.",
|
||||
"ui.pattern_on_path": "Corak Sepanjang Laluan",
|
||||
"ui.perforate_margin_default": "daripada diameter",
|
||||
"ui.perforate_pitch": "Pic",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Poligon",
|
||||
"ui.preferences": "Tetapan",
|
||||
"ui.press_a_key": "tekan kekunci…",
|
||||
"ui.print_face_body_not_sent": "Jasad muka itu tidak dihantar: tambahkannya pada Jasad dahulu",
|
||||
"ui.print_face_cleared": "{body}: muka cetakan dikosongkan",
|
||||
"ui.print_face_input": "Muka cetakan",
|
||||
"ui.print_face_one_body": "Muka cetakan dimiliki oleh satu jasad: hantar jasad itu sahaja untuk menukarnya",
|
||||
"ui.print_face_pick": "Pilih satu muka rata pada jasad pepejal untuk menjadikannya muka cetakan",
|
||||
"ui.print_face_set": "{body}: muka cetakan ditetapkan; Hantar ke penghiris meletakkan jasad di atasnya",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5053,7 +4908,6 @@
|
||||
"ui.showDimension": "Papar Dimensi",
|
||||
"ui.showOrigin": "Papar Titik Asal",
|
||||
"ui.showPlanes": "Papar Satah",
|
||||
"ui.show_component_history": "Papar Sejarahnya",
|
||||
"ui.show_constraints": "Kekangan",
|
||||
"ui.show_construction_geometries": "Geometri Binaan",
|
||||
"ui.show_dimensions": "Dimensi",
|
||||
@@ -5170,15 +5024,12 @@
|
||||
"ui.view_angles": "Sudut pandangan",
|
||||
"ui.view_angles_convention": "Darjah pada paksi ke atas. Yaw 0° ialah pandangan Hadapan, 90° Kiri, −90° Kanan, 180° Belakang; pic 90° ialah pandangan Atas; gelek positif memutar model mengikut arah jam.",
|
||||
"ui.view_angles_help": "Memaparkan pic, yaw dan gelek pandangan dalam darjah serta unjurannya di bawah gizmo orientasi. Klik bacaan untuk menaip sudut yang tepat.",
|
||||
"ui.view_angles_lock": "Kunci {axis}",
|
||||
"ui.view_angles_ortho": "Orto",
|
||||
"ui.view_angles_persp": "Persp",
|
||||
"ui.view_angles_pitch": "Pic",
|
||||
"ui.view_angles_readout": "Pic {pitch} · Yaw {yaw} · Gelek {roll}",
|
||||
"ui.view_angles_roll": "Gelek",
|
||||
"ui.view_angles_unlock": "Buka kunci {axis}",
|
||||
"ui.view_angles_yaw": "Yaw",
|
||||
"ui.view_angles_zero": "Tetapkan {axis} kepada 0°",
|
||||
"ui.view_centre": "Pusat pandangan",
|
||||
"ui.viewport_status_clear": "Matikan {name}",
|
||||
"ui.viewport_status_clear_hint": "Matikan {name} · Esc",
|
||||
@@ -5236,7 +5087,7 @@
|
||||
"update.check_unavailable": "Semakan kemas kini tidak tersedia untuk pemasangan ini.",
|
||||
"update.checking": "Menyemak…",
|
||||
"update.copy": "Salin",
|
||||
"update.dmg_opened": "Imej cakera telah dibuka dan disahkan: keluar dari SolidCraft, seret SolidCraft yang baharu ke Applications untuk menggantikan salinan lama, kemudian buka SolidCraft semula.",
|
||||
"update.dmg_opened": "Imej cakera telah dibuka dan disahkan: seret SolidCraft ke Applications untuk menggantikan salinan lama, kemudian mulakan semula SolidCraft.",
|
||||
"update.download": "Muat turun",
|
||||
"update.download_open": "Muat turun dan buka",
|
||||
"update.downloading": "Memuat turun dan mengesahkan… {done} daripada {total} MB",
|
||||
@@ -5280,7 +5131,6 @@
|
||||
"web.open_link": "Buka reka bentuk yang dipautkan?",
|
||||
"web.open_link_confirm": "Terdapat perubahan yang belum disimpan. Buka reka bentuk yang dipautkan dalam tab baharu?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ pilih · Enter / Tab lengkapkan · Esc tutup",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ pilih · Enter menggunakan nilai ini",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ pilih · Enter menggunakan apa yang anda taip · Esc tutup",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter diteruskan di GitHub."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Rektangulær",
|
||||
"Rectangular Tube": "Rektangulært rør",
|
||||
"Reference face": "Referanseflate",
|
||||
"Reference plane": "Referanseplan",
|
||||
"Relief Depth": "Avlastningsdybde",
|
||||
"Relief Width": "Avlastningsbredde",
|
||||
"Remove Tools": "Fjern verktøy",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Snitt",
|
||||
"Section (optional)": "Tverrsnitt (valgfritt)",
|
||||
"Section position": "Snittposisjon",
|
||||
"Sections": "Tverrsnitt",
|
||||
"Sections (one sketch each)": "Tverrsnitt (én skisse hver)",
|
||||
"Select Other": "Velg annet",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Velg annet: Hold venstre museknapp inne uten å flytte pekeren på modellen (eller høyreklikk › Velg annet…) for å vise alt under markøren. Klikk på samme sted igjen for å velge neste objekt. Dobbeltklikk med midtknappen for å gå til hjemvisningen (Innstillinger › Navigasjon).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (tilknytning mistet)",
|
||||
"browser.sketch_editing": "{name} (redigeres)",
|
||||
"browser.sketch_name": "Skisse{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "allerede i delen sin",
|
||||
"browser.sketches_to_parts_design_body": "på en kropp i selve designet",
|
||||
"browser.sketches_to_parts_moved": "Flyttet {moved} skisser til delen de ligger på",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "på en flate uten nøyaktig tilknytning",
|
||||
"browser.sketches_to_parts_not_on_face": "ikke på flaten til en del",
|
||||
"browser.sketches_to_parts_part_missing": "delen finnes ikke lenger",
|
||||
"browser.sketches_to_parts_result": "Flyttet {moved} skisser til delen de ligger på; {stayed} ble liggende: {why}",
|
||||
"browser.units": "Enheter: {units}",
|
||||
"cam.flat": "Plan flate",
|
||||
"cam.follower": "Følger",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Trekk ut til fil",
|
||||
"cmd.component_finish_edit": "Fullfør redigering",
|
||||
"cmd.component_from_bodies": "Opprett komponenter fra kropper",
|
||||
"cmd.component_hide_history": "Skjul komponentens tidslinje",
|
||||
"cmd.component_insert_design": "Sett inn design",
|
||||
"cmd.component_links": "Vis koblinger",
|
||||
"cmd.component_list": "Vis komponenter",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Flytt kropper til komponent",
|
||||
"cmd.component_move_features": "Flytt funksjoner til komponent",
|
||||
"cmd.component_move_sketches": "Flytt skisser til komponent",
|
||||
"cmd.component_move_sketches_to_parts": "Flytt skisser til delene deres",
|
||||
"cmd.component_paste_from_design": "Lim inn fra et annet design",
|
||||
"cmd.component_paste_new": "Lim inn ny",
|
||||
"cmd.component_properties": "Fysiske egenskaper for komponent",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Gi nytt navn til komponent",
|
||||
"cmd.component_replace_with_link": "Erstatt med lenke",
|
||||
"cmd.component_revert_position": "Tilbakestill posisjon",
|
||||
"cmd.component_show_history": "Vis komponentens tidslinje",
|
||||
"cmd.component_unlock": "Lås opp innhold",
|
||||
"cmd.component_update_links": "Oppdater koblinger",
|
||||
"cmd.config_activate": "Aktiver konfigurasjon",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Konfigurasjonsregel",
|
||||
"cmd.config_rules": "Konfigurasjonsregler",
|
||||
"cmd.config_table": "Vis konfigurasjonstabell",
|
||||
"cmd.construct.plane.axis_point": "Plan gjennom akse og punkt",
|
||||
"cmd.construct_axis_edge": "Akse gjennom kant",
|
||||
"cmd.construct_axis_normal_to_face": "Akse vinkelrett på flate",
|
||||
"cmd.construct_axis_through_cylinder": "Akse gjennom sylinder/kjegle/torus",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Vis eksplodert visning",
|
||||
"cmd.expr_evaluate": "Evaluer uttrykk",
|
||||
"cmd.face_delete": "Slett flate",
|
||||
"cmd.file.export_3mf": "Eksporter 3MF",
|
||||
"cmd.file.export_obj": "Eksporter OBJ",
|
||||
"cmd.file.export_step": "Eksporter STEP",
|
||||
"cmd.file.export_stl": "Eksporter STL",
|
||||
"cmd.file.export_urdf": "Eksporter URDF",
|
||||
"cmd.file_export": "Eksporter",
|
||||
"cmd.file_insert_mesh": "Sett inn mesh",
|
||||
"cmd.file_insert_step": "Sett inn STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Aktiver komponentfarger",
|
||||
"cmd.inspect_colored_components_disable": "Deaktiver komponentfarger",
|
||||
"cmd.inspect_compare": "Sammenlign kropper",
|
||||
"cmd.inspect_compare_picture": "Sammenlign bilde",
|
||||
"cmd.inspect_continuity": "Kontinuitetsanalyse",
|
||||
"cmd.inspect_curvature_comb": "Analyse med krumningskam",
|
||||
"cmd.inspect_curvature_map": "Analyse med krumningskart",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Rediger punktsky",
|
||||
"cmd.pointcloud_insert": "Sett inn punktsky",
|
||||
"cmd.pointcloud_list": "Punktskyer",
|
||||
"cmd.render.compare.divider": "Flytt skillelinjen i rendringssammenligningen",
|
||||
"cmd.render.result.discard": "Forkast rendringsresultat",
|
||||
"cmd.render.result.select": "Velg rendringsresultat",
|
||||
"cmd.render_aging_describe": "Lagdelt overflatealdring",
|
||||
"cmd.render_backends": "Rendringsmotorer",
|
||||
"cmd.render_batch": "Rendre alle opptak",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline med kontrollpunkter (grad 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline gjennom punkter",
|
||||
"cmd.sketch_spline_insert_point": "Legg til splinepunkt",
|
||||
"cmd.sketch_spline_remove_point": "Fjern splinepunkt",
|
||||
"cmd.sketch_spline_reverse": "Reverser splineretning",
|
||||
"cmd.sketch_spun_profile": "Dreid profil",
|
||||
"cmd.sketch_toggle_diameter": "Veksle mellom radius / diameter",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Flytt tidslinjemarkør",
|
||||
"cmd.timeline_stop": "Stopp avspilling av tidslinje",
|
||||
"cmd.timeline_suppress": "Undertrykk funksjon",
|
||||
"cmd.ui.assistant": "Vis/skjul assistent",
|
||||
"cmd.view.render_browser": "Rendringsutforsker",
|
||||
"cmd.view.render_dock": "Flytt rendringspanel",
|
||||
"cmd.view.render_focus": "Rendringsfokusvisning",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Navigasjonsverktøy",
|
||||
"cmd.view_top": "Toppvisning",
|
||||
"cmd.view_visual_style": "Visuell stil",
|
||||
"color.blue": "Blå",
|
||||
"color.copy": "Klikk for å kopiere fargeverdier",
|
||||
"color.edit": "Klikk for å redigere farge",
|
||||
"color.gamma": "Viser gammakorrigerte fargeverdier i området 0–255",
|
||||
"color.green": "Grønn",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Skriv inn #rrggbb eller #rrggbbaa; seks sifre beholder opasiteten",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Kulør",
|
||||
"color.linear": "Viser lineære fargeverdier i området 0–1",
|
||||
"color.recent": "Nylige farger",
|
||||
"color.recent_help": "Fargene du velger i et fargefelt, vises her",
|
||||
"color.red": "Rød",
|
||||
"color.saturation": "Metning (prosent)",
|
||||
"color.saturation_value": "Metning og lysverdi",
|
||||
"color.selected": "Valgt farge",
|
||||
"color.step_down": "Ett trinn ned",
|
||||
"color.step_up": "Ett trinn opp",
|
||||
"color.value": "Lysverdi, lysstyrken (prosent)",
|
||||
"config.column_filter_empty": "Ingen samsvarende kolonner",
|
||||
"config.rule_parameter_columns": "Bare parametere som har en kolonne i tabellen, er med i listen. Legg til en kolonne med Legg til kolonne (+) for å bruke parameteren her.",
|
||||
"config.rule_suppression_columns": "Bare funksjoner som har en Undertrykk-kolonne i tabellen, er med i listen. Legg til en kolonne med Legg til kolonne (+) for å styre undertrykkingen her.",
|
||||
"contact.components_count": "{count} komponenter",
|
||||
"contact.enabled_label": "aktivert",
|
||||
"coupling.gear_1": "Tannhjul 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Mål: {name}",
|
||||
"dialog.edit_title": "REDIGER {title}",
|
||||
"dialog.no_shown_body": "Ingen synlig kropp å endre: vis en, eller velg Ny kropp",
|
||||
"dialog.pattern_sketch_not_object": "Velg kropper eller funksjoner: en skisse er ingen av delene. Gjenta kurvene med skissens eget Mønster eller Speil, eller ekstruder den først.",
|
||||
"dialog.select": "↖ Velg",
|
||||
"dialog.selected_count": "↖ {count} valgt",
|
||||
"dialog.selection_constraint": "Binding {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · kurve {id}",
|
||||
"dialog.selection_guidance": "Velg et felt for å endre det. Klikk på valgte objekter for å fjerne dem fra utvalget; Ctrl/Cmd+klikk veksler også mellom valgt og ikke valgt. Se over forhåndsvisningen, og trykk deretter OK.",
|
||||
"dialog.selection_midpoint": "Midtpunkt · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profil {number}",
|
||||
"dialog.selection_step": "{step} av {total}: Velg {input}",
|
||||
"dialog.step": "Trinn",
|
||||
"document.changed_on_disk": "{name} er endret på disken",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Oppretter en hjelpeakse gjennom to punkter, hjørner eller skissepunkter. Bruk den til en akse mellom to kjente posisjoner.",
|
||||
"help.construct.plane.along_path": "Oppretter et hjelpeplan vinkelrett på en kant eller kurve, på en posisjon langs den. Bruk det til å skisse en profil for en sweep eller et snitt av en bane.",
|
||||
"help.construct.plane.at_angle": "Oppretter et hjelpeplan vridd med en vinkel fra et plan eller en flate, om en akse eller kant. Bruk det til skråstilte skisser, for eksempel en vinklet brakett.",
|
||||
"help.construct.plane.axis_point": "Oppretter et hjelpeplan som inneholder en akse og et punkt utenfor aksen. Velg en origoakse eller hjelpeakse, en rett kant eller skisselinje, og deretter et hjørne, skissepunkt eller hjelpepunkt. Et punkt på aksen kan ikke definere et entydig plan.",
|
||||
"help.construct.plane.midplane": "Oppretter et hjelpeplan midt mellom to plan eller plane flater, eller som halverer dem der de møtes i en vinkel. Bruk det som symmetriplan for speiling.",
|
||||
"help.construct.plane.offset": "Oppretter et hjelpeplan parallelt med et plan eller en plan flate, i en avstand eller gjennom et punkt. Bruk det til å skisse i en bestemt høyde over en flate.",
|
||||
"help.construct.plane.perpendicular": "Oppretter et hjelpeplan som inneholder en linje eller kant og står vinkelrett på et plan eller en flate. Bruk det til å skisse oppreist på en modell langs en kant.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Kontroller leddtypen (for eksempel Stiv), om posisjonen er festet, leddgrenser og parameterstyrte verdier.",
|
||||
"joint_move.blocked_title": "Kan ikke flytte denne delen",
|
||||
"joint_move.coarse": "Rotasjonstrinn nær aksen (°)",
|
||||
"joint_move.conflict": "Et ledd på denne delen er i konflikt med de andre: {joint}.",
|
||||
"joint_move.conflict_hint": "Rediger, undertrykk eller slett det konfliktende leddet, slik at de andre leddene kan plassere delen.",
|
||||
"joint_move.distance": "Avstand fra start",
|
||||
"joint_move.done": "Ferdig",
|
||||
"joint_move.fine": "Rotasjonstrinn langt fra aksen (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Spor {number}",
|
||||
"nav.alias.help": "Shift+Alt+venstredrag roterer, Shift+Alt+midtdrag panorerer, Shift+Alt+høyredrag zoomer; midtdrag panorerer og høyredrag roterer også",
|
||||
"nav.blender.help": "Midtdrag roterer, Shift+midtdrag panorerer, Ctrl+midtdrag zoomer; høyredrag lar kameraet stå i ro",
|
||||
"nav.creo.help": "Midtdrag roterer, Shift+midtdrag panorerer, Ctrl+midtdrag vertikalt zoomer (ned for å zoome inn); rulling med hjulet zoomer",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Mus og 3D-mus roterer gjennom begge polene og bevarer rulling. Aksefangst med Shift er deaktivert.",
|
||||
"nav.free_orbit.label": "Fri rotasjon",
|
||||
"nav.free_orbit.snap_help": "Mus og 3D-mus roterer gjennom begge polene og bevarer rull. Hold Shift mens du drar for å rotere, så låses visningsretningen og rullen til faste trinn.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+venstredrag panorerer, Shift+Alt+venstredrag zoomer, Ctrl+venstredrag fra tomt område roterer",
|
||||
"nav.inventor.help": "Midtdrag panorerer, Shift+midtdrag roterer, Ctrl+midtdrag zoomer, høyredrag roterer",
|
||||
"nav.maya.help": "Alt+venstredrag roterer, Alt+midtdrag panorerer, Alt+høyredrag zoomer; midtdrag panorerer også",
|
||||
"nav.nx.help": "Midtdrag roterer, Shift+midtdrag panorerer (i NX: midt + høyre), Ctrl+midtdrag zoomer (i NX: midt + venstre); høyredrag lar kameraet stå i ro",
|
||||
"nav.openscad.help": "Venstredrag i tomt område roterer, Shift+venstredrag velger med ramme, dra i skissegeometri for å redigere; høyre- eller midtdrag panorerer, Shift+høyredrag eller Shift+midtdrag zoomer",
|
||||
"nav.perspective.sketch": "Skisseredigering bruker ortografisk visning. Fullfør skissen for å bytte til perspektiv.",
|
||||
"nav.right_drag_orbits.help": "Av: et høyredrag lar kameraet stå i ro, og høyre museknapp åpner bare kontekstmenyen. Når du velger SolidWorks-museoppsettet, slås dette av.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Linsehodeskrue med innvendig sekskant",
|
||||
"parts.family.dowel_pin": "Parallellstift (passtift)",
|
||||
"parts.family.hex_bolt": "Sekskantbolt / sekskantskrue",
|
||||
"parts.family.hex_cap_screw_inch": "Sekskantskrue (tommer)",
|
||||
"parts.family.hex_nut": "Sekskantmutter",
|
||||
"parts.family.hex_nut_inch": "Sekskantmutter (tommer)",
|
||||
"parts.family.set_screw": "Settskrue med innvendig sekskant, flat ende",
|
||||
"parts.family.socket_head_cap_screw": "Sylinderskrue med innvendig sekskant",
|
||||
"parts.family.washer": "Underlagsskive",
|
||||
"parts.family.washer_sae": "Underlagsskive, SAE (smal)",
|
||||
"parts.family.washer_uss": "Underlagsskive, USS (bred)",
|
||||
"parts.holes": "Hull (valgfritt)",
|
||||
"parts.placement_hint": "velg ett eller flere hull for å sette inn en del i hvert av dem, eller OK plasserer den ved origo",
|
||||
"parts.system": "Enhetssystem",
|
||||
"parts.system.inch": "Tommer",
|
||||
"parts.system.metric": "Metrisk",
|
||||
"pattern.alignment_2": "Justering 2",
|
||||
"pattern.alignment_hint": "Antallet inkluderer originalen. Senter fordeler kopiene rundt originalen. Speil velger hvilken side som får en ekstra kopi når antallet er et partall.",
|
||||
"pattern.direction_1": "Retning 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Dra med venstre museknapp",
|
||||
"prefs.button_middle": "Dra med midtre museknapp",
|
||||
"prefs.button_right": "Dra med høyre museknapp",
|
||||
"prefs.carousel_next": "Neste",
|
||||
"prefs.carousel_previous": "Forrige",
|
||||
"prefs.choose_font": "Velg skriftfil…",
|
||||
"prefs.click": "Klikk",
|
||||
"prefs.contact_shading": "Myk kontaktskyggelegging",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Buede flater",
|
||||
"prefs.curves": "Buede flater",
|
||||
"prefs.cut_preview_tint": "Vis fjernet materiale i rødt",
|
||||
"prefs.cut_preview_tint_help": "En forhåndsvisning fyller materialet en funksjon fjerner, og formen den erstatter, med et rødt, gjennomsiktig spøkelse. Når dette er av, er fyllene helt gjennomsiktige, og bare konturene tegnes.",
|
||||
"prefs.dark_parts_shading": "Bevar formen på mørke deler",
|
||||
"prefs.dark_parts_shading_help": "Skygger visningen i lineært lys med en myk himmelfylling, slik at mørke flater beholder en gradient i stedet for å bli svarte",
|
||||
"prefs.dead_zone_note": "Det skraverte feltet er dødsonen: bevegelser innenfor den ignoreres.",
|
||||
"prefs.default": "standard",
|
||||
"prefs.design": "Standarder for design",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Kanter og skyggelegging",
|
||||
"prefs.extend": "Utvid",
|
||||
"prefs.extra_navigation": "Ctrl+venstredrag i tomt område roterer; hold mellomromstasten inne for å panorere.",
|
||||
"prefs.extrude_view_isometric": "Drei visningen til isometrisk når Ekstrudering åpnes",
|
||||
"prefs.extrude_view_return": "Gå tilbake til forrige visning når Ekstrudering lukkes",
|
||||
"prefs.follows_os": "Følger operativsystemet",
|
||||
"prefs.font": "Skrift",
|
||||
"prefs.font_fallback": "Tegn som mangler i valgt skrift, hentes fra den innebygde skriften, slik at ingen etiketter viser tomme ruter.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automatisk",
|
||||
"prefs.graphics_card_missing": "Det lagrede grafikkortet er utilgjengelig. Automatisk brukes i stedet.",
|
||||
"prefs.graphics_card_restart": "Trer i kraft etter at SolidCraft er startet på nytt. WGPU_ADAPTER_NAME overstyrer dette valget.",
|
||||
"prefs.graphics_card_unused": "Det lagrede grafikkortet ble ikke brukt for dette vinduet. Kortet som er i bruk, vises i Hjelp › Om og i statuslinjen. Prøv Automatisk, eller sett WGPU_ADAPTER_NAME til en unik del av kortets navn.",
|
||||
"prefs.graphics_note": "Velg mellom hastighet og jevnhet. Hvert valg viser effekten på et eksempel.",
|
||||
"prefs.graphics_presets_note": "Forhåndsinnstillinger angir valgene nedenfor samlet.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Skjul bindingssymboler når det er zoomet ut",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Når Skisser er satt til Under funksjonen sin, viser tidslinjen til venstre hver skisse ett nivå inn, under den første funksjonen som er bygget fra den, så lenge den er bred nok til å vise navn. Tidslinjen nederst beholder alltid opprettelsesrekkefølgen.",
|
||||
"prefs.history_sketches_under_feature": "Under funksjonen sin",
|
||||
"prefs.hold_stop_snapping": "Hold inne for å slå av punktfangst",
|
||||
"prefs.home_fit_size": "Størrelse for Hjem og Tilpass",
|
||||
"prefs.home_fit_size_note": "Hvor mye av visningen modellen fyller når Hjem, Tilpass, et åpnet design eller en visningsendring fra navigatoren rammer den inn, enten innstillingen under er på eller ikke. 100 %: fyller visningen mellom panelene, kompasset og navigasjonslinjen.",
|
||||
"prefs.icons_only": "Bare ikoner",
|
||||
"prefs.imported_file": "Importert fil",
|
||||
"prefs.in_browser": "I modelltreet",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Grensesnittspråk",
|
||||
"prefs.interface_note": "Hvordan SolidCraft ser ut, og hvor delene er plassert.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Inverter de krumme rullepilene",
|
||||
"prefs.invert_curved_roll_arrows_note": "De to krumme pilene i hjørnet av kuben ruller visningen i skjermplanet. På: pilen med klokken ruller mot klokken, og pilen mot klokken ruller med klokken. Av: hver pil ruller visningen i den retningen den krummer seg.",
|
||||
"prefs.invert_navigator_arrows": "Inverter rotasjonspilene på visningskuben",
|
||||
"prefs.invert_navigator_arrows_note": "Pilene rundt kuben roterer kameraet i den retningen de peker, som i Fusion og Inventor: pilen til venstre peker mot høyre og svinger kameraet mot høyre. Av: en pil roterer kuben mot siden den står på, så venstre pil svinger kameraet mot venstre. De krumme rullepilene påvirkes ikke.",
|
||||
"prefs.keep_work_on_tab_switch": "Behold dialoger og verktøy åpne når du bytter design",
|
||||
"prefs.keep_work_on_tab_switch_note": "Hver designfane beholder sin åpne dialog eller sitt åpne verktøy, med det du har valgt og skrevet i den, og sin fane på båndet. De er der igjen når du kommer tilbake til designet. Av: å bytte design avbryter dem og viser fanen Modell.",
|
||||
"prefs.labels": "Etiketter",
|
||||
"prefs.language_system": "System",
|
||||
"prefs.layout": "Oppsett",
|
||||
"prefs.layout_note": "Kompakt fester panelene til vinduskantene. Gjennomsiktig modelltre er tilgjengelig i Flytende. Endre siden for assistenten på assistentsiden.",
|
||||
"prefs.left": "Venstre",
|
||||
"prefs.left_click": "Venstreklikk",
|
||||
"prefs.line_drag_draws_one": "Trykk og dra tegner én linje",
|
||||
"prefs.line_drag_draws_one_note": "I Linje-verktøyet tegner trykk, dra og slipp én linje fra der du trykket til der du slapp, og linjen avsluttes der. Klikk tegner fortsatt en kjede. Av: et drag plasserer et punkt der det slippes, slik et klikk gjør.",
|
||||
"prefs.line_hover_tangent_arc": "Hvil på det siste punktet på en linje for å bytte til en tangentbue",
|
||||
"prefs.line_hover_tangent_arc_note": "I Linje-verktøyet: når et segment er tegnet, beveg pekeren bort fra det siste punktet i kjeden, kom tilbake og hold pekeren i ro på det: neste klikk avslutter en tangentbue, og samme bevegelse går tilbake til linjer. Av: å hvile der gjør ingenting.",
|
||||
"prefs.linked_designs": "Koblede design",
|
||||
"prefs.live_input": "Direkte inndata",
|
||||
"prefs.live_preview": "Direkte forhåndsvisning",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Museoppsett",
|
||||
"prefs.navigation": "Navigasjon",
|
||||
"prefs.navigation_note": "Hvordan mus, styreflate og 3D-mus beveger visningen.",
|
||||
"prefs.navigator_fit": "Tilpass modellen etter en visningsendring fra navigatoren",
|
||||
"prefs.navigator_fit_note": "En flate, et hjørne eller en pil på visningskuben, eller en akse på orienteringsindikatoren, ser også mot midten av modellen fra den ene avstanden som får den til å passe fra alle sider (den omsluttende kulen). Hjem bruker samme zoom og senter mens dette er på, så visninger som velges etterpå bare dreier. Av: visningen dreier på stedet og beholder målpunktet og zoomen sin.",
|
||||
"prefs.network_host_remove": "Fjern",
|
||||
"prefs.network_locations": "Tillat nettverksplasseringer i design",
|
||||
"prefs.network_locations_note": "Av: lenkede filer i et design på en annen datamaskin (\\\\server\\share) åpnes bare fra serverne som er oppført her, eller etter at du har tillatt en når du blir spurt.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Plassering",
|
||||
"prefs.prefer_free_sketch_points": "Foretrekk flyttbare skissepunkter når punkter overlapper",
|
||||
"prefs.preview_choices": "Forhåndsvisning av valgene dine",
|
||||
"prefs.preview_tint_new_faces": "Fargelegg ny overflate i en forhåndsvisning",
|
||||
"prefs.preview_tint_new_faces_help": "En forhåndsvisning av en funksjon som endrer en kropp, kan tegne overflaten den legger til i forhåndsvisningsfargen. Når dette er av, tegnes kroppen som seg selv.",
|
||||
"prefs.print_face_highlight": "Utheving av utskriftsflate",
|
||||
"prefs.print_face_highlight_tip": "Hvor sterkt et legemes utskriftsflate fargelegges og omrisses i visningen. 0 % viser ingen utheving.",
|
||||
"prefs.profile_active": "Aktiv profil",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Bruk forrige geometribudsjett for rendringsforhåndsvisning",
|
||||
"prefs.render_previous_geometry_budget_help": "Gjenopprett den forrige faste geometrigrensen (512 MiB på 64-biters skrivebordsmaskiner, 128 MiB ellers) i stedet for budsjettet som er basert på enheten.",
|
||||
"prefs.reports_saved": "{n} lagret",
|
||||
"prefs.ribbon_click_ends_tool": "Å klikke på knappen til verktøyet som kjører, avslutter det",
|
||||
"prefs.ribbon_click_ends_tool_note": "Et klikk på den lysende båndknappen til skisseverktøyet som er i bruk, avslutter verktøyet, så klikk i visningen velger igjen. Av: klikket starter verktøyet på nytt.",
|
||||
"prefs.ribbon_reveal": "Vis søkeresultater på båndet",
|
||||
"prefs.ribbon_reveal_note": "Når pekeren holdes over et resultat i Søk i kommandoer, vises hvor kommandoen ligger på båndet: fanen, knappen eller raden i et panels nedtrekksmeny. En kommando som startes fra søket, blinker der, og en kjørende kommando fra en nedtrekksmeny markerer panelet sitt.",
|
||||
"prefs.right_click": "Høyreklikk",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Gå tilbake til forrige visning",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Gå tilbake med mindre visningen er rotert",
|
||||
"prefs.sketch_exit_view_note": "Hvor visningen går etter Fullfør skisse, Avbryt eller dobbelt Esc.",
|
||||
"prefs.sketch_face_activates_part": "Skissering på flaten til en del gjør delen aktiv",
|
||||
"prefs.sketch_face_activates_part_note": "En skisse som startes på en flate av kroppen til en annen komponent, aktiverer først den komponenten, så skissen tilhører den og blir hos den delen i modelltreet. Delen forblir aktiv etterpå. Av: skissen tilhører den aktive komponenten.",
|
||||
"prefs.sketch_open_look_at": "Orienter mot skissen når den åpnes",
|
||||
"prefs.sketch_open_look_at_note": "Av: å opprette eller redigere en skisse lar visningen stå som den er. Orienter mot vender visningen mot skissen når du vil.",
|
||||
"prefs.sketch_recent_snap": "Fang automatisk til nylige sentre og midtpunkter",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Feil",
|
||||
"prefs.status_selected": "Valgt",
|
||||
"prefs.status_warning": "Advarsel",
|
||||
"prefs.structure.appearance": "Utseende",
|
||||
"prefs.structure.appearance_note": "Farger, tekst og tilgjengelighet.",
|
||||
"prefs.structure.in_profile": "I profilen",
|
||||
"prefs.structure.layout": "Oppsett",
|
||||
"prefs.structure.layout_note": "Hvor delene av vinduet plasseres.",
|
||||
"prefs.structure.look": "Stil",
|
||||
"prefs.structure.measure_pointer": "Mål og peker",
|
||||
"prefs.structure.mouse3d": "3D-mus",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse og SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Mus og styreflate. 3D-musen har sin egen side.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Endret siden den ble lagret",
|
||||
"prefs.structure.profile_hover": "Lagret i innstillingsprofiler",
|
||||
"prefs.structure.scale_percent": "{percent} %",
|
||||
"prefs.structure.sketch": "Skisse",
|
||||
"prefs.structure.tools": "Verktøy",
|
||||
"prefs.structure.tools_note": "Hvordan modelleringsverktøyene oppfører seg.",
|
||||
"prefs.structure.work": "Arbeid",
|
||||
"prefs.supersampling_brief": "Tegner visningen større og skalerer den ned: svært skarpt, og mer krevende.",
|
||||
"prefs.tab_accent_note": "Aksentfargen følger den aktive fanen",
|
||||
"prefs.theme_file": "temafil",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Grunnfarge · sRGB",
|
||||
"render.base_metallic": "Metallfraksjon",
|
||||
"render.base_opaque_only": "Denne redigeringen bevarer semantikken for ugjennomsiktige kropper. Bruk de eksplisitte glasskontrollene for optisk transmisjon.",
|
||||
"render.batch_all_shots": "Alle opptak ({count})",
|
||||
"render.batch_empty": "Lagre et opptak før alle opptak rendres.",
|
||||
"render.batch_limit": "Å rendre alle opptak er begrenset til 32 opptak.",
|
||||
"render.batch_status": "{running} pågår · {waiting} venter",
|
||||
"render.bloom_enable": "Vis bloom",
|
||||
"render.bloom_help": "Kreativ glød kun i utdata, fra positive lineære høylys, spredt med tre normaliserte boksfilterpasseringer. Radius er i utdatapiksler. Legges til i lineært visningslys før sRGB; ikke en linse- eller volumeffekt eller en forbedring av konvergens. Rå EXR er uendret.",
|
||||
"render.bloom_opaque": "Bloom krever ugjennomsiktig utdata. Gjennomsiktig PNG avvises og flates ikke ut i det stille.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Velg en stil i Utseender først",
|
||||
"render.chromatic_offset": "Kromatisk kantforskyvning",
|
||||
"render.clear_stage": "Fjern lagret rendringsdekor",
|
||||
"render.compare_divider": "Skillelinje i sammenligningen",
|
||||
"render.compare_live": "Live",
|
||||
"render.compare_live_preview": "Live-forhåndsvisning",
|
||||
"render.compare_render": "Rendring {number}",
|
||||
"render.compare_side": "Rendring {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · registrert ved revisjon {revision}",
|
||||
"render.compare_swap": "Bytt plass",
|
||||
"render.copy_request": "Kopier JSON",
|
||||
"render.cpu_aa_help": "Romlige prøver: flere prøver forbedrer kanter og øker rendringstiden.",
|
||||
"render.cpu_area_add": "Legg til rektangulært CPU-lys",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Viser det siste ferdige bildet; en nyere rendring har ikke erstattet det.",
|
||||
"render.result_sequence": "Sjekkpunkt",
|
||||
"render.result_title": "Rendringsresultat",
|
||||
"render.results_choose": "Beholdte resultater",
|
||||
"render.results_label": "Rendring {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [utdatert]",
|
||||
"render.results_unnamed": "Bilde",
|
||||
"render.return_design": "Tilbake til design",
|
||||
"render.review_stale": "Denne gjennomgangen er utdatert. Avklar eller sjekk på nytt før du bruker den.",
|
||||
"render.ribbon_aging": "Aldring",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Start med = for å bygge ordene fra parametere: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Kursiv",
|
||||
"sketch_text.loading_fonts": "Ser etter installerte skrifter…",
|
||||
"sketch_text.no_bold": "Den innebygde skriften har ingen fet utgave: velg en installert skrift",
|
||||
"sketch_text.on_path": "Teksten følger banen og plasseres langs kurven",
|
||||
"sketch_text.path_clear": "Ta teksten av kurven",
|
||||
"sketch_text.path_hint": "Velg en kurve i skissen som teksten skal følge: klikk her og deretter på kurven",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "de to origoene ligger på samme komponent",
|
||||
"thread.automatic_size": "Automatisk størrelse",
|
||||
"thread.designation": "Betegnelse",
|
||||
"thread.direction": "Gjengeretning",
|
||||
"thread.iso_metric": "ISO-metrisk",
|
||||
"thread.left_hand": "Venstregjenget",
|
||||
"thread.right_hand": "Høyregjenget",
|
||||
"thread.select_size": "Velg størrelse",
|
||||
"timeline.delete_after_marker_one": "Slett 1 funksjon etter historikkmarkøren",
|
||||
"timeline.delete_after_marker_other": "Slett {count} funksjoner etter historikkmarkøren",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Kjør dette i en terminal, og trykk deretter Koble til igjen:",
|
||||
"ui.agent_chat_auth_title": "Logg inn på agenten",
|
||||
"ui.agent_chat_cancel": "Avbryt",
|
||||
"ui.agent_chat_cancel_timeout": "Agenten svarte ikke på Stopp og ble koblet fra. Koble til igjen for å fortsette.",
|
||||
"ui.agent_chat_cannot_start": "Installert, men starter ikke: {error}",
|
||||
"ui.agent_chat_changes": "Endringer: {n}, ett angretrinn",
|
||||
"ui.agent_chat_changes_n": "{n} endringer",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Agentkommando",
|
||||
"ui.agent_chat_connect": "Koble til",
|
||||
"ui.agent_chat_copy": "Kopier",
|
||||
"ui.agent_chat_copy_message": "Kopier melding",
|
||||
"ui.agent_chat_ctx_bodies": "Kropper",
|
||||
"ui.agent_chat_ctx_elements": "Elementer",
|
||||
"ui.agent_chat_ctx_features": "Funksjoner",
|
||||
"ui.agent_chat_ctx_more": "+{n} til",
|
||||
"ui.agent_chat_ctx_other": "Annet",
|
||||
"ui.agent_chat_custom_heading": "Egendefinert modell",
|
||||
"ui.agent_chat_custom_hint": "Et program som bruker Agent Client Protocol via stdin og stdout. Programmet startes uten et kommandoskall.",
|
||||
"ui.agent_chat_denied": "Avvist",
|
||||
"ui.agent_chat_deny": "Avvis",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Alle",
|
||||
"ui.agent_chat_mode_ask": "Spør",
|
||||
"ui.agent_chat_mode_edits": "Endringer",
|
||||
"ui.agent_chat_model_custom": "Bruk egendefinert modell: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} kan ikke bruke verktøyene i SolidCraft, så den kan bare chatte. Velg en modell med verktøystøtte.",
|
||||
"ui.agent_chat_model_rejected": "Agenten godtok ikke {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Søk etter modeller…",
|
||||
"ui.agent_chat_model_tip": "Modellen agenten bruker. Valget ditt huskes for denne agenten.",
|
||||
"ui.agent_chat_models_failed": "Kunne ikke liste opp modellene: {error}",
|
||||
"ui.agent_chat_models_heading": "Tilgjengelige modeller",
|
||||
"ui.agent_chat_models_listing": "Henter modeller…",
|
||||
"ui.agent_chat_models_none": "Endepunktet viser ingen modeller",
|
||||
"ui.agent_chat_models_not_a_list": "Svaret var ikke en modellliste",
|
||||
"ui.agent_chat_new": "Ny chat",
|
||||
"ui.agent_chat_new_confirm": "Starte en ny chat? Den nåværende tømmes.",
|
||||
"ui.agent_chat_next_picture": "Neste bilde",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Tillatelser",
|
||||
"ui.ai_preset": "Forhåndsinnstilling",
|
||||
"ui.ai_protocol": "Protokoll",
|
||||
"ui.ai_reasoning_effort": "Resonneringsinnsats",
|
||||
"ui.ai_reasoning_effort_field_hint": "tom = standard fra leverandøren",
|
||||
"ui.ai_reasoning_effort_hint": "Valgfritt. Sendes til endepunktet som `reasoning_effort`; godkjente verdier varierer fra leverandør til leverandør (for eksempel `low`, `high` eller `max`). En verdi du angir her, blir aldri erstattet av SolidCraft. La feltet stå tomt for å ikke sende noe og beholde leverandørens standard.",
|
||||
"ui.ai_remove": "Fjern",
|
||||
"ui.ai_request_timed_out": "Modellen brukte lenger tid enn {seconds} s. Du kan øke tidsavbruddet for forespørsler til dette endepunktet i Innstillinger › Assistent.",
|
||||
"ui.ai_request_timeout": "Tidsavbrudd for forespørsel",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Tangent: velg en sirkel/bue eller åpen spline/kjeglesnittkurve, og deretter berøringspunktet (frie kurver: endepunkter)",
|
||||
"ui.construction.external_hint": "Tangent: velg en sirkel eller bue, et eksternt punkt, og deretter ønsket løsning",
|
||||
"ui.construction.free_hint": "Hjelpelinje: klikk på to punkter; høyreklikk for å starte på nytt",
|
||||
"ui.construction.normal_needs_length": "En uendelig linje er alltid en hjelpelinje: skriv inn en lengde for å tegne en normal linje",
|
||||
"ui.construction.point_hint": "Hjelpelinje: klikk på punktet linjen skal gå gjennom",
|
||||
"ui.construction.reference_hint": "Hjelpelinje: velg en rett linje, og deretter et punkt; høyreklikk for å bytte referanse",
|
||||
"ui.construction.ribbon_label": "Hjelpelinjer",
|
||||
"ui.construction.side_hint": "Hjelpelinje: klikk på siden linjen går mot; høyreklikk for å starte på nytt",
|
||||
"ui.context_menu": "Kontekstmeny",
|
||||
"ui.continuity_crease": "Knekk",
|
||||
"ui.continuity_curvature": "Krumning",
|
||||
"ui.continuity_curvature_change": "Krumningsendring",
|
||||
"ui.continuity_g0": "G0-knekk",
|
||||
"ui.continuity_g1": "G1-tangent",
|
||||
"ui.continuity_g2": "G2-krumning",
|
||||
"ui.continuity_gap": "Gap",
|
||||
"ui.continuity_position": "Posisjon",
|
||||
"ui.continuity_tangent": "Tangent",
|
||||
"ui.copy": "Kopier",
|
||||
"ui.corner": "Hjørne",
|
||||
"ui.corners": "Hjørner",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Mørk",
|
||||
"ui.default_modelling_orientation": "Standard modelleringsorientering",
|
||||
"ui.delete": "Slett",
|
||||
"ui.delete_select_first": "Velg først hva som skal slettes: funksjoner, kropper, komponenter eller skissegeometri",
|
||||
"ui.depth": "Dybde",
|
||||
"ui.design": "Design",
|
||||
"ui.design_properties.author": "Forfatter",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Delen ble lagret i en annen fil; sammenstillingen er fortsatt koblet til {name}",
|
||||
"ui.edit_in_place_wait": "Vent til det som kjører i designet er ferdig",
|
||||
"ui.edit_section_analysis": "Rediger snittanalyse",
|
||||
"ui.edit_sketch_empty": "Ingen skisser å redigere",
|
||||
"ui.ellipse": "Ellipse",
|
||||
"ui.emboss_wrap_note": "Ortogonale linjeprofiler som tangerer én støttet sylinder, legges automatisk rundt den. Velg en vegg for å velge et mål.",
|
||||
"ui.end_radius": "Sluttradius",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Eksplisitt",
|
||||
"ui.equation_form": "Form",
|
||||
"ui.equation_note": "Variabelen er et rent tall: sin(t) tolker det i radianer. Et resultat uten enhet er i designets enhet.",
|
||||
"ui.equation_note_range": "Variabelen er en lengde, slik intervallet er: kombiner den med lengdeparametere, og del den på en lengde for sin(). Et resultat uten enhet er i designets enhet.",
|
||||
"ui.equation_parametric": "Parametrisk",
|
||||
"ui.equation_variable_unit": "Variabelen har intervallets enhet",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Skjul origo",
|
||||
"ui.hidePlanes": "Skjul plan",
|
||||
"ui.hideProfile": "Skjul profil",
|
||||
"ui.hide_component_history": "Skjul dens tidslinje",
|
||||
"ui.hide_origin_by_default": "Skjul origo som standard",
|
||||
"ui.hide_origin_note": "Nye design starter med Origo-mappen skjult. Et design beholder sin egen Origo-innstilling når du har vist eller skjult den.",
|
||||
"ui.history_back": "Gå ett trinn tilbake",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "dobbeltklikk kanten",
|
||||
"ui.history_first": "Gå til starten",
|
||||
"ui.history_forward": "Gå ett trinn frem",
|
||||
"ui.history_hide_hidden": "Skjul skjulte komponenter",
|
||||
"ui.history_hide_names": "Skjul navn",
|
||||
"ui.history_last": "Gå til slutten",
|
||||
"ui.history_marker_tip": "Tidslinjemarkør: dra for å vise en tidligere tilstand av modellen. Nye funksjoner legges til her.",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Vis avspillingsknapp",
|
||||
"ui.history_play_finish_action": "Fullfør gjeldende handling før du spiller av tidslinjen",
|
||||
"ui.history_play_roll_back": "Flytt tidslinjemarkøren tilbake før avspilling",
|
||||
"ui.history_show_hidden": "Vis skjulte komponenter",
|
||||
"ui.history_show_names": "Vis navn",
|
||||
"ui.history_sketch_listed_under": "Oppført under {feature}",
|
||||
"ui.history_title": "Tidslinje",
|
||||
"ui.history_toggle_names": "Vis eller skjul funksjonsnavn",
|
||||
"ui.history_waits_for_editor": "Angre, Gjør om og Tidslinje venter til funksjonsredigeringen er åpnet",
|
||||
"ui.hole": "Hull",
|
||||
"ui.hole_tap_type": "Type gjenging",
|
||||
"ui.hole_type": "Hulltype",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} har ulagrede endringer, så den lagrede filen ble satt inn. Lagre den, og bruk deretter Oppdater koblinger for å hente inn endringene.",
|
||||
"ui.insert_design.unsaved": "Ulagrede endringer",
|
||||
"ui.inspect": "Inspiser",
|
||||
"ui.instances": "Forekomster",
|
||||
"ui.intersect": "Snitt",
|
||||
"ui.isolate": "Isoler",
|
||||
"ui.join": "Slå sammen",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Ledd",
|
||||
"ui.keyboard_shortcuts": "Tastatursnarveier",
|
||||
"ui.language": "Språk",
|
||||
"ui.lasso_select": "Lasso (dra en frihåndssløyfe: velger alt som ligger helt innenfor)",
|
||||
"ui.layout_compact": "Kompakt",
|
||||
"ui.layout_floating": "Flytende",
|
||||
"ui.length": "Lengde",
|
||||
"ui.length_decimals": "Lengdedesimaler",
|
||||
"ui.light": "Lys",
|
||||
"ui.line": "Linje",
|
||||
"ui.line_arc_hint": "Tangentbue: klikk på enden av buen. Hvil på det siste punktet igjen for linjer; høyreklikk eller Esc for å avslutte",
|
||||
"ui.link_copies": "Lenk identiske kopier",
|
||||
"ui.link_copies_keep": "Behold",
|
||||
"ui.link_copies_link": "Lenk",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Bygger delen på nytt og erstatter eventuelle funksjoner som er lagt til. Alle forekomster av denne komponenten oppdateres.",
|
||||
"ui.paste": "Lim inn",
|
||||
"ui.path": "Bane",
|
||||
"ui.pattern_object_type_tip": "Kropper: volumformer, valgt i visningen eller modelltreet; hver kopieres hel.\nFunksjoner: trinn i tidslinjen, som en ekstrudering eller et hull, valgt i tidslinjen eller på en flate de har laget; trinnet gjentas.\nEn skisse er ingen av delene: gjenta kurvene med skissens eget Mønster eller Speil, eller ekstruder den først.",
|
||||
"ui.pattern_on_path": "Mønster på bane",
|
||||
"ui.perforate_margin_default": "fra diameteren",
|
||||
"ui.perforate_pitch": "Senteravstand",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Mangekant",
|
||||
"ui.preferences": "Innstillinger",
|
||||
"ui.press_a_key": "trykk på en tast…",
|
||||
"ui.print_face_body_not_sent": "Legemet til den flaten sendes ikke: legg det til i Kropper først",
|
||||
"ui.print_face_cleared": "{body}: utskriftsflate fjernet",
|
||||
"ui.print_face_input": "Utskriftsflate",
|
||||
"ui.print_face_one_body": "En utskriftsflate hører til ett legeme: send det legemet alene for å endre den",
|
||||
"ui.print_face_pick": "Velg en plan flate på et massivt legeme for å gjøre den til utskriftsflaten",
|
||||
"ui.print_face_set": "{body}: utskriftsflate satt; Send til slicer legger legemet på den",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5053,7 +4908,6 @@
|
||||
"ui.showDimension": "Vis mål",
|
||||
"ui.showOrigin": "Vis origo",
|
||||
"ui.showPlanes": "Vis plan",
|
||||
"ui.show_component_history": "Vis dens tidslinje",
|
||||
"ui.show_constraints": "Bindinger",
|
||||
"ui.show_construction_geometries": "Konstruksjonsgeometri",
|
||||
"ui.show_dimensions": "Mål",
|
||||
@@ -5170,15 +5024,12 @@
|
||||
"ui.view_angles": "Visningsvinkler",
|
||||
"ui.view_angles_convention": "Grader om oppaksen. Giring 0° er frontvisningen, 90° venstre, −90° høyre, 180° bak; helning 90° er toppvisningen; positiv rull dreier modellen med klokken.",
|
||||
"ui.view_angles_help": "Viser visningens helning, giring og rull i grader og projeksjonen under orienteringsindikatoren. Klikk på avlesningen for å skrive inn nøyaktige vinkler.",
|
||||
"ui.view_angles_lock": "Lås {axis}",
|
||||
"ui.view_angles_ortho": "Orto",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Helning",
|
||||
"ui.view_angles_readout": "Helning {pitch} · Giring {yaw} · Rull {roll}",
|
||||
"ui.view_angles_roll": "Rull",
|
||||
"ui.view_angles_unlock": "Lås opp {axis}",
|
||||
"ui.view_angles_yaw": "Giring",
|
||||
"ui.view_angles_zero": "Sett {axis} til 0°",
|
||||
"ui.view_centre": "Visningssenter",
|
||||
"ui.viewport_status_clear": "Slå av {name}",
|
||||
"ui.viewport_status_clear_hint": "Slå av {name} · Esc",
|
||||
@@ -5236,7 +5087,7 @@
|
||||
"update.check_unavailable": "Søk etter oppdateringer er ikke tilgjengelig for denne installasjonen.",
|
||||
"update.checking": "Sjekker…",
|
||||
"update.copy": "Kopier",
|
||||
"update.dmg_opened": "Diskbildet er åpent og verifisert: avslutt SolidCraft, dra det nye SolidCraft til Applications, erstatt den gamle kopien, og åpne deretter SolidCraft igjen.",
|
||||
"update.dmg_opened": "Diskbildet er åpent og verifisert: dra SolidCraft til Applications, erstatt den gamle kopien, og start deretter SolidCraft på nytt.",
|
||||
"update.download": "Last ned",
|
||||
"update.download_open": "Last ned og åpne",
|
||||
"update.downloading": "Laster ned og verifiserer… {done} av {total} MB",
|
||||
@@ -5280,7 +5131,6 @@
|
||||
"web.open_link": "Åpne lenket design?",
|
||||
"web.open_link_confirm": "Det finnes ulagrede endringer. Åpne det lenkede designet i en ny fane?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ velg · Enter / Tab fullfør · Esc lukk",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ velg · Enter bruker denne verdien",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ velg · Enter bruker det du skrev · Esc lukk",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter fortsetter på GitHub."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Rechthoekig",
|
||||
"Rectangular Tube": "Rechthoekige buis",
|
||||
"Reference face": "Referentievlak",
|
||||
"Reference plane": "Referentievlak",
|
||||
"Relief Depth": "Vrijsnijdiepte",
|
||||
"Relief Width": "Vrijsnijbreedte",
|
||||
"Remove Tools": "Gereedschappen verwijderen",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Doorsnede",
|
||||
"Section (optional)": "Doorsnede (optioneel)",
|
||||
"Section position": "Positie van de doorsnede",
|
||||
"Sections": "Doorsneden",
|
||||
"Sections (one sketch each)": "Doorsneden (één schets per doorsnede)",
|
||||
"Select Other": "Overige selecteren",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Overige selecteren: houd de linkermuisknop stil op het model (of klik met rechts › Overige selecteren…) om alles onder de cursor weer te geven; klik opnieuw op dezelfde plek om het volgende item daar te selecteren. Dubbelklik met de middelste knop om naar Home te gaan (Voorkeuren › Navigatie).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (bevestiging kwijt)",
|
||||
"browser.sketch_editing": "{name} (wordt bewerkt)",
|
||||
"browser.sketch_name": "Schets{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "al in hun onderdeel",
|
||||
"browser.sketches_to_parts_design_body": "op een lichaam van het ontwerp zelf",
|
||||
"browser.sketches_to_parts_moved": "{moved} schetsen verplaatst naar het onderdeel waarop ze staan",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "op een vlak zonder exacte bevestiging",
|
||||
"browser.sketches_to_parts_not_on_face": "niet op het vlak van een onderdeel",
|
||||
"browser.sketches_to_parts_part_missing": "hun onderdeel bestaat niet meer",
|
||||
"browser.sketches_to_parts_result": "{moved} schetsen verplaatst naar het onderdeel waarop ze staan; {stayed} bleven staan: {why}",
|
||||
"browser.units": "Eenheden: {units}",
|
||||
"cam.flat": "Plat vlak",
|
||||
"cam.follower": "Volger",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Naar bestand extraheren",
|
||||
"cmd.component_finish_edit": "Bewerken voltooien",
|
||||
"cmd.component_from_bodies": "Componenten maken van lichamen",
|
||||
"cmd.component_hide_history": "Componentgeschiedenis verbergen",
|
||||
"cmd.component_insert_design": "Ontwerp invoegen",
|
||||
"cmd.component_links": "Koppelingen weergeven",
|
||||
"cmd.component_list": "Componenten weergeven",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Lichamen naar component verplaatsen",
|
||||
"cmd.component_move_features": "Kenmerken naar component verplaatsen",
|
||||
"cmd.component_move_sketches": "Schetsen naar component verplaatsen",
|
||||
"cmd.component_move_sketches_to_parts": "Schetsen naar hun onderdeel verplaatsen",
|
||||
"cmd.component_paste_from_design": "Plakken uit een ander ontwerp",
|
||||
"cmd.component_paste_new": "Nieuw plakken",
|
||||
"cmd.component_properties": "Fysieke eigenschappen component",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Component hernoemen",
|
||||
"cmd.component_replace_with_link": "Vervangen door koppeling",
|
||||
"cmd.component_revert_position": "Positie terugzetten",
|
||||
"cmd.component_show_history": "Componentgeschiedenis tonen",
|
||||
"cmd.component_unlock": "Inhoud ontgrendelen",
|
||||
"cmd.component_update_links": "Koppelingen bijwerken",
|
||||
"cmd.config_activate": "Configuratie activeren",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Configuratieregel",
|
||||
"cmd.config_rules": "Configuratieregels",
|
||||
"cmd.config_table": "Configuratietabel tonen",
|
||||
"cmd.construct.plane.axis_point": "Vlak door as en punt",
|
||||
"cmd.construct_axis_edge": "As door rand",
|
||||
"cmd.construct_axis_normal_to_face": "As loodrecht op vlak",
|
||||
"cmd.construct_axis_through_cylinder": "As door cilinder/kegel/torus",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Explosieweergave tonen",
|
||||
"cmd.expr_evaluate": "Expressie evalueren",
|
||||
"cmd.face_delete": "Vlak verwijderen",
|
||||
"cmd.file.export_3mf": "3MF exporteren",
|
||||
"cmd.file.export_obj": "OBJ exporteren",
|
||||
"cmd.file.export_step": "STEP exporteren",
|
||||
"cmd.file.export_stl": "STL exporteren",
|
||||
"cmd.file.export_urdf": "URDF exporteren",
|
||||
"cmd.file_export": "Exporteren",
|
||||
"cmd.file_insert_mesh": "Mesh invoegen",
|
||||
"cmd.file_insert_step": "STEP invoegen",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Componentkleuren inschakelen",
|
||||
"cmd.inspect_colored_components_disable": "Componentkleuren uitschakelen",
|
||||
"cmd.inspect_compare": "Lichamen vergelijken",
|
||||
"cmd.inspect_compare_picture": "Afbeelding vergelijken",
|
||||
"cmd.inspect_continuity": "Continuïteitsanalyse",
|
||||
"cmd.inspect_curvature_comb": "Krommingskamanalyse",
|
||||
"cmd.inspect_curvature_map": "Krommingskaartanalyse",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Puntenwolk bewerken",
|
||||
"cmd.pointcloud_insert": "Puntenwolk invoegen",
|
||||
"cmd.pointcloud_list": "Puntenwolken",
|
||||
"cmd.render.compare.divider": "Scheidingslijn van de rendervergelijking verplaatsen",
|
||||
"cmd.render.result.discard": "Renderresultaat verwerpen",
|
||||
"cmd.render.result.select": "Renderresultaat selecteren",
|
||||
"cmd.render_aging_describe": "Gelaagde oppervlakveroudering",
|
||||
"cmd.render_backends": "Render-backends",
|
||||
"cmd.render_batch": "Alle renderopnamen renderen",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline met controlepunten (graad 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline door punten",
|
||||
"cmd.sketch_spline_insert_point": "Splinepunt toevoegen",
|
||||
"cmd.sketch_spline_remove_point": "Splinepunt verwijderen",
|
||||
"cmd.sketch_spline_reverse": "Splinerichting omkeren",
|
||||
"cmd.sketch_spun_profile": "Gedraaid profiel",
|
||||
"cmd.sketch_toggle_diameter": "Straal/diameter omschakelen",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Tijdlijnmarkering verplaatsen",
|
||||
"cmd.timeline_stop": "Geschiedenis stoppen",
|
||||
"cmd.timeline_suppress": "Kenmerk onderdrukken",
|
||||
"cmd.ui.assistant": "Assistent tonen/verbergen",
|
||||
"cmd.view.render_browser": "Renderbrowser",
|
||||
"cmd.view.render_dock": "Renderdock verplaatsen",
|
||||
"cmd.view.render_focus": "Renderfocusweergave",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Navigatiegereedschap",
|
||||
"cmd.view_top": "Bovenaanzicht",
|
||||
"cmd.view_visual_style": "Visuele stijl",
|
||||
"color.blue": "Blauw",
|
||||
"color.copy": "Klik om kleurwaarden te kopiëren",
|
||||
"color.edit": "Klik om kleur te bewerken",
|
||||
"color.gamma": "Kleurwaarden worden getoond in gammaruimte 0-255",
|
||||
"color.green": "Groen",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Voer #rrggbb of #rrggbbaa in; met zes cijfers blijft de dekking behouden",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Tint",
|
||||
"color.linear": "Kleurwaarden worden getoond in lineaire ruimte 0-1",
|
||||
"color.recent": "Recente kleuren",
|
||||
"color.recent_help": "Kleuren die je in een kleurveld kiest, verschijnen hier",
|
||||
"color.red": "Rood",
|
||||
"color.saturation": "Verzadiging (procent)",
|
||||
"color.saturation_value": "Verzadiging en waarde",
|
||||
"color.selected": "Geselecteerde kleur",
|
||||
"color.step_down": "Stap omlaag",
|
||||
"color.step_up": "Stap omhoog",
|
||||
"color.value": "Waarde, de helderheid (procent)",
|
||||
"config.column_filter_empty": "Geen overeenkomende kolommen",
|
||||
"config.rule_parameter_columns": "Alleen parameters met een kolom in de tabel worden weergegeven. Voeg een kolom toe met Kolom toevoegen (+) om de parameter hier te gebruiken.",
|
||||
"config.rule_suppression_columns": "Alleen kenmerken met een kolom Onderdrukken in de tabel worden weergegeven. Voeg een kolom toe met Kolom toevoegen (+) om de onderdrukking hier aan te sturen.",
|
||||
"contact.components_count": "{count} componenten",
|
||||
"contact.enabled_label": "ingeschakeld",
|
||||
"coupling.gear_1": "Tandwiel 1",
|
||||
@@ -1368,19 +1333,11 @@
|
||||
"dialog.custom_axis": "↖ Aangepaste as",
|
||||
"dialog.dimension_insert_hint": "Klik op een andere aandrijvende maat om de naam ervan in te voegen",
|
||||
"dialog.dimension_name": "Maat: {name}",
|
||||
"dialog.dimension_step_down": "{step} omlaag",
|
||||
"dialog.dimension_step_expression": "Alleen een getal verspringt; een uitdrukking blijft zoals ingevoerd",
|
||||
"dialog.dimension_step_up": "{step} omhoog",
|
||||
"dialog.edit_title": "{title} BEWERKEN",
|
||||
"dialog.no_shown_body": "Geen zichtbaar lichaam om te wijzigen: toon er een of kies Nieuw lichaam",
|
||||
"dialog.pattern_sketch_not_object": "Kies lichamen of kenmerken: een schets is geen van beide. Herhaal de curven ervan met het eigen Patroon of Spiegelen van de schets, of extrudeer de schets eerst.",
|
||||
"dialog.select": "↖ Selecteren",
|
||||
"dialog.selected_count": "↖ {count} geselecteerd",
|
||||
"dialog.selection_constraint": "Beperking {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · curve {id}",
|
||||
"dialog.selection_guidance": "Selecteer een invoer om deze te wijzigen. Klik op geselecteerde objecten om ze te verwijderen; Ctrl/Cmd-klik schakelt ze ook om. Controleer het voorbeeld en druk daarna op OK.",
|
||||
"dialog.selection_midpoint": "Middelpunt · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profiel {number}",
|
||||
"dialog.selection_step": "{step} van {total}: {input} selecteren",
|
||||
"dialog.step": "Stap",
|
||||
"document.changed_on_disk": "{name} is op schijf gewijzigd",
|
||||
@@ -1395,7 +1352,6 @@
|
||||
"document.read_only_save": "Dit ontwerp is alleen-lezen geopend: sla het op als nieuw bestand",
|
||||
"document.save_changes": "Wijzigingen in {name} opslaan?",
|
||||
"document.save_copy": "Kopie opslaan…",
|
||||
"document.tab_unsaved_changes": "Niet-opgeslagen wijzigingen",
|
||||
"document.unsaved_changes": "{name} heeft niet-opgeslagen wijzigingen. Als u niet opslaat, gaan ze verloren.",
|
||||
"drive.rigid": "{joint} is een starre verbinding: die houdt zijn onderdelen vast en heeft dus niets om aan te sturen. Wijzig het type in Verbinding bewerken om ze te laten bewegen: Draaiend om te draaien, Schuivend om te schuiven, Cilindrisch voor beide.",
|
||||
"drive.stopped_by_contact": "Gestopt bij {value}: {a} zou door {b} heen gaan",
|
||||
@@ -1464,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Maakt een constructieas door twee punten, hoekpunten of schetspunten. Gebruik dit voor een as die tussen twee bekende posities loopt.",
|
||||
"help.construct.plane.along_path": "Maakt een constructievlak loodrecht op een rand of curve, op een positie erlangs. Gebruik dit om een profiel voor een sweep of een doorsnede van een pad te schetsen.",
|
||||
"help.construct.plane.at_angle": "Maakt een constructievlak dat onder een hoek is gedraaid ten opzichte van een vlak, om een as of rand. Gebruik dit voor schuine schetsen, zoals een hoekbeugel.",
|
||||
"help.construct.plane.axis_point": "Maakt een constructievlak dat een as en een punt buiten die as bevat. Kies een as van de oorsprong of een constructieas, een rechte rand of schetslijn, en daarna een hoekpunt, schetspunt of constructiepunt. Een punt op de as kan geen eenduidig vlak bepalen.",
|
||||
"help.construct.plane.midplane": "Maakt een constructievlak halverwege twee vlakken, of dat de hoek tussen twee vlakken halveert waar ze onder een hoek samenkomen. Gebruik dit als symmetrievlak om te spiegelen.",
|
||||
"help.construct.plane.offset": "Maakt een constructievlak evenwijdig aan een vlak, op een afstand of door een punt. Gebruik dit om op een vaste hoogte boven een vlak te schetsen.",
|
||||
"help.construct.plane.perpendicular": "Maakt een constructievlak dat een lijn of rand bevat en loodrecht op een vlak staat. Gebruik dit om rechtop op een model te schetsen, langs een rand.",
|
||||
@@ -1841,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Controleer het verbindingstype (zoals Star), het vastzetten, de verbindingslimieten en door parameters aangestuurde waarden.",
|
||||
"joint_move.blocked_title": "Dit onderdeel kan niet worden verplaatst",
|
||||
"joint_move.coarse": "Rotatiestap dicht bij de as (°)",
|
||||
"joint_move.conflict": "Een verbinding van dit onderdeel conflicteert met de andere: {joint}.",
|
||||
"joint_move.conflict_hint": "Bewerk, onderdruk of verwijder de conflicterende verbinding zodat de andere verbindingen het onderdeel kunnen plaatsen.",
|
||||
"joint_move.distance": "Afstand vanaf het begin",
|
||||
"joint_move.done": "Gereed",
|
||||
"joint_move.fine": "Rotatiestap ver van de as (°)",
|
||||
@@ -1942,8 +1895,6 @@
|
||||
"motion.track_name": "Spoor {number}",
|
||||
"nav.alias.help": "Shift+Alt+linkerknop slepen draait, Shift+Alt+middenknop slepen pant, Shift+Alt+rechterknop slepen zoomt; middenknop slepen pant ook en rechterknop slepen draait",
|
||||
"nav.blender.help": "Middenknop slepen draait, Shift+middenknop pant, Ctrl+middenknop zoomt; rechterknop slepen heeft geen invloed op de camera",
|
||||
"nav.creo.help": "Middenknop slepen draait, Shift+middenknop pant, Ctrl+middenknop verticaal slepen zoomt (omlaag om in te zoomen); scrollen met het wiel zoomt",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Muis en 3D-muis draaien door beide polen heen en behouden de rolhoek. Het snappen op assen met Shift is uitgeschakeld.",
|
||||
"nav.free_orbit.label": "Vrij draaien",
|
||||
"nav.free_orbit.snap_help": "Muis en 3D-muis draaien door beide polen heen en behouden de rolhoek. Houd Shift ingedrukt tijdens het slepen om de kijkrichting en de rolhoek te snappen.",
|
||||
@@ -1953,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+linkerknop slepen pant, Shift+Alt+linkerknop zoomt, Ctrl+linkerknop slepen op lege ruimte draait",
|
||||
"nav.inventor.help": "Middenknop slepen pant, Shift+middenknop draait, Ctrl+middenknop zoomt, rechterknop slepen draait",
|
||||
"nav.maya.help": "Alt+linkerknop slepen draait, Alt+middenknop pant, Alt+rechterknop zoomt; middenknop slepen pant ook",
|
||||
"nav.nx.help": "Middenknop slepen draait, Shift+middenknop pant (middelste + rechterknop in NX), Ctrl+middenknop zoomt (middelste + linkerknop in NX); rechterknop slepen heeft geen invloed op de camera",
|
||||
"nav.openscad.help": "Linkerknop slepen op lege ruimte draait, Shift+linkerknop slepen selecteert met een kader, schetsgeometrie slepen bewerkt die; rechter- of middenknop slepen pant, Shift+rechter- of Shift+middenknop slepen zoomt",
|
||||
"nav.perspective.sketch": "Schetsbewerking gebruikt een orthografische weergave. Rond de schets af om naar perspectief te schakelen.",
|
||||
"nav.right_drag_orbits.help": "Uit: rechts slepen laat de camera met rust en de rechtermuisknop opent alleen het contextmenu. Het kiezen van de SolidWorks-muistoewijzing schakelt dit uit.",
|
||||
@@ -2096,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Bolkopschroef met inbus",
|
||||
"parts.family.dowel_pin": "Parallelpen (paspen)",
|
||||
"parts.family.hex_bolt": "Zeskantbout / zeskantschroef",
|
||||
"parts.family.hex_cap_screw_inch": "Zeskantschroef (inch)",
|
||||
"parts.family.hex_nut": "Zeskantmoer",
|
||||
"parts.family.hex_nut_inch": "Zeskantmoer (inch)",
|
||||
"parts.family.set_screw": "Stelschroef met inbus, vlakke punt",
|
||||
"parts.family.socket_head_cap_screw": "Cilinderkopschroef met inbus",
|
||||
"parts.family.washer": "Vlakke onderlegring",
|
||||
"parts.family.washer_sae": "Vlakke onderlegring, SAE (smal)",
|
||||
"parts.family.washer_uss": "Vlakke onderlegring, USS (breed)",
|
||||
"parts.holes": "Gaten (optioneel)",
|
||||
"parts.placement_hint": "kies een of meer gaten om in elk een onderdeel te plaatsen, of OK plaatst het in de oorsprong",
|
||||
"parts.system": "Eenhedensysteem",
|
||||
"parts.system.inch": "Inch",
|
||||
"parts.system.metric": "Metrisch",
|
||||
"pattern.alignment_2": "Uitlijning 2",
|
||||
"pattern.alignment_hint": "Aantallen omvatten het origineel. Gecentreerd verdeelt kopieën gelijkmatig; Omkeren kiest de extra zijde bij even totalen.",
|
||||
"pattern.direction_1": "Richting 1",
|
||||
@@ -2170,8 +2113,6 @@
|
||||
"prefs.button_left": "Linkerknop slepen",
|
||||
"prefs.button_middle": "Middenknop slepen",
|
||||
"prefs.button_right": "Rechterknop slepen",
|
||||
"prefs.carousel_next": "Volgende",
|
||||
"prefs.carousel_previous": "Vorige",
|
||||
"prefs.choose_font": "Lettertypebestand kiezen…",
|
||||
"prefs.click": "Klik",
|
||||
"prefs.contact_shading": "Zachte contactschaduw",
|
||||
@@ -2184,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Gebogen oppervlakken",
|
||||
"prefs.curves": "Gebogen oppervlakken",
|
||||
"prefs.cut_preview_tint": "Verwijderd materiaal rood tonen",
|
||||
"prefs.cut_preview_tint_help": "Een voorbeeld vult het materiaal dat een kenmerk verwijdert, en de vorm die het vervangt, met een rood doorschijnend spookbeeld. Als dit uit staat, zijn die vullingen volledig transparant en worden alleen hun contouren getekend.",
|
||||
"prefs.dark_parts_shading": "Vorm van donkere onderdelen behouden",
|
||||
"prefs.dark_parts_shading_help": "Schaduw de weergave in lineair licht met een zachte hemelvulling, zodat donkere vlakken een verloop houden in plaats van zwart te worden",
|
||||
"prefs.dead_zone_note": "De gearceerde band is de dode zone: beweging daarbinnen wordt genegeerd.",
|
||||
"prefs.default": "standaard",
|
||||
"prefs.design": "Standaardwaarden voor ontwerpen",
|
||||
@@ -2198,19 +2135,10 @@
|
||||
"prefs.dialogs_edge": "Aan de rand van de weergave",
|
||||
"prefs.dialogs_left_column": "In de linkerkolom",
|
||||
"prefs.dialogs_note": "Waar opdrachtdialogen openen: vastgezet aan de rand van de weergave, of in de linkerkolom in plaats van de browser en de geschiedenis, die terugkomen zoals ze waren wanneer de dialoog sluit.",
|
||||
"prefs.dimension_step_angle": "Wat de pijlen van het venster, Omhoog/Omlaag en het wieltje bij een hoek optellen",
|
||||
"prefs.dimension_step_length": "Wat de pijlen van het venster, Omhoog/Omlaag en het wieltje bij een lengte optellen",
|
||||
"prefs.dimension_steps": "Stappen in het venster",
|
||||
"prefs.dimension_values": "Maatwaarden",
|
||||
"prefs.dimension_values_note": "Waar de waarde van een maat wordt ingevoerd. Een venster heeft pijlen die de waarde laten verspringen; het maatgereedschap plaatst eerst de tekst.",
|
||||
"prefs.dimension_values_view": "In de weergave",
|
||||
"prefs.dimension_values_window": "In een venster",
|
||||
"prefs.display": "Weergave",
|
||||
"prefs.edges": "Randen en schaduwing",
|
||||
"prefs.extend": "Verlengen",
|
||||
"prefs.extra_navigation": "Ctrl+linkerknop slepen op lege ruimte roteert; houd Space ingedrukt om te pannen.",
|
||||
"prefs.extrude_view_isometric": "De weergave isometrisch draaien wanneer Extruderen opent",
|
||||
"prefs.extrude_view_return": "Terug naar de eerdere weergave wanneer Extruderen sluit",
|
||||
"prefs.follows_os": "Volgt het besturingssysteem",
|
||||
"prefs.font": "Lettertype",
|
||||
"prefs.font_fallback": "Tekens die het gekozen lettertype mist, vallen terug op het ingebouwde lettertype, zodat geen enkel label een leeg vakje toont.",
|
||||
@@ -2226,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automatisch",
|
||||
"prefs.graphics_card_missing": "De opgeslagen grafische kaart is niet beschikbaar; Automatisch wordt gebruikt.",
|
||||
"prefs.graphics_card_restart": "Wordt van kracht na het opnieuw starten van SolidCraft. WGPU_ADAPTER_NAME heeft voorrang op deze keuze.",
|
||||
"prefs.graphics_card_unused": "De opgeslagen grafische kaart is niet gebruikt voor dit venster; de kaart die wel in gebruik is, staat in Help › Over SolidCraft en in de statusbalk. Probeer Automatisch, of stel WGPU_ADAPTER_NAME in op een uniek deel van de kaartnaam.",
|
||||
"prefs.graphics_note": "Wissel snelheid in voor een gladder beeld. Elke keuze toont het effect op een voorbeeld.",
|
||||
"prefs.graphics_presets_note": "Voorinstellingen stellen de onderstaande keuzes samen in.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Beperkingssymbolen verbergen bij uitzoomen",
|
||||
@@ -2241,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Als Schetsen op Onder hun kenmerk staat, toont de geschiedenis links elke schets een niveau ingesprongen, onder het eerste kenmerk dat erop is gebouwd, zodra die breed genoeg is voor namen. De tijdlijn onderaan houdt altijd de aanmaakvolgorde aan.",
|
||||
"prefs.history_sketches_under_feature": "Onder hun kenmerk",
|
||||
"prefs.hold_stop_snapping": "Ingedrukt houden om snappen te stoppen",
|
||||
"prefs.home_fit_size": "Grootte bij Beginweergave en Passend",
|
||||
"prefs.home_fit_size_note": "Hoeveel van de weergave het model vult wanneer Beginweergave, Passend, een geopend ontwerp of een wijziging van de navigatorweergave het model in beeld brengt, ongeacht of de instelling hieronder aan staat. 100 %: vult de weergave tussen de panelen, het kompas en de navigatiebalk.",
|
||||
"prefs.icons_only": "Alleen pictogrammen",
|
||||
"prefs.imported_file": "Geïmporteerd bestand",
|
||||
"prefs.in_browser": "In de browser",
|
||||
@@ -2251,22 +2176,13 @@
|
||||
"prefs.interface_language": "Interfacetaal",
|
||||
"prefs.interface_note": "Hoe SolidCraft eruitziet en waar de onderdelen staan.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "De gebogen rolpijlen omkeren",
|
||||
"prefs.invert_curved_roll_arrows_note": "De twee gebogen pijlen op de hoek van de kubus laten de weergave in het schermvlak rollen. Aan: de pijl met de klok mee rolt tegen de klok in en de pijl tegen de klok in rolt met de klok mee. Uit: elke pijl rolt de weergave in de richting waarin hij krult.",
|
||||
"prefs.invert_navigator_arrows": "De rotatiepijlen van de weergavekubus omkeren",
|
||||
"prefs.invert_navigator_arrows_note": "De pijlen rond de kubus laten de camera roteren in de richting waarin ze wijzen, zoals in Fusion en Inventor: de pijl links wijst naar rechts en zwaait de camera naar rechts. Uit: een pijl draait de kubus naar de kant waar hij staat, dus de linkerpijl zwaait de camera naar links. De gebogen rolpijlen worden hierdoor niet beïnvloed.",
|
||||
"prefs.keep_work_on_tab_switch": "Dialoogvensters en gereedschappen open houden bij het wisselen van ontwerp",
|
||||
"prefs.keep_work_on_tab_switch_note": "Elk ontwerptabblad behoudt zijn geopende dialoogvenster of gereedschap, met wat je erin hebt gekozen en getypt, en zijn lint-tabblad. Ze zijn er weer als je terugkeert naar het ontwerp. Uit: wisselen van ontwerp breekt ze af en toont het tabblad Model.",
|
||||
"prefs.labels": "Labels",
|
||||
"prefs.language_system": "Systeem",
|
||||
"prefs.layout": "Indeling",
|
||||
"prefs.layout_note": "Compact plaatst panelen vast aan de vensterranden. Doorschijnendheid van de browser is beschikbaar in Zwevend. Wijzig de kant van de Assistent op de pagina Assistent.",
|
||||
"prefs.left": "Links",
|
||||
"prefs.left_click": "Linksklik",
|
||||
"prefs.line_drag_draws_one": "Indrukken en slepen tekent één lijn",
|
||||
"prefs.line_drag_draws_one_note": "In het lijngereedschap tekent indrukken, slepen en loslaten één lijn van het indrukpunt tot het loslaatpunt, en daar eindigt de lijn. Klikken tekent nog steeds een keten. Uit: slepen zet, net als een klik, een punt waar losgelaten wordt.",
|
||||
"prefs.line_hover_tangent_arc": "Op het laatste punt van een lijn stilstaan om naar een tangentiële boog te wisselen",
|
||||
"prefs.line_hover_tangent_arc_note": "Als je in het lijngereedschap een segment hebt getekend, beweeg je weg van het laatste punt van de keten, kom je terug en houd je de aanwijzer er stil: de volgende klik beëindigt een tangentiële boog, en hetzelfde gebaar schakelt terug naar lijnen. Uit: daar stilstaan doet niets.",
|
||||
"prefs.linked_designs": "Gekoppelde ontwerpen",
|
||||
"prefs.live_input": "Live invoer",
|
||||
"prefs.live_preview": "Live voorbeeld",
|
||||
@@ -2290,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Muistoewijzing",
|
||||
"prefs.navigation": "Navigatie",
|
||||
"prefs.navigation_note": "Hoe de muis, het trackpad en de 3D-muis de weergave verplaatsen.",
|
||||
"prefs.navigator_fit": "Het model passend in beeld brengen na een wijziging van de navigatorweergave",
|
||||
"prefs.navigator_fit_note": "Een vlak, hoek of pijl van de weergavekubus, of een as van de gizmo, kijkt ook naar het midden van het model, vanaf de ene afstand waarop het van alle kanten in beeld past (de omsluitende bol). Beginweergave gebruikt dezelfde zoom en hetzelfde middelpunt zolang dit aan staat, zodat weergaven die je daarna kiest alleen draaien. Uit: de weergave draait ter plaatse en behoudt het richtpunt en de zoom.",
|
||||
"prefs.network_host_remove": "Verwijderen",
|
||||
"prefs.network_locations": "Netwerklocaties in ontwerpen toestaan",
|
||||
"prefs.network_locations_note": "Uit: gekoppelde bestanden van een ontwerp op een andere computer (\\\\server\\share) worden alleen geopend vanaf de servers in deze lijst, of nadat je er een toestaat wanneer erom wordt gevraagd.",
|
||||
@@ -2312,8 +2226,6 @@
|
||||
"prefs.placement": "Plaatsing",
|
||||
"prefs.prefer_free_sketch_points": "Verplaatsbare schetspunten voorrang geven als punten overlappen",
|
||||
"prefs.preview_choices": "Voorbeeld van je keuzes",
|
||||
"prefs.preview_tint_new_faces": "Nieuw oppervlak in een voorbeeld inkleuren",
|
||||
"prefs.preview_tint_new_faces_help": "Een voorbeeld van een kenmerk dat een lichaam wijzigt, kan het oppervlak dat het toevoegt in de voorbeeldkleur tekenen. Als dit uit staat, wordt het lichaam als zichzelf getekend.",
|
||||
"prefs.print_face_highlight": "Markering van het printvlak",
|
||||
"prefs.print_face_highlight_tip": "Hoe sterk het printvlak van een lichaam in de weergave wordt gekleurd en omlijnd. 0 % toont geen markering.",
|
||||
"prefs.profile_active": "Actief profiel",
|
||||
@@ -2342,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Vorig geometriebudget voor het rendervoorbeeld gebruiken",
|
||||
"prefs.render_previous_geometry_budget_help": "De vorige vaste geometrielimiet herstellen (512 MiB op 64-bits desktops, elders 128 MiB) in plaats van het budget op basis van het apparaat.",
|
||||
"prefs.reports_saved": "{n} opgeslagen",
|
||||
"prefs.ribbon_click_ends_tool": "Klikken op de knop van het actieve gereedschap beëindigt het",
|
||||
"prefs.ribbon_click_ends_tool_note": "Een klik op de verlichte lintknop van het schetsgereedschap dat in gebruik is, beëindigt het gereedschap, zodat klikken in de weergave weer selecteert. Uit: de klik start het gereedschap opnieuw.",
|
||||
"prefs.ribbon_reveal": "Zoekresultaten in het lint tonen",
|
||||
"prefs.ribbon_reveal_note": "Als je de aanwijzer op een resultaat in Opdrachten zoeken houdt, zie je waar de opdracht in het lint staat: het tabblad, de knop of de rij in de vervolgkeuzelijst van een paneel. Een opdracht die vanuit de zoekfunctie is gestart, knippert daar, en een actieve opdracht uit een vervolgkeuzelijst markeert het paneel.",
|
||||
"prefs.right_click": "Rechtsklik",
|
||||
@@ -2373,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Terug naar de vorige weergave",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Terug, tenzij geroteerd",
|
||||
"prefs.sketch_exit_view_note": "Waar de weergave naartoe gaat na Schets afronden, Annuleren of een dubbele Esc.",
|
||||
"prefs.sketch_face_activates_part": "Schetsen op het vlak van een onderdeel maakt dat onderdeel actief",
|
||||
"prefs.sketch_face_activates_part_note": "Een schets die op een vlak van het lichaam van een andere component wordt gestart, activeert eerst die component, zodat de schets erbij hoort en in de browser bij dat onderdeel blijft. Het onderdeel blijft daarna actief. Uit: de schets hoort bij de actieve component.",
|
||||
"prefs.sketch_open_look_at": "Naar een schets toe draaien wanneer die wordt geopend",
|
||||
"prefs.sketch_open_look_at_note": "Uit: een schets maken of bewerken laat de weergave zoals die is. Kijken naar richt de weergave op de schets wanneer je dat wilt.",
|
||||
"prefs.sketch_recent_snap": "Automatisch snappen op recente cirkelmiddens en middelpunten",
|
||||
@@ -2406,24 +2314,6 @@
|
||||
"prefs.status_error": "Fout",
|
||||
"prefs.status_selected": "Geselecteerd",
|
||||
"prefs.status_warning": "Waarschuwing",
|
||||
"prefs.structure.appearance": "Uiterlijk",
|
||||
"prefs.structure.appearance_note": "Kleuren, tekst en toegankelijkheid.",
|
||||
"prefs.structure.in_profile": "In profiel",
|
||||
"prefs.structure.layout": "Indeling",
|
||||
"prefs.structure.layout_note": "Waar de onderdelen van het venster staan.",
|
||||
"prefs.structure.look": "Vormgeving",
|
||||
"prefs.structure.measure_pointer": "Meten en aanwijzer",
|
||||
"prefs.structure.mouse3d": "3D-muis",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse en SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Muis en trackpad. De 3D-muis heeft een eigen pagina.",
|
||||
"prefs.structure.profile": "Profiel",
|
||||
"prefs.structure.profile_edited": "Gewijzigd sinds opslaan",
|
||||
"prefs.structure.profile_hover": "Opgeslagen in instellingenprofielen",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Schets",
|
||||
"prefs.structure.tools": "Gereedschappen",
|
||||
"prefs.structure.tools_note": "Hoe modelleergereedschappen zich gedragen.",
|
||||
"prefs.structure.work": "Werk",
|
||||
"prefs.supersampling_brief": "Tekent de weergave groter en filtert die omlaag: zeer scherp, maar zwaarder.",
|
||||
"prefs.tab_accent_note": "De accentkleur volgt het actieve tabblad",
|
||||
"prefs.theme_file": "themabestand",
|
||||
@@ -2611,10 +2501,6 @@
|
||||
"render.base_color": "Basiskleur · sRGB",
|
||||
"render.base_metallic": "Metaalfractie",
|
||||
"render.base_opaque_only": "Deze editor behoudt de semantiek van ondoorzichtige lichamen. Gebruik de expliciete glasbesturing voor optische transmissie.",
|
||||
"render.batch_all_shots": "Alle opnamen ({count})",
|
||||
"render.batch_empty": "Sla een opname op voordat alle opnamen worden gerenderd.",
|
||||
"render.batch_limit": "Alle opnamen renderen is beperkt tot 32 opnamen.",
|
||||
"render.batch_status": "{running} bezig · {waiting} wachten",
|
||||
"render.bloom_enable": "Bloom tonen",
|
||||
"render.bloom_help": "Creatieve gloed, alleen in de uitvoer, afkomstig van positieve lineaire highlights en verspreid met drie genormaliseerde boxpassen. De straal is in uitvoerpixels. Toegevoegd in lineair weergavelicht vóór sRGB; geen lens- of volumetrisch effect en geen verbetering van de convergentie. De ruwe EXR blijft ongewijzigd.",
|
||||
"render.bloom_opaque": "Bloom vereist ondoorzichtige uitvoer. Transparante PNG wordt geweigerd, niet stilzwijgend afgevlakt.",
|
||||
@@ -2725,13 +2611,6 @@
|
||||
"render.choose_look": "Kies eerst een uiterlijk in Uiterlijken",
|
||||
"render.chromatic_offset": "Chromatische randverschuiving",
|
||||
"render.clear_stage": "Opgeslagen decor verwijderen",
|
||||
"render.compare_divider": "Scheidingslijn vergelijking",
|
||||
"render.compare_live": "Live",
|
||||
"render.compare_live_preview": "Live voorbeeld",
|
||||
"render.compare_render": "Render {number}",
|
||||
"render.compare_side": "Render {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · vastgelegd bij revisie {revision}",
|
||||
"render.compare_swap": "Omwisselen",
|
||||
"render.copy_request": "JSON kopiëren",
|
||||
"render.cpu_aa_help": "Ruimtelijke samples: meer samples verbeteren randen en verlengen de rendertijd.",
|
||||
"render.cpu_area_add": "Rechthoekig CPU-licht toevoegen",
|
||||
@@ -3481,10 +3360,6 @@
|
||||
"render.result_retained": "De laatste voltooide afbeelding wordt getoond; een nieuwere render heeft die nog niet vervangen.",
|
||||
"render.result_sequence": "Controlepunt",
|
||||
"render.result_title": "Renderresultaat",
|
||||
"render.results_choose": "Bewaarde resultaten",
|
||||
"render.results_label": "Render {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [verouderd]",
|
||||
"render.results_unnamed": "Afbeelding",
|
||||
"render.return_design": "Terug naar Ontwerp",
|
||||
"render.review_stale": "Deze beoordeling is verouderd. Los het op of controleer opnieuw voordat je toepast.",
|
||||
"render.ribbon_aging": "Veroudering",
|
||||
@@ -3936,7 +3811,6 @@
|
||||
"sketch_text.formula": "Begin met = om de woorden uit parameters op te bouwen: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Cursief",
|
||||
"sketch_text.loading_fonts": "Geïnstalleerde lettertypen zoeken…",
|
||||
"sketch_text.no_bold": "Het ingebouwde lettertype heeft geen vette variant: kies een geïnstalleerd lettertype",
|
||||
"sketch_text.on_path": "De tekst volgt zijn pad: de curve plaatst hem",
|
||||
"sketch_text.path_clear": "De tekst van zijn curve halen",
|
||||
"sketch_text.path_hint": "Een curve van de schets die de tekst volgt: klik hier en daarna op de curve",
|
||||
@@ -3968,7 +3842,10 @@
|
||||
"the two origins are on the same component": "de twee oorsprongen liggen op hetzelfde component",
|
||||
"thread.automatic_size": "Automatische grootte",
|
||||
"thread.designation": "Aanduiding",
|
||||
"thread.direction": "Richting van schroefdraad",
|
||||
"thread.iso_metric": "ISO metrisch",
|
||||
"thread.left_hand": "Linksdraaiend",
|
||||
"thread.right_hand": "Rechtsdraaiend",
|
||||
"thread.select_size": "Grootte selecteren",
|
||||
"timeline.delete_after_marker_one": "1 kenmerk na geschiedenismarkering verwijderen",
|
||||
"timeline.delete_after_marker_other": "{count} kenmerken na geschiedenismarkering verwijderen",
|
||||
@@ -4142,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Voer dit uit in een terminal en druk daarna opnieuw op Verbinden:",
|
||||
"ui.agent_chat_auth_title": "Aanmelden bij de agent",
|
||||
"ui.agent_chat_cancel": "Annuleren",
|
||||
"ui.agent_chat_cancel_timeout": "De agent reageerde niet op Stoppen en is losgekoppeld. Verbind opnieuw om door te gaan.",
|
||||
"ui.agent_chat_cannot_start": "Geïnstalleerd, maar start niet: {error}",
|
||||
"ui.agent_chat_changes": "Wijzigingen: {n}, één stap ongedaan maken",
|
||||
"ui.agent_chat_changes_n": "{n} wijzigingen",
|
||||
@@ -4152,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Agentopdracht",
|
||||
"ui.agent_chat_connect": "Verbinden",
|
||||
"ui.agent_chat_copy": "Kopiëren",
|
||||
"ui.agent_chat_copy_message": "Bericht kopiëren",
|
||||
"ui.agent_chat_ctx_bodies": "Lichamen",
|
||||
"ui.agent_chat_ctx_elements": "Elementen",
|
||||
"ui.agent_chat_ctx_features": "Kenmerken",
|
||||
"ui.agent_chat_ctx_more": "+{n} meer",
|
||||
"ui.agent_chat_ctx_other": "Overig",
|
||||
"ui.agent_chat_custom_heading": "Eigen model",
|
||||
"ui.agent_chat_custom_hint": "Elk programma dat het Agent Client Protocol spreekt via stdin en stdout. Er wordt geen shell gebruikt.",
|
||||
"ui.agent_chat_denied": "Geweigerd",
|
||||
"ui.agent_chat_deny": "Weigeren",
|
||||
@@ -4202,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Alles",
|
||||
"ui.agent_chat_mode_ask": "Vragen",
|
||||
"ui.agent_chat_mode_edits": "Bewerken",
|
||||
"ui.agent_chat_model_custom": "Eigen model gebruiken: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} kan de gereedschappen van SolidCraft niet gebruiken en kan dus alleen chatten. Kies een model met ondersteuning voor gereedschappen.",
|
||||
"ui.agent_chat_model_rejected": "De agent accepteerde {model} niet: {error}",
|
||||
"ui.agent_chat_model_search": "Modellen zoeken…",
|
||||
"ui.agent_chat_model_tip": "Het model dat de agent gebruikt. Uw keuze wordt voor deze agent onthouden.",
|
||||
"ui.agent_chat_models_failed": "Modellen konden niet worden opgehaald: {error}",
|
||||
"ui.agent_chat_models_heading": "Beschikbare modellen",
|
||||
"ui.agent_chat_models_listing": "Modellen ophalen…",
|
||||
"ui.agent_chat_models_none": "Het eindpunt geeft geen modellen weer",
|
||||
"ui.agent_chat_models_not_a_list": "Het antwoord was geen lijst met modellen",
|
||||
"ui.agent_chat_new": "Nieuwe chat",
|
||||
"ui.agent_chat_new_confirm": "Een nieuwe chat starten? De huidige wordt gewist.",
|
||||
"ui.agent_chat_next_picture": "Volgende afbeelding",
|
||||
@@ -4347,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Machtigingen",
|
||||
"ui.ai_preset": "Voorinstelling",
|
||||
"ui.ai_protocol": "Protocol",
|
||||
"ui.ai_reasoning_effort": "Redeneerinspanning",
|
||||
"ui.ai_reasoning_effort_field_hint": "leeg = standaard van de provider",
|
||||
"ui.ai_reasoning_effort_hint": "Optioneel. Wordt als `reasoning_effort` naar het eindpunt gestuurd; toegestane waarden verschillen per provider (bijvoorbeeld `low`, `high` of `max`). Een waarde die je hier instelt, wordt nooit door SolidCraft vervangen. Laat het veld leeg om niets te sturen en de standaard van de provider te behouden.",
|
||||
"ui.ai_remove": "Verwijderen",
|
||||
"ui.ai_request_timed_out": "Het model deed er langer dan {seconds} s over. Je kunt de time-out voor aanvragen van dit eindpunt verhogen in Voorkeuren › Assistent.",
|
||||
"ui.ai_request_timeout": "Time-out voor aanvragen",
|
||||
@@ -4485,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Raaklijn: kies een cirkel/boog of open spline/kegelsnede en dan het raakpunt (vrije krommen: eindpunten)",
|
||||
"ui.construction.external_hint": "Raaklijn: kies een cirkel of boog, een extern punt en dan de gewenste oplossing",
|
||||
"ui.construction.free_hint": "Constructielijn: klik op twee punten; klik met rechts om opnieuw te beginnen",
|
||||
"ui.construction.normal_needs_length": "Een oneindige lijn is altijd een constructielijn: typ een lengte om een normale lijn te tekenen",
|
||||
"ui.construction.point_hint": "Constructielijn: klik op het punt waar de lijn doorheen moet",
|
||||
"ui.construction.reference_hint": "Constructielijn: kies een rechte lijn en dan een punt; klik met rechts om de referentie te wijzigen",
|
||||
"ui.construction.ribbon_label": "Hulplijnen",
|
||||
"ui.construction.side_hint": "Constructielijn: klik op de zijde waarheen de lijn loopt; klik met rechts om opnieuw te beginnen",
|
||||
"ui.context_menu": "Contextmenu",
|
||||
"ui.continuity_crease": "Knik",
|
||||
"ui.continuity_curvature": "Kromming",
|
||||
"ui.continuity_curvature_change": "Krommingsverandering",
|
||||
"ui.continuity_g0": "G0-knik",
|
||||
"ui.continuity_g1": "G1-tangentieel",
|
||||
"ui.continuity_g2": "G2-kromming",
|
||||
"ui.continuity_gap": "Opening",
|
||||
"ui.continuity_position": "Positie",
|
||||
"ui.continuity_tangent": "Tangentieel",
|
||||
"ui.copy": "Kopiëren",
|
||||
"ui.corner": "Hoek",
|
||||
"ui.corners": "Hoeken",
|
||||
@@ -4522,7 +4378,6 @@
|
||||
"ui.dark": "Donker",
|
||||
"ui.default_modelling_orientation": "Standaard modelleeroriëntatie",
|
||||
"ui.delete": "Verwijderen",
|
||||
"ui.delete_select_first": "Selecteer eerst wat je wilt verwijderen: kenmerken, lichamen, componenten of schetsgeometrie",
|
||||
"ui.depth": "Diepte",
|
||||
"ui.design": "Ontwerp",
|
||||
"ui.design_properties.author": "Auteur",
|
||||
@@ -4615,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Het onderdeel is in een ander bestand opgeslagen; de samenstelling is nog steeds gekoppeld aan {name}",
|
||||
"ui.edit_in_place_wait": "Wacht tot wat in het ontwerp wordt uitgevoerd klaar is",
|
||||
"ui.edit_section_analysis": "Doorsnedeanalyse bewerken",
|
||||
"ui.edit_sketch_empty": "Geen schetsen om te bewerken",
|
||||
"ui.ellipse": "Ellips",
|
||||
"ui.emboss_wrap_note": "Orthogonale lijnprofielen die raken aan één ondersteunde cilinder worden automatisch omwikkeld. Kies een wand om een doel te kiezen.",
|
||||
"ui.end_radius": "Eindstraal",
|
||||
@@ -4626,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Expliciet",
|
||||
"ui.equation_form": "Vorm",
|
||||
"ui.equation_note": "De variabele is een gewoon getal: sin(t) neemt het in radialen. Een resultaat zonder eenheid is in de eenheid van het ontwerp.",
|
||||
"ui.equation_note_range": "De variabele is een lengte, net als haar bereik: combineer haar met lengteparameters en deel haar voor sin() door een lengte. Een resultaat zonder eenheid is in de eenheid van het ontwerp.",
|
||||
"ui.equation_parametric": "Parametrisch",
|
||||
"ui.equation_variable_unit": "Variabele heeft de eenheid van het bereik",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4760,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Oorsprong verbergen",
|
||||
"ui.hidePlanes": "Vlakken verbergen",
|
||||
"ui.hideProfile": "Profiel verbergen",
|
||||
"ui.hide_component_history": "Geschiedenis ervan verbergen",
|
||||
"ui.hide_origin_by_default": "Oorsprong standaard verbergen",
|
||||
"ui.hide_origin_note": "Nieuwe ontwerpen beginnen met de map Oorsprong verborgen. Een ontwerp behoudt zijn eigen instelling voor Oorsprong zodra je die toont of verbergt.",
|
||||
"ui.history_back": "Eén stap terug",
|
||||
@@ -4768,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "dubbelklik op de rand",
|
||||
"ui.history_first": "Naar het begin",
|
||||
"ui.history_forward": "Eén stap vooruit",
|
||||
"ui.history_hide_hidden": "Verborgen componenten verbergen",
|
||||
"ui.history_hide_names": "Namen verbergen",
|
||||
"ui.history_last": "Naar het einde",
|
||||
"ui.history_marker_tip": "Geschiedenismarkering: sleep om het model terug te draaien; nieuwe kenmerken komen hier",
|
||||
@@ -4778,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Afspeelknop tonen",
|
||||
"ui.history_play_finish_action": "Voltooi de huidige actie voordat u de geschiedenis afspeelt",
|
||||
"ui.history_play_roll_back": "Verplaats de geschiedenismarkering naar achteren voordat u afspeelt",
|
||||
"ui.history_show_hidden": "Verborgen componenten tonen",
|
||||
"ui.history_show_names": "Namen tonen",
|
||||
"ui.history_sketch_listed_under": "Vermeld onder {feature}",
|
||||
"ui.history_title": "Geschiedenis",
|
||||
"ui.history_toggle_names": "Kenmerknamen tonen of verbergen",
|
||||
"ui.history_waits_for_editor": "Ongedaan maken, Opnieuw en Geschiedenis wachten tot de kenmerkeditor is geopend",
|
||||
"ui.hole": "Gat",
|
||||
"ui.hole_tap_type": "Type tapgat",
|
||||
"ui.hole_type": "Gattype",
|
||||
@@ -4799,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} heeft niet-opgeslagen wijzigingen, dus is het opgeslagen bestand ingevoegd. Sla het op en gebruik daarna Koppelingen bijwerken om de wijzigingen over te nemen.",
|
||||
"ui.insert_design.unsaved": "Niet-opgeslagen wijzigingen",
|
||||
"ui.inspect": "Inspecteren",
|
||||
"ui.instances": "Instanties",
|
||||
"ui.intersect": "Snijden",
|
||||
"ui.isolate": "Isoleren",
|
||||
"ui.join": "Samenvoegen",
|
||||
@@ -4808,14 +4655,12 @@
|
||||
"ui.joints": "Verbindingen",
|
||||
"ui.keyboard_shortcuts": "Sneltoetsen",
|
||||
"ui.language": "Taal",
|
||||
"ui.lasso_select": "Lasso (sleep een lus uit de vrije hand: neemt alles wat er helemaal binnen valt)",
|
||||
"ui.layout_compact": "Compact",
|
||||
"ui.layout_floating": "Zwevend",
|
||||
"ui.length": "Lengte",
|
||||
"ui.length_decimals": "Lengtedecimalen",
|
||||
"ui.light": "Licht",
|
||||
"ui.line": "Lijn",
|
||||
"ui.line_arc_hint": "Tangentiële boog: klik op het eindpunt van de boog. Blijf opnieuw stilstaan op het laatste punt voor lijnen; klik met rechts of druk op Esc om te voltooien",
|
||||
"ui.link_copies": "Identieke kopieën koppelen",
|
||||
"ui.link_copies_keep": "Behouden",
|
||||
"ui.link_copies_link": "Koppelen",
|
||||
@@ -4904,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Bouwt het onderdeel opnieuw op en vervangt alle toegevoegde kenmerken. Alle voorkomens van dit component worden bijgewerkt.",
|
||||
"ui.paste": "Plakken",
|
||||
"ui.path": "Pad",
|
||||
"ui.pattern_object_type_tip": "Lichamen: massieve vormen, gekozen in de weergave of de Browser; elk wordt in zijn geheel gekopieerd.\nKenmerken: stappen van de Geschiedenis, zoals een extrusie of een gat, gekozen in de Geschiedenis of op een vlak dat ze hebben gemaakt; de stap wordt herhaald.\nEen schets is geen van beide: herhaal de curven ervan met het eigen Patroon of Spiegelen van de schets, of extrudeer de schets eerst.",
|
||||
"ui.pattern_on_path": "Patroon op pad",
|
||||
"ui.perforate_margin_default": "vanaf de diameter",
|
||||
"ui.perforate_pitch": "Steek",
|
||||
@@ -4950,9 +4794,9 @@
|
||||
"ui.polygon": "Veelhoek",
|
||||
"ui.preferences": "Voorkeuren",
|
||||
"ui.press_a_key": "druk op een toets…",
|
||||
"ui.print_face_body_not_sent": "Het lichaam van dat vlak wordt niet verstuurd: voeg het eerst toe aan Lichamen",
|
||||
"ui.print_face_cleared": "{body}: printvlak gewist",
|
||||
"ui.print_face_input": "Printvlak",
|
||||
"ui.print_face_one_body": "Een printvlak hoort bij één lichaam: stuur dat lichaam alleen om het te wijzigen",
|
||||
"ui.print_face_pick": "Selecteer één vlak van een massief lichaam om het het printvlak te maken",
|
||||
"ui.print_face_set": "{body}: printvlak ingesteld; Naar slicer sturen legt het lichaam erop",
|
||||
"ui.profile": "Profiel",
|
||||
@@ -5064,7 +4908,6 @@
|
||||
"ui.showDimension": "Maat tonen",
|
||||
"ui.showOrigin": "Oorsprong tonen",
|
||||
"ui.showPlanes": "Vlakken tonen",
|
||||
"ui.show_component_history": "Geschiedenis ervan tonen",
|
||||
"ui.show_constraints": "Beperkingen",
|
||||
"ui.show_construction_geometries": "Constructiegeometrieën",
|
||||
"ui.show_dimensions": "Maatvoering",
|
||||
@@ -5181,15 +5024,12 @@
|
||||
"ui.view_angles": "Weergavehoeken",
|
||||
"ui.view_angles_convention": "Graden rond de verticale as. Gieren 0° is het vooraanzicht, 90° het linkeraanzicht, −90° het rechteraanzicht, 180° het achteraanzicht; kanteling 90° is het bovenaanzicht; een positieve rol draait het model met de klok mee.",
|
||||
"ui.view_angles_help": "Toont de stamp-, gier- en rolhoek van de weergave in graden en de projectie ervan onder de oriëntatiegizmo. Klik op de uitlezing om exacte hoeken in te typen.",
|
||||
"ui.view_angles_lock": "{axis} vergrendelen",
|
||||
"ui.view_angles_ortho": "Ortho",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Kanteling",
|
||||
"ui.view_angles_readout": "Kanteling {pitch} · Gieren {yaw} · Rollen {roll}",
|
||||
"ui.view_angles_roll": "Rollen",
|
||||
"ui.view_angles_unlock": "{axis} ontgrendelen",
|
||||
"ui.view_angles_yaw": "Gieren",
|
||||
"ui.view_angles_zero": "{axis} instellen op 0°",
|
||||
"ui.view_centre": "Weergavemidden",
|
||||
"ui.viewport_status_clear": "{name} uitschakelen",
|
||||
"ui.viewport_status_clear_hint": "{name} uitschakelen · Esc",
|
||||
@@ -5247,7 +5087,7 @@
|
||||
"update.check_unavailable": "Controleren op updates is niet beschikbaar voor deze installatie.",
|
||||
"update.checking": "Controleren…",
|
||||
"update.copy": "Kopiëren",
|
||||
"update.dmg_opened": "Het schijfkopie is geopend en geverifieerd: stop SolidCraft, sleep de nieuwe SolidCraft naar Programma's, vervang de oude kopie en open SolidCraft daarna opnieuw.",
|
||||
"update.dmg_opened": "Het schijfkopie is geopend en geverifieerd: sleep SolidCraft naar Programma's, vervang de oude kopie en start SolidCraft daarna opnieuw.",
|
||||
"update.download": "Downloaden",
|
||||
"update.download_open": "Downloaden en openen",
|
||||
"update.downloading": "Downloaden en verifiëren… {done} van {total} MB",
|
||||
@@ -5291,7 +5131,6 @@
|
||||
"web.open_link": "Gekoppeld ontwerp openen?",
|
||||
"web.open_link_confirm": "Er zijn niet-opgeslagen wijzigingen. Het gekoppelde ontwerp in een nieuw tabblad openen?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ kiezen · Enter / Tab aanvullen · Esc sluiten",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ kiezen · Enter past deze waarde toe",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ kiezen · Enter past toe wat je typte · Esc sluiten",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter gaat verder op GitHub."
|
||||
}
|
||||
|
||||
@@ -1190,7 +1190,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Splajn z punktów kontrolnych (stopień 5)",
|
||||
"cmd.sketch_spline_fit_point": "Splajn przez punkty",
|
||||
"cmd.sketch_spline_insert_point": "Dodaj punkt splajnu",
|
||||
"cmd.sketch_spline_remove_point": "Usuń punkt splajnu",
|
||||
"cmd.sketch_spline_reverse": "Odwróć kierunek splajnu",
|
||||
"cmd.sketch_spun_profile": "Profil obrotowy",
|
||||
"cmd.sketch_toggle_diameter": "Przełącz promień / średnicę",
|
||||
@@ -1347,7 +1346,6 @@
|
||||
"document.read_only_save": "Ten projekt otwarto tylko do odczytu: zapisz go jako nowy plik",
|
||||
"document.save_changes": "Zapisać zmiany w {name}?",
|
||||
"document.save_copy": "Zapisz kopię…",
|
||||
"document.tab_unsaved_changes": "Niezapisane zmiany",
|
||||
"document.unsaved_changes": "{name} ma niezapisane zmiany. Jeśli ich nie zapiszesz, zostaną utracone.",
|
||||
"drive.rigid": "{joint} to złącze sztywne: utrzymuje swoje części nieruchomo, więc nie ma czym sterować. Aby mogły się poruszać, zmień jego typ w Edytuj złącze: Obrotowe do obrotu, Przesuwne do przesuwu, Walcowe do obu.",
|
||||
"drive.stopped_by_contact": "Zatrzymano przy {value}: {a} przeszedłby przez {b}",
|
||||
@@ -2250,7 +2248,10 @@
|
||||
"the two origins are on the same component": "oba początki leżą na tym samym komponencie",
|
||||
"thread.automatic_size": "Rozmiar automatyczny",
|
||||
"thread.designation": "Oznaczenie",
|
||||
"thread.direction": "Kierunek gwintu",
|
||||
"thread.iso_metric": "Metryczny ISO",
|
||||
"thread.left_hand": "Lewy",
|
||||
"thread.right_hand": "Prawy",
|
||||
"thread.select_size": "Wybierz rozmiar",
|
||||
"timeline.delete_after_marker_one": "Usuń 1 funkcję za znacznikiem historii",
|
||||
"timeline.delete_after_marker_other": "Usuń funkcje za znacznikiem historii: {count}",
|
||||
@@ -2737,15 +2738,10 @@
|
||||
"ui.construction": "Konstrukcyjne",
|
||||
"ui.construction.ribbon_label": "Linie pom.",
|
||||
"ui.context_menu": "Menu kontekstowe",
|
||||
"ui.continuity_crease": "Załamanie",
|
||||
"ui.continuity_curvature": "Krzywizna",
|
||||
"ui.continuity_curvature_change": "Zmiana krzywizny",
|
||||
"ui.continuity_g0": "G0 załamanie",
|
||||
"ui.continuity_g1": "G1 styczność",
|
||||
"ui.continuity_g2": "G2 krzywizna",
|
||||
"ui.continuity_gap": "Szczelina",
|
||||
"ui.continuity_position": "Położenie",
|
||||
"ui.continuity_tangent": "Styczność",
|
||||
"ui.copy": "Kopiuj",
|
||||
"ui.corner": "Naroże",
|
||||
"ui.corners": "Naroża",
|
||||
@@ -3002,7 +2998,6 @@
|
||||
"ui.insert_design.saved_file": "{name} ma niezapisane zmiany, więc wstawiono jego zapisany plik. Zapisz go, a potem użyj Aktualizuj łącza, aby wprowadzić zmiany.",
|
||||
"ui.insert_design.unsaved": "Niezapisane zmiany",
|
||||
"ui.inspect": "Sprawdź",
|
||||
"ui.instances": "Wystąpienia",
|
||||
"ui.intersect": "Przytnij",
|
||||
"ui.isolate": "Izoluj",
|
||||
"ui.join": "Połącz",
|
||||
@@ -3145,9 +3140,9 @@
|
||||
"ui.polygon": "Wielokąt",
|
||||
"ui.preferences": "Preferencje",
|
||||
"ui.press_a_key": "naciśnij klawisz…",
|
||||
"ui.print_face_body_not_sent": "Bryła tej powierzchni nie jest wysyłana: najpierw dodaj ją do Bryły",
|
||||
"ui.print_face_cleared": "{body}: usunięto powierzchnię druku",
|
||||
"ui.print_face_input": "Powierzchnia druku",
|
||||
"ui.print_face_one_body": "Powierzchnia druku należy do jednej bryły: wyślij tę bryłę osobno, aby ją zmienić",
|
||||
"ui.print_face_pick": "Wybierz płaską powierzchnię bryły, aby ustawić ją jako powierzchnię druku",
|
||||
"ui.print_face_set": "{body}: ustawiono powierzchnię druku; Wyślij do slicera kładzie bryłę na niej",
|
||||
"ui.profile": "Profil",
|
||||
@@ -3421,7 +3416,7 @@
|
||||
"update.check_unavailable": "Sprawdzanie aktualizacji nie jest dostępne dla tej instalacji.",
|
||||
"update.checking": "Sprawdzanie…",
|
||||
"update.copy": "Kopiuj",
|
||||
"update.dmg_opened": "Obraz dysku jest otwarty i zweryfikowany: zakończ SolidCraft, przeciągnij nowy SolidCraft do folderu Aplikacje, zastępując starą kopię, a następnie ponownie otwórz SolidCraft.",
|
||||
"update.dmg_opened": "Obraz dysku jest otwarty i zweryfikowany: przeciągnij SolidCraft do folderu Aplikacje, zastępując starą kopię, a następnie uruchom SolidCraft ponownie.",
|
||||
"update.download": "Pobierz",
|
||||
"update.download_open": "Pobierz i otwórz",
|
||||
"update.downloading": "Pobieranie i weryfikacja… {done} z {total} MB",
|
||||
|
||||
@@ -1219,8 +1219,6 @@
|
||||
"prefs.axis": "Eixo",
|
||||
"prefs.bottom": "Embaixo",
|
||||
"prefs.browser": "Navegador",
|
||||
"prefs.browser_components_open": "Componentes começam abertos",
|
||||
"prefs.browser_components_open_note": "Cada componente no navegador começa aberto, como antes, em vez de fechado até que você o abra.",
|
||||
"prefs.built_in": "Integrado",
|
||||
"prefs.button_left": "Arrastar com o esquerdo",
|
||||
"prefs.button_middle": "Arrastar com o meio",
|
||||
@@ -1885,15 +1883,10 @@
|
||||
"ui.construction": "Construção",
|
||||
"ui.construction.ribbon_label": "Linhas aux.",
|
||||
"ui.context_menu": "Menu de contexto",
|
||||
"ui.continuity_crease": "Vinco",
|
||||
"ui.continuity_curvature": "Curvatura",
|
||||
"ui.continuity_curvature_change": "Variação de curvatura",
|
||||
"ui.continuity_g0": "G0 vinco",
|
||||
"ui.continuity_g1": "G1 tangente",
|
||||
"ui.continuity_g2": "G2 curvatura",
|
||||
"ui.continuity_gap": "Folga",
|
||||
"ui.continuity_position": "Posição",
|
||||
"ui.continuity_tangent": "Tangente",
|
||||
"ui.copy": "Copiar",
|
||||
"ui.corner": "Canto",
|
||||
"ui.corners": "Cantos",
|
||||
@@ -2099,7 +2092,6 @@
|
||||
"ui.infinite": "Infinita",
|
||||
"ui.insert": "Inserir",
|
||||
"ui.inspect": "Inspecionar",
|
||||
"ui.instances": "Instâncias",
|
||||
"ui.intersect": "Interseção",
|
||||
"ui.isolate": "Isolar",
|
||||
"ui.join": "Unir",
|
||||
@@ -2213,9 +2205,9 @@
|
||||
"ui.polygon": "Polígono",
|
||||
"ui.preferences": "Preferências",
|
||||
"ui.press_a_key": "pressione uma tecla…",
|
||||
"ui.print_face_body_not_sent": "O corpo dessa face não está sendo enviado: adicione-o primeiro a Corpos",
|
||||
"ui.print_face_cleared": "{body}: face de impressão removida",
|
||||
"ui.print_face_input": "Face de impressão",
|
||||
"ui.print_face_one_body": "Uma face de impressão pertence a um único corpo: envie esse corpo sozinho para alterá-la",
|
||||
"ui.print_face_pick": "Selecione uma face plana de um corpo sólido para torná-la a face de impressão",
|
||||
"ui.print_face_set": "{body}: face de impressão definida; Enviar ao fatiador apoia o corpo sobre ela",
|
||||
"ui.profile": "Perfil",
|
||||
@@ -2413,7 +2405,7 @@
|
||||
"update.check_unavailable": "A verificação de atualizações não está disponível para esta instalação.",
|
||||
"update.checking": "Verificando…",
|
||||
"update.copy": "Copiar",
|
||||
"update.dmg_opened": "A imagem de disco está aberta e verificada: encerre o SolidCraft, arraste o novo SolidCraft para Aplicativos, substituindo a cópia antiga, e abra o SolidCraft novamente.",
|
||||
"update.dmg_opened": "A imagem de disco está aberta e verificada: arraste o SolidCraft para Aplicativos, substituindo a cópia antiga, e reinicie o SolidCraft.",
|
||||
"update.download": "Baixar",
|
||||
"update.download_open": "Baixar e abrir",
|
||||
"update.downloading": "Baixando e verificando… {done} de {total} MB",
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Dreptunghiular",
|
||||
"Rectangular Tube": "Tub dreptunghiular",
|
||||
"Reference face": "Față de referință",
|
||||
"Reference plane": "Plan de referință",
|
||||
"Relief Depth": "Adâncime relief",
|
||||
"Relief Width": "Lățime relief",
|
||||
"Remove Tools": "Elimină sculele",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Secțiune",
|
||||
"Section (optional)": "Secțiune (opțional)",
|
||||
"Section position": "Poziția secțiunii",
|
||||
"Sections": "Secțiuni",
|
||||
"Sections (one sketch each)": "Secțiuni (câte o schiță)",
|
||||
"Select Other": "Selectează altul",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Selectează altul: țineți apăsat butonul stâng nemișcat pe model (sau clic dreapta › Selectează altul…) pentru a lista tot ce se află sub cursor; faceți clic din nou în același loc pentru a selecta următorul element. Dublu clic pe butonul din mijloc pentru a merge Acasă (Preferințe › Navigare).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (atașare pierdută)",
|
||||
"browser.sketch_editing": "{name} (în editare)",
|
||||
"browser.sketch_name": "Schița{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "deja în piesa lor",
|
||||
"browser.sketches_to_parts_design_body": "pe un corp al proiectului însuși",
|
||||
"browser.sketches_to_parts_moved": "Au fost mutate {moved} schițe în piesa pe care se află",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "pe o față fără atașare exactă",
|
||||
"browser.sketches_to_parts_not_on_face": "nu pe fața unei piese",
|
||||
"browser.sketches_to_parts_part_missing": "piesa lor nu mai există",
|
||||
"browser.sketches_to_parts_result": "Au fost mutate {moved} schițe în piesa pe care se află; {stayed} au rămas pe loc: {why}",
|
||||
"browser.units": "Unități: {units}",
|
||||
"cam.flat": "Față plană",
|
||||
"cam.follower": "Tachet",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Extrage în fișier",
|
||||
"cmd.component_finish_edit": "Finalizează editarea",
|
||||
"cmd.component_from_bodies": "Creează componente din corpuri",
|
||||
"cmd.component_hide_history": "Ascunde istoricul componentei",
|
||||
"cmd.component_insert_design": "Inserează proiect",
|
||||
"cmd.component_links": "Listează legăturile",
|
||||
"cmd.component_list": "Listează componentele",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Mută corpurile în componentă",
|
||||
"cmd.component_move_features": "Mută operațiile în componentă",
|
||||
"cmd.component_move_sketches": "Mută schițele în componentă",
|
||||
"cmd.component_move_sketches_to_parts": "Mută schițele în piesele lor",
|
||||
"cmd.component_paste_from_design": "Lipește din alt proiect",
|
||||
"cmd.component_paste_new": "Lipește ca nou",
|
||||
"cmd.component_properties": "Proprietățile fizice ale componentei",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Redenumește componenta",
|
||||
"cmd.component_replace_with_link": "Înlocuiește cu legătură",
|
||||
"cmd.component_revert_position": "Revino la poziție",
|
||||
"cmd.component_show_history": "Afișează istoricul componentei",
|
||||
"cmd.component_unlock": "Deblochează conținutul",
|
||||
"cmd.component_update_links": "Actualizează legăturile",
|
||||
"cmd.config_activate": "Activează configurația",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Regulă de configurație",
|
||||
"cmd.config_rules": "Reguli de configurație",
|
||||
"cmd.config_table": "Afișează tabelul de configurații",
|
||||
"cmd.construct.plane.axis_point": "Plan printr-o axă și un punct",
|
||||
"cmd.construct_axis_edge": "Axă prin muchie",
|
||||
"cmd.construct_axis_normal_to_face": "Axă perpendiculară pe față",
|
||||
"cmd.construct_axis_through_cylinder": "Axă prin cilindru/con/tor",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Afișează vederea explodată",
|
||||
"cmd.expr_evaluate": "Evaluează expresia",
|
||||
"cmd.face_delete": "Șterge fața",
|
||||
"cmd.file.export_3mf": "Exportă 3MF",
|
||||
"cmd.file.export_obj": "Exportă OBJ",
|
||||
"cmd.file.export_step": "Exportă STEP",
|
||||
"cmd.file.export_stl": "Exportă STL",
|
||||
"cmd.file.export_urdf": "Exportă URDF",
|
||||
"cmd.file_export": "Exportă",
|
||||
"cmd.file_insert_mesh": "Inserează plasă",
|
||||
"cmd.file_insert_step": "Inserează STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Activează culorile componentelor",
|
||||
"cmd.inspect_colored_components_disable": "Dezactivează culorile componentelor",
|
||||
"cmd.inspect_compare": "Compară corpurile",
|
||||
"cmd.inspect_compare_picture": "Compară imaginea",
|
||||
"cmd.inspect_continuity": "Analiza continuității",
|
||||
"cmd.inspect_curvature_comb": "Analiza pieptenelui de curbură",
|
||||
"cmd.inspect_curvature_map": "Analiza hărții de curbură",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Editează norul de puncte",
|
||||
"cmd.pointcloud_insert": "Inserează nor de puncte",
|
||||
"cmd.pointcloud_list": "Nori de puncte",
|
||||
"cmd.render.compare.divider": "Mută separatorul comparației de randare",
|
||||
"cmd.render.result.discard": "Renunță la rezultatul de randare",
|
||||
"cmd.render.result.select": "Alege rezultatul de randare",
|
||||
"cmd.render_aging_describe": "Îmbătrânirea stratificată a suprafeței",
|
||||
"cmd.render_backends": "Motoare de randare",
|
||||
"cmd.render_batch": "Randează toate cadrele",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Spline cu puncte de control (grad 5)",
|
||||
"cmd.sketch_spline_fit_point": "Spline cu puncte de potrivire",
|
||||
"cmd.sketch_spline_insert_point": "Adaugă punct la spline",
|
||||
"cmd.sketch_spline_remove_point": "Elimină punct din spline",
|
||||
"cmd.sketch_spline_reverse": "Inversează direcția spline-ului",
|
||||
"cmd.sketch_spun_profile": "Profil rotit",
|
||||
"cmd.sketch_toggle_diameter": "Comută rază / diametru",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Mută marcajul cronologiei",
|
||||
"cmd.timeline_stop": "Oprește istoricul",
|
||||
"cmd.timeline_suppress": "Suprimă operația",
|
||||
"cmd.ui.assistant": "Afișează/Ascunde asistentul",
|
||||
"cmd.view.render_browser": "Navigator de randare",
|
||||
"cmd.view.render_dock": "Mută panoul de randare",
|
||||
"cmd.view.render_focus": "Vizualizare de randare concentrată",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Instrument de navigare",
|
||||
"cmd.view_top": "Vizualizare de sus",
|
||||
"cmd.view_visual_style": "Stil vizual",
|
||||
"color.blue": "Albastru",
|
||||
"color.copy": "Clic pentru a copia valorile culorii",
|
||||
"color.edit": "Clic pentru a edita culoarea",
|
||||
"color.gamma": "Se afișează valorile culorii în spațiul gamma 0-255",
|
||||
"color.green": "Verde",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Introduceți #rrggbb sau #rrggbbaa; cu șase cifre se păstrează opacitatea",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Nuanță",
|
||||
"color.linear": "Se afișează valorile culorii în spațiul liniar 0-1",
|
||||
"color.recent": "Culori recente",
|
||||
"color.recent_help": "Culorile pe care le alegeți în orice câmp de culoare apar aici",
|
||||
"color.red": "Roșu",
|
||||
"color.saturation": "Saturație (procente)",
|
||||
"color.saturation_value": "Saturație și valoare",
|
||||
"color.selected": "Culoare selectată",
|
||||
"color.step_down": "Scade cu un pas",
|
||||
"color.step_up": "Crește cu un pas",
|
||||
"color.value": "Valoare, luminozitatea (procente)",
|
||||
"config.column_filter_empty": "Nicio coloană potrivită",
|
||||
"config.rule_parameter_columns": "Sunt listați doar parametrii care au o coloană în tabel. Adăugați una cu Adaugă coloană (+) ca să o folosiți aici.",
|
||||
"config.rule_suppression_columns": "Sunt listate doar operațiile care au o coloană Suprimă în tabel. Adăugați una cu Adaugă coloană (+) ca să le controlați de aici.",
|
||||
"contact.components_count": "{count} componente",
|
||||
"contact.enabled_label": "activat",
|
||||
"coupling.gear_1": "Roată dințată 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Cotă: {name}",
|
||||
"dialog.edit_title": "EDITARE {title}",
|
||||
"dialog.no_shown_body": "Niciun corp afișat de modificat: afișați unul sau alegeți Corp nou",
|
||||
"dialog.pattern_sketch_not_object": "Alegeți corpuri sau operații: o schiță nu este niciuna dintre ele. Repetați curbele ei cu Matrice sau Oglindire din schiță, ori extrudați-o mai întâi.",
|
||||
"dialog.select": "↖ Selectează",
|
||||
"dialog.selected_count": "↖ {count} selectate",
|
||||
"dialog.selection_constraint": "Constrângerea {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · curba {id}",
|
||||
"dialog.selection_guidance": "Selectați o intrare pentru a o modifica. Faceți clic pe obiectele selectate pentru a le elimina; Ctrl/Cmd-clic le comută de asemenea. Verificați previzualizarea, apoi apăsați OK.",
|
||||
"dialog.selection_midpoint": "Punct de mijloc · {id}",
|
||||
"dialog.selection_profile": "{sketch} · profilul {number}",
|
||||
"dialog.selection_step": "{step} din {total}: Selectați {input}",
|
||||
"dialog.step": "Pas",
|
||||
"document.changed_on_disk": "{name} a fost modificat pe disc",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Creează o axă de construcție prin două puncte, vârfuri sau puncte de schiță. Folosiți-o pentru o axă care trece între două poziții cunoscute.",
|
||||
"help.construct.plane.along_path": "Creează un plan de construcție perpendicular pe o muchie sau o curbă, într-o poziție de-a lungul ei. Folosiți-l pentru a schița un profil de baleiere sau o secțiune prin traseu.",
|
||||
"help.construct.plane.at_angle": "Creează un plan de construcție rotit cu un unghi față de un plan sau o față, în jurul unei axe sau muchii. Folosiți-l pentru schițe înclinate, de exemplu un suport în unghi.",
|
||||
"help.construct.plane.axis_point": "Creează un plan de construcție care conține o axă și un punct din afara axei. Alegeți o origine sau o axă de construcție, o muchie dreaptă sau o linie de schiță, apoi un vârf, un punct de schiță sau un punct de construcție. Un punct situat pe axă nu poate defini un plan unic.",
|
||||
"help.construct.plane.midplane": "Creează un plan de construcție la jumătatea distanței dintre două plane sau fețe plane ori care le bisectează acolo unde se întâlnesc sub un unghi. Folosiți-l ca plan de simetrie pentru oglindire.",
|
||||
"help.construct.plane.offset": "Creează un plan de construcție paralel cu un plan sau o față plană, la o distanță sau printr-un punct. Folosiți-l pentru a schița la o înălțime stabilită deasupra unei fețe.",
|
||||
"help.construct.plane.perpendicular": "Creează un plan de construcție care conține o linie sau o muchie și este perpendicular pe un plan sau o față. Folosiți-l pentru a schița vertical pe un model, de-a lungul unei muchii.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Verificați tipul îmbinării (de exemplu Rigidă), fixarea, limitele îmbinării și valorile conduse de parametri.",
|
||||
"joint_move.blocked_title": "Această piesă nu poate fi mutată",
|
||||
"joint_move.coarse": "Pas de rotire lângă axă (°)",
|
||||
"joint_move.conflict": "O îmbinare a acestei piese este în conflict cu celelalte: {joint}.",
|
||||
"joint_move.conflict_hint": "Editați, suprimați sau ștergeți îmbinarea în conflict, ca celelalte îmbinări să poată poziționa piesa.",
|
||||
"joint_move.distance": "Distanță față de start",
|
||||
"joint_move.done": "Gata",
|
||||
"joint_move.fine": "Pas de rotire departe de axă (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Pista {number}",
|
||||
"nav.alias.help": "Shift+Alt+tragere cu stânga orbitează, Shift+Alt+tragere cu mijlocul panoramează, Shift+Alt+tragere cu dreapta face zoom; tragerea cu mijlocul panoramează și ea, iar tragerea cu dreapta orbitează",
|
||||
"nav.blender.help": "Tragerea cu mijlocul orbitează, Shift+mijloc panoramează, Ctrl+mijloc face zoom; tragerea cu dreapta nu mișcă camera",
|
||||
"nav.creo.help": "Tragerea cu mijlocul orbitează, Shift+mijloc panoramează, tragerea verticală cu Ctrl+mijloc face zoom (în jos pentru apropiere); rotița mouse-ului face zoom",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Mouse-ul și mouse-ul 3D rotesc vizualizarea prin ambii poli și păstrează ruliul. Agățarea pe axe cu Shift este dezactivată.",
|
||||
"nav.free_orbit.label": "Orbitare liberă",
|
||||
"nav.free_orbit.snap_help": "Mouse-ul și mouse-ul 3D rotesc vizualizarea prin ambii poli și păstrează ruliul. Țineți apăsat Shift în timpul tragerii de orbitare pentru a agăța direcția de privire și ruliul.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+tragere cu butonul stâng: panoramare, Shift+Alt+tragere cu butonul stâng: zoom, Ctrl+tragere cu butonul stâng pe spațiu gol: orbitare",
|
||||
"nav.inventor.help": "Tragerea cu mijlocul panoramează, Shift+mijloc orbitează, Ctrl+mijloc face zoom, tragerea cu dreapta orbitează",
|
||||
"nav.maya.help": "Alt+tragere cu butonul stâng: orbitare, Alt+butonul din mijloc: panoramare, Alt+butonul drept: zoom; tragerea cu butonul din mijloc face de asemenea panoramare",
|
||||
"nav.nx.help": "Tragerea cu mijlocul orbitează, Shift+mijloc panoramează (mijloc + dreapta în NX), Ctrl+mijloc face zoom (mijloc + stânga în NX); tragerea cu dreapta nu mișcă camera",
|
||||
"nav.openscad.help": "Tragerea cu stânga pe spațiu gol orbitează, Shift+tragere cu stânga selectează cu casetă, tragerea geometriei schiței o editează; tragerea cu dreapta sau cu mijlocul panoramează, Shift+tragere cu dreapta sau Shift+tragere cu mijlocul face zoom",
|
||||
"nav.perspective.sketch": "Editarea schiței folosește vizualizarea ortografică. Finalizați schița pentru a comuta la perspectivă.",
|
||||
"nav.right_drag_orbits.help": "Dezactivat: tragerea cu dreapta nu mișcă camera, iar butonul drept doar deschide meniul contextual. Alegerea mapării de mouse SolidWorks dezactivează această opțiune.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Șurub cu cap bombat și locaș hexagonal",
|
||||
"parts.family.dowel_pin": "Știft cilindric (de centrare)",
|
||||
"parts.family.hex_bolt": "Șurub / bolț cu cap hexagonal",
|
||||
"parts.family.hex_cap_screw_inch": "Șurub cu cap hexagonal (inci)",
|
||||
"parts.family.hex_nut": "Piuliță hexagonală",
|
||||
"parts.family.hex_nut_inch": "Piuliță hexagonală (inci)",
|
||||
"parts.family.set_screw": "Șurub de fixare cu locaș hexagonal, vârf plat",
|
||||
"parts.family.socket_head_cap_screw": "Șurub cu cap cilindric și locaș hexagonal",
|
||||
"parts.family.washer": "Șaibă plată",
|
||||
"parts.family.washer_sae": "Șaibă plată, SAE (îngustă)",
|
||||
"parts.family.washer_uss": "Șaibă plată, USS (lată)",
|
||||
"parts.holes": "Găuri (opțional)",
|
||||
"parts.placement_hint": "alegeți una sau mai multe găuri pentru a așeza câte o piesă în fiecare, sau OK plasează piesa în origine",
|
||||
"parts.system": "Sistem de unități",
|
||||
"parts.system.inch": "Inci",
|
||||
"parts.system.metric": "Metric",
|
||||
"pattern.alignment_2": "Aliniere 2",
|
||||
"pattern.alignment_hint": "Numărul include originalul. Centrat echilibrează copiile; Inversare alege partea suplimentară pentru totaluri pare.",
|
||||
"pattern.direction_1": "Direcția 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Tragere cu butonul stâng",
|
||||
"prefs.button_middle": "Tragere cu butonul din mijloc",
|
||||
"prefs.button_right": "Tragere cu butonul drept",
|
||||
"prefs.carousel_next": "Următorul",
|
||||
"prefs.carousel_previous": "Anteriorul",
|
||||
"prefs.choose_font": "Alegeți fișierul de font…",
|
||||
"prefs.click": "Clic",
|
||||
"prefs.contact_shading": "Umbrire de contact moale",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Suprafețe curbe",
|
||||
"prefs.curves": "Suprafețe curbe",
|
||||
"prefs.cut_preview_tint": "Afișează materialul îndepărtat în roșu",
|
||||
"prefs.cut_preview_tint_help": "O previzualizare umple materialul pe care îl îndepărtează o operație, și forma pe care o înlocuiește, cu o fantomă roșie transparentă. Dezactivat, aceste umpleri sunt complet transparente și se desenează doar contururile lor.",
|
||||
"prefs.dark_parts_shading": "Păstrează forma pieselor întunecate",
|
||||
"prefs.dark_parts_shading_help": "Umbrește vizualizarea în lumină liniară, cu o lumină de umplere moale de la cer, astfel încât fețele întunecate să păstreze un gradient în loc să devină negre",
|
||||
"prefs.dead_zone_note": "Banda hașurată este zona moartă: mișcarea din interiorul ei este ignorată.",
|
||||
"prefs.default": "implicit",
|
||||
"prefs.design": "Valori implicite ale proiectului",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Muchii și umbrire",
|
||||
"prefs.extend": "Prelungește",
|
||||
"prefs.extra_navigation": "Ctrl+tragere cu butonul stâng pe un spațiu gol orbitează; țineți apăsat Space pentru panoramare.",
|
||||
"prefs.extrude_view_isometric": "Treci la vizualizarea izometrică la deschiderea Extrudării",
|
||||
"prefs.extrude_view_return": "Revino la vizualizarea anterioară la închiderea Extrudării",
|
||||
"prefs.follows_os": "Urmează sistemul de operare",
|
||||
"prefs.font": "Font",
|
||||
"prefs.font_fallback": "Glifele care lipsesc din fontul ales trec la fontul încorporat, astfel încât nicio etichetă să nu afișeze un pătrat gol.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Automat",
|
||||
"prefs.graphics_card_missing": "Placa video salvată nu este disponibilă; se folosește Automat.",
|
||||
"prefs.graphics_card_restart": "Intră în vigoare după repornirea SolidCraft. WGPU_ADAPTER_NAME suprascrie această alegere.",
|
||||
"prefs.graphics_card_unused": "Placa video salvată nu a fost folosită pentru această fereastră; placa în uz este afișată în Ajutor › Despre și în bara de stare. Încercați Automat sau setați WGPU_ADAPTER_NAME la o parte unică din numele plăcii.",
|
||||
"prefs.graphics_note": "Alegeți între viteză și netezime. Fiecare opțiune își arată efectul pe un eșantion.",
|
||||
"prefs.graphics_presets_note": "Presetările stabilesc împreună opțiunile de mai jos.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Ascunde simbolurile de constrângere la micșorare",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Cu Schițe setat la Sub operația lor, Istoricul din stânga listează fiecare schiță cu un nivel mai în interior, sub prima operație construită din ea, ori de câte ori este suficient de lat pentru nume. Cronologia din partea de jos păstrează întotdeauna ordinea creării.",
|
||||
"prefs.history_sketches_under_feature": "Sub operația lor",
|
||||
"prefs.hold_stop_snapping": "Țineți apăsat pentru a opri agățarea",
|
||||
"prefs.home_fit_size": "Dimensiunea pentru Acasă și Potrivire",
|
||||
"prefs.home_fit_size_note": "Cât din vizualizare umple modelul când Acasă, Potrivire, un proiect deschis sau o schimbare de vizualizare din navigatorul de vizualizare îi stabilește încadrarea, indiferent dacă setarea de mai jos este activată sau nu. 100 %: umple vizualizarea dintre panouri, busolă și bara de navigare.",
|
||||
"prefs.icons_only": "Doar pictograme",
|
||||
"prefs.imported_file": "Fișier importat",
|
||||
"prefs.in_browser": "În navigator",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Limba interfeței",
|
||||
"prefs.interface_note": "Cum arată SolidCraft și unde sunt așezate elementele sale.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Inversează săgețile curbe de ruliu",
|
||||
"prefs.invert_curved_roll_arrows_note": "Cele două săgeți curbe din colțul cubului rotesc vizualizarea în planul ecranului. Activat: săgeata în sens orar rotește în sens antiorar, iar săgeata în sens antiorar rotește în sens orar. Dezactivat: fiecare săgeată rotește vizualizarea în direcția în care se curbează.",
|
||||
"prefs.invert_navigator_arrows": "Inversează săgețile de rotație ale cubului de vizualizare",
|
||||
"prefs.invert_navigator_arrows_note": "Săgețile din jurul cubului rotesc camera în jurul modelului în direcția în care indică, ca în Fusion și Inventor: săgeata din stânga indică spre dreapta și rotește camera spre dreapta. Dezactivat: o săgeată rotește cubul spre partea pe care se află, deci săgeata din stânga rotește camera spre stânga. Săgețile curbe de ruliu nu sunt afectate.",
|
||||
"prefs.keep_work_on_tab_switch": "Păstrează deschise dialogurile și instrumentele la schimbarea proiectului",
|
||||
"prefs.keep_work_on_tab_switch_note": "Fiecare filă de proiect își păstrează dialogul sau instrumentul deschis, cu ce ați ales și ați tastat în el, și fila ei din bara de instrumente. Le regăsiți când reveniți la proiect. Dezactivat: schimbarea proiectului le anulează și afișează fila Model.",
|
||||
"prefs.labels": "Etichete",
|
||||
"prefs.language_system": "Sistem",
|
||||
"prefs.layout": "Dispunere",
|
||||
"prefs.layout_note": "Compact fixează panourile la marginile ferestrei. Transparența navigatorului este disponibilă în modul Plutitor. Schimbați partea Asistentului în pagina Asistent.",
|
||||
"prefs.left": "Stânga",
|
||||
"prefs.left_click": "Clic stânga",
|
||||
"prefs.line_drag_draws_one": "Apăsarea și tragerea desenează o singură linie",
|
||||
"prefs.line_drag_draws_one_note": "În instrumentul Linie, apăsarea, tragerea și eliberarea desenează o singură linie de la punctul apăsării la cel al eliberării, iar linia se termină acolo. Clicurile desenează în continuare un lanț. Dezactivat: o tragere plasează un punct acolo unde este eliberată, la fel ca un clic.",
|
||||
"prefs.line_hover_tangent_arc": "Oprește indicatorul pe ultimul punct al unei linii pentru a trece la un arc tangent",
|
||||
"prefs.line_hover_tangent_arc_note": "În instrumentul Linie, după ce a fost desenat un segment, îndepărtați-vă de ultimul punct al lanțului, reveniți și țineți indicatorul nemișcat pe el: următorul clic încheie un arc tangent, iar același gest revine la linii. Dezactivat: oprirea acolo nu face nimic.",
|
||||
"prefs.linked_designs": "Proiecte legate",
|
||||
"prefs.live_input": "Intrare în timp real",
|
||||
"prefs.live_preview": "Previzualizare în timp real",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Mapare mouse",
|
||||
"prefs.navigation": "Navigare",
|
||||
"prefs.navigation_note": "Cum mută vizualizarea mouse-ul, trackpadul și mouse-ul 3D.",
|
||||
"prefs.navigator_fit": "Potrivește modelul după o schimbare de vizualizare din navigator",
|
||||
"prefs.navigator_fit_note": "O față, un colț sau o săgeată a cubului de vizualizare ori o axă a reperului de orientare privește și spre mijlocul modelului, de la singura distanță care îl cuprinde din toate părțile (sfera lui de încadrare). Acasă folosește același zoom și același centru cât timp opțiunea este activată, așa că vizualizările alese după aceea doar se rotesc. Dezactivat: vizualizarea se rotește pe loc, păstrându-și ținta și zoomul.",
|
||||
"prefs.network_host_remove": "Elimină",
|
||||
"prefs.network_locations": "Permite locațiile de rețea în proiecte",
|
||||
"prefs.network_locations_note": "Dezactivat: fișierele legate ale unui proiect aflate pe alt computer (\\\\server\\share) se deschid doar de pe serverele listate aici sau după ce permiteți unul, când vi se cere.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Plasare",
|
||||
"prefs.prefer_free_sketch_points": "Preferă punctele de schiță mobile când punctele se suprapun",
|
||||
"prefs.preview_choices": "Previzualizarea opțiunilor alese",
|
||||
"prefs.preview_tint_new_faces": "Colorează suprafața nouă într-o previzualizare",
|
||||
"prefs.preview_tint_new_faces_help": "Previzualizarea unei operații care modifică un corp poate desena suprafața adăugată în culoarea previzualizării. Dezactivat, corpul este desenat ca atare.",
|
||||
"prefs.print_face_highlight": "Evidențierea feței de imprimare",
|
||||
"prefs.print_face_highlight_tip": "Cât de puternic este colorată și conturată fața de imprimare a unui corp în vizualizare. 0 % nu afișează evidențiere.",
|
||||
"prefs.profile_active": "Profil activ",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Folosește bugetul anterior de geometrie pentru previzualizarea din Randare",
|
||||
"prefs.render_previous_geometry_budget_help": "Restabilește limita fixă anterioară de geometrie (512 MiB pe desktop pe 64 de biți, 128 MiB în rest) în locul bugetului bazat pe dispozitiv.",
|
||||
"prefs.reports_saved": "{n} salvate",
|
||||
"prefs.ribbon_click_ends_tool": "Un clic pe butonul instrumentului în uz îl încheie",
|
||||
"prefs.ribbon_click_ends_tool_note": "Un clic pe butonul evidențiat din panglică al instrumentului de schiță în uz încheie instrumentul, astfel încât clicurile din vizualizare selectează din nou. Dezactivat: clicul pornește din nou instrumentul.",
|
||||
"prefs.ribbon_reveal": "Afișează rezultatele căutării în panglică",
|
||||
"prefs.ribbon_reveal_note": "Trecerea cursorului peste un rezultat din Caută comenzi arată unde se află comanda în panglică: fila, butonul sau rândul ei din lista derulantă a unui panou. O comandă pornită din căutare clipește acolo, iar o comandă în curs pornită dintr-o listă derulantă îi marchează panoul.",
|
||||
"prefs.right_click": "Clic dreapta",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Revino la vizualizarea anterioară",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Revino, dacă nu a fost rotită",
|
||||
"prefs.sketch_exit_view_note": "Unde ajunge vizualizarea după Finalizează schița, Anulează sau un dublu Esc.",
|
||||
"prefs.sketch_face_activates_part": "Schițarea pe fața unei piese activează acea piesă",
|
||||
"prefs.sketch_face_activates_part_note": "O schiță începută pe fața unui corp al altei componente activează mai întâi acea componentă, astfel încât schița îi aparține și rămâne cu acea piesă în Navigator. Piesa rămâne activă după aceea. Dezactivat: schița aparține componentei active.",
|
||||
"prefs.sketch_open_look_at": "Rotește vizualizarea spre schiță la deschiderea ei",
|
||||
"prefs.sketch_open_look_at_note": "Dezactivat: crearea sau editarea unei schițe lasă vizualizarea neschimbată. Comanda Privește spre orientează vizualizarea spre schiță atunci când doriți.",
|
||||
"prefs.sketch_recent_snap": "Agățare automată la centrele și punctele de mijloc recente",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Eroare",
|
||||
"prefs.status_selected": "Selectat",
|
||||
"prefs.status_warning": "Avertisment",
|
||||
"prefs.structure.appearance": "Aspect",
|
||||
"prefs.structure.appearance_note": "Culori, text și accesibilitate.",
|
||||
"prefs.structure.in_profile": "În profil",
|
||||
"prefs.structure.layout": "Dispunere",
|
||||
"prefs.structure.layout_note": "Unde se află părțile ferestrei.",
|
||||
"prefs.structure.look": "Stil",
|
||||
"prefs.structure.measure_pointer": "Măsurare și indicator",
|
||||
"prefs.structure.mouse3d": "Mouse 3D",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse și SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Mouse și trackpad. Mouse-ul 3D are propria pagină.",
|
||||
"prefs.structure.profile": "Profil",
|
||||
"prefs.structure.profile_edited": "Modificat de la salvare",
|
||||
"prefs.structure.profile_hover": "Salvat în profilurile de setări",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Schiță",
|
||||
"prefs.structure.tools": "Instrumente",
|
||||
"prefs.structure.tools_note": "Cum se comportă instrumentele de modelare.",
|
||||
"prefs.structure.work": "Lucru",
|
||||
"prefs.supersampling_brief": "Desenează vizualizarea mai mare și o filtrează la dimensiunea finală: foarte clar, dar mai solicitant.",
|
||||
"prefs.tab_accent_note": "Accentul urmează fila activă",
|
||||
"prefs.theme_file": "fișier de temă",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Culoare de bază · sRGB",
|
||||
"render.base_metallic": "Fracție metalică",
|
||||
"render.base_opaque_only": "Acest editor păstrează semantica corpurilor opace. Pentru transmisia optică folosiți controalele explicite pentru sticlă.",
|
||||
"render.batch_all_shots": "Toate cadrele ({count})",
|
||||
"render.batch_empty": "Salvați un cadru înainte de a randa toate cadrele.",
|
||||
"render.batch_limit": "Randarea tuturor cadrelor este limitată la 32 de cadre.",
|
||||
"render.batch_status": "{running} în desfășurare · {waiting} în așteptare",
|
||||
"render.bloom_enable": "Afișează bloom",
|
||||
"render.bloom_help": "Strălucire creativă, doar la ieșire, provenită din zonele luminoase liniare pozitive și răspândită prin trei treceri box normalizate. Raza este în pixeli de ieșire. Se adaugă în lumina de afișare liniară, înainte de sRGB; nu este un efect de lentilă, un efect volumetric sau o îmbunătățire a convergenței. EXR-ul brut rămâne neschimbat.",
|
||||
"render.bloom_opaque": "Bloom necesită ieșire opacă. PNG-ul transparent este refuzat, nu aplatizat în tăcere.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Alegeți mai întâi un stil în Aspecte",
|
||||
"render.chromatic_offset": "Decalaj cromatic al marginilor",
|
||||
"render.clear_stage": "Elimină decorul salvat",
|
||||
"render.compare_divider": "Separator de comparație",
|
||||
"render.compare_live": "Live",
|
||||
"render.compare_live_preview": "Previzualizare în timp real",
|
||||
"render.compare_render": "Randarea {number}",
|
||||
"render.compare_side": "Randarea {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · capturat la revizia {revision}",
|
||||
"render.compare_swap": "Schimbă",
|
||||
"render.copy_request": "Copiază JSON",
|
||||
"render.cpu_aa_help": "Eșantioane spațiale: mai multe eșantioane îmbunătățesc marginile și măresc timpul de randare.",
|
||||
"render.cpu_area_add": "Adaugă lumină dreptunghiulară CPU",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Se afișează ultima imagine finalizată; o randare mai nouă nu a înlocuit-o.",
|
||||
"render.result_sequence": "Punct de control",
|
||||
"render.result_title": "Rezultatul randării",
|
||||
"render.results_choose": "Rezultate păstrate",
|
||||
"render.results_label": "Randarea {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [învechit]",
|
||||
"render.results_unnamed": "Imagine",
|
||||
"render.return_design": "Înapoi la proiectare",
|
||||
"render.review_stale": "Această revizuire este depășită. Rezolvați sau verificați din nou înainte de aplicare.",
|
||||
"render.ribbon_aging": "Îmbătrânire",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Începeți cu = pentru a construi cuvintele din parametri: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Cursiv",
|
||||
"sketch_text.loading_fonts": "Se caută fonturile instalate…",
|
||||
"sketch_text.no_bold": "Fontul încorporat nu are variantă aldină: alegeți un font instalat",
|
||||
"sketch_text.on_path": "Textul urmează traseul său: curba îl poziționează",
|
||||
"sketch_text.path_clear": "Scoate textul de pe curbă",
|
||||
"sketch_text.path_hint": "O curbă a schiței pe care o urmează textul: faceți clic aici, apoi pe curbă",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "cele două origini sunt pe aceeași componentă",
|
||||
"thread.automatic_size": "Dimensiune automată",
|
||||
"thread.designation": "Denumire",
|
||||
"thread.direction": "Sensul filetului",
|
||||
"thread.iso_metric": "ISO metric",
|
||||
"thread.left_hand": "Pe stânga",
|
||||
"thread.right_hand": "Pe dreapta",
|
||||
"thread.select_size": "Selectați dimensiunea",
|
||||
"timeline.delete_after_marker_one": "Șterge 1 operație după marcajul de istoric",
|
||||
"timeline.delete_after_marker_other": "Șterge {count} operații după marcajul de istoric",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Rulați aceasta într-un terminal, apoi apăsați din nou Conectare:",
|
||||
"ui.agent_chat_auth_title": "Autentificare la agent",
|
||||
"ui.agent_chat_cancel": "Anulează",
|
||||
"ui.agent_chat_cancel_timeout": "Agentul nu a răspuns la Oprește și a fost deconectat. Reconectați-vă pentru a continua.",
|
||||
"ui.agent_chat_cannot_start": "Instalat, dar nu pornește: {error}",
|
||||
"ui.agent_chat_changes": "Modificări: {n}, un singur pas de anulare",
|
||||
"ui.agent_chat_changes_n": "{n} modificări",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Comanda agentului",
|
||||
"ui.agent_chat_connect": "Conectare",
|
||||
"ui.agent_chat_copy": "Copiază",
|
||||
"ui.agent_chat_copy_message": "Copiază mesajul",
|
||||
"ui.agent_chat_ctx_bodies": "Corpuri",
|
||||
"ui.agent_chat_ctx_elements": "Elemente",
|
||||
"ui.agent_chat_ctx_features": "Operații",
|
||||
"ui.agent_chat_ctx_more": "+{n} în plus",
|
||||
"ui.agent_chat_ctx_other": "Altele",
|
||||
"ui.agent_chat_custom_heading": "Model personalizat",
|
||||
"ui.agent_chat_custom_hint": "Orice program care vorbește Agent Client Protocol pe stdin și stdout. Nu este rulat de niciun shell.",
|
||||
"ui.agent_chat_denied": "Refuzat",
|
||||
"ui.agent_chat_deny": "Refuză",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Tot",
|
||||
"ui.agent_chat_mode_ask": "Întreabă",
|
||||
"ui.agent_chat_mode_edits": "Modificări",
|
||||
"ui.agent_chat_model_custom": "Folosește modelul personalizat: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} nu poate folosi instrumentele SolidCraft, deci poate doar să converseze. Alegeți un model cu suport pentru instrumente.",
|
||||
"ui.agent_chat_model_rejected": "Agentul nu a acceptat {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Caută modele…",
|
||||
"ui.agent_chat_model_tip": "Modelul folosit de agent. Alegerea dumneavoastră este reținută pentru acest agent.",
|
||||
"ui.agent_chat_models_failed": "Nu s-au putut lista modelele: {error}",
|
||||
"ui.agent_chat_models_heading": "Modele disponibile",
|
||||
"ui.agent_chat_models_listing": "Se listează modelele…",
|
||||
"ui.agent_chat_models_none": "Endpoint-ul nu listează niciun model",
|
||||
"ui.agent_chat_models_not_a_list": "Răspunsul nu a fost o listă de modele",
|
||||
"ui.agent_chat_new": "Chat nou",
|
||||
"ui.agent_chat_new_confirm": "Începeți un chat nou? Cel curent este șters.",
|
||||
"ui.agent_chat_next_picture": "Imaginea următoare",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Permisiuni",
|
||||
"ui.ai_preset": "Presetare",
|
||||
"ui.ai_protocol": "Protocol",
|
||||
"ui.ai_reasoning_effort": "Efort de raționament",
|
||||
"ui.ai_reasoning_effort_field_hint": "gol = valoarea implicită a furnizorului",
|
||||
"ui.ai_reasoning_effort_hint": "Opțional. Trimis către endpoint ca `reasoning_effort`; valorile acceptate diferă în funcție de furnizor (de exemplu `low`, `high` sau `max`). O valoare setată aici nu este niciodată înlocuită de SolidCraft. Lăsați gol pentru a nu trimite nimic și a păstra valoarea implicită a furnizorului.",
|
||||
"ui.ai_remove": "Elimină",
|
||||
"ui.ai_request_timed_out": "Modelul a durat mai mult de {seconds} s. Puteți mări timpul de expirare pentru acest endpoint în Preferințe › Asistent.",
|
||||
"ui.ai_request_timeout": "Timp de expirare a cererii",
|
||||
@@ -4474,21 +4348,14 @@
|
||||
"ui.construction.contact_hint": "Tangentă: alegeți un cerc/arc sau un spline/o curbă conică deschisă, apoi punctul de tangență (curbe de formă liberă: capetele)",
|
||||
"ui.construction.external_hint": "Tangentă: alegeți un cerc sau un arc, un punct exterior, apoi soluția dorită",
|
||||
"ui.construction.free_hint": "Dreaptă de construcție: clic pe două puncte; clic dreapta pentru a relua",
|
||||
"ui.construction.normal_needs_length": "O dreaptă infinită este întotdeauna de construcție: introduceți o lungime pentru a desena o linie normală",
|
||||
"ui.construction.point_hint": "Dreaptă de construcție: clic pe punctul prin care trece",
|
||||
"ui.construction.reference_hint": "Dreaptă de construcție: alegeți o linie dreaptă, apoi un punct; clic dreapta pentru a schimba referința",
|
||||
"ui.construction.ribbon_label": "Linii aux.",
|
||||
"ui.construction.side_hint": "Dreaptă de construcție: faceți clic pe partea spre care merge linia; clic dreapta pentru a relua",
|
||||
"ui.context_menu": "Meniu contextual",
|
||||
"ui.continuity_crease": "Muchie",
|
||||
"ui.continuity_curvature": "Curbură",
|
||||
"ui.continuity_curvature_change": "Variația curburii",
|
||||
"ui.continuity_g0": "Muchie G0",
|
||||
"ui.continuity_g1": "Tangent G1",
|
||||
"ui.continuity_g2": "Curbură G2",
|
||||
"ui.continuity_gap": "Spațiu",
|
||||
"ui.continuity_position": "Poziție",
|
||||
"ui.continuity_tangent": "Tangent",
|
||||
"ui.copy": "Copiază",
|
||||
"ui.corner": "Colț",
|
||||
"ui.corners": "Colțuri",
|
||||
@@ -4511,7 +4378,6 @@
|
||||
"ui.dark": "Întunecat",
|
||||
"ui.default_modelling_orientation": "Orientarea implicită de modelare",
|
||||
"ui.delete": "Șterge",
|
||||
"ui.delete_select_first": "Selectați mai întâi ce doriți să ștergeți: operații, corpuri, componente sau geometrie de schiță",
|
||||
"ui.depth": "Adâncime",
|
||||
"ui.design": "Proiect",
|
||||
"ui.design_properties.author": "Autor",
|
||||
@@ -4604,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Piesa a fost salvată într-un alt fișier; ansamblul rămâne legat de {name}",
|
||||
"ui.edit_in_place_wait": "Așteptați până se termină ce rulează în proiect",
|
||||
"ui.edit_section_analysis": "Editează analiza secțiunii",
|
||||
"ui.edit_sketch_empty": "Nicio schiță de editat",
|
||||
"ui.ellipse": "Elipsă",
|
||||
"ui.emboss_wrap_note": "Profilurile din linii ortogonale, tangente la un cilindru acceptat, se înfășoară automat. Alegeți un perete pentru a alege o țintă.",
|
||||
"ui.end_radius": "Rază finală",
|
||||
@@ -4615,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Explicită",
|
||||
"ui.equation_form": "Formă",
|
||||
"ui.equation_note": "Variabila este un număr simplu: sin(t) o primește în radiani. Un rezultat fără unitate este în unitatea proiectului.",
|
||||
"ui.equation_note_range": "Variabila este o lungime, la fel ca intervalul ei: combinați-o cu parametri de lungime și împărțiți-o la o lungime pentru sin(). Un rezultat fără unitate este în unitatea proiectului.",
|
||||
"ui.equation_parametric": "Parametrică",
|
||||
"ui.equation_variable_unit": "Variabila are unitatea intervalului",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4749,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Ascunde originea",
|
||||
"ui.hidePlanes": "Ascunde planele",
|
||||
"ui.hideProfile": "Ascunde profilul",
|
||||
"ui.hide_component_history": "Ascunde istoricul ei",
|
||||
"ui.hide_origin_by_default": "Ascunde originea implicit",
|
||||
"ui.hide_origin_note": "Proiectele noi încep cu dosarul Origine ascuns. Un proiect își păstrează propria setare Origine după ce îl afișați sau îl ascundeți.",
|
||||
"ui.history_back": "Un pas înapoi",
|
||||
@@ -4757,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "faceți dublu clic pe muchie",
|
||||
"ui.history_first": "Mergi la început",
|
||||
"ui.history_forward": "Un pas înainte",
|
||||
"ui.history_hide_hidden": "Ascunde componentele ascunse",
|
||||
"ui.history_hide_names": "Ascunde numele",
|
||||
"ui.history_last": "Mergi la sfârșit",
|
||||
"ui.history_marker_tip": "Marcaj de istoric: trageți-l pentru a derula modelul înapoi; operațiile noi se adaugă aici",
|
||||
@@ -4767,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Afișează butonul Redare",
|
||||
"ui.history_play_finish_action": "Finalizați acțiunea curentă înainte de a reda istoricul",
|
||||
"ui.history_play_roll_back": "Mutați marcajul istoricului înapoi înainte de redare",
|
||||
"ui.history_show_hidden": "Afișează componentele ascunse",
|
||||
"ui.history_show_names": "Afișează numele",
|
||||
"ui.history_sketch_listed_under": "Listată sub {feature}",
|
||||
"ui.history_title": "Istoric",
|
||||
"ui.history_toggle_names": "Afișează sau ascunde numele operațiilor",
|
||||
"ui.history_waits_for_editor": "Anulează, Refă și Istoric așteaptă până se deschide editorul operației",
|
||||
"ui.hole": "Gaură",
|
||||
"ui.hole_tap_type": "Tip de filetare gaură",
|
||||
"ui.hole_type": "Tip de gaură",
|
||||
@@ -4788,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "{name} are modificări nesalvate, așa că a fost inserat fișierul său salvat. Salvați-l, apoi folosiți Actualizează legăturile pentru a aduce modificările.",
|
||||
"ui.insert_design.unsaved": "Modificări nesalvate",
|
||||
"ui.inspect": "Inspectează",
|
||||
"ui.instances": "Instanțe",
|
||||
"ui.intersect": "Intersecție",
|
||||
"ui.isolate": "Izolează",
|
||||
"ui.join": "Unire",
|
||||
@@ -4797,14 +4655,12 @@
|
||||
"ui.joints": "Îmbinări",
|
||||
"ui.keyboard_shortcuts": "Scurtături de tastatură",
|
||||
"ui.language": "Limbă",
|
||||
"ui.lasso_select": "Lasou (trageți o buclă liberă: preia tot ce se află în întregime înăuntru)",
|
||||
"ui.layout_compact": "Compact",
|
||||
"ui.layout_floating": "Plutitor",
|
||||
"ui.length": "Lungime",
|
||||
"ui.length_decimals": "Zecimale lungime",
|
||||
"ui.light": "Luminos",
|
||||
"ui.line": "Linie",
|
||||
"ui.line_arc_hint": "Arc tangent: faceți clic pe capătul arcului. Opriți-vă din nou pe ultimul punct pentru linii; clic dreapta sau Esc pentru a finaliza",
|
||||
"ui.link_copies": "Leagă copiile identice",
|
||||
"ui.link_copies_keep": "Păstrează",
|
||||
"ui.link_copies_link": "Leagă",
|
||||
@@ -4893,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Reconstruiește piesa, înlocuind orice operații adăugate. Toate aparițiile acestei componente se actualizează.",
|
||||
"ui.paste": "Lipește",
|
||||
"ui.path": "Traseu",
|
||||
"ui.pattern_object_type_tip": "Corpuri: forme solide, alese în vizualizare sau în Navigator; fiecare este copiat întreg.\nOperații: pași ai Istoricului, de exemplu o extrudare sau o gaură, alese în Istoric sau pe o față creată de ei; pasul este repetat.\nO schiță nu este niciuna dintre ele: repetați curbele ei cu Matrice sau Oglindire din schiță, ori extrudați-o mai întâi.",
|
||||
"ui.pattern_on_path": "Matrice pe traseu",
|
||||
"ui.perforate_margin_default": "din diametru",
|
||||
"ui.perforate_pitch": "Pas",
|
||||
@@ -4939,9 +4794,9 @@
|
||||
"ui.polygon": "Poligon",
|
||||
"ui.preferences": "Preferințe",
|
||||
"ui.press_a_key": "apăsați o tastă…",
|
||||
"ui.print_face_body_not_sent": "Corpul acelei fețe nu este trimis: adăugați-l mai întâi la Corpuri",
|
||||
"ui.print_face_cleared": "{body}: fața de imprimare a fost ștearsă",
|
||||
"ui.print_face_input": "Față de imprimare",
|
||||
"ui.print_face_one_body": "O față de imprimare aparține unui singur corp: trimiteți acel corp singur pentru a o schimba",
|
||||
"ui.print_face_pick": "Selectați o față plană a unui corp solid pentru a o face fața de imprimare",
|
||||
"ui.print_face_set": "{body}: fața de imprimare a fost setată; Trimite la slicer așază corpul pe ea",
|
||||
"ui.profile": "Profil",
|
||||
@@ -5053,7 +4908,6 @@
|
||||
"ui.showDimension": "Afișează cota",
|
||||
"ui.showOrigin": "Afișează originea",
|
||||
"ui.showPlanes": "Afișează planele",
|
||||
"ui.show_component_history": "Afișează istoricul ei",
|
||||
"ui.show_constraints": "Constrângeri",
|
||||
"ui.show_construction_geometries": "Geometrii de construcție",
|
||||
"ui.show_dimensions": "Cote",
|
||||
@@ -5170,15 +5024,12 @@
|
||||
"ui.view_angles": "Unghiuri de vizualizare",
|
||||
"ui.view_angles_convention": "Grade în jurul axei verticale. Girația 0° este vizualizarea din față, 90° din stânga, −90° din dreapta, 180° din spate; înclinarea 90° este vizualizarea de sus; un ruliu pozitiv rotește modelul în sens orar.",
|
||||
"ui.view_angles_help": "Afișează înclinarea, girația și ruliul vizualizării în grade, plus proiecția ei, sub reperul de orientare. Faceți clic pe valori pentru a introduce unghiuri exacte.",
|
||||
"ui.view_angles_lock": "Blochează {axis}",
|
||||
"ui.view_angles_ortho": "Ortog.",
|
||||
"ui.view_angles_persp": "Persp.",
|
||||
"ui.view_angles_pitch": "Înclinare",
|
||||
"ui.view_angles_readout": "Înclinare {pitch} · Girație {yaw} · Ruliu {roll}",
|
||||
"ui.view_angles_roll": "Ruliu",
|
||||
"ui.view_angles_unlock": "Deblochează {axis}",
|
||||
"ui.view_angles_yaw": "Girație",
|
||||
"ui.view_angles_zero": "Setează {axis} la 0°",
|
||||
"ui.view_centre": "Centrul vizualizării",
|
||||
"ui.viewport_status_clear": "Dezactivează {name}",
|
||||
"ui.viewport_status_clear_hint": "Dezactivează {name} · Esc",
|
||||
@@ -5236,7 +5087,7 @@
|
||||
"update.check_unavailable": "Căutarea actualizărilor nu este disponibilă pentru această instalare.",
|
||||
"update.checking": "Se verifică…",
|
||||
"update.copy": "Copiază",
|
||||
"update.dmg_opened": "Imaginea de disc este deschisă și verificată: ieșiți din SolidCraft, trageți noul SolidCraft în Applications, înlocuind copia veche, apoi deschideți din nou SolidCraft.",
|
||||
"update.dmg_opened": "Imaginea de disc este deschisă și verificată: trageți SolidCraft în Applications, înlocuind copia veche, apoi reporniți SolidCraft.",
|
||||
"update.download": "Descarcă",
|
||||
"update.download_open": "Descarcă și deschide",
|
||||
"update.downloading": "Se descarcă și se verifică… {done} din {total} MB",
|
||||
@@ -5280,7 +5131,6 @@
|
||||
"web.open_link": "Deschideți proiectul legat?",
|
||||
"web.open_link_confirm": "Există modificări nesalvate. Deschideți proiectul legat într-o filă nouă?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ alege · Enter / Tab completează · Esc închide",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ alegeți · Enter aplică această valoare",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ alegeți · Enter aplică ce ați tastat · Esc închide",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter continuă pe GitHub."
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
"Circular": "Круговой",
|
||||
"Circumference": "Окружность",
|
||||
"Clockwise": "По часовой стрелке",
|
||||
"Close draft": "Закрыть черновик",
|
||||
"Close draft": "Закрыть анализ уклонов",
|
||||
"Collapse": "Свернуть",
|
||||
"Collisions": "Столкновения",
|
||||
"Colour": "Цвет",
|
||||
@@ -182,8 +182,6 @@
|
||||
"Designs you open or save appear here.": "Здесь появляются открытые и сохранённые дизайны.",
|
||||
"Determined by To Object. Choose Angle to edit the angular extent.": "Определяется параметром «До объекта». Выберите «Угол», чтобы задать угловой предел.",
|
||||
"Diameter": "Диаметр",
|
||||
"Did this assembly open the wrong way up?": "Эта сборка открылась не той стороной вверх?",
|
||||
"Did this part open the wrong way up?": "Эта деталь открылась не той стороной вверх?",
|
||||
"Dimension new shapes": "Проставлять размеры новых фигур",
|
||||
"Direction": "Направление",
|
||||
"Discard": "Отменить",
|
||||
@@ -477,7 +475,6 @@
|
||||
"Rectangular": "Прямоугольная",
|
||||
"Rectangular Tube": "Прямоугольная труба",
|
||||
"Reference face": "Базовая грань",
|
||||
"Reference plane": "Базовая плоскость",
|
||||
"Relief Depth": "Глубина разгрузки",
|
||||
"Relief Width": "Ширина разгрузки",
|
||||
"Remove Tools": "Убрать инструменты",
|
||||
@@ -557,7 +554,6 @@
|
||||
"Section": "Сечение",
|
||||
"Section (optional)": "Сечение (необязательно)",
|
||||
"Section position": "Положение сечения",
|
||||
"Sections": "Сечения",
|
||||
"Sections (one sketch each)": "Сечения (по одному эскизу)",
|
||||
"Select Other": "Выбрать другое",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Выбрать другое: удерживайте левую кнопку на модели (или правый щелчок › Выбрать другое…), чтобы увидеть всё под курсором; повторный щелчок в том же месте выбирает следующий объект. Двойной щелчок средней кнопкой — «Главная» (Настройки › Навигация).",
|
||||
@@ -608,7 +604,6 @@
|
||||
"Square": "Квадрат",
|
||||
"Stand it up": "Поставить вертикально",
|
||||
"Stand it up: a quarter turn about X, as one Move feature you can undo.": "Поставить вертикально: четверть оборота вокруг X одной операцией «Переместить», которую можно отменить.",
|
||||
"Stand this assembly up?": "Поставить эту сборку вертикально?",
|
||||
"Stand this part up?": "Поставить эту деталь вертикально?",
|
||||
"Start angle": "Начальный угол",
|
||||
"Start bulge": "Выпуклость в начале",
|
||||
@@ -780,8 +775,6 @@
|
||||
"at the face": "у грани",
|
||||
"bom.group_children": "Вложенные детали в строке своей детали",
|
||||
"browser.body_name": "Тело{number}",
|
||||
"browser.calibrate_click_a": "Щёлкните по изображению, чтобы задать точку A, или введите её координаты.",
|
||||
"browser.calibrate_click_b": "Щёлкните по изображению, чтобы задать точку B, или введите её координаты.",
|
||||
"browser.calibrate_title": "Калибровка: {name}",
|
||||
"browser.capture_many": "Компоненты ({count}) перемещены, но их положения не зафиксированы.",
|
||||
"browser.capture_note": "«Зафиксировать положение» сохраняет новое положение; «Вернуть положение» восстанавливает прежнее.",
|
||||
@@ -794,13 +787,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (привязка потеряна)",
|
||||
"browser.sketch_editing": "{name} (редактируется)",
|
||||
"browser.sketch_name": "Эскиз{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "уже в своей детали",
|
||||
"browser.sketches_to_parts_design_body": "на теле самого дизайна",
|
||||
"browser.sketches_to_parts_moved": "Перемещено эскизов в деталь, на которой они лежат: {moved}",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "на грани без точной привязки",
|
||||
"browser.sketches_to_parts_not_on_face": "не на грани детали",
|
||||
"browser.sketches_to_parts_part_missing": "их детали больше нет",
|
||||
"browser.sketches_to_parts_result": "Перемещено эскизов в деталь, на которой они лежат: {moved}; остались на месте: {stayed} — {why}",
|
||||
"browser.units": "Единицы: {units}",
|
||||
"cam.flat": "Плоский",
|
||||
"cam.follower": "Толкатель",
|
||||
@@ -860,7 +846,6 @@
|
||||
"cmd.component_extract": "Извлечь в файл",
|
||||
"cmd.component_finish_edit": "Завершить изменение",
|
||||
"cmd.component_from_bodies": "Создать компоненты из тел",
|
||||
"cmd.component_hide_history": "Скрыть историю компонента",
|
||||
"cmd.component_insert_design": "Вставить дизайн",
|
||||
"cmd.component_links": "Список связей",
|
||||
"cmd.component_list": "Список компонентов",
|
||||
@@ -869,7 +854,6 @@
|
||||
"cmd.component_move_bodies": "Переместить тела в компонент",
|
||||
"cmd.component_move_features": "Переместить операции в компонент",
|
||||
"cmd.component_move_sketches": "Переместить эскизы в компонент",
|
||||
"cmd.component_move_sketches_to_parts": "Переместить эскизы в их детали",
|
||||
"cmd.component_paste_from_design": "Вставить из другого дизайна",
|
||||
"cmd.component_paste_new": "Вставить как новый",
|
||||
"cmd.component_properties": "Физические свойства компонента",
|
||||
@@ -877,7 +861,6 @@
|
||||
"cmd.component_rename": "Переименовать компонент",
|
||||
"cmd.component_replace_with_link": "Заменить ссылкой",
|
||||
"cmd.component_revert_position": "Вернуть положение",
|
||||
"cmd.component_show_history": "Показать историю компонента",
|
||||
"cmd.component_unlock": "Разблокировать содержимое",
|
||||
"cmd.component_update_links": "Обновить связи",
|
||||
"cmd.config_activate": "Активировать конфигурацию",
|
||||
@@ -888,7 +871,6 @@
|
||||
"cmd.config_rule": "Правило конфигурации",
|
||||
"cmd.config_rules": "Правила конфигурации",
|
||||
"cmd.config_table": "Показать таблицу конфигурации",
|
||||
"cmd.construct.plane.axis_point": "Плоскость через ось и точку",
|
||||
"cmd.construct_axis_edge": "Ось через ребро",
|
||||
"cmd.construct_axis_normal_to_face": "Ось перпендикулярно грани",
|
||||
"cmd.construct_axis_through_cylinder": "Ось через цилиндр/конус/тор",
|
||||
@@ -937,11 +919,6 @@
|
||||
"cmd.explode_show": "Показать разобранный вид",
|
||||
"cmd.expr_evaluate": "Вычислить выражение",
|
||||
"cmd.face_delete": "Удалить грань",
|
||||
"cmd.file.export_3mf": "Экспортировать 3MF",
|
||||
"cmd.file.export_obj": "Экспортировать OBJ",
|
||||
"cmd.file.export_step": "Экспортировать STEP",
|
||||
"cmd.file.export_stl": "Экспортировать STL",
|
||||
"cmd.file.export_urdf": "Экспортировать URDF",
|
||||
"cmd.file_export": "Экспорт",
|
||||
"cmd.file_insert_mesh": "Вставить меш",
|
||||
"cmd.file_insert_step": "Вставить STEP",
|
||||
@@ -959,7 +936,6 @@
|
||||
"cmd.inspect_colored_components": "Включить цвета компонентов",
|
||||
"cmd.inspect_colored_components_disable": "Отключить цвета компонентов",
|
||||
"cmd.inspect_compare": "Сравнить тела",
|
||||
"cmd.inspect_compare_picture": "Сравнить с изображением",
|
||||
"cmd.inspect_continuity": "Анализ непрерывности",
|
||||
"cmd.inspect_curvature_comb": "Анализ кривизны (гребёнка)",
|
||||
"cmd.inspect_curvature_map": "Карта кривизны",
|
||||
@@ -1046,9 +1022,6 @@
|
||||
"cmd.plastic_rest": "Опора",
|
||||
"cmd.plastic_rules": "Список правил пластика",
|
||||
"cmd.plastic_snap_fit": "Защёлка",
|
||||
"cmd.render.compare.divider": "Переместить разделитель сравнения рендеров",
|
||||
"cmd.render.result.discard": "Отбросить результат рендера",
|
||||
"cmd.render.result.select": "Выбрать результат рендера",
|
||||
"cmd.render_aging_describe": "Многослойное старение поверхности",
|
||||
"cmd.render_backends": "Рендер-бэкенды",
|
||||
"cmd.render_batch": "Рендер всех кадров",
|
||||
@@ -1207,7 +1180,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Сплайн по контрольным точкам (степень 5)",
|
||||
"cmd.sketch_spline_fit_point": "Сплайн по точкам сглаживания",
|
||||
"cmd.sketch_spline_insert_point": "Добавить точку сплайна",
|
||||
"cmd.sketch_spline_remove_point": "Удалить точку сплайна",
|
||||
"cmd.sketch_spline_reverse": "Обратить направление сплайна",
|
||||
"cmd.sketch_spun_profile": "Профиль вращения",
|
||||
"cmd.sketch_toggle_diameter": "Переключить радиус / диаметр",
|
||||
@@ -1258,7 +1230,6 @@
|
||||
"cmd.timeline_rollback": "Сдвинуть маркер шкалы",
|
||||
"cmd.timeline_stop": "Остановить воспроизведение истории",
|
||||
"cmd.timeline_suppress": "Подавить операцию",
|
||||
"cmd.ui.assistant": "Показать/скрыть ассистента",
|
||||
"cmd.view.render_browser": "Браузер рендера",
|
||||
"cmd.view.render_dock": "Переместить панель рендера",
|
||||
"cmd.view.render_focus": "Режим фокуса рендера",
|
||||
@@ -1293,28 +1264,17 @@
|
||||
"cmd.view_tool": "Инструмент навигации",
|
||||
"cmd.view_top": "Вид сверху",
|
||||
"cmd.view_visual_style": "Визуальный стиль",
|
||||
"color.blue": "Синий",
|
||||
"color.copy": "Щёлкните, чтобы скопировать значения цвета",
|
||||
"color.edit": "Щёлкните, чтобы изменить цвет",
|
||||
"color.gamma": "Значения цвета показаны в гамма-пространстве 0–255",
|
||||
"color.green": "Зелёный",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Введите #rrggbb или #rrggbbaa; при вводе шести цифр непрозрачность сохраняется",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Оттенок",
|
||||
"color.linear": "Значения цвета показаны в линейном пространстве 0–1",
|
||||
"color.recent": "Недавние цвета",
|
||||
"color.recent_help": "Цвета, выбранные в любом поле цвета, появляются здесь",
|
||||
"color.red": "Красный",
|
||||
"color.saturation": "Насыщенность (в процентах)",
|
||||
"color.saturation_value": "Насыщенность и яркость",
|
||||
"color.selected": "Выбранный цвет",
|
||||
"color.step_down": "Уменьшить на шаг",
|
||||
"color.step_up": "Увеличить на шаг",
|
||||
"color.value": "Значение, то есть яркость (в процентах)",
|
||||
"config.column_filter_empty": "Нет подходящих столбцов",
|
||||
"config.rule_parameter_columns": "Показаны только параметры, у которых есть столбец в таблице. Добавьте столбец кнопкой «Добавить столбец» (+), чтобы использовать параметр здесь.",
|
||||
"config.rule_suppression_columns": "Показаны только операции, у которых в таблице есть столбец «Подавить». Добавьте столбец кнопкой «Добавить столбец» (+), чтобы управлять операцией здесь.",
|
||||
"contact.components_count": "Компонентов: {count}",
|
||||
"contact.enabled_label": "включено",
|
||||
"coupling.gear_1": "Шестерня 1",
|
||||
@@ -1359,15 +1319,9 @@
|
||||
"dialog.dimension_insert_hint": "Дважды щёлкните другой управляющий размер, чтобы вставить его имя",
|
||||
"dialog.dimension_name": "Размер: {name}",
|
||||
"dialog.edit_title": "ИЗМЕНИТЬ: {title}",
|
||||
"dialog.no_shown_body": "Нет отображаемого тела для изменения: покажите тело или выберите «Новое тело»",
|
||||
"dialog.pattern_sketch_not_object": "Выберите тела или операции: эскиз — ни то, ни другое. Повторите его кривые собственным инструментом «Массив» или «Зеркало» в эскизе либо сначала выдавите его.",
|
||||
"dialog.select": "↖ Выбрать",
|
||||
"dialog.selected_count": "↖ Выбрано: {count}",
|
||||
"dialog.selection_constraint": "Ограничение {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · кривая {id}",
|
||||
"dialog.selection_guidance": "Щёлкните поле ввода, чтобы изменить его. Щелчок по выделенному объекту убирает его; Ctrl/Cmd+щелчок тоже переключает. Проверьте предпросмотр и нажмите OK.",
|
||||
"dialog.selection_midpoint": "Середина · {id}",
|
||||
"dialog.selection_profile": "{sketch} · профиль {number}",
|
||||
"dialog.selection_step": "{step} из {total}: Выберите {input}",
|
||||
"dialog.step": "Шаг",
|
||||
"document.changed_on_disk": "Файл {name} изменён на диске",
|
||||
@@ -1450,7 +1404,6 @@
|
||||
"help.construct.axis.two_points": "Создаёт вспомогательную ось через две точки, вершины или точки эскиза. Используйте для оси, идущей между двумя известными положениями.",
|
||||
"help.construct.plane.along_path": "Создаёт вспомогательную плоскость, перпендикулярную ребру или кривой, в выбранном месте вдоль неё. Используйте, чтобы нарисовать профиль для операции «Сдвиг» или сечение траектории.",
|
||||
"help.construct.plane.at_angle": "Создаёт вспомогательную плоскость, повёрнутую на угол от плоскости или грани вокруг оси или ребра. Используйте для наклонных эскизов, например для кронштейна под углом.",
|
||||
"help.construct.plane.axis_point": "Создаёт вспомогательную плоскость, содержащую ось и точку вне этой оси. Выберите ось начала координат или вспомогательную ось, прямое ребро или линию эскиза, затем вершину, точку эскиза или вспомогательную точку. Точка на оси не задаёт единственную плоскость.",
|
||||
"help.construct.plane.midplane": "Создаёт вспомогательную плоскость посередине между двумя плоскостями или плоскими гранями либо делящую пополам угол между ними. Используйте как плоскость симметрии для зеркального отражения.",
|
||||
"help.construct.plane.offset": "Создаёт вспомогательную плоскость, параллельную плоскости или плоской грани, на заданном расстоянии или через точку. Используйте, чтобы рисовать на заданной высоте над гранью.",
|
||||
"help.construct.plane.perpendicular": "Создаёт вспомогательную плоскость, содержащую линию или ребро и перпендикулярную плоскости или грани. Используйте, чтобы рисовать на модели вертикально вдоль ребра.",
|
||||
@@ -1584,16 +1537,6 @@
|
||||
"help.sketch.constraint.symmetry": "Делает две точки или кривые зеркальными друг для друга относительно линии или центральной точки. Используйте, чтобы профиль оставался симметричным при изменении одной стороны.",
|
||||
"help.sketch.constraint.tangent": "Заставляет две кривые касаться, например линию и дугу. Используйте для плавных стыков без излома.",
|
||||
"help.sketch.construction": "Переключает кривые между обычной и вспомогательной геометрией, которую профили не учитывают. Используйте вспомогательные кривые как помощники для разметки, ориентиры и размеры.",
|
||||
"help.sketch.construction_line": "Создайте бесконечную вспомогательную прямую через две точки. С её помощью можно разметить эскиз, не разделяя профили.",
|
||||
"help.sketch.construction_line.angle": "Создайте бесконечную вспомогательную прямую под углом к оси X эскиза. Укажите точку и введите угол либо задайте направление.",
|
||||
"help.sketch.construction_line.bisector": "Выберите две пересекающиеся прямые эскиза, затем одну из двух биссектрис. Результат изменяется вместе с исходными прямыми.",
|
||||
"help.sketch.construction_line.horizontal": "Создайте бесконечную горизонтальную вспомогательную прямую через точку. Её горизонтальное ограничение сохраняется при последующих изменениях.",
|
||||
"help.sketch.construction_line.parallel": "Выберите прямую эскиза, затем разместите параллельную бесконечную вспомогательную прямую. Щелчок правой кнопкой — выбрать другую исходную прямую.",
|
||||
"help.sketch.construction_line.perpendicular": "Выберите прямую эскиза, затем разместите перпендикулярную бесконечную вспомогательную прямую. Щелчок правой кнопкой — выбрать другую исходную прямую.",
|
||||
"help.sketch.construction_line.tangent_at": "Создайте касательную в точке окружности или дуги окружности либо в конечной точке открытого сплайна или коники. Выберите кривую, затем точку касания.",
|
||||
"help.sketch.construction_line.tangent_external": "Выберите окружность или дугу, затем внешнюю точку и решение для касательной. В предпросмотре показаны только точки касания на нарисованной дуге.",
|
||||
"help.sketch.construction_line.tangent_two": "Выберите две окружности или дуги, затем в предпросмотре выберите общую касательную. Точки касания должны лежать на нарисованных кривых.",
|
||||
"help.sketch.construction_line.vertical": "Создайте бесконечную вертикальную вспомогательную прямую через точку. Её вертикальное ограничение сохраняется при последующих изменениях.",
|
||||
"help.sketch.copy": "Копирует выбранные кривые и точки эскиза вместе с ограничениями и размерами между ними. Вставьте их в этот эскиз или в другой.",
|
||||
"help.sketch.create": "Начинает новый 2D-эскиз на плоскости или плоской грани модели. Каждое «Выдавливание», «Вращение» и «Сдвиг» начинается с эскиза.",
|
||||
"help.sketch.cut": "Копирует выбранную геометрию эскиза и удаляет её из эскиза одним шагом отмены. Вставьте её в другое место этого эскиза или в другой эскиз.",
|
||||
@@ -1721,8 +1664,6 @@
|
||||
"help.view.spin": "Непрерывно вращает вид вокруг модели до следующего щелчка или нажатия клавиши. Используйте, чтобы показать модель со всех сторон.",
|
||||
"help.view.tool": "Закрепляет инструмент камеры (орбиту, панорамирование или масштаб), так что перетаскивание левой кнопкой мыши двигает вид, пока вы его не отключите. Используйте на трекпаде или без средней кнопки мыши.",
|
||||
"help.view.visual_style": "Переключает способ отрисовки модели: тонированная с рёбрами или без них, каркас или со скрытыми рёбрами. Используйте каркас, чтобы заглянуть внутрь, а тонированный вид — для чистого вида.",
|
||||
"history.sketch_under_constrained": "Недоопределён (степеней свободы: {count})",
|
||||
"history.sketch_under_constrained_one": "Недоопределён (степеней свободы: {count})",
|
||||
"hole_presets.confirm_delete": "Подтвердить удаление",
|
||||
"hole_presets.delete": "Удалить",
|
||||
"hole_presets.delete_prompt": "Удалить этот личный пресет? Существующие отверстия не изменятся.",
|
||||
@@ -1826,8 +1767,6 @@
|
||||
"joint_move.blocked_hint": "Проверьте тип сопряжения (например, «Жёсткое»), закрепление, ограничения сопряжения и значения, заданные параметрами.",
|
||||
"joint_move.blocked_title": "Эту деталь нельзя переместить",
|
||||
"joint_move.coarse": "Шаг поворота вблизи оси (°)",
|
||||
"joint_move.conflict": "Одно из сопряжений этой детали конфликтует с остальными: {joint}.",
|
||||
"joint_move.conflict_hint": "Измените, подавите или удалите конфликтующее сопряжение, чтобы остальные сопряжения могли расположить деталь.",
|
||||
"joint_move.distance": "Расстояние от начала",
|
||||
"joint_move.done": "Готово",
|
||||
"joint_move.fine": "Шаг поворота вдали от оси (°)",
|
||||
@@ -1927,8 +1866,6 @@
|
||||
"motion.track_name": "Дорожка {number}",
|
||||
"nav.alias.help": "Shift+Alt+перетаскивание левой кнопкой вращает, Shift+Alt+средней панорамирует, Shift+Alt+правой меняет масштаб; перетаскивание средней кнопкой тоже панорамирует, правой — вращает",
|
||||
"nav.blender.help": "Перетаскивание средней кнопкой вращает, Shift+средняя панорамирует, Ctrl+средняя меняет масштаб; перетаскивание правой кнопкой камеру не двигает",
|
||||
"nav.creo.help": "Перетаскивание средней кнопкой вращает, Shift+средняя панорамирует, Ctrl+перетаскивание средней кнопкой по вертикали меняет масштаб (вниз — приблизить); колесо прокрутки тоже меняет масштаб",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Мышь и 3D-мышь вращают вид через оба полюса и сохраняют крен. Привязка к осям по Shift отключена.",
|
||||
"nav.free_orbit.label": "Свободная орбита",
|
||||
"nav.free_orbit.snap_help": "Мышь и 3D-мышь вращают вид через оба полюса и сохраняют крен. Удерживайте Shift при вращении, чтобы привязать направление вида и крен к осям.",
|
||||
@@ -1938,7 +1875,6 @@
|
||||
"nav.hfss.help": "Alt+перетаскивание левой кнопкой панорамирует, Shift+Alt+левая кнопка меняет масштаб, Ctrl+перетаскивание левой кнопкой по пустому месту вращает",
|
||||
"nav.inventor.help": "Перетаскивание средней кнопкой панорамирует, Shift+средняя вращает, Ctrl+средняя меняет масштаб, перетаскивание правой кнопкой вращает",
|
||||
"nav.maya.help": "Alt+перетаскивание левой кнопкой вращает, Alt+средняя кнопка панорамирует, Alt+правая кнопка меняет масштаб; перетаскивание средней кнопкой тоже панорамирует",
|
||||
"nav.nx.help": "Перетаскивание средней кнопкой вращает, Shift+средняя панорамирует (в NX — средняя + правая), Ctrl+средняя меняет масштаб (в NX — средняя + левая); перетаскивание правой кнопкой камеру не двигает",
|
||||
"nav.openscad.help": "Перетаскивание левой кнопкой по пустому месту вращает, Shift+левая выделяет рамкой, перетаскивание геометрии эскиза изменяет её; правая или средняя кнопка панорамирует, Shift+правая или Shift+средняя меняет масштаб",
|
||||
"nav.perspective.sketch": "При редактировании эскиза используется ортогональный вид. Завершите эскиз, чтобы включить перспективу.",
|
||||
"nav.right_drag_orbits.help": "Выкл.: перетаскивание правой кнопкой не двигает камеру, а правая кнопка только открывает контекстное меню. Выбор назначения кнопок мыши SolidWorks отключает этот параметр.",
|
||||
@@ -2081,19 +2017,12 @@
|
||||
"parts.family.button_head_cap_screw": "Винт с полукруглой головкой и внутренним шестигранником",
|
||||
"parts.family.dowel_pin": "Цилиндрический штифт",
|
||||
"parts.family.hex_bolt": "Болт / винт с шестигранной головкой",
|
||||
"parts.family.hex_cap_screw_inch": "Винт с шестигранной головкой (дюймовый)",
|
||||
"parts.family.hex_nut": "Шестигранная гайка",
|
||||
"parts.family.hex_nut_inch": "Шестигранная гайка (дюймовая)",
|
||||
"parts.family.set_screw": "Установочный винт с внутренним шестигранником и плоским концом",
|
||||
"parts.family.socket_head_cap_screw": "Винт с цилиндрической головкой и внутренним шестигранником",
|
||||
"parts.family.washer": "Плоская шайба",
|
||||
"parts.family.washer_sae": "Плоская шайба, SAE (узкая)",
|
||||
"parts.family.washer_uss": "Плоская шайба, USS (широкая)",
|
||||
"parts.holes": "Отверстия (необязательно)",
|
||||
"parts.placement_hint": "выберите одно или несколько отверстий, чтобы посадить деталь в каждое, или OK поместит её в начало координат",
|
||||
"parts.system": "Система единиц",
|
||||
"parts.system.inch": "Дюймовая",
|
||||
"parts.system.metric": "Метрическая",
|
||||
"pattern.alignment_2": "Выравнивание 2",
|
||||
"pattern.alignment_hint": "Количество включает оригинал. Центрирование распределяет копии по обе стороны; при чётном количестве смена направления выбирает сторону с дополнительной копией.",
|
||||
"pattern.direction_1": "Направление 1",
|
||||
@@ -2134,8 +2063,6 @@
|
||||
"prefs.anti_aliasing_note": "Сглаживает неровные края.",
|
||||
"prefs.applies_on_restart": "Применяется после перезапуска",
|
||||
"prefs.assistant": "Ассистент",
|
||||
"prefs.auto_operation": "Выбирать операцию автоматически",
|
||||
"prefs.auto_operation_note": "Окна операций сами выбирают «Объединить», «Новое тело» или «Вырезать» в зависимости от того, чего касается новый материал, пока вы не выберете операцию вручную. Выкл.: окна сохраняют ту операцию, с которой открылись.",
|
||||
"prefs.axes": "Оси",
|
||||
"prefs.axis": "Ось",
|
||||
"prefs.bodies_folders": "Папки тел",
|
||||
@@ -2144,8 +2071,6 @@
|
||||
"prefs.bodies_folders_several": "Только если тел несколько",
|
||||
"prefs.bottom": "Снизу",
|
||||
"prefs.browser": "Браузер",
|
||||
"prefs.browser_components_open": "Компоненты развёрнуты с начала",
|
||||
"prefs.browser_components_open_note": "Каждый компонент в браузере сразу развёрнут, как раньше, а не свёрнут, пока вы его не развернёте.",
|
||||
"prefs.browser_eye_left": "Глаз рядом со стрелкой свёртывания",
|
||||
"prefs.browser_eye_left_note": "Строки браузера показывают глаз показа/скрытия рядом со стрелкой свёртывания, как раньше, а не в столбце на правом конце строк.",
|
||||
"prefs.browser_reveal_on_hover": "Появляется при наведении",
|
||||
@@ -2155,8 +2080,6 @@
|
||||
"prefs.button_left": "Перетаскивание левой кнопкой",
|
||||
"prefs.button_middle": "Перетаскивание средней кнопкой",
|
||||
"prefs.button_right": "Перетаскивание правой кнопкой",
|
||||
"prefs.carousel_next": "Далее",
|
||||
"prefs.carousel_previous": "Назад",
|
||||
"prefs.choose_font": "Выбрать файл шрифта…",
|
||||
"prefs.click": "Щелчок",
|
||||
"prefs.contact_shading": "Мягкое контактное затенение",
|
||||
@@ -2169,10 +2092,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Криволинейные поверхности",
|
||||
"prefs.curves": "Криволинейные поверхности",
|
||||
"prefs.cut_preview_tint": "Показывать удаляемый материал красным",
|
||||
"prefs.cut_preview_tint_help": "В предпросмотре материал, который удаляет операция, и форма, которую она заменяет, закрашиваются красным полупрозрачным призраком. Если выключено, эти заливки полностью прозрачны и рисуются только их контуры.",
|
||||
"prefs.dark_parts_shading": "Сохранять форму тёмных деталей",
|
||||
"prefs.dark_parts_shading_help": "Затенять вид в линейном свете с мягкой заполняющей подсветкой неба, чтобы тёмные грани сохраняли градиент, а не становились чёрными",
|
||||
"prefs.dead_zone_note": "Заштрихованная полоса — мёртвая зона: движение внутри неё игнорируется.",
|
||||
"prefs.default": "по умолчанию",
|
||||
"prefs.design": "Параметры дизайна по умолчанию",
|
||||
@@ -2187,8 +2106,6 @@
|
||||
"prefs.edges": "Рёбра и затенение",
|
||||
"prefs.extend": "Удлинить",
|
||||
"prefs.extra_navigation": "Ctrl+перетаскивание левой кнопкой по пустому месту вращает вид; удерживайте Space для панорамирования.",
|
||||
"prefs.extrude_view_isometric": "Поворачивать вид в изометрию при открытии «Выдавливания»",
|
||||
"prefs.extrude_view_return": "Возвращать прежний вид при закрытии «Выдавливания»",
|
||||
"prefs.follows_os": "Как в системе",
|
||||
"prefs.font": "Шрифт",
|
||||
"prefs.font_fallback": "Символы, которых нет в выбранном шрифте, берутся из встроенного шрифта, поэтому ни одна подпись не показывает пустой квадрат.",
|
||||
@@ -2204,7 +2121,6 @@
|
||||
"prefs.graphics_card_auto": "Автоматически",
|
||||
"prefs.graphics_card_missing": "Сохранённая видеокарта недоступна; используется «Автоматически».",
|
||||
"prefs.graphics_card_restart": "Вступит в силу после перезапуска SolidCraft. WGPU_ADAPTER_NAME переопределяет этот выбор.",
|
||||
"prefs.graphics_card_unused": "Сохранённая видеокарта для этого окна не использовалась; используемая видеокарта показана в меню Справка › О SolidCraft и в строке состояния. Попробуйте «Автоматически» или задайте для WGPU_ADAPTER_NAME уникальную часть названия видеокарты.",
|
||||
"prefs.graphics_note": "Выбирайте между скоростью и плавностью изображения. Каждый вариант показывает свой эффект на образце.",
|
||||
"prefs.graphics_presets_note": "Пресеты задают сразу все настройки ниже.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Скрывать знаки ограничений при уменьшении масштаба",
|
||||
@@ -2219,8 +2135,6 @@
|
||||
"prefs.history_sketches_note": "Если для эскизов выбрано «Под своей операцией», История слева показывает каждый эскиз на один уровень глубже, под первой операцией, построенной по нему, когда она достаточно широкая для названий. Шкала внизу всегда сохраняет порядок создания.",
|
||||
"prefs.history_sketches_under_feature": "Под своей операцией",
|
||||
"prefs.hold_stop_snapping": "Удерживайте, чтобы отключить привязку",
|
||||
"prefs.home_fit_size": "Размер для «Главная» и «Вписать»",
|
||||
"prefs.home_fit_size_note": "Какую часть вида занимает модель, когда её кадрируют «Главная», «Вписать», открытый дизайн или смена вида в навигаторе, независимо от того, включён ли параметр ниже. 100 %: заполняет вид между панелями, компасом и панелью навигации.",
|
||||
"prefs.icons_only": "Только значки",
|
||||
"prefs.imported_file": "Импортированный файл",
|
||||
"prefs.input": "Ввод",
|
||||
@@ -2228,22 +2142,13 @@
|
||||
"prefs.interface_language": "Язык интерфейса",
|
||||
"prefs.interface_note": "Как выглядит SolidCraft и где расположены его части.",
|
||||
"prefs.interval_minutes": "{n} мин",
|
||||
"prefs.invert_curved_roll_arrows": "Инвертировать изогнутые стрелки крена",
|
||||
"prefs.invert_curved_roll_arrows_note": "Две изогнутые стрелки в углу куба поворачивают вид в плоскости экрана. Вкл.: стрелка по часовой стрелке поворачивает вид против часовой, а стрелка против часовой — по часовой. Выкл.: каждая стрелка поворачивает вид в ту сторону, куда она изогнута.",
|
||||
"prefs.invert_navigator_arrows": "Инвертировать стрелки вращения куба видов",
|
||||
"prefs.invert_navigator_arrows_note": "Стрелки вокруг куба вращают камеру в ту сторону, куда указывают, как в Fusion и Inventor: стрелка слева указывает вправо и поворачивает камеру вправо. Выкл.: стрелка поворачивает куб в сторону, где она расположена, поэтому левая стрелка поворачивает камеру влево. Изогнутые стрелки крена не затрагиваются.",
|
||||
"prefs.keep_work_on_tab_switch": "Сохранять открытые диалоги и инструменты при переключении между дизайнами",
|
||||
"prefs.keep_work_on_tab_switch_note": "Каждая вкладка дизайна сохраняет свой открытый диалог или инструмент вместе с тем, что вы в нём выбрали и ввели, а также свою вкладку панели инструментов. Они снова на месте, когда вы возвращаетесь к дизайну. Выкл.: при переключении дизайнов они отменяются, и показывается вкладка «Модель».",
|
||||
"prefs.labels": "Подписи",
|
||||
"prefs.language_system": "Системный",
|
||||
"prefs.layout": "Расположение",
|
||||
"prefs.layout_note": "«Компактная» прикрепляет панели к краям окна. Прозрачность браузера доступна в режиме «Плавающая». Сторону ассистента можно изменить на странице «Ассистент».",
|
||||
"prefs.left": "Слева",
|
||||
"prefs.left_click": "Щелчок левой кнопкой",
|
||||
"prefs.line_drag_draws_one": "Нажатие и перетаскивание рисует одну линию",
|
||||
"prefs.line_drag_draws_one_note": "В инструменте «Линия» нажатие, перетаскивание и отпускание рисуют одну линию от места нажатия до места отпускания, и на этом она заканчивается. Щелчки по-прежнему рисуют цепочку. Выкл.: перетаскивание ставит точку там, где его отпустили, как и щелчок.",
|
||||
"prefs.line_hover_tangent_arc": "Задержаться на последней точке линии, чтобы перейти к касательной дуге",
|
||||
"prefs.line_hover_tangent_arc_note": "В инструменте «Линия» после того, как сегмент нарисован, отведите указатель от последней точки цепочки, вернитесь и удерживайте его на ней неподвижно: следующий щелчок завершит касательную дугу, а тот же жест вернёт к линиям. Выкл.: задержка там ничего не делает.",
|
||||
"prefs.linked_designs": "Связанные дизайны",
|
||||
"prefs.live_input": "Ввод в реальном времени",
|
||||
"prefs.live_preview": "Предпросмотр в реальном времени",
|
||||
@@ -2267,8 +2172,6 @@
|
||||
"prefs.mouse_mapping": "Назначение кнопок мыши",
|
||||
"prefs.navigation": "Навигация",
|
||||
"prefs.navigation_note": "Как мышь, тачпад и 3D-мышь двигают вид.",
|
||||
"prefs.navigator_fit": "Вписывать модель после смены вида в навигаторе",
|
||||
"prefs.navigator_fit_note": "Грань, угол или стрелка куба видов либо ось гизмо также направляет взгляд на середину модели с единственного расстояния, с которого она целиком видна со всех сторон (её габаритная сфера). «Главная» при включённом параметре использует тот же масштаб и центр, поэтому выбранные после неё виды только поворачиваются. Выкл.: вид поворачивается на месте, сохраняя свою цель и масштаб.",
|
||||
"prefs.network_host_remove": "Убрать",
|
||||
"prefs.network_locations": "Разрешить сетевые расположения в дизайнах",
|
||||
"prefs.network_locations_note": "Выкл.: связанные файлы дизайна на другом компьютере (\\\\server\\share) открываются только с перечисленных здесь серверов или после того, как вы разрешите сервер по запросу.",
|
||||
@@ -2283,14 +2186,10 @@
|
||||
"prefs.overall_speed": "Общая скорость",
|
||||
"prefs.parameter_list_rows": "Строк в списке параметров",
|
||||
"prefs.parameter_list_rows_tip": "Стрелка вниз в пустом поле значения открывает список параметров, сначала избранные, не больше этого числа. Меньшее число делает список лёгким в большом дизайне.",
|
||||
"prefs.persistent_ribbon_pressed": "Подсвечивать активные команды на ленте",
|
||||
"prefs.persistent_ribbon_pressed_help": "Подсвечивает команды на ленте, пока их действие включено. Отключите, чтобы сохранить прежний нейтральный вид и справку по командам.",
|
||||
"prefs.perspective_fov": "Угол обзора",
|
||||
"prefs.placement": "Размещение",
|
||||
"prefs.prefer_free_sketch_points": "Предпочитать подвижные точки эскиза, когда точки перекрываются",
|
||||
"prefs.preview_choices": "Предпросмотр вашего выбора",
|
||||
"prefs.preview_tint_new_faces": "Подкрашивать новую поверхность в предпросмотре",
|
||||
"prefs.preview_tint_new_faces_help": "Предпросмотр операции, изменяющей тело, может рисовать добавляемую ею поверхность цветом предпросмотра. Если выключено, тело рисуется как есть.",
|
||||
"prefs.print_face_highlight": "Подсветка грани печати",
|
||||
"prefs.print_face_highlight_tip": "Насколько сильно грань печати тела окрашивается и обводится в виде. 0 % — без подсветки.",
|
||||
"prefs.profile_active": "Активный профиль",
|
||||
@@ -2319,8 +2218,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Использовать прежний бюджет геометрии предпросмотра рендера",
|
||||
"prefs.render_previous_geometry_budget_help": "Вернуть прежний фиксированный предел геометрии (512 МиБ на 64-разрядном настольном компьютере, 128 МиБ на остальных устройствах) вместо бюджета, зависящего от устройства.",
|
||||
"prefs.reports_saved": "Сохранено: {n}",
|
||||
"prefs.ribbon_click_ends_tool": "Щелчок по кнопке работающего инструмента завершает его",
|
||||
"prefs.ribbon_click_ends_tool_note": "Щелчок по подсвеченной кнопке используемого инструмента эскиза на ленте завершает инструмент, и щелчки в виде снова выделяют объекты. Выкл.: щелчок снова запускает инструмент.",
|
||||
"prefs.ribbon_reveal": "Показывать результаты поиска на ленте",
|
||||
"prefs.ribbon_reveal_note": "Наведение на результат в «Поиске команд» показывает, где команда находится на ленте: её вкладку, кнопку или строку в раскрывающемся списке панели. Команда, запущенная из поиска, мигает там, а выполняемая команда из раскрывающегося списка отмечает свою панель.",
|
||||
"prefs.right_click": "Правый щелчок",
|
||||
@@ -2348,17 +2245,11 @@
|
||||
"prefs.sketch_exit_view.previous": "Вернуться к прежнему виду",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Вернуться, если вид не повёрнут",
|
||||
"prefs.sketch_exit_view_note": "Куда переходит вид после «Завершить эскиз», «Отмена» или двойного Esc.",
|
||||
"prefs.sketch_face_activates_part": "Эскиз на грани детали делает эту деталь активной",
|
||||
"prefs.sketch_face_activates_part_note": "Эскиз, начатый на грани тела другого компонента, сначала активирует этот компонент, поэтому эскиз принадлежит ему и в браузере остаётся с этой деталью. После этого деталь остаётся активной. Выкл.: эскиз принадлежит активному компоненту.",
|
||||
"prefs.sketch_open_look_at": "Поворачивать камеру к эскизу при его открытии",
|
||||
"prefs.sketch_open_look_at_note": "Выкл.: при создании или редактировании эскиза вид не меняется. «Взгляд на» поворачивает вид к эскизу, когда это нужно.",
|
||||
"prefs.sketch_recent_snap": "Автопривязка к недавним центрам и серединам",
|
||||
"prefs.sketch_recent_snap_note": "При рисовании курсор привязывается к месту пересечения направляющих двух последних центров окружностей или середин прямых отрезков. Выкл.: эти направляющие остаются только визуальными, а курсор не смещается.",
|
||||
"prefs.sketch_selection": "Эскиз и выделение",
|
||||
"prefs.sketch_selection_heading": "Эскиз и выделение",
|
||||
"prefs.sketch_selection_note": "Как работает привязка в эскизах и как щелчки выделяют объекты.",
|
||||
"prefs.sketch_state_icons": "Значки эскизов в цвете их состояния",
|
||||
"prefs.sketch_state_icons_note": "В истории и браузере значок эскиза принимает цвет его состояния (недоопределён, полностью определён или с конфликтом), а подсказка называет это состояние. Выкл.: у всех эскизов одинаковый значок.",
|
||||
"prefs.sketch_tab_always": "Всегда показывать вкладку «Эскиз»",
|
||||
"prefs.sketch_tab_always_note": "Вкладка «Эскиз» остаётся на ленте сразу после «Модель», пока не открыт ни один эскиз. Её инструменты рисования создают эскиз на выбранной плоскости или грани либо на плоскости, которую вы выберете следом, и сразу включают нужный инструмент.",
|
||||
"prefs.sketch_tracking_guides": "Направляющие выравнивания по центру и середине",
|
||||
@@ -2370,35 +2261,12 @@
|
||||
"prefs.source": "Источник",
|
||||
"prefs.speed": "Скорость",
|
||||
"prefs.stand_up_note": "После открытия файла STEP или IGES с осью Z вверх предлагать повернуть его на четверть оборота вокруг X.",
|
||||
"prefs.stand_up_unknown": "Для файлов из неизвестных программ",
|
||||
"prefs.stand_up_unknown.ask": "Спрашивать в диалоговом окне",
|
||||
"prefs.stand_up_unknown.note": "Показывать уведомление",
|
||||
"prefs.stand_up_unknown.off": "Не предлагать",
|
||||
"prefs.stand_up_unknown_note": "Как делается предложение, когда в заголовке файла не указана программа, о которой известно, что она сохраняет с осью Y вверх. Уведомление показывается, только если файл, судя по всему, лежит на спине; «Спрашивать в диалоговом окне» спрашивает о каждом таком файле, как раньше.",
|
||||
"prefs.status_bar": "Строка состояния",
|
||||
"prefs.status_bar_note": "Тонкая полоса вдоль нижнего края окна показывает, что изменяется, состояние открытого эскиза его цветом и единицы дизайна; щелчок по единицам изменяет их. Состояние эскиза при этом больше не показывается в углу вида.",
|
||||
"prefs.status_done": "Готово",
|
||||
"prefs.status_error": "Ошибка",
|
||||
"prefs.status_selected": "Выбрано",
|
||||
"prefs.status_warning": "Предупреждение",
|
||||
"prefs.structure.appearance": "Внешний вид",
|
||||
"prefs.structure.appearance_note": "Цвета, текст и специальные возможности.",
|
||||
"prefs.structure.in_profile": "В профиле",
|
||||
"prefs.structure.layout": "Расположение",
|
||||
"prefs.structure.layout_note": "Где находятся части окна.",
|
||||
"prefs.structure.look": "Оформление",
|
||||
"prefs.structure.measure_pointer": "Измерение и указатель",
|
||||
"prefs.structure.mouse3d": "3D-мышь",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse и SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Мышь и тачпад. У 3D-мыши есть своя страница.",
|
||||
"prefs.structure.profile": "Профиль",
|
||||
"prefs.structure.profile_edited": "Изменено после сохранения",
|
||||
"prefs.structure.profile_hover": "Сохранено в профилях настроек",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Эскиз",
|
||||
"prefs.structure.tools": "Инструменты",
|
||||
"prefs.structure.tools_note": "Как ведут себя инструменты моделирования.",
|
||||
"prefs.structure.work": "Работа",
|
||||
"prefs.supersampling_brief": "Рисует вид в большем размере и уменьшает его: очень чётко, но тяжелее.",
|
||||
"prefs.tab_accent_note": "Акцентный цвет следует за активной вкладкой",
|
||||
"prefs.theme_file": "файл темы",
|
||||
@@ -2466,10 +2334,6 @@
|
||||
"properties.title": "Свойства: {name}",
|
||||
"recovery.days_ago": "{count} дн. назад",
|
||||
"recovery.detail": "{file} · операций: {features} · автосохранение {when}",
|
||||
"recovery.discard_all": "Отбросить все",
|
||||
"recovery.discard_all_detail": "Это действие нельзя отменить.",
|
||||
"recovery.discard_all_title": "Отбросить автосохранения ({count})?",
|
||||
"recovery.discard_all_title_one": "Отбросить 1 автосохранение?",
|
||||
"recovery.hours_ago": "{count} ч назад",
|
||||
"recovery.just_now": "только что",
|
||||
"recovery.min_ago": "{count} мин назад",
|
||||
@@ -2585,10 +2449,6 @@
|
||||
"render.base_color": "Базовый цвет · sRGB",
|
||||
"render.base_metallic": "Металличность",
|
||||
"render.base_opaque_only": "Этот редактор сохраняет семантику непрозрачного тела. Для оптического пропускания света используйте отдельные элементы управления стеклом.",
|
||||
"render.batch_all_shots": "Все кадры ({count})",
|
||||
"render.batch_empty": "Сохраните кадр, прежде чем рендерить все кадры.",
|
||||
"render.batch_limit": "Рендер всех кадров ограничен 32 кадрами.",
|
||||
"render.batch_status": "Выполняется: {running} · ожидает: {waiting}",
|
||||
"render.bloom_enable": "Показывать свечение",
|
||||
"render.bloom_help": "Творческое свечение только на выводе от положительных линейных ярких участков, размытое тремя нормированными блочными проходами. Радиус задан в пикселях вывода. Добавляется в линейном свете дисплея до sRGB; это не эффект объектива, не объёмный эффект и не улучшение сходимости. Необработанный EXR не меняется.",
|
||||
"render.bloom_opaque": "Свечение требует непрозрачного вывода. Прозрачный PNG отклоняется, а не молча сводится к непрозрачному изображению.",
|
||||
@@ -2696,13 +2556,6 @@
|
||||
"render.choose_look": "Сначала выберите внешний вид в разделе «Внешние виды»",
|
||||
"render.chromatic_offset": "Хроматическое смещение краёв",
|
||||
"render.clear_stage": "Удалить сохранённую площадку",
|
||||
"render.compare_divider": "Разделитель сравнения",
|
||||
"render.compare_live": "Интерактивный",
|
||||
"render.compare_live_preview": "Интерактивный просмотр",
|
||||
"render.compare_render": "Рендер {number}",
|
||||
"render.compare_side": "Рендер {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} с · {renderer} · зафиксировано в редакции {revision}",
|
||||
"render.compare_swap": "Поменять местами",
|
||||
"render.copy_request": "Копировать JSON",
|
||||
"render.cpu_aa_help": "Пространственные сэмплы: чем их больше, тем лучше края и тем дольше рендер.",
|
||||
"render.cpu_area_add": "Добавить прямоугольный источник света CPU",
|
||||
@@ -3421,10 +3274,6 @@
|
||||
"render.result_retained": "Показано последнее готовое изображение; новый рендер его пока не заменил.",
|
||||
"render.result_sequence": "Контрольная точка",
|
||||
"render.result_title": "Результат рендера",
|
||||
"render.results_choose": "Сохранённые результаты",
|
||||
"render.results_label": "Рендер {number} · {shot} · {seconds} с",
|
||||
"render.results_stale_label": "{result} [устарел]",
|
||||
"render.results_unnamed": "Изображение",
|
||||
"render.return_design": "Вернуться к проектированию",
|
||||
"render.review_stale": "Этот обзор устарел. Повторите определение и проверку перед применением.",
|
||||
"render.ribbon_aging": "Старение",
|
||||
@@ -3868,7 +3717,6 @@
|
||||
"sketch_text.formula": "Начните с =, чтобы составить слова из параметров: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Курсив",
|
||||
"sketch_text.loading_fonts": "Поиск установленных шрифтов…",
|
||||
"sketch_text.no_bold": "У встроенного шрифта нет полужирного начертания: выберите установленный шрифт",
|
||||
"sketch_text.on_path": "Текст следует по траектории: кривая задаёт его положение",
|
||||
"sketch_text.path_clear": "Снять текст с кривой",
|
||||
"sketch_text.path_hint": "Кривая эскиза, вдоль которой идёт текст: щёлкните здесь, затем по кривой",
|
||||
@@ -3900,7 +3748,10 @@
|
||||
"the two origins are on the same component": "обе точки сопряжения находятся на одном компоненте",
|
||||
"thread.automatic_size": "Автоматический размер",
|
||||
"thread.designation": "Обозначение",
|
||||
"thread.direction": "Направление резьбы",
|
||||
"thread.iso_metric": "Метрическая ISO",
|
||||
"thread.left_hand": "Левая",
|
||||
"thread.right_hand": "Правая",
|
||||
"thread.select_size": "Выберите размер",
|
||||
"timeline.delete_after_marker_one": "Удалить 1 операцию после маркера истории",
|
||||
"timeline.delete_after_marker_other": "Удалить операции после маркера истории: {count}",
|
||||
@@ -3917,10 +3768,8 @@
|
||||
"timeline.move_to_group": "Переместить операции в папку",
|
||||
"timeline.rename_group": "Переименовать папку операций",
|
||||
"timeline.reorder_many": "Изменить порядок операций",
|
||||
"timeline.suppress_features": "Подавить операции",
|
||||
"timeline.suppress_folders_tip": "Подавить или снять подавление со всех операций в папках и вложенных папках",
|
||||
"timeline.ungroup": "Убрать папки операций",
|
||||
"timeline.unsuppress_features": "Снять подавление с операций",
|
||||
"to the face": "до грани",
|
||||
"to the next face": "до следующей грани",
|
||||
"toolbar.customize_note": "Вкладка {tab}. Отметьте команду, чтобы добавить её кнопку на панель инструментов. Можно также перетащить строку из выпадающего меню панели на панель инструментов, перетащить кнопку за пределы панели для удаления или использовать значок закрепления в строке выпадающего меню.",
|
||||
@@ -4074,7 +3923,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Выполните это в терминале, затем снова нажмите «Подключить»:",
|
||||
"ui.agent_chat_auth_title": "Вход в агент",
|
||||
"ui.agent_chat_cancel": "Отмена",
|
||||
"ui.agent_chat_cancel_timeout": "Агент не ответил на «Остановить» и был отключён. Подключитесь снова, чтобы продолжить.",
|
||||
"ui.agent_chat_cannot_start": "Установлен, но не запускается: {error}",
|
||||
"ui.agent_chat_changes": "Изменений: {n}, один шаг отмены",
|
||||
"ui.agent_chat_changes_n": "Изменений: {n}",
|
||||
@@ -4084,13 +3932,11 @@
|
||||
"ui.agent_chat_command": "Команда агента",
|
||||
"ui.agent_chat_connect": "Подключить",
|
||||
"ui.agent_chat_copy": "Копировать",
|
||||
"ui.agent_chat_copy_message": "Копировать сообщение",
|
||||
"ui.agent_chat_ctx_bodies": "Тела",
|
||||
"ui.agent_chat_ctx_elements": "Элементы",
|
||||
"ui.agent_chat_ctx_features": "Операции",
|
||||
"ui.agent_chat_ctx_more": "+ещё {n}",
|
||||
"ui.agent_chat_ctx_other": "Другое",
|
||||
"ui.agent_chat_custom_heading": "Своя модель",
|
||||
"ui.agent_chat_custom_hint": "Любая программа, поддерживающая Agent Client Protocol через stdin и stdout. Оболочка для запуска не используется.",
|
||||
"ui.agent_chat_denied": "Отклонено",
|
||||
"ui.agent_chat_deny": "Отклонить",
|
||||
@@ -4134,16 +3980,8 @@
|
||||
"ui.agent_chat_mode_all": "Всё",
|
||||
"ui.agent_chat_mode_ask": "Спросить",
|
||||
"ui.agent_chat_mode_edits": "Правки",
|
||||
"ui.agent_chat_model_custom": "Использовать свою модель: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} не может использовать инструменты SolidCraft, поэтому может только вести чат. Выберите модель с поддержкой инструментов.",
|
||||
"ui.agent_chat_model_rejected": "Агент не принял {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Поиск моделей…",
|
||||
"ui.agent_chat_model_tip": "Модель, которую использует агент. Ваш выбор запоминается для этого агента.",
|
||||
"ui.agent_chat_models_failed": "Не удалось получить список моделей: {error}",
|
||||
"ui.agent_chat_models_heading": "Доступные модели",
|
||||
"ui.agent_chat_models_listing": "Получение списка моделей…",
|
||||
"ui.agent_chat_models_none": "Конечная точка не вернула ни одной модели",
|
||||
"ui.agent_chat_models_not_a_list": "В ответе нет списка моделей",
|
||||
"ui.agent_chat_new": "Новый чат",
|
||||
"ui.agent_chat_new_confirm": "Начать новый чат? Текущий будет очищен.",
|
||||
"ui.agent_chat_next_picture": "Следующее изображение",
|
||||
@@ -4279,9 +4117,6 @@
|
||||
"ui.ai_permissions": "Разрешения",
|
||||
"ui.ai_preset": "Пресет",
|
||||
"ui.ai_protocol": "Протокол",
|
||||
"ui.ai_reasoning_effort": "Уровень рассуждений",
|
||||
"ui.ai_reasoning_effort_field_hint": "пусто = значение поставщика по умолчанию",
|
||||
"ui.ai_reasoning_effort_hint": "Необязательно. Отправляется на конечную точку как `reasoning_effort`; допустимые значения зависят от поставщика (например, `low`, `high` или `max`). Заданное здесь значение SolidCraft никогда не заменяет. Оставьте поле пустым, чтобы ничего не отправлять и сохранить значение поставщика по умолчанию.",
|
||||
"ui.ai_remove": "Удалить",
|
||||
"ui.ai_request_timed_out": "Модель отвечала дольше {seconds} с. Тайм-аут запроса для этой конечной точки можно увеличить в Настройки › Ассистент.",
|
||||
"ui.ai_request_timeout": "Тайм-аут запроса",
|
||||
@@ -4366,8 +4201,6 @@
|
||||
"ui.cancel": "Отмена",
|
||||
"ui.canvases": "Подложки",
|
||||
"ui.center": "Центр",
|
||||
"ui.center_arc_follows_cursor": "Дуга из центра следует направлению курсора",
|
||||
"ui.center_arc_follows_cursor_tip": "Дуга из центра идёт по часовой стрелке или против неё — в ту сторону, в которую курсор обходит её центр. Выкл.: всегда против часовой стрелки от начальной точки.",
|
||||
"ui.centerline": "Осевая линия",
|
||||
"ui.chain": "Цепочка",
|
||||
"ui.chamfer": "Фаска",
|
||||
@@ -4417,21 +4250,14 @@
|
||||
"ui.construction.contact_hint": "Касательная: выберите окружность/дугу или открытый сплайн/конику, затем точку касания (для сплайна/коники — конец)",
|
||||
"ui.construction.external_hint": "Касательная: выберите окружность или дугу, внешнюю точку, затем нужное решение",
|
||||
"ui.construction.free_hint": "Вспомогательная прямая: укажите две точки; правая кнопка — начать заново",
|
||||
"ui.construction.normal_needs_length": "Бесконечная прямая всегда вспомогательная: введите длину, чтобы нарисовать обычную линию",
|
||||
"ui.construction.point_hint": "Вспомогательная прямая: укажите точку прохождения",
|
||||
"ui.construction.reference_hint": "Выберите прямую, затем точку; правая кнопка — сменить исходную прямую",
|
||||
"ui.construction.ribbon_label": "Всп. линии",
|
||||
"ui.construction.side_hint": "Вспомогательная прямая: укажите сторону, в которую идёт прямая; правая кнопка — начать заново",
|
||||
"ui.context_menu": "Контекстное меню",
|
||||
"ui.continuity_crease": "Излом",
|
||||
"ui.continuity_curvature": "Кривизна",
|
||||
"ui.continuity_curvature_change": "Изменение кривизны",
|
||||
"ui.continuity_g0": "G0, излом",
|
||||
"ui.continuity_g1": "G1, касательная",
|
||||
"ui.continuity_g2": "G2, кривизна",
|
||||
"ui.continuity_gap": "Зазор",
|
||||
"ui.continuity_position": "Положение",
|
||||
"ui.continuity_tangent": "Касание",
|
||||
"ui.copy": "Копировать",
|
||||
"ui.corner": "Угол",
|
||||
"ui.corners": "Углы",
|
||||
@@ -4454,7 +4280,6 @@
|
||||
"ui.dark": "Тёмная",
|
||||
"ui.default_modelling_orientation": "Ориентация моделирования по умолчанию",
|
||||
"ui.delete": "Удалить",
|
||||
"ui.delete_select_first": "Сначала выберите, что удалить: операции, тела, компоненты или геометрию эскиза",
|
||||
"ui.depth": "Глубина",
|
||||
"ui.design": "Дизайн",
|
||||
"ui.design_properties.author": "Автор",
|
||||
@@ -4547,7 +4372,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Деталь сохранена в другой файл; сборка по-прежнему связана с {name}",
|
||||
"ui.edit_in_place_wait": "Дождитесь завершения того, что выполняется в дизайне",
|
||||
"ui.edit_section_analysis": "Изменить анализ сечения",
|
||||
"ui.edit_sketch_empty": "Нет эскизов для редактирования",
|
||||
"ui.ellipse": "Эллипс",
|
||||
"ui.emboss_wrap_note": "Профили из ортогональных линий, касательные к одному поддерживаемому цилиндру, оборачиваются автоматически. Выберите стенку, чтобы задать цель.",
|
||||
"ui.end_radius": "Конечный радиус",
|
||||
@@ -4558,9 +4382,7 @@
|
||||
"ui.equation_explicit": "Явная",
|
||||
"ui.equation_form": "Форма",
|
||||
"ui.equation_note": "Переменная — обычное число: sin(t) принимает её в радианах. Результат без единицы измерения задаётся в единицах дизайна.",
|
||||
"ui.equation_note_range": "Переменная — длина, как и её диапазон: сочетайте её с параметрами длины, а для sin() делите её на длину. Результат без единицы измерения задаётся в единицах дизайна.",
|
||||
"ui.equation_parametric": "Параметрическая",
|
||||
"ui.equation_variable_unit": "Переменная имеет единицу измерения диапазона",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4692,7 +4514,6 @@
|
||||
"ui.hideOrigin": "Скрыть начало координат",
|
||||
"ui.hidePlanes": "Скрыть плоскости",
|
||||
"ui.hideProfile": "Скрыть профиль",
|
||||
"ui.hide_component_history": "Скрыть его историю",
|
||||
"ui.hide_origin_by_default": "Скрывать начало координат по умолчанию",
|
||||
"ui.hide_origin_note": "Новые дизайны создаются со скрытой папкой «Начало координат». Как только вы покажете или скроете её, дизайн запоминает собственную настройку.",
|
||||
"ui.history_back": "На один шаг назад",
|
||||
@@ -4700,7 +4521,6 @@
|
||||
"ui.history_edge_hint": "двойной щелчок по границе",
|
||||
"ui.history_first": "Перейти в начало",
|
||||
"ui.history_forward": "На один шаг вперёд",
|
||||
"ui.history_hide_hidden": "Скрыть скрытые компоненты",
|
||||
"ui.history_hide_names": "Скрыть имена",
|
||||
"ui.history_last": "Перейти в конец",
|
||||
"ui.history_marker_tip": "Маркер истории: перетащите, чтобы откатить модель; новые операции добавляются сюда",
|
||||
@@ -4710,12 +4530,10 @@
|
||||
"ui.history_play_button_show": "Показать кнопку воспроизведения",
|
||||
"ui.history_play_finish_action": "Завершите текущее действие перед воспроизведением истории",
|
||||
"ui.history_play_roll_back": "Переместите маркер истории назад перед воспроизведением",
|
||||
"ui.history_show_hidden": "Показать скрытые компоненты",
|
||||
"ui.history_show_names": "Показать имена",
|
||||
"ui.history_sketch_listed_under": "Показан под операцией {feature}",
|
||||
"ui.history_title": "История",
|
||||
"ui.history_toggle_names": "Показать или скрыть имена операций",
|
||||
"ui.history_waits_for_editor": "«Отменить», «Повторить» и «История» ждут, пока откроется редактор операции",
|
||||
"ui.hole": "Отверстие",
|
||||
"ui.hole_tap_type": "Тип резьбы отверстия",
|
||||
"ui.hole_type": "Тип отверстия",
|
||||
@@ -4731,7 +4549,6 @@
|
||||
"ui.insert_design.saved_file": "В {name} есть несохранённые изменения, поэтому вставлен его сохранённый файл. Сохраните его, затем выполните «Обновить связи», чтобы подтянуть изменения.",
|
||||
"ui.insert_design.unsaved": "Несохранённые изменения",
|
||||
"ui.inspect": "Инспекция",
|
||||
"ui.instances": "Экземпляры",
|
||||
"ui.intersect": "Пересечение",
|
||||
"ui.isolate": "Изолировать",
|
||||
"ui.join": "Объединить",
|
||||
@@ -4740,14 +4557,12 @@
|
||||
"ui.joints": "Сопряжения",
|
||||
"ui.keyboard_shortcuts": "Сочетания клавиш",
|
||||
"ui.language": "Язык",
|
||||
"ui.lasso_select": "Лассо (перетащите произвольный контур: выделяет всё, что целиком внутри)",
|
||||
"ui.layout_compact": "Компактная",
|
||||
"ui.layout_floating": "Плавающая",
|
||||
"ui.length": "Длина",
|
||||
"ui.length_decimals": "Знаков после запятой (длины)",
|
||||
"ui.light": "Светлая",
|
||||
"ui.line": "Линия",
|
||||
"ui.line_arc_hint": "Касательная дуга: щёлкните в конце дуги. Снова задержитесь на последней точке, чтобы вернуться к линиям; щёлкните правой кнопкой или нажмите Esc, чтобы завершить",
|
||||
"ui.link_copies": "Связать одинаковые копии",
|
||||
"ui.link_copies_keep": "Оставить",
|
||||
"ui.link_copies_link": "Связать",
|
||||
@@ -4836,7 +4651,6 @@
|
||||
"ui.part_size_shared": "Перестраивает деталь, заменяя все добавленные операции. Обновляются все вхождения этого компонента.",
|
||||
"ui.paste": "Вставить",
|
||||
"ui.path": "Траектория",
|
||||
"ui.pattern_object_type_tip": "Тела: твёрдые формы, выбираемые в виде или в браузере; каждое копируется целиком.\nОперации: шаги Истории, например выдавливание или отверстие, выбираемые в Истории или на созданной ими грани; шаг повторяется.\nЭскиз — ни то, ни другое: повторите его кривые собственным инструментом «Массив» или «Зеркало» в эскизе либо сначала выдавите его.",
|
||||
"ui.pattern_on_path": "Массив по траектории",
|
||||
"ui.perforate_margin_default": "от диаметра",
|
||||
"ui.perforate_pitch": "Шаг",
|
||||
@@ -4873,9 +4687,9 @@
|
||||
"ui.polygon": "Многоугольник",
|
||||
"ui.preferences": "Настройки",
|
||||
"ui.press_a_key": "нажмите клавишу…",
|
||||
"ui.print_face_body_not_sent": "Тело этой грани не отправляется: сначала добавьте его в Тела",
|
||||
"ui.print_face_cleared": "{body}: грань печати сброшена",
|
||||
"ui.print_face_input": "Грань печати",
|
||||
"ui.print_face_one_body": "Грань печати относится к одному телу: отправьте это тело отдельно, чтобы изменить её",
|
||||
"ui.print_face_pick": "Выберите плоскую грань твёрдого тела, чтобы сделать её гранью печати",
|
||||
"ui.print_face_set": "{body}: грань печати задана; «Отправить в слайсер» кладёт тело на неё",
|
||||
"ui.profile": "Профиль",
|
||||
@@ -4985,7 +4799,6 @@
|
||||
"ui.showDimension": "Показать размер",
|
||||
"ui.showOrigin": "Показать начало координат",
|
||||
"ui.showPlanes": "Показать плоскости",
|
||||
"ui.show_component_history": "Показать его историю",
|
||||
"ui.show_constraints": "Ограничения",
|
||||
"ui.show_construction_geometries": "Вспомогательная геометрия",
|
||||
"ui.show_dimensions": "Размеры",
|
||||
@@ -5102,15 +4915,12 @@
|
||||
"ui.view_angles": "Углы вида",
|
||||
"ui.view_angles_convention": "Градусы вокруг вертикальной оси. Рыскание 0° — вид спереди, 90° — слева, −90° — справа, 180° — сзади; тангаж 90° — вид сверху; положительный крен поворачивает модель по часовой стрелке.",
|
||||
"ui.view_angles_help": "Показывает тангаж, рыскание и крен вида в градусах, а также его проекцию под гизмо ориентации. Щёлкните по показанию, чтобы ввести точные углы.",
|
||||
"ui.view_angles_lock": "Заблокировать {axis}",
|
||||
"ui.view_angles_ortho": "Орто",
|
||||
"ui.view_angles_persp": "Персп.",
|
||||
"ui.view_angles_pitch": "Тангаж",
|
||||
"ui.view_angles_readout": "Тангаж {pitch} · Рыскание {yaw} · Крен {roll}",
|
||||
"ui.view_angles_roll": "Крен",
|
||||
"ui.view_angles_unlock": "Разблокировать {axis}",
|
||||
"ui.view_angles_yaw": "Рыскание",
|
||||
"ui.view_angles_zero": "Установить {axis} в 0°",
|
||||
"ui.view_centre": "Центр вида",
|
||||
"ui.viewport_status_clear": "Выключить {name}",
|
||||
"ui.viewport_status_clear_hint": "Выключить {name} · Esc",
|
||||
@@ -5168,7 +4978,7 @@
|
||||
"update.check_unavailable": "Проверка обновлений недоступна для этой установки.",
|
||||
"update.checking": "Проверка…",
|
||||
"update.copy": "Копировать",
|
||||
"update.dmg_opened": "Образ диска открыт и проверен: завершите SolidCraft, перетащите новый SolidCraft в «Программы», заменив старую копию, затем снова откройте SolidCraft.",
|
||||
"update.dmg_opened": "Образ диска открыт и проверен: перетащите SolidCraft в «Программы», заменив старую копию, затем перезапустите SolidCraft.",
|
||||
"update.download": "Скачать",
|
||||
"update.download_open": "Скачать и открыть",
|
||||
"update.downloading": "Загрузка и проверка… {done} из {total} МБ",
|
||||
@@ -5179,13 +4989,11 @@
|
||||
"update.installed": "SolidCraft {version} установлен. Перезапустите, чтобы использовать его.",
|
||||
"update.installer_started": "Установщик запустится после закрытия SolidCraft.",
|
||||
"update.later": "Напомнить позже",
|
||||
"update.managed": "Доступно обновление: обновите SolidCraft в {manager}",
|
||||
"update.no_notes": "У этого выпуска нет примечаний.",
|
||||
"update.package_hint": "Эта копия установлена из {kind}. Скачайте новый пакет, затем установите его командой:",
|
||||
"update.prefs_dev": "Это сборка для разработки ({version}): она не проверяет обновления.",
|
||||
"update.prefs_flatpak": "Эту копию ({version}) обновляет Flatpak: выполните {command} или воспользуйтесь центром приложений. SolidCraft не проверяет обновления.",
|
||||
"update.prefs_label": "Обновления",
|
||||
"update.prefs_managed": "Это SolidCraft {version}, которым управляет {manager}. Проверка запрашивает у GitHub последний релиз и больше ничего не отправляет; обновляйте SolidCraft в {manager}.",
|
||||
"update.prefs_note": "Это SolidCraft {version} ({kind}). При проверке у GitHub запрашивается последний выпуск, больше ничего не отправляется.",
|
||||
"update.prefs_web": "Перезагрузите страницу, чтобы получить последнюю версию веб-приложения. Если сеть недоступна или обновление не успевает загрузиться, открывается сохранённая версия; незавершённая загрузка продолжится до следующей перезагрузки.",
|
||||
"update.refresh_checking": "Проверка наличия новейшего выпуска…",
|
||||
@@ -5212,7 +5020,6 @@
|
||||
"web.open_link": "Открыть связанный дизайн?",
|
||||
"web.open_link_confirm": "Есть несохранённые изменения. Открыть связанный дизайн в новой вкладке?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ выбрать · Enter / Tab дополнить · Esc закрыть",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ выбрать · Enter — применить это значение",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ выбрать · Enter применяет введённое · Esc закрыть",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter продолжит на GitHub."
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@
|
||||
"Rectangular": "Правоугаони",
|
||||
"Rectangular Tube": "Правоугаона цев",
|
||||
"Reference face": "Референтно лице",
|
||||
"Reference plane": "Референтна раван",
|
||||
"Relief Depth": "Дубина растерећења",
|
||||
"Relief Width": "Ширина растерећења",
|
||||
"Remove Tools": "Уклони алате",
|
||||
@@ -557,7 +556,6 @@
|
||||
"Section": "Пресек",
|
||||
"Section (optional)": "Пресек (необавезно)",
|
||||
"Section position": "Положај пресека",
|
||||
"Sections": "Пресеци",
|
||||
"Sections (one sketch each)": "Пресеци (по једна скица)",
|
||||
"Select Other": "Изабери друго",
|
||||
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Изабери друго: држите лево дугме мирно на моделу (или десни клик › Изабери друго…) да прикажете све испод показивача; поново кликните на исто место да изаберете следећи елемент. Двапут кликните средњим дугметом за Почетни приказ (Подешавања › Навигација).",
|
||||
@@ -795,13 +793,6 @@
|
||||
"browser.sketch_attachment_lost": "{name} (причвршћење изгубљено)",
|
||||
"browser.sketch_editing": "{name} (у измени)",
|
||||
"browser.sketch_name": "Скица{number}",
|
||||
"browser.sketches_to_parts_already_in_part": "већ у свом делу",
|
||||
"browser.sketches_to_parts_design_body": "на телу самог дизајна",
|
||||
"browser.sketches_to_parts_moved": "Скице премештене у део на којем се налазе: {moved}",
|
||||
"browser.sketches_to_parts_no_exact_attachment": "на лицу без тачног причвршћења",
|
||||
"browser.sketches_to_parts_not_on_face": "не на лицу дела",
|
||||
"browser.sketches_to_parts_part_missing": "њихов део више не постоји",
|
||||
"browser.sketches_to_parts_result": "Скице премештене у део на којем се налазе: {moved}; остале на месту: {stayed} ({why})",
|
||||
"browser.units": "Јединице: {units}",
|
||||
"cam.flat": "Равно лице",
|
||||
"cam.follower": "Пратилац",
|
||||
@@ -861,7 +852,6 @@
|
||||
"cmd.component_extract": "Издвоји у датотеку",
|
||||
"cmd.component_finish_edit": "Заврши измену",
|
||||
"cmd.component_from_bodies": "Направи компоненте из тела",
|
||||
"cmd.component_hide_history": "Сакриј временску траку компоненте",
|
||||
"cmd.component_insert_design": "Уметни дизајн",
|
||||
"cmd.component_links": "Списак веза",
|
||||
"cmd.component_list": "Списак компоненти",
|
||||
@@ -870,7 +860,6 @@
|
||||
"cmd.component_move_bodies": "Премести тела у компоненту",
|
||||
"cmd.component_move_features": "Премести операције у компоненту",
|
||||
"cmd.component_move_sketches": "Премести скице у компоненту",
|
||||
"cmd.component_move_sketches_to_parts": "Премести скице у њихове делове",
|
||||
"cmd.component_paste_from_design": "Налепи из другог дизајна",
|
||||
"cmd.component_paste_new": "Налепи као ново",
|
||||
"cmd.component_properties": "Физичка својства компоненте",
|
||||
@@ -878,7 +867,6 @@
|
||||
"cmd.component_rename": "Преименуј компоненту",
|
||||
"cmd.component_replace_with_link": "Замени везом",
|
||||
"cmd.component_revert_position": "Врати положај",
|
||||
"cmd.component_show_history": "Прикажи временску траку компоненте",
|
||||
"cmd.component_unlock": "Откључај садржај",
|
||||
"cmd.component_update_links": "Ажурирај везе",
|
||||
"cmd.config_activate": "Активирај конфигурацију",
|
||||
@@ -889,7 +877,6 @@
|
||||
"cmd.config_rule": "Правило конфигурације",
|
||||
"cmd.config_rules": "Правила конфигурације",
|
||||
"cmd.config_table": "Прикажи табелу конфигурација",
|
||||
"cmd.construct.plane.axis_point": "Раван кроз осу и тачку",
|
||||
"cmd.construct_axis_edge": "Оса кроз ивицу",
|
||||
"cmd.construct_axis_normal_to_face": "Оса окомита на лице",
|
||||
"cmd.construct_axis_through_cylinder": "Оса кроз цилиндар/конус/торус",
|
||||
@@ -938,11 +925,6 @@
|
||||
"cmd.explode_show": "Прикажи растављени приказ",
|
||||
"cmd.expr_evaluate": "Израчунај израз",
|
||||
"cmd.face_delete": "Избриши лице",
|
||||
"cmd.file.export_3mf": "Извези 3MF",
|
||||
"cmd.file.export_obj": "Извези OBJ",
|
||||
"cmd.file.export_step": "Извези STEP",
|
||||
"cmd.file.export_stl": "Извези STL",
|
||||
"cmd.file.export_urdf": "Извези URDF",
|
||||
"cmd.file_export": "Извоз",
|
||||
"cmd.file_insert_mesh": "Уметни мрежу",
|
||||
"cmd.file_insert_step": "Уметни STEP",
|
||||
@@ -960,7 +942,6 @@
|
||||
"cmd.inspect_colored_components": "Омогући боје компоненти",
|
||||
"cmd.inspect_colored_components_disable": "Онемогући боје компоненти",
|
||||
"cmd.inspect_compare": "Упореди тела",
|
||||
"cmd.inspect_compare_picture": "Упореди слику",
|
||||
"cmd.inspect_continuity": "Анализа континуитета",
|
||||
"cmd.inspect_curvature_comb": "Анализа чешља закривљености",
|
||||
"cmd.inspect_curvature_map": "Анализа мапе закривљености",
|
||||
@@ -1051,9 +1032,6 @@
|
||||
"cmd.pointcloud_edit": "Измени облак тачака",
|
||||
"cmd.pointcloud_insert": "Уметни облак тачака",
|
||||
"cmd.pointcloud_list": "Облаци тачака",
|
||||
"cmd.render.compare.divider": "Помери разделник поређења рендеровања",
|
||||
"cmd.render.result.discard": "Одбаци резултат рендеровања",
|
||||
"cmd.render.result.select": "Изабери резултат рендеровања",
|
||||
"cmd.render_aging_describe": "Слојевито старење површине",
|
||||
"cmd.render_backends": "Позадински системи рендеровања",
|
||||
"cmd.render_batch": "Рендеруј све кадрове",
|
||||
@@ -1217,7 +1195,6 @@
|
||||
"cmd.sketch_spline_control_point_5": "Сплајн контролних тачака (степен 5)",
|
||||
"cmd.sketch_spline_fit_point": "Сплајн кроз тачке",
|
||||
"cmd.sketch_spline_insert_point": "Додај тачку сплајна",
|
||||
"cmd.sketch_spline_remove_point": "Уклони тачку сплајна",
|
||||
"cmd.sketch_spline_reverse": "Обрни смер сплајна",
|
||||
"cmd.sketch_spun_profile": "Ротирани профил",
|
||||
"cmd.sketch_toggle_diameter": "Пребаци полупречник / пречник",
|
||||
@@ -1268,7 +1245,6 @@
|
||||
"cmd.timeline_rollback": "Помери ознаку враћања",
|
||||
"cmd.timeline_stop": "Заустави временску траку",
|
||||
"cmd.timeline_suppress": "Потисни операцију",
|
||||
"cmd.ui.assistant": "Прикажи или сакриј Асистента",
|
||||
"cmd.view.render_browser": "Стабло рендеровања",
|
||||
"cmd.view.render_dock": "Премести панел рендеровања",
|
||||
"cmd.view.render_focus": "Фокусни приказ рендеровања",
|
||||
@@ -1303,28 +1279,17 @@
|
||||
"cmd.view_tool": "Алат за навигацију",
|
||||
"cmd.view_top": "Поглед одозго",
|
||||
"cmd.view_visual_style": "Визуелни стил",
|
||||
"color.blue": "Плава",
|
||||
"color.copy": "Кликните да копирате вредности боје",
|
||||
"color.edit": "Кликните да измените боју",
|
||||
"color.gamma": "Приказ вредности боје у гама простору 0-255",
|
||||
"color.green": "Зелена",
|
||||
"color.hex": "Hex",
|
||||
"color.hex_help": "Унесите #rrggbb или #rrggbbaa; шест цифара чува непрозирност",
|
||||
"color.hex_hint": "#rrggbb",
|
||||
"color.hue": "Нијанса",
|
||||
"color.linear": "Приказ вредности боје у линеарном простору 0-1",
|
||||
"color.recent": "Недавне боје",
|
||||
"color.recent_help": "Овде се појављују боје које изаберете у било ком пољу боје",
|
||||
"color.red": "Црвена",
|
||||
"color.saturation": "Засићеност (проценат)",
|
||||
"color.saturation_value": "Засићеност и вредност",
|
||||
"color.selected": "Изабрана боја",
|
||||
"color.step_down": "Смањи за корак",
|
||||
"color.step_up": "Повећај за корак",
|
||||
"color.value": "Вредност, светлина (проценат)",
|
||||
"config.column_filter_empty": "Нема одговарајућих колона",
|
||||
"config.rule_parameter_columns": "Приказани су само параметри који имају колону у табели. Додајте колону помоћу Додај колону (+) да бисте параметар користили овде.",
|
||||
"config.rule_suppression_columns": "Приказане су само операције које имају колону Потисни у табели. Додајте колону помоћу Додај колону (+) да бисте овде могли да управљате операцијом.",
|
||||
"contact.components_count": "Компоненте: {count}",
|
||||
"contact.enabled_label": "омогућено",
|
||||
"coupling.gear_1": "Зупчаник 1",
|
||||
@@ -1370,14 +1335,9 @@
|
||||
"dialog.dimension_name": "Кота: {name}",
|
||||
"dialog.edit_title": "ИЗМЕНИ {title}",
|
||||
"dialog.no_shown_body": "Нема приказаног тела за измену: прикажите једно или изаберите Ново тело",
|
||||
"dialog.pattern_sketch_not_object": "Изаберите тела или операције: скица није ни једно ни друго. Поновите њене криве помоћу алата Низ или Пресликај у самој скици или је прво екструдирајте.",
|
||||
"dialog.select": "↖ Изабери",
|
||||
"dialog.selected_count": "↖ Изабрано: {count}",
|
||||
"dialog.selection_constraint": "Ограничење {id}",
|
||||
"dialog.selection_external_curve": "{sketch} · крива {id}",
|
||||
"dialog.selection_guidance": "Изаберите улаз да га промените. Кликните изабране објекте да их уклоните; Ctrl/Cmd-клик их такође укључује и искључује. Погледајте преглед, а затим притисните У реду.",
|
||||
"dialog.selection_midpoint": "Средишња тачка · {id}",
|
||||
"dialog.selection_profile": "{sketch} · профил {number}",
|
||||
"dialog.selection_step": "{step} од {total}: Изаберите {input}",
|
||||
"dialog.step": "Корак",
|
||||
"document.changed_on_disk": "{name} је промењен на диску",
|
||||
@@ -1460,7 +1420,6 @@
|
||||
"help.construct.axis.two_points": "Прави помоћну осу кроз две тачке, врхове или тачке скице. Користите је за осу која пролази кроз два позната положаја.",
|
||||
"help.construct.plane.along_path": "Прави помоћну раван окомиту на ивицу или криву, на положају дуж ње. Користите је да скицирате профил за повлачење или попречни пресек путање.",
|
||||
"help.construct.plane.at_angle": "Прави помоћну раван заокренуту под углом у односу на раван или лице, око осе или ивице. Користите је за нагнуте скице, на пример за угаони носач.",
|
||||
"help.construct.plane.axis_point": "Прави помоћну раван која садржи осу и тачку изван те осе. Изаберите осу исходишта или помоћну осу, праву ивицу или линију скице, па врх, тачку скице или помоћну тачку. Тачка на оси не може да одреди јединствену раван.",
|
||||
"help.construct.plane.midplane": "Прави помоћну раван на половини између две равни или равна лица, или раван која полови угао под којим се састају. Користите је као раван симетрије за пресликавање.",
|
||||
"help.construct.plane.offset": "Прави помоћну раван паралелну равни или равном лицу, на задатом растојању или кроз тачку. Користите је да скицирате на одређеној висини изнад лица.",
|
||||
"help.construct.plane.perpendicular": "Прави помоћну раван која садржи линију или ивицу и стоји окомито на раван или лице. Користите је да скицирате усправно на моделу дуж ивице.",
|
||||
@@ -1837,8 +1796,6 @@
|
||||
"joint_move.blocked_hint": "Проверите врсту споја (на пример Круто), учвршћивање, границе споја и вредности које покрећу параметри.",
|
||||
"joint_move.blocked_title": "Овај део се не може померити",
|
||||
"joint_move.coarse": "Корак ротације близу осе (°)",
|
||||
"joint_move.conflict": "Један спој овог дела је у сукобу са осталима: {joint}.",
|
||||
"joint_move.conflict_hint": "Измените, потисните или избришите спој који је у сукобу да би остали спојеви могли да поставе део.",
|
||||
"joint_move.distance": "Растојање од почетка",
|
||||
"joint_move.done": "Готово",
|
||||
"joint_move.fine": "Корак ротације далеко од осе (°)",
|
||||
@@ -1938,8 +1895,6 @@
|
||||
"motion.track_name": "Стаза {number}",
|
||||
"nav.alias.help": "Shift+Alt+превлачење левим дугметом орбитира, Shift+Alt+средњим помера, Shift+Alt+десним зумира; превлачење средњим дугметом такође помера, а десним орбитира",
|
||||
"nav.blender.help": "Превлачење средњим дугметом орбитира, Shift+средње помера, Ctrl+средње зумира; превлачење десним дугметом не дира камеру",
|
||||
"nav.creo.help": "Превлачење средњим дугметом орбитира, Shift+средње помера, Ctrl+средње уз вертикално превлачење зумира (надоле за приближавање); точкић такође зумира",
|
||||
"nav.creo.label": "Creo",
|
||||
"nav.free_orbit.help": "Миш и 3D миш ротирају кроз оба пола и чувају нагиб. Привлачење оса тастером Shift је искључено.",
|
||||
"nav.free_orbit.label": "Слободно орбитирање",
|
||||
"nav.free_orbit.snap_help": "Миш и 3D миш ротирају кроз оба пола и чувају нагиб. Држите Shift током превлачења за орбитирање да привучете смер погледа и нагиб.",
|
||||
@@ -1949,7 +1904,6 @@
|
||||
"nav.hfss.help": "Alt+превлачење левим тастером помера, Shift+Alt+леви зумира, Ctrl+превлачење левим на празном простору орбитира",
|
||||
"nav.inventor.help": "Превлачење средњим дугметом помера, Shift+средње орбитира, Ctrl+средње зумира, превлачење десним орбитира",
|
||||
"nav.maya.help": "Alt+превлачење левим орбитира, Alt+средњи помера, Alt+десни зумира; превлачење средњим такође помера",
|
||||
"nav.nx.help": "Превлачење средњим дугметом орбитира, Shift+средње помера (у NX-у средње + десно), Ctrl+средње зумира (у NX-у средње + лево); превлачење десним дугметом не дира камеру",
|
||||
"nav.openscad.help": "Превлачење левим дугметом по празном простору орбитира, Shift+превлачење левим бира оквиром, превлачење геометрије скице је мења; превлачење десним или средњим дугметом помера, Shift+десно или Shift+средње зумира",
|
||||
"nav.perspective.sketch": "Измена скице користи ортографски приказ. Завршите скицу да пребаците на перспективу.",
|
||||
"nav.right_drag_orbits.help": "Искључено: превлачење десним дугметом не дира камеру, а десно дугме само отвара контекстни мени. Избор SolidWorks мапирања миша га искључује.",
|
||||
@@ -2092,19 +2046,12 @@
|
||||
"parts.family.button_head_cap_screw": "Завртањ са полуоблом главом и унутрашњим шестоугаоником",
|
||||
"parts.family.dowel_pin": "Паралелни клин (колчић)",
|
||||
"parts.family.hex_bolt": "Завртањ са шестоугаоном главом",
|
||||
"parts.family.hex_cap_screw_inch": "Завртањ са шестоугаоном главом (инч)",
|
||||
"parts.family.hex_nut": "Шестоугаона навртка",
|
||||
"parts.family.hex_nut_inch": "Шестоугаона навртка (инч)",
|
||||
"parts.family.set_screw": "Завртањ без главе са унутрашњим шестоугаоником, равног врха",
|
||||
"parts.family.socket_head_cap_screw": "Завртањ са цилиндричном главом и унутрашњим шестоугаоником",
|
||||
"parts.family.washer": "Обична подлошка",
|
||||
"parts.family.washer_sae": "Обична подлошка, SAE (уска)",
|
||||
"parts.family.washer_uss": "Обична подлошка, USS (широка)",
|
||||
"parts.holes": "Рупе (необавезно)",
|
||||
"parts.placement_hint": "изаберите једну или више рупа да у сваку поставите део, или У реду поставља део у исходиште",
|
||||
"parts.system": "Систем јединица",
|
||||
"parts.system.inch": "Инчни",
|
||||
"parts.system.metric": "Метрички",
|
||||
"pattern.alignment_2": "Поравнање 2",
|
||||
"pattern.alignment_hint": "Број укључује оригинал. Центар равномерно распоређује копије; Обрни бира додатну страну за парне укупне бројеве.",
|
||||
"pattern.direction_1": "Смер 1",
|
||||
@@ -2166,8 +2113,6 @@
|
||||
"prefs.button_left": "Превлачење левим дугметом",
|
||||
"prefs.button_middle": "Превлачење средњим дугметом",
|
||||
"prefs.button_right": "Превлачење десним дугметом",
|
||||
"prefs.carousel_next": "Следеће",
|
||||
"prefs.carousel_previous": "Претходно",
|
||||
"prefs.choose_font": "Изабери датотеку фонта…",
|
||||
"prefs.click": "Клик",
|
||||
"prefs.contact_shading": "Меко сенчење додира",
|
||||
@@ -2180,10 +2125,6 @@
|
||||
"prefs.ctrl_cmd": "Ctrl / Cmd",
|
||||
"prefs.curved_surfaces": "Закривљене површи",
|
||||
"prefs.curves": "Закривљене површи",
|
||||
"prefs.cut_preview_tint": "Прикажи уклоњени материјал у црвеној боји",
|
||||
"prefs.cut_preview_tint_help": "Преглед испуњава материјал који операција уклања и облик који замењује црвеном провидном сенком. Када је искључено, те испуне су потпуно провидне и цртају се само њихови обриси.",
|
||||
"prefs.dark_parts_shading": "Задржи облик тамних делова",
|
||||
"prefs.dark_parts_shading_help": "Сенчи приказ у линеарном светлу уз меко допунско светло неба, тако да тамна лица задрже градијент уместо да поцрне",
|
||||
"prefs.dead_zone_note": "Шрафирана трака је мртва зона: кретање унутар ње се занемарује.",
|
||||
"prefs.default": "подразумевано",
|
||||
"prefs.design": "Подразумевана подешавања дизајна",
|
||||
@@ -2198,8 +2139,6 @@
|
||||
"prefs.edges": "Ивице и сенчење",
|
||||
"prefs.extend": "Продужи",
|
||||
"prefs.extra_navigation": "Ctrl + превлачење левим дугметом по празном простору орбитира; држите размакницу за померање.",
|
||||
"prefs.extrude_view_isometric": "Окрени приказ у изометријски када се отвори Екструдирај",
|
||||
"prefs.extrude_view_return": "Врати се на претходни приказ када се Екструдирај затвори",
|
||||
"prefs.follows_os": "Прати оперативни систем",
|
||||
"prefs.font": "Фонт",
|
||||
"prefs.font_fallback": "Знакови који недостају изабраном фонту приказују се уграђеним фонтом, тако да ниједна ознака не приказује празан квадрат.",
|
||||
@@ -2215,7 +2154,6 @@
|
||||
"prefs.graphics_card_auto": "Аутоматски",
|
||||
"prefs.graphics_card_missing": "Сачувана графичка картица није доступна; користи се Аутоматски.",
|
||||
"prefs.graphics_card_restart": "Ступа на снагу након поновног покретања SolidCraft-а. WGPU_ADAPTER_NAME има предност над овим избором.",
|
||||
"prefs.graphics_card_unused": "Сачувана графичка картица није коришћена за овај прозор; картица која се користи приказана је у Помоћ › О програму и у статусној траци. Покушајте са опцијом Аутоматски или поставите WGPU_ADAPTER_NAME на јединствени део назива картице.",
|
||||
"prefs.graphics_note": "Жртвујте брзину за глаткоћу. Сваки избор показује свој учинак на примеру.",
|
||||
"prefs.graphics_presets_note": "Унапред подешене вредности подешавају све изборе испод одједном.",
|
||||
"prefs.hide_constraint_glyphs_zoomed_out": "Сакриј симболе ограничења када је приказ умањен",
|
||||
@@ -2230,8 +2168,6 @@
|
||||
"prefs.history_sketches_note": "Када је Скице подешено на Испод своје операције, временска трака лево приказује сваку скицу један ниво увучено, испод прве операције направљене из ње, кад год је довољно широка за називе. Временска трака на дну увек задржава редослед настанка.",
|
||||
"prefs.history_sketches_under_feature": "Испод своје операције",
|
||||
"prefs.hold_stop_snapping": "Држите да искључите привлачење",
|
||||
"prefs.home_fit_size": "Величина за Почетни приказ и Уклопи",
|
||||
"prefs.home_fit_size_note": "Колики део приказа модел испуњава када га уоквири Почетни приказ, Уклопи, отварање дизајна или промена приказа у навигатору, без обзира на то да ли је подешавање испод укључено. 100 %: испуњава приказ између панела, компаса и навигационе траке.",
|
||||
"prefs.icons_only": "Само иконе",
|
||||
"prefs.imported_file": "Увезена датотека",
|
||||
"prefs.in_browser": "У стаблу модела",
|
||||
@@ -2240,22 +2176,13 @@
|
||||
"prefs.interface_language": "Језик интерфејса",
|
||||
"prefs.interface_note": "Како SolidCraft изгледа и где су његови делови.",
|
||||
"prefs.interval_minutes": "{n} min",
|
||||
"prefs.invert_curved_roll_arrows": "Обрни закривљене стрелице за ваљање",
|
||||
"prefs.invert_curved_roll_arrows_note": "Две закривљене стрелице у углу коцке ваљају приказ унутар равни екрана. Укључено: стрелица у смеру казаљке на сату ваља приказ супротно од смера казаљке на сату, а стрелица супротно од смера казаљке на сату ваља га у смеру казаљке на сату. Искључено: свака стрелица ваља приказ онако како је закривљена.",
|
||||
"prefs.invert_navigator_arrows": "Обрни стрелице за ротацију коцке приказа",
|
||||
"prefs.invert_navigator_arrows_note": "Стрелице око коцке орбитирају камеру у смеру у којем показују, као у програмима Fusion и Inventor: стрелица са леве стране показује удесно и закреће камеру удесно. Искључено: стрелица окреће коцку ка страни на којој се налази, па лева стрелица закреће камеру улево. Подешавање не утиче на закривљене стрелице за ваљање.",
|
||||
"prefs.keep_work_on_tab_switch": "Задржи дијалоге и алате отвореним при пребацивању између дизајна",
|
||||
"prefs.keep_work_on_tab_switch_note": "Свака картица дизајна задржава свој отворени дијалог или алат, са оним што сте у њему изабрали и уписали, те своју картицу траке са алатима. Када се вратите на дизајн, поново су ту. Искључено: пребацивање између дизајна отказује их и приказује картицу Модел.",
|
||||
"prefs.labels": "Ознаке",
|
||||
"prefs.language_system": "Систем",
|
||||
"prefs.layout": "Распоред",
|
||||
"prefs.layout_note": "Компактно причвршћује панеле уз ивице прозора. Провидност стабла модела доступна је у опцији Плутајуће. Страну Асистента промените на страници Асистент.",
|
||||
"prefs.left": "Лево",
|
||||
"prefs.left_click": "Леви клик",
|
||||
"prefs.line_drag_draws_one": "Притисак и превлачење цртају једну линију",
|
||||
"prefs.line_drag_draws_one_note": "У алату Линија, притисак, превлачење и пуштање цртају једну линију од места притиска до места пуштања и ту се завршава. Кликови и даље цртају ланац. Искључено: превлачење поставља тачку где се пусти, као и клик.",
|
||||
"prefs.line_hover_tangent_arc": "Задржите показивач на последњој тачки линије да пређете на тангентни лук",
|
||||
"prefs.line_hover_tangent_arc_note": "У алату Линија, након што је нацртан сегмент, одмакните показивач од последње тачке ланца, вратите га на њу и држите га мирно: следећи клик завршава тангентни лук, а исти покрет враћа на линије. Искључено: задржавање на тој тачки не ради ништа.",
|
||||
"prefs.linked_designs": "Повезани дизајни",
|
||||
"prefs.live_input": "Улаз уживо",
|
||||
"prefs.live_preview": "Преглед уживо",
|
||||
@@ -2279,8 +2206,6 @@
|
||||
"prefs.mouse_mapping": "Мапирање миша",
|
||||
"prefs.navigation": "Навигација",
|
||||
"prefs.navigation_note": "Како миш, додирна табла и 3D миш померају приказ.",
|
||||
"prefs.navigator_fit": "Уклопи модел након промене приказа у навигатору",
|
||||
"prefs.navigator_fit_note": "Лице, угао или стрелица коцке приказа, односно оса гизма оријентације, такође усмерава поглед на средину модела са једног растојања на којем се уклапа из сваког смера (његова гранична сфера). Почетни приказ користи исти зум и центар док је ова опција укључена, па се прикази које изаберете после њега само окрећу. Искључено: приказ се окреће на месту и задржава свој циљ и зум.",
|
||||
"prefs.network_host_remove": "Уклони",
|
||||
"prefs.network_locations": "Дозволи мрежне локације у дизајнима",
|
||||
"prefs.network_locations_note": "Искључено: повезане датотеке дизајна на другом рачунару (\\\\server\\share) отварају се само са сервера наведених овде или након што га дозволите када се то затражи.",
|
||||
@@ -2301,8 +2226,6 @@
|
||||
"prefs.placement": "Постављање",
|
||||
"prefs.prefer_free_sketch_points": "Дај предност покретним тачкама скице када се тачке преклапају",
|
||||
"prefs.preview_choices": "Преглед ваших избора",
|
||||
"prefs.preview_tint_new_faces": "Обоји нову површ у прегледу",
|
||||
"prefs.preview_tint_new_faces_help": "Преглед операције која мења тело може да нацрта површ коју додаје у боји прегледа. Када је искључено, тело се црта какво јесте.",
|
||||
"prefs.print_face_highlight": "Истицање површине за штампу",
|
||||
"prefs.print_face_highlight_tip": "Колико се јако површина за штампу тела боји и обрубљује у приказу. 0 % не приказује истицање.",
|
||||
"prefs.profile_active": "Активни профил",
|
||||
@@ -2331,8 +2254,6 @@
|
||||
"prefs.render_previous_geometry_budget": "Користи претходни буџет геометрије за преглед у Рендеровању",
|
||||
"prefs.render_previous_geometry_budget_help": "Враћа претходно фиксно ограничење геометрије (512 MiB на 64-битним десктоп рачунарима, 128 MiB другде) уместо буџета према уређају.",
|
||||
"prefs.reports_saved": "Сачувано: {n}",
|
||||
"prefs.ribbon_click_ends_tool": "Клик на дугме активног алата завршава га",
|
||||
"prefs.ribbon_click_ends_tool_note": "Клик на истакнуто дугме на траци алата за скицирање који је у употреби завршава тај алат, па кликови у приказу поново служе за избор. Искључено: клик поново покреће алат.",
|
||||
"prefs.ribbon_reveal": "Прикажи резултате претраге на траци",
|
||||
"prefs.ribbon_reveal_note": "Задржавање показивача изнад резултата у Претражи команде показује где се команда налази на траци: њену картицу, њено дугме или њен ред у падајућем менију панела. Команда покренута из претраге тамо трепери, а покренута команда из падајућег менија означава свој панел.",
|
||||
"prefs.right_click": "Десни клик",
|
||||
@@ -2362,8 +2283,6 @@
|
||||
"prefs.sketch_exit_view.previous": "Врати се на претходни приказ",
|
||||
"prefs.sketch_exit_view.unless_rotated": "Врати се осим ако је ротирано",
|
||||
"prefs.sketch_exit_view_note": "Куда приказ иде након Заврши скицу, Откажи или двоструког Esc.",
|
||||
"prefs.sketch_face_activates_part": "Скицирање на лицу дела чини тај део активним",
|
||||
"prefs.sketch_face_activates_part_note": "Скица започета на лицу тела друге компоненте прво активира ту компоненту, па скица припада њој и у стаблу модела остаје уз тај део. Тај део након тога остаје активан. Искључено: скица припада активној компоненти.",
|
||||
"prefs.sketch_open_look_at": "Окрени камеру према скици када се отвори",
|
||||
"prefs.sketch_open_look_at_note": "Искључено: када направите или измените скицу, приказ остаје онакав какав јесте. Погледај окреће приказ према скици када то желите.",
|
||||
"prefs.sketch_recent_snap": "Аутоматски привлачи на недавне центре и средишње тачке",
|
||||
@@ -2395,24 +2314,6 @@
|
||||
"prefs.status_error": "Грешка",
|
||||
"prefs.status_selected": "Изабрано",
|
||||
"prefs.status_warning": "Упозорење",
|
||||
"prefs.structure.appearance": "Изглед",
|
||||
"prefs.structure.appearance_note": "Боје, текст и приступачност.",
|
||||
"prefs.structure.in_profile": "У профилу",
|
||||
"prefs.structure.layout": "Распоред",
|
||||
"prefs.structure.layout_note": "Где се налазе делови прозора.",
|
||||
"prefs.structure.look": "Визуелно",
|
||||
"prefs.structure.measure_pointer": "Мерење и показивач",
|
||||
"prefs.structure.mouse3d": "3D миш",
|
||||
"prefs.structure.mouse3d_note": "SpaceMouse и SpaceNavigator.",
|
||||
"prefs.structure.navigation_note": "Миш и додирна табла. 3D миш има сопствену страницу.",
|
||||
"prefs.structure.profile": "Профил",
|
||||
"prefs.structure.profile_edited": "Промењено откако је сачувано",
|
||||
"prefs.structure.profile_hover": "Сачувано у профилима подешавања",
|
||||
"prefs.structure.scale_percent": "{percent}%",
|
||||
"prefs.structure.sketch": "Скица",
|
||||
"prefs.structure.tools": "Алати",
|
||||
"prefs.structure.tools_note": "Како се понашају алати за моделовање.",
|
||||
"prefs.structure.work": "Рад",
|
||||
"prefs.supersampling_brief": "Исцртава приказ већим и смањује га филтрирањем: веома оштро и захтевније.",
|
||||
"prefs.tab_accent_note": "Нагласна боја прати активну картицу",
|
||||
"prefs.theme_file": "датотека теме",
|
||||
@@ -2600,10 +2501,6 @@
|
||||
"render.base_color": "Основна боја · sRGB",
|
||||
"render.base_metallic": "Метални удео",
|
||||
"render.base_opaque_only": "Овај уређивач чува семантику непрозирних тела. За оптичко пропуштање користите изричите контроле стакла.",
|
||||
"render.batch_all_shots": "Сви кадрови ({count})",
|
||||
"render.batch_empty": "Сачувајте кадар пре рендеровања свих кадрова.",
|
||||
"render.batch_limit": "Рендеровање свих кадрова ограничено је на 32 кадра.",
|
||||
"render.batch_status": "У току: {running} · На чекању: {waiting}",
|
||||
"render.bloom_enable": "Сјај приказа",
|
||||
"render.bloom_help": "Креативни сјај само на излазу из позитивних линеарних светлих делова, раширен кроз три нормализована пролаза кутијастог филтера. Полупречник је у пикселима излаза. Додаје се у линеарној светлости приказа пре sRGB-а; није објектив, волуметријски ефекат нити побољшање конвергенције. Сирови EXR остаје непромењен.",
|
||||
"render.bloom_opaque": "Сјај захтева непрозирни излаз. Провидни PNG се одбија, а не спљоштава тихо.",
|
||||
@@ -2714,13 +2611,6 @@
|
||||
"render.choose_look": "Прво изаберите изглед у Изгледима",
|
||||
"render.chromatic_offset": "Хроматски помак ивица",
|
||||
"render.clear_stage": "Уклони сачувану сцену",
|
||||
"render.compare_divider": "Разделник поређења",
|
||||
"render.compare_live": "Уживо",
|
||||
"render.compare_live_preview": "Преглед уживо",
|
||||
"render.compare_render": "Рендер {number}",
|
||||
"render.compare_side": "Рендер {number} · {shot}",
|
||||
"render.compare_summary": "{shot} · {width} × {height} · PNG · {seconds} s · {renderer} · забележено у ревизији {revision}",
|
||||
"render.compare_swap": "Замени стране",
|
||||
"render.copy_request": "Копирај JSON",
|
||||
"render.cpu_aa_help": "Просторни узорци: више узорака побољшава ивице и продужава рендеровање.",
|
||||
"render.cpu_area_add": "Додај правоугаоно CPU светло",
|
||||
@@ -3470,10 +3360,6 @@
|
||||
"render.result_retained": "Приказује се последња завршена слика; новије рендеровање је још није заменило.",
|
||||
"render.result_sequence": "Контролна тачка",
|
||||
"render.result_title": "Резултат рендеровања",
|
||||
"render.results_choose": "Задржани резултати",
|
||||
"render.results_label": "Рендер {number} · {shot} · {seconds} s",
|
||||
"render.results_stale_label": "{result} [застарео]",
|
||||
"render.results_unnamed": "Слика",
|
||||
"render.return_design": "Назад на Дизајн",
|
||||
"render.review_stale": "Овај преглед је застарео. Решите га или поново проверите пре примене.",
|
||||
"render.ribbon_aging": "Старење",
|
||||
@@ -3925,7 +3811,6 @@
|
||||
"sketch_text.formula": "Почните са = да речи саставите од параметара: ='W' + number(Width)",
|
||||
"sketch_text.italic": "Курзив",
|
||||
"sketch_text.loading_fonts": "Тражење инсталираних фонтова…",
|
||||
"sketch_text.no_bold": "Уграђени фонт нема подебљану варијанту: изаберите инсталирани фонт",
|
||||
"sketch_text.on_path": "Текст прати своју путању: крива га поставља",
|
||||
"sketch_text.path_clear": "Скини текст са његове криве",
|
||||
"sketch_text.path_hint": "Крива скице коју текст прати: кликните овде, а затим криву",
|
||||
@@ -3957,7 +3842,10 @@
|
||||
"the two origins are on the same component": "оба исходишта су на истој компоненти",
|
||||
"thread.automatic_size": "Аутоматска величина",
|
||||
"thread.designation": "Ознака",
|
||||
"thread.direction": "Смер навоја",
|
||||
"thread.iso_metric": "ISO метрички",
|
||||
"thread.left_hand": "Леви",
|
||||
"thread.right_hand": "Десни",
|
||||
"thread.select_size": "Изаберите величину",
|
||||
"timeline.delete_after_marker_one": "Избриши 1 операцију након ознаке враћања",
|
||||
"timeline.delete_after_marker_other": "Избриши операције након ознаке враћања: {count}",
|
||||
@@ -4131,7 +4019,6 @@
|
||||
"ui.agent_chat_auth_terminal": "Покрените ово у терминалу, а затим притисните Повежи поново:",
|
||||
"ui.agent_chat_auth_title": "Пријави се код агента",
|
||||
"ui.agent_chat_cancel": "Откажи",
|
||||
"ui.agent_chat_cancel_timeout": "Агент није одговорио на Заустави па је веза са њим прекинута. Поново се повежите да бисте наставили.",
|
||||
"ui.agent_chat_cannot_start": "Инсталиран, али се не покреће: {error}",
|
||||
"ui.agent_chat_changes": "Промене: {n}, један корак поништавања",
|
||||
"ui.agent_chat_changes_n": "Промене: {n}",
|
||||
@@ -4141,13 +4028,11 @@
|
||||
"ui.agent_chat_command": "Команда агента",
|
||||
"ui.agent_chat_connect": "Повежи",
|
||||
"ui.agent_chat_copy": "Копирај",
|
||||
"ui.agent_chat_copy_message": "Копирај поруку",
|
||||
"ui.agent_chat_ctx_bodies": "Тела",
|
||||
"ui.agent_chat_ctx_elements": "Елементи",
|
||||
"ui.agent_chat_ctx_features": "Операције",
|
||||
"ui.agent_chat_ctx_more": "+још {n}",
|
||||
"ui.agent_chat_ctx_other": "Остало",
|
||||
"ui.agent_chat_custom_heading": "Прилагођени модел",
|
||||
"ui.agent_chat_custom_hint": "Било који програм који говори Agent Client Protocol на stdin и stdout. Не покреће га никаква љуска.",
|
||||
"ui.agent_chat_denied": "Одбијено",
|
||||
"ui.agent_chat_deny": "Одбиј",
|
||||
@@ -4191,16 +4076,8 @@
|
||||
"ui.agent_chat_mode_all": "Све",
|
||||
"ui.agent_chat_mode_ask": "Питај",
|
||||
"ui.agent_chat_mode_edits": "Измене",
|
||||
"ui.agent_chat_model_custom": "Користи прилагођени: {model}",
|
||||
"ui.agent_chat_model_no_tools": "{model} не може да користи SolidCraft алате, па може само да разговара. Изаберите модел са подршком за алате.",
|
||||
"ui.agent_chat_model_rejected": "Агент није прихватио модел {model}: {error}",
|
||||
"ui.agent_chat_model_search": "Претражи моделе…",
|
||||
"ui.agent_chat_model_tip": "Модел који агент користи. Ваш избор се памти за овог агента.",
|
||||
"ui.agent_chat_models_failed": "Списак модела није могуће учитати: {error}",
|
||||
"ui.agent_chat_models_heading": "Доступни модели",
|
||||
"ui.agent_chat_models_listing": "Учитавање списка модела…",
|
||||
"ui.agent_chat_models_none": "Крајња тачка не наводи ниједан модел",
|
||||
"ui.agent_chat_models_not_a_list": "Одговор није списак модела",
|
||||
"ui.agent_chat_new": "Нови разговор",
|
||||
"ui.agent_chat_new_confirm": "Започети нови разговор? Тренутни ће бити обрисан.",
|
||||
"ui.agent_chat_next_picture": "Следећа слика",
|
||||
@@ -4336,9 +4213,6 @@
|
||||
"ui.ai_permissions": "Дозволе",
|
||||
"ui.ai_preset": "Унапред подешено",
|
||||
"ui.ai_protocol": "Протокол",
|
||||
"ui.ai_reasoning_effort": "Ниво закључивања",
|
||||
"ui.ai_reasoning_effort_field_hint": "празно = подразумевана вредност пружаоца",
|
||||
"ui.ai_reasoning_effort_hint": "Необавезно. Шаље се крајњој тачки као `reasoning_effort`; прихваћене вредности се разликују од пружаоца до пружаоца (на пример `low`, `high` или `max`). SolidCraft никад не мења вредност коју овде поставите. Оставите празно да се ништа не шаље и да се задржи подразумевана вредност пружаоца.",
|
||||
"ui.ai_remove": "Уклони",
|
||||
"ui.ai_request_timed_out": "Модел је трајао дуже од {seconds} s. Временско ограничење захтева за ову крајњу тачку можете повећати у Подешавања › Асистент.",
|
||||
"ui.ai_request_timeout": "Временско ограничење захтева",
|
||||
@@ -4474,11 +4348,9 @@
|
||||
"ui.construction.contact_hint": "Тангента: изаберите круг/лук или отворени сплајн/конику, па тачку додира (криве слободног облика: крајње тачке)",
|
||||
"ui.construction.external_hint": "Тангента: изаберите круг или лук, спољашњу тачку, па жељено решење",
|
||||
"ui.construction.free_hint": "Помоћна права: кликните две тачке; десним кликом почните испочетка",
|
||||
"ui.construction.normal_needs_length": "Бесконачна линија је увек помоћна: упишите дужину да бисте нацртали обичну линију",
|
||||
"ui.construction.point_hint": "Помоћна права: кликните тачку кроз коју пролази",
|
||||
"ui.construction.reference_hint": "Помоћна права: изаберите праву линију, па тачку; десним кликом промените референцу",
|
||||
"ui.construction.ribbon_label": "Пом. праве",
|
||||
"ui.construction.side_hint": "Помоћна права: кликните страну ка којој линија иде; десним кликом почните испочетка",
|
||||
"ui.context_menu": "Контекстни мени",
|
||||
"ui.continuity_g0": "G0 прегиб",
|
||||
"ui.continuity_g1": "G1 тангентно",
|
||||
@@ -4506,7 +4378,6 @@
|
||||
"ui.dark": "Тамна",
|
||||
"ui.default_modelling_orientation": "Подразумевана оријентација моделовања",
|
||||
"ui.delete": "Избриши",
|
||||
"ui.delete_select_first": "Прво изаберите шта желите да избришете: операције, тела, компоненте или геометрију скице",
|
||||
"ui.depth": "Дубина",
|
||||
"ui.design": "Дизајн",
|
||||
"ui.design_properties.author": "Аутор",
|
||||
@@ -4599,7 +4470,6 @@
|
||||
"ui.edit_in_place_saved_elsewhere": "Део је сачуван у другу датотеку; склоп и даље повезује {name}",
|
||||
"ui.edit_in_place_wait": "Сачекајте док се оно што ради у дизајну не заврши",
|
||||
"ui.edit_section_analysis": "Измени анализу пресека",
|
||||
"ui.edit_sketch_empty": "Нема скица за измену",
|
||||
"ui.ellipse": "Елипса",
|
||||
"ui.emboss_wrap_note": "Профили од ортогоналних линија тангентни на један подржани цилиндар омотавају се аутоматски. Изаберите зид да бисте изабрали циљ.",
|
||||
"ui.end_radius": "Крајњи полупречник",
|
||||
@@ -4610,9 +4480,7 @@
|
||||
"ui.equation_explicit": "Експлицитни",
|
||||
"ui.equation_form": "Облик",
|
||||
"ui.equation_note": "Променљива је обичан број: sin(t) је узима у радијанима. Резултат без јединице је у јединици дизајна.",
|
||||
"ui.equation_note_range": "Променљива је дужина, као и њен опсег: комбинујте је са параметрима дужине, а за sin() је поделите дужином. Резултат без јединице је у јединици дизајна.",
|
||||
"ui.equation_parametric": "Параметарски",
|
||||
"ui.equation_variable_unit": "Променљива има јединицу опсега",
|
||||
"ui.equation_x_of_t": "x(t)",
|
||||
"ui.equation_y_of_t": "y(t)",
|
||||
"ui.equation_y_of_x": "y(x)",
|
||||
@@ -4744,7 +4612,6 @@
|
||||
"ui.hideOrigin": "Сакриј исходиште",
|
||||
"ui.hidePlanes": "Сакриј равни",
|
||||
"ui.hideProfile": "Сакриј профил",
|
||||
"ui.hide_component_history": "Сакриј њену временску траку",
|
||||
"ui.hide_origin_by_default": "Подразумевано сакриј исходиште",
|
||||
"ui.hide_origin_note": "Нови дизајни почињу са скривеном фасциклом Исходиште. Дизајн задржава сопствено подешавање Исходишта када га прикажете или сакријете.",
|
||||
"ui.history_back": "Иди корак назад",
|
||||
@@ -4752,7 +4619,6 @@
|
||||
"ui.history_edge_hint": "двапут кликните ивицу",
|
||||
"ui.history_first": "Иди на почетак",
|
||||
"ui.history_forward": "Иди корак напред",
|
||||
"ui.history_hide_hidden": "Сакриј скривене компоненте",
|
||||
"ui.history_hide_names": "Сакриј називе",
|
||||
"ui.history_last": "Иди на крај",
|
||||
"ui.history_marker_tip": "Ознака враћања: превуците да вратите модел уназад; нове операције долазе овде",
|
||||
@@ -4762,12 +4628,10 @@
|
||||
"ui.history_play_button_show": "Прикажи дугме за репродукцију",
|
||||
"ui.history_play_finish_action": "Завршите тренутну радњу пре репродукције временске траке",
|
||||
"ui.history_play_roll_back": "Померите маркер временске траке уназад пре репродукције",
|
||||
"ui.history_show_hidden": "Прикажи скривене компоненте",
|
||||
"ui.history_show_names": "Прикажи називе",
|
||||
"ui.history_sketch_listed_under": "Наведено испод {feature}",
|
||||
"ui.history_title": "Временска трака",
|
||||
"ui.history_toggle_names": "Прикажи или сакриј називе операција",
|
||||
"ui.history_waits_for_editor": "Поништи, Понови и временска трака чекају док се не отвори уређивач операције",
|
||||
"ui.hole": "Рупа",
|
||||
"ui.hole_tap_type": "Врста навоја рупе",
|
||||
"ui.hole_type": "Врста рупе",
|
||||
@@ -4783,7 +4647,6 @@
|
||||
"ui.insert_design.saved_file": "Дизајн {name} има несачуване промене, па је уметнута његова сачувана датотека. Сачувајте га, а затим покрените Ажурирај везе да бисте унели промене.",
|
||||
"ui.insert_design.unsaved": "Несачуване промене",
|
||||
"ui.inspect": "Прегледај",
|
||||
"ui.instances": "Инстанце",
|
||||
"ui.intersect": "Пресек",
|
||||
"ui.isolate": "Изолуј",
|
||||
"ui.join": "Споји",
|
||||
@@ -4792,14 +4655,12 @@
|
||||
"ui.joints": "Спојеви",
|
||||
"ui.keyboard_shortcuts": "Пречице на тастатури",
|
||||
"ui.language": "Језик",
|
||||
"ui.lasso_select": "Ласо (превуците петљу слободном руком: узима све што је у целини унутра)",
|
||||
"ui.layout_compact": "Компактно",
|
||||
"ui.layout_floating": "Плутајуће",
|
||||
"ui.length": "Дужина",
|
||||
"ui.length_decimals": "Децимале дужине",
|
||||
"ui.light": "Светла",
|
||||
"ui.line": "Линија",
|
||||
"ui.line_arc_hint": "Тангентни лук: кликните крај лука. Поново се задржите на последњој тачки за линије; десни клик или Esc за завршетак",
|
||||
"ui.link_copies": "Повежи идентичне копије",
|
||||
"ui.link_copies_keep": "Задржи",
|
||||
"ui.link_copies_link": "Повежи",
|
||||
@@ -4888,7 +4749,6 @@
|
||||
"ui.part_size_shared": "Поново гради део, замењујући све додате операције. Сви примерци ове компоненте се ажурирају.",
|
||||
"ui.paste": "Налепи",
|
||||
"ui.path": "Путања",
|
||||
"ui.pattern_object_type_tip": "Тела: пуни облици, бирају се у приказу или у стаблу модела; свако се копира у целини.\nОперације: кораци временске траке, као што су екструзија или рупа, бирају се на временској траци или на лицу које су направили; корак се понавља.\nСкица није ни једно ни друго: поновите њене криве помоћу алата Низ или Пресликај у самој скици или је прво екструдирајте.",
|
||||
"ui.pattern_on_path": "Низ дуж путање",
|
||||
"ui.perforate_margin_default": "из пречника",
|
||||
"ui.perforate_pitch": "Корак",
|
||||
@@ -4934,9 +4794,9 @@
|
||||
"ui.polygon": "Полигон",
|
||||
"ui.preferences": "Подешавања",
|
||||
"ui.press_a_key": "притисните тастер…",
|
||||
"ui.print_face_body_not_sent": "Тело те површине се не шаље: прво га додајте у Тела",
|
||||
"ui.print_face_cleared": "{body}: површина за штампу уклоњена",
|
||||
"ui.print_face_input": "Површина за штампу",
|
||||
"ui.print_face_one_body": "Површина за штампу припада једном телу: пошаљите то тело само да бисте је променили",
|
||||
"ui.print_face_pick": "Изаберите равну површину пуног тела да постане површина за штампу",
|
||||
"ui.print_face_set": "{body}: површина за штампу постављена; Пошаљи у слајсер полаже тело на њу",
|
||||
"ui.profile": "Профил",
|
||||
@@ -5048,7 +4908,6 @@
|
||||
"ui.showDimension": "Прикажи коту",
|
||||
"ui.showOrigin": "Прикажи исходиште",
|
||||
"ui.showPlanes": "Прикажи равни",
|
||||
"ui.show_component_history": "Прикажи њену временску траку",
|
||||
"ui.show_constraints": "Ограничења",
|
||||
"ui.show_construction_geometries": "Помоћна геометрија",
|
||||
"ui.show_dimensions": "Коте",
|
||||
@@ -5165,15 +5024,12 @@
|
||||
"ui.view_angles": "Углови приказа",
|
||||
"ui.view_angles_convention": "Степени око осе нагоре. Скретање 0° је Поглед спреда, 90° слева, −90° здесна, 180° отпозади; корак 90° је Поглед одозго; позитивно ваљање окреће модел у смеру казаљке на сату.",
|
||||
"ui.view_angles_help": "Приказује корак, скретање и ваљање приказа у степенима и његову пројекцију испод гизма оријентације. Кликните на очитање да унесете тачне углове.",
|
||||
"ui.view_angles_lock": "Закључај {axis}",
|
||||
"ui.view_angles_ortho": "Орто",
|
||||
"ui.view_angles_persp": "Перс.",
|
||||
"ui.view_angles_pitch": "Нагиб",
|
||||
"ui.view_angles_readout": "Нагиб {pitch} · Скретање {yaw} · Ваљање {roll}",
|
||||
"ui.view_angles_roll": "Ваљање",
|
||||
"ui.view_angles_unlock": "Откључај {axis}",
|
||||
"ui.view_angles_yaw": "Скретање",
|
||||
"ui.view_angles_zero": "Постави {axis} на 0°",
|
||||
"ui.view_centre": "Центар приказа",
|
||||
"ui.viewport_status_clear": "Искључи {name}",
|
||||
"ui.viewport_status_clear_hint": "Искључи {name} · Esc",
|
||||
@@ -5275,7 +5131,6 @@
|
||||
"web.open_link": "Отворити повезани дизајн?",
|
||||
"web.open_link_confirm": "Постоје несачуване промене. Отворити повезани дизајн у новој картици?",
|
||||
"↑ ↓ choose · Enter / Tab complete · Esc dismiss": "↑ ↓ изабери · Enter / Tab доврши · Esc одбаци",
|
||||
"↑ ↓ choose · Enter applies this value": "↑ ↓ избор · Enter примењује ову вредност",
|
||||
"↑ ↓ choose · Enter applies what you typed · Esc dismiss": "↑ ↓ изабери · Enter примењује оно што сте уписали · Esc одбаци",
|
||||
"⌘Enter continues on GitHub.": "⌘Enter наставља на GitHub-у."
|
||||
}
|
||||
|
||||