Compare commits

...

650 Commits

Author SHA1 Message Date
bherbruck d4f923a3e6 Release 0.40.0-rc.1 2026-11-03 02:20:23 -05:00
bherbruck 4bdffef061 Release: build Arch packages for pre-release versions (#11484)
The packaging action can't read a hyphenated version from the tarball's name, so the job gives it a name without the hyphen and renames the package back. A hyphenated version no longer fails the build if its Arch job fails; a plain version still does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 02:17:58 -05:00
bherbruck bbb98928fb Release 0.40.0-rc.1 2026-11-03 01:00:12 -05:00
bherbruck 2aa7e3e51c Release 0.40.0-rc.1 (#11457)
Bumps the version to 0.40.0-rc.1 and folds the pending format changes into format 49. The default-layout header test now expects the room the version really takes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 00:59:58 -05:00
github-actions[bot] 7a7fa9a1db Regenerate generated files and fold pending files [skip ci] 2026-11-03 04:42:36 +00:00
jyviko 2b921df189 Merge pull request #11360 from tangency-labs/jyviko/merge-main-develop-solidcore
Kernel: solidcore is SolidCraft's only kernel; C++ SMLib removed (#8526 on #11351)
2026-11-02 23:27:16 -05:00
jyviko 38815796a3 Known-failing tests: the variable fillet dialog's round trip fails status 1001 at solidcore 8ddce9016
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 22:54:14 -05:00
jyviko 55a5f86e2e Kernel test: the 851 middle point's y written at f64's shortest digits (clippy excessive_precision)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 22:24:05 -05:00
jyviko a1c8702854 Kernel ladder at solidcore 8ddce9016: the M10 both-hands thread splits more edges
06-threads/018-external-m10-both-hands makes 606 edges and 404 vertices (486 and 324 before),
with the same 204 faces, area and volume (to 1e-11), in two runs on the box; every other ladder
case is as the golden records it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:59:46 -05:00
jyviko 25fba581bd Known-failing tests at solidcore 8ddce9016
Five tests fail at the new pin and are listed with their causes: the variable round along a box
edge (status 1001, twice), the shell of a fully rounded box past its rounds' radius
(SM_ERR_INVALID_INPUT), the chamfer that would grow the part (no face instead of the
too-large refusal) and the box-edge round's wire record. The tabbed plate's outer loop with a
partial selection passes and leaves the list; issue2422's vertical edge now fails as a smooth
edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:57:45 -05:00
jyviko 61f07fb294 Fillets rig known-failing at solidcore 8ddce9016: eleven cases pass
851-fillet-arc-then-top-front and 851-fillet-top-front-then-upright build (9524.3437, 10 faces,
solidcore#2431); 5158-fillet-round-just-past-a-10mm-face, the curvature pipe on a plate's
order-2 section, the concave-arc and front-top rounds (r5, r7 and default) and the peg's front
and concave rounds and chamfers build and pass their checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:55:50 -05:00
jyviko 47c685d471 rustfmt on the pin's changes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:48:29 -05:00
jyviko c7c28515ce Kernel test: the tabbed plate's rim and corner arc take off the rim's closed form
The rim alone was pinned to 7.958674274526857, the marched end rib's value; its closed form,
the spandrel (1 - pi/4) r^2 revolved about the disc's axis outside |x| < 4, is
7.958672911836132, which the rim's End (fillet_blend_corner) builds to 5e-8. With the corner
arc's Pappus volume the two take off 8.117808752; solidcore 8ddce9016 removes 8.117808800.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:47:28 -05:00
jyviko 01abf8af17 Engine test: the later round at a mitred corner, as solidcore 8ddce9016 builds it
At solidcore 8ddce9016 (pinned) the r2, r2, r3 corner at (20, 0, 20) is one patch: 10 faces,
7928.743041456134 mm³, the r3 round and the patch the second fillet's. The test is pinned to
that and leaves the known-failing list. The fork's setback corner (15 faces, 7928.142563938)
waits for solidcore#2310; solidcore#2382, not merged, moves the case to 7927.724282512234.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:47:28 -05:00
jyviko ac3e6e0105 A panic solidcore's guard catches reaches the engine as EngineError::Internal
smlib's run() catches a solidcore panic and replaces the kernel (kept: the app does not die
natively), returning Error::Internal; the kernel turned it into KernelError::Failed and the
engine into Other, so hostile_params_never_panic and the fuzzer no longer saw kernel panics.
Now the kernel's wrapper errors go through KernelError::smlib, which keeps Internal; a body the
wrapper could not take because of a panic is Internal too. A feature whose evaluation hit it
records the result as internal (not cached: the kernel was replaced), and the command that
made it, or any command whose kernel call returns it, fails with EngineError::Internal under
its own id. Crash reports mark a panic inside a solidcore call recovered (kernel::guarded), and
the crash test's kernel mode panics inside a solidcore call.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:39:02 -05:00
jyviko d9310b2389 Crash test: a panic inside the kernel is the command's internal error
The kernel crash test's command must fail with EngineError::Internal naming
diagnostics.crash_test, as a panic in the command itself does: the panic detectors
(hostile_params_never_panic, the fuzzer) look for Internal. Today it is EngineError::Other.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:39:01 -05:00
jyviko 440fdaed13 Kernel work runs on threads with solidcore's 8 MiB stack
solidcore's algorithms recurse (subdivision, intersection, filleting) and its README asks for
8 MiB, a native main thread's stack; Rust starts other threads with 2 MiB, and only the web
build set more. kernel::KERNEL_STACK is 8 MiB and kernel::kernel_thread a thread builder with it.
The kernel's parallel map runs on a pool of its own with that stack (on a worker of a pool
already, as in map_with_local_pools, it stays on that pool as before), the one-thread mesh pools
and map_on_threads' helpers have it, and so do the engine's interference worker and the
evaluator's plan-mesh thread. A test recurses 5 MiB deep on each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:38:50 -05:00
jyviko ce5fbf40ab smlib dumps: a call's inputs are serialised only when it fails
While a dump folder was set, every call serialised each input body before it ran, so the rig's
timings (taken with a folder set) measured the serialiser as much as the kernel. The callers now
hand run_on the bodies the call reads; they keep them until its result is known, and only a
failing call serialises them, into the folder as before. A test counts the serialisations: an
answered volume and union none, a failing call one per input.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:38:40 -05:00
jyviko 64010a1d36 SSI corpus: solidcore passes exactly the cases GSI_1E6_PASS lists, 111
The check had become one-sided after the C++ kernel's removal: a case that started passing,
or a change in the count, went unnoticed. As on main, a case that now passes fails the test
until it is added to the list, one that no longer passes is a regression, and the count is 111.
At solidcore 8ddce9016 solidcore passes exactly the 111.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:38:12 -05:00
jyviko 2baa3890bd smlib entry-point test: RoomReason::words asks no kernel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 21:38:12 -05:00
jyviko 3131b933c7 Engine blend-fit test: solidcore is the only kernel, so the refusal always names its edge
The cherry-picked test asked kernel_route which kernel ran; that choice is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:38:25 -05:00
jyviko c97092e385 Kernel rig: a solidcore pin change runs every area and the ladder
The workflow triggers on the root Cargo.toml and Cargo.lock, and the plan gets their diff
(--pin-diff): a changed line that names solidcore's repository (Cargo.toml's git rev, Cargo.lock's
source) selects every area and the ladder. A path filter cannot tell a pin from another
dependency's change, so the plan reads the lines; another dependency's change runs no area.
The fillet rig is not triggered: the kernel rig's fillets shard runs the same cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:37:38 -05:00
jyviko 44ec12cb69 Kernel rig plan self-test: a solidcore pin change runs every area and the ladder
A solidcore bump changes only the root Cargo.toml and Cargo.lock, which neither PATHS-ALL nor
the workflow's trigger paths list, so it ran no rig. The tests want a change to the solidcore
lines of those files to run everything, another dependency's change in them to run nothing, and
the workflow to trigger on both files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:37:25 -05:00
jyviko d2882754fa smlib: a volume's accuracy is clamped to 1e-8..1e-1, as mass_properties clamps it
core::volume calls measure::accuracy, the one clamp the measures share.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:35:44 -05:00
jyviko 955232fbea Test: a volume's accuracy out of range is clamped as mass_properties clamps it
core::volume passed its accuracy to solidcore as given: 0 fails (None), where mass_properties
takes 1e-8. A sphere's volume at 0, -1 and 1e-15 must be its volume at 1e-8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:35:15 -05:00
jyviko ae45cc6623 smlib and kernel: solidcore's refusal reasons carried through as typed errors
A shell, offset or thicken solidcore's one construction refuses because a face's offset folds
(SolidError::ShellRefused, ShellRefusal::Fold) is Error::WallFolds with the largest wall it
names; the kernel says "the wall is thicker than a face curves, so the face's offset would
fold; the largest wall that works is 10 mm". A blend too large carries solidcore's NoRoomReason
as Error::TooLarge's RoomReason, worded in its message before the largest size that fits:
a collapsed offset (solidcore#2431) says the ball is as wide as the face it rolls on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:34:29 -05:00
jyviko a3f06a4f94 Tests: a wall that folds names the largest wall that works, a collapsed offset says why
A thicken of solidcore#2350's parabolic sheet past its apex's radius of curvature is refused
by solidcore's one construction (ShellRefused, Fold, naming 10); the wrapper passed it on as
"solidcore: ..." with no words of its own. A round at the radius of the round it rolls on
beside the 851 part's arc wall is refused as a collapsed offset (NoRoomReason::OffsetCollapses,
solidcore#2431); the message named the size but not why. Both fail until the reasons are
carried through.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:34:28 -05:00
jyviko 954e10d6f0 smlib blends: a set-back vertex is added to the session before its corner is made
At solidcore 8ddce9016 three equal convex rounds at a vertex of three planes are the blend
corner's Ball (fillet_blend_corner). The wrapper set a setback on the corner after the corners
were made, so a set-back vertex was already a Ball (NByTwo) and its setback was refused
(CornerRefused): a_setback_corner_left_open_returns_its_hole (both) and setback_corner's
closed form. solidcore's AddSetBackVertex, called before the corners are made as the fork's capi
round_edges does, keeps a set-back vertex out of the Ball, and its corner is set back.

The corner a setback is set on may also be a blend corner whose event is the Setback, as the
capi takes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:28:04 -05:00
jyviko 53cd9ea5aa smlib export: a ball patch goes out with its sphere and its net, a procedural round as its net
At solidcore 8ddce9016 a Ball corner is a BallPatch (fillet_blend_corner) and a round between
NURBS faces a ProceduralBlend (fillet_round_as_definition). The arrays' B-spline part of a face
had neither, so their export fell to the approximation and failed ("an approximated face surface
that is not a B-spline"): the rounded cube, the variable and curvature rounds and the
all-edges box in the smlib tests, and the Ball-corner and round cases of the rig.

Both are their nets, exactly. A ball patch also goes out as SURFACE_BALL_PATCH, its sphere's
centre and radius in FACE_DEFINITION_REALS, as the record's BallPatch reads it, and comes back
as solidcore's BallPatch on that net: the rounded cube's eight corners stay on their spheres
through the record and back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:24:49 -05:00
jyviko f3f8752153 Move the solidcore pin to 8ddce9016; its new fixes on, fillet_keep_features released
solidcore main at 8ddce9016 adds cone_unbounded_parameterized_as_nurb,
ellipse_open_arc_keeps_end_angle (solidcore#2422), fillet_round_as_definition,
fillet_round_on_round_as_definition, fillet_overflow_crease_along_edge,
plane_first_torus_section_exact, keep_exact_pcurves and shell_one_construction
(solidcore#2367), and drops fillet_extended_rail_end_at_side_edge_crossing.
Every one is on. fillet_keep_features is no longer held back: solidcore#2374
fixes the round beside a boss it refused (solidcore#2370).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 20:18:03 -05:00
brett19 29614b5e0d Known failing on solidcore after pin 97ed188db: the peg's crossing-rails corners not supported (solidcore#2256); 1207's r0.5, the variable linear round and the 871 part fixed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:13:59 -05:00
brett19 e1d3d5009b Hold back solidcore's fillet_keep_features: it refuses a round beside a boss (solidcore#2370)
A block's front top edge rounded r 3 beside a boss joined on its top fails SM_ERR_INVALID_INPUT
with it on; off it builds the closed form, 6099.225530 mm³, as the C++ fork does. Found by
ui-egui's opening_a_large_design_never_stalls_the_window.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:13:26 -05:00
brett19 d170403841 smlib: FitKind::word asks no kernel (every_entry_point_is_in_the_guard)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:13:26 -05:00
brett19 8a730c6273 Fillets on solidcore: the largest size that fits is still the one the search builds; the kernel's names the edge
solidcore's fit is the largest size less a margin (34.99 where the L bracket's bend builds 35,
4.29 where #3435's ring builds 4.3), so the feature's search keeps naming the size, and solidcore's
is the answer only where the search finds none. The refusal keeps its words, "larger than the
faces beside its edges allow", with the edge after them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:13:26 -05:00
brett19 881899bee1 Fillets on solidcore: a blend too large names the largest size that fits and its edge, from the kernel; the crossing-rails mixed corner is not supported (solidcore#2256)
solidcore sizes a blend it refuses as too large (the session's fit, SolidError::FilletRefused under
fillet_gn_section_generator). The smlib crate gives it as Error::TooLarge with the size, what it
sizes and a point halfway along its edge (an equal chamfer's ball radius turned back into its
distance); the kernel words it as the fillet feature's search does (largest_fit_note), and the
feature runs no search when the refusal names it. The 3x2 mixed corner whose rails cross, which
solidcore refuses (fillet_refuse_mixed_corner_crossing_rails), is not supported yet, citing
solidcore#2256.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:13:18 -05:00
brett19 0b6991f1a9 Hold back solidcore's fillet_refuse_rounds_breaking_through: it refuses sound rounds
With it on, 11 rig cases that pass with it off are refused as breaking through the part, and
190-fillet-disc-rim-past-its-2mm-wall fails status 1001. A fix under the same flag is in progress
on solidcore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:12:57 -05:00
brett19 9f6c340d15 Turn on solidcore's new fixes: blend corners, exact arc sections and spans, keep features, mixed corner and break-through refusals
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:12:57 -05:00
brett19 90b3c87de3 Move the solidcore pin to 97ed188db
Brings #2277 (blend step 4b corners: fillet_blend_corner, fillet_exact_arc_sections,
fillet_exact_arc_spans), #2278 (fold and room checks, SolidError::FilletRefused), #2311
(fillet_refuse_rounds_breaking_through), #2309 (fillet_refuse_mixed_corner_crossing_rails),
#2287 (fillet_keep_features), #2317 and #2282.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEu4Lr3moCCisdZShKz
2026-11-02 20:12:57 -05:00
jyviko a59c14678f licences test: the bundled third-party text is checked for wgpu and egui, not truck
Truck is gone from SolidCraft's dependencies, and main's regenerated
THIRD-PARTY-LICENSES.txt no longer lists it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 19:34:09 -05:00
jyviko 147b4049cf History: #11351's commits joined to main, in 509 waves (no file changes)
Main took #11351 as one squashed commit (ea772a043). This merge records its history as 509
wave commits: a wave ends at every SMLib pin and holds at most 4 commits or about 800 changed
lines. Each wave lists the commits it holds; the originals stay reachable from tag
archive/merge-main-develop. Main's files are kept as they are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 19:30:27 -05:00
jyviko b4a3a9baae Wave 45/45: smlib export test: a rounded cube's corners checked on solidcore's spheres (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360).

- b2fd08e85 jyviko: Profiler: no smlib category left in its tests and help
- d49a7eac0 jyviko: Known-failing tests: the convex chamfer that would grow the part passes
- d55fedd56 jyviko: smlib export test: a rounded cube's corners checked on solidcore's spheres
- 017a2a607 jyviko: Known-failing tests: the fillet into an earlier round passes on solidcore

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 18:55:44 -05:00
jyviko cc3e954f45 Wave 44/45: Kernel ladder: the golden recorded on solidcore
1 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360).

- f70f55eff jyviko: Kernel ladder: the golden recorded on solidcore

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 18:33:30 -05:00
github-actions[bot] 185c480319 Regenerate generated files and fold pending files [skip ci] 2026-11-02 23:31:12 +00:00
jyviko c5ccb9201d Wave 43/45: smlib: rustfmt after the C++ kernel's removal (and 1 more)
2 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360).

- 19db2d7c0 jyviko: Docs and comments: solidcore is the kernel
- f1ee045de jyviko: smlib: rustfmt after the C++ kernel's removal

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 18:09:38 -05:00
jyviko 53211ab6ff Wave 42/45: Rig and CI: one kernel, solidcore
1 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360).

- 7d7203f9e jyviko: Rig and CI: one kernel, solidcore

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 18:07:53 -05:00
jyviko 49d9ec2be7 Wave 41/45: smlib crate: the C++ SMLib kernel and its FFI removed
1 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360).

- aa87a149f jyviko: smlib crate: the C++ SMLib kernel and its FFI removed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 18:01:31 -05:00
jyviko 39807359f0 Wave 40/45: Kernel choice removed: solidcore is the only kernel
1 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360).

- fa1b4a9b9 jyviko: Kernel choice removed: solidcore is the only kernel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 17:56:23 -05:00
brett19 054392abbe Wave 509/509: Kernel rig: assembly cases for mass properties, align, find limits and moving items between parts (and 38 more)
39 commits, squashed; the originals stay reachable from tag archive/merge-main-develop. These commits sit on several merged branches, so the wave holds their combined result.

- 1b17dd7f5 brett19: Merge fixes: every crate and test target compiles on the merged tree, but for crates/geom's hlr
- 8f2c11da2 brett19: Drawings hidden lines: read develop's B-rep records
- c30ca0216 brett19: Hidden-line fixtures: build develop's records from the fixtures' data
- 5dd2509ae brett19: Hidden lines: tests of the bounded edges, face charts and placed revolutions
- 1642df0ea brett19: drawing-hlr doc: what is drawn and refused on develop's records
- ddcb80c8e brett19: hlr tests: a placed revolution is refused when its placement is not rigid
- e4977721f brett19: Hidden lines: a traced intersection is drawn only where its spline lies on both surfaces
- b3ef6ae52 brett19: Hidden lines: kernel bodies through the production prepare against closed forms
- 4cd2ae062 brett19: Tests from main: the world state is a Result here
- 51d7ad09e brett19: A blend's pick measures close edges on their curves, not their polylines
- 11a89713c brett19: Merge fixes from the first SMLib test pass
- 48fcb7aac brett19: Merge fixes from the ui test pass and the gates
- abd739855 brett19: A silhouette takes its facing from the surface's normals
- 85114c5a2 brett19: Clippy and rustfmt on the merged tree
- 55a46569f brett19: Stepwise open checks every feature under the session's mode
- 4627402e4 brett19: Clippy without SMLib: the planar-sheet edge reader is built only with it
- 5fbece0ac brett19: STEP import: a ball's halves whose seams are off each other's quarter lines each form within one turn
- eb78d20b0 brett19: Lid ring sketch test: find the ring under the pick, not by main's kernel's name
- 3048d8c49 brett19: Viewport culling test: each box's triangles from its mesh, not 12
- dc88b80e2 brett19: Timeline chip test: a fillet that really reduces
- 876203621 brett19: Edge names: a seam names its one face once; the curve-id test reads every edge kernel-neutrally
- 900635710 brett19: rustfmt on the merged tree
- b7e83cd7c brett19: Known failing on SMLib: two of main's new tests assume truck's box mesh and fillet torus
- 63bde053a jyviko: Locales: Vietnamese for the setback-too-short refusal, now that vi is a complete catalog
- 967a1caa6 brett19: Kernel rig: exact volumes for 1213's bent-tube round and 4782's bar round, rel 1e-6
- 82c821d2a brett19: After the merge: clippy's auto-deref, and the mesh-decisions list for the merged tree
- 5862ee223 brett19: After the merge: main's new tests on the SMLib kernel
- be78372b2 brett19: Twisted sweep: circles about a straight path are exact cylinders (solidcore#2184)
- 312d14500 jyviko: After the merge: a hole that misses is found by exact boxes; a face is a one-face patch; main's mesh-box helpers gone
- 6f7e51acb jyviko: After the merge: split_move's Result reaches its callers; to_local's duplicated move check goes
- 8f0c79b20 jyviko: After the merge: main's two new tests take world_state's Result, as the rest of their files do
- 5f4d70061 jyviko: After the merge with main: its new code on develop's exact bounds, types and thread fields
- 2b2ab6627 jyviko: Cargo.lock: develop's profile, smlib and step crates at main's 0.30.1
- e6a4b0a9a jyviko: Kernel rig: main's six new sketch-only commands are exempt from a kernel case
- 5acbd2e71 jyviko: Cuts leave the bodies their tools can't reach, by exact boxes (#10225 on exact geometry)
- d2b202307 jyviko: Kernel rig: main's new view, rendering, appearance and settings commands are exempt from a case
- 21db090ba jyviko: Kernel rig: construct.plane.axis_point gets construction cases
- c1f45cae2 jyviko: Kernel rig: assembly cases for mass properties, align, find limits and moving items between parts
- 084695416 jyviko: Kernel rig: export and print face cases in the import area

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 17:34:24 -05:00
jyviko 28e983e191 Wave 39/45: diagnostics.kernel takes a typed contract, as main's other diagnostics commands do
1 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360).

- 7ad1d3e12 jyviko: diagnostics.kernel takes a typed contract, as main's other diagnostics commands do

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 16:58:17 -05:00
jyviko e831d681d3 Wave 508/509: Known failing: the 14 cargo tests SMLib v1.1.0-alpha fails, with what each sees; two cases that pass now
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f3b507c05 jyviko: Known failing: the 14 cargo tests SMLib v1.1.0-alpha fails, with what each sees; two cases that pass now

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 16:03:36 -05:00
jyviko 30e272c44a Wave 507/509: Kernel ladder: a golden case marked unstable is gated on its status, and 06/018 is marked (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4e01031bc jyviko: smlib export tests: rustfmt's line for the rounded cube's edge midpoints
- c29190ec3 jyviko: Kernel rig: the fillet and ladder results on SMLib v1.1.0-alpha, the new failures recorded with their reasons
- 62d372cc1 jyviko: Kernel ladder: 07/021 and 06/018 recorded as they are on SMLib v1.1.0-alpha, each with its reason
- 2bf58241f jyviko: Kernel ladder: a golden case marked unstable is gated on its status, and 06/018 is marked

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 15:31:36 -05:00
brett19 f582b1f39e Wave 38/45: CI: build without the C++ SMLib kernel except where a job needs it (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- b8fa0d8aa brett19: Known failing on solidcore after the f916a8d sync; blend_fit in the entry-point guard
- 5a93e6c4d brett19: Make the C++ SMLib kernel opt-in at build time (feature smlib, off by default)
- 29a148abd brett19: CI: build without the C++ SMLib kernel except where a job needs it
- e30cfd2ac brett19: Tests and the rig for a default build without the C++ kernel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 12:30:22 -07:00
bherbruck 8e2b0cd60d Release 0.30.1 2026-11-02 11:11:46 -05:00
jyviko 1b99e756a9 Wave 506/509: SMLib: pin v1.1.0-alpha (a18bbe5): the generic blend's step-4 corners, the Ball's sphere patch through the flat arrays, all-target CI
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d3902c954 jyviko: SMLib: pin v1.1.0-alpha (a18bbe5): the generic blend's step-4 corners, the Ball's sphere patch through the flat arrays, all-target CI

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 10:20:40 -05:00
brett19 a025d2de9b Wave 37/45: Tabbed plate: the rim and one corner arc round together (solidcore#2223) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 4c1eed960 brett19: Tabbed plate: the rim and one corner arc round together (solidcore#2223)
- dd00ff989 brett19: Native wire fixture: a box edge round's cylinder keeps its own frame
- 584075662 brett19: Known failing on solidcore after the smlib merge: SMLib 5e8c9c1's new blend (solidcore#2273) and main's new tests
- 8af1fdf5a brett19: Known failing on SMLib (the .smlib list): as the smlib branch lists them at f916a8d

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 03:04:25 -07:00
jyviko 8ec3dbc201 Wave 505/509: Native B-rep: a ball patch is its own surface kind, read from and written to SMLib's flat kind 6 (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 597b23ba8 jyviko: Sheet metal: cuts and holes pass over sheets and bends by their exact boxes, never a mesh's
- 820b7b667 jyviko: Agents: AGENTS.md loses a stray merge-conflict marker line at its end
- 92734d7eb jyviko: Kernel rig: the boss root's and the hole rim's curvature rounds take 600 s again: under CI's parallel load they pass the 180 s default (develop 820b7b6)
- 653c16e6f jyviko: Native B-rep: a ball patch is its own surface kind, read from and written to SMLib's flat kind 6

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 03:57:45 -05:00
jyviko 961be2269c Wave 504/509: xtask: mesh-decisions, model decisions use exact geometry; today's 176 mesh decision sites are listed and the list only shrinks (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ad3ee0585 jyviko: Agents: model decisions use exact geometry; a mesh is for display, export, previews and mesh bodies
- 608d07eca jyviko: xtask: mesh-decisions, model decisions use exact geometry; today's 176 mesh decision sites are listed and the list only shrinks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-02 02:30:45 -05:00
jyviko 5f2de93fc6 Wave 503/509: Fillet: a setback too short for its corner is refused naming the least that builds (smlib_blend_fit_size) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5136898b9 jyviko: Fillet: a setback too short for its corner is refused naming the least that builds (smlib_blend_fit_size)
- e6db7be0a jyviko: Kernel tests: three rounds of different radii at a corner meet in SMLib's setback corner
- 5d168a5e2 jyviko: Kernel tests: SMLib's own corner between curvature rounds is curvature continuous, as the G2 patch is
- 99953687c jyviko: Kernel rig: the boss root's and the hole rim's curvature rounds take the default timeout again (37 s and 34 s on the box under the rig's parallel load, tangency-labs/smlib#96)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 22:45:59 -05:00
bherbruck afd81380ab Release 0.30.0 2026-11-01 21:55:18 -05:00
jyviko 7099e80059 Wave 502/509: Kernel rig: the pipe on a plate's curvature round meets the plate G2 and the pipe G3, 40307.8856312 (option B's order-2 jets, tangency-labs/solidcraft#10845) (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- aed047703 jyviko: Kernel rig: the pipe on a plate's curvature round meets the plate G2 and the pipe G3, 40307.8856312 (option B's order-2 jets, tangency-labs/solidcraft#10845)
- 17de3569f jyviko: SMLib: pin f916a8d (a round on a definition face is its definition; the G1 setback fill certified convex, setbacks too short refused naming the least; the G2 certificate halves a span no level can certify at once)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 21:37:02 -05:00
brett19 a89ea233ee Wave 36/45: solidcore: a curvature fillet is the equal-area Gⁿ section; mixed wedges refused (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- f9fc68167 brett19: solidcore: a curvature fillet is the equal-area Gⁿ section; mixed wedges refused
- d52cf6b14 brett19: Known failures at solidcore adf26ddbc: curvature and variable rounds built
- 5ec92b0ba brett19: Move the solidcore pin to 2dbd88b6e
- 92618ac4c brett19: Turn on solidcore's new fixes at 2dbd88b6e

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 19:14:46 -07:00
brett19 a239ff50c9 Wave 35/45: solidcore: a variable round is built again, as the union of its balls (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- e30e983c3 brett19: Move the solidcore pin to 4d3ce6264
- c8351719e brett19: Move the solidcore pin to adf26ddbc
- d33b6eb30 brett19: Turn on fillet_gn_section_generator
- 3b4adeb73 brett19: solidcore: a variable round is built again, as the union of its balls

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 18:32:30 -07:00
jyviko 3a5b38355c Wave 501/509: Kernel rig: a case's continuity can ask for an order per seam (seams: [{order, edges, exact}]) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4a4d9c31c jyviko: Known-failing: the shell of a fully rounded box opened at one face fails on SMLib 5e8c9c1 (tangency-labs/smlib#102)
- 303111e4e jyviko: Known-failing: the action matrix's oblique cylinder cut fillet passes on SMLib 5e8c9c1; two shells still fail
- c5332faf4 jyviko: Kernel rig: the boss root's curvature round gets the rig's 1800 s cap: on the CI runners, 8 cases at a time, its G2 certification passed 600 s (tangency-labs/smlib#96)
- 970446dec jyviko: Kernel rig: a case's continuity can ask for an order per seam (seams: [{order, edges, exact}])

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 19:09:20 -05:00
jyviko fb1d5f79ad Wave 500/509: Kernel tests: the box-and-fillet wire fixture records the round's cylinder frame as SMLib now keeps it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 72109054c jyviko: Kernel tests: the box-and-fillet wire fixture records the round's cylinder frame as SMLib now keeps it
- f87305648 jyviko: Known failing: two kernel tests' reasons as they fail on SMLib 5e8c9c1 (a partial selection running into an unblended tangent edge)
- 75efb8f0c jyviko: Kernel rig: two curvature rounds get 600 s, past the 180 s default, while G2 certification is slow (tangency-labs/smlib#96)
- 68c3ccb75 jyviko: Oracle: 34-chamfer-then-fillet and 35-fillet-curved-curved pass on SMLib 5e8c9c1 (their STEP edges are on their surfaces)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 19:14:23 -05:00
jyviko 0aa6f15b82 Wave 499/509: Ladder: 016 and 018 refused, their r3 chain takes the vertical edge; 020 and 021 recorded (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d5cd5f303 jyviko: Known failing: two 851 chains whose corner piece is a ball of tube-centre radius 0
- ea49dff48 jyviko: Ladder: 016 and 018 refused, their r3 chain takes the vertical edge; 020 and 021 recorded
- 38385ab5d jyviko: Kernel tests: three rounds at a box corner end on one rational patch on the ball's sphere, not an analytic sphere
- 459937e52 jyviko: Kernel rig: the curvature round on a pipe on a plate is listed: a seam grades G3 where exactly G2 is wanted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 18:38:05 -05:00
brett19 96a8820f56 Wave 34/45: Known failures on solidcore after the merge: the refused curvature and variable rounds, develop's new cases (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 9f64cce54 brett19: solidcore: a variable-radius fillet is refused until solidcore builds the union of its balls
- bd4dc081d brett19: Known failures on solidcore after the merge: the refused curvature and variable rounds, develop's new cases
- c6fa7e563 brett19: Move the solidcore pin to c9a06dc7c
- de9a654db brett19: Turn on solidcore's new fixes at c9a06dc7c

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 14:22:24 -07:00
jyviko 8f691ac257 Wave 498/509: Kernel rig: the partial-selection cases kept as -partial-chain copies, tangent chain off (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ce8b01fa3 jyviko: Kernel rig: the partial-selection cases kept as -partial-chain copies, tangent chain off
- 78ed75162 jyviko: Kernel rig: the concave arc between the block's tangent sides kept with tangent chain off
- ee3ed66a4 jyviko: Kernel rig: two chains that now build graded by their exact volumes
- f2ff6f0d4 jyviko: Kernel rig: a curvature chain round a round's end refused for its size; the concave half circle builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 14:55:27 -05:00
jyviko 50dfff716b Wave 497/509: Reference tests: the variable rounds 77, 78, 80 and 81 expect the union of their balls (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bf51e62f7 jyviko: Kernel tests: a law's dip shows its corner ball's sphere, a peak's two rounds cross (the reasons had them swapped)
- cde8be4a1 jyviko: Reference tests: the variable rounds 77, 78, 80 and 81 expect the union of their balls
- 155f1f470 jyviko: Known failing: the law corners' kernel and crate tests and rig 1207 pass on SMLib 48ea616
- 21f00a917 jyviko: Kernel rig: every fillet and chamfer case rounds its tangent chain

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 13:55:40 -05:00
jyviko 47402bfa8d Wave 496/509: Ladder: the variable rounds graded to 1e-6 by the union of their balls; 012 by its law going on past the edge (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e8caa1e91 jyviko: Tests: three rounds of different radii at a corner listed: the corner's transition kinks with the balls' touch circles
- 60393a718 jyviko: Ladder: the variable rounds graded to 1e-6 by the union of their balls; 012 by its law going on past the edge
- 6ba069d06 jyviko: Reference tests: the variable rounds 77, 78 and 81 pass on SMLib d01d7b0; their known-failure marks come off
- e24eb7789 jyviko: SMLib: pin 5e8c9c1 (the new blend's corners: Ball and End/Join; exact fold and room checks with fit sizes; overflow in place; the round as its definition)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 18:00:19 -05:00
brett19 2b85a39c9c Wave 33/45: solidcore: a curvature fillet is refused until solidcore has the equal-area Gⁿ section (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 02de15f90 brett19: Move the solidcore pin to 9fb13f145
- 09b646005 brett19: Turn on solidcore's new fixes at 9fb13f145
- c494a18f9 brett19: Rig: the reimported peg's rounds fail as the peg's do
- e9ac0e606 brett19: solidcore: a curvature fillet is refused until solidcore has the equal-area Gⁿ section

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 11:47:31 -07:00
brett19 d0fbd1f60a Wave 32/45: Known failures after the new fixes: four tests and a rig case pass (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- a1b4119c3 brett19: Turn on geometric_g2_continuity: 2992's slowdown is gone
- f2ce343a0 brett19: Known failures after the new fixes: four tests and a rig case pass
- b57c24f7f brett19: Known-failing tests: the tabbed plate cites solidcore#2223
- 0aff35705 brett19: Merge fix: solidcore reads planar sheets without SMLib, so their edge reader is always built

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 07:33:59 -07:00
brett19 7240165c31 Wave 31/45: Turn on solidcore's new fixes at c931c9641 (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- fb851d9c2 brett19: Known-failing tests: main's four tests that fail on solidcore as on C++
- 6de10a7fb brett19: Model cache test: say why it reaches the C++ kernel
- 84bca5969 brett19: Move the solidcore pin to c931c9641
- e1b76bdfc brett19: Turn on solidcore's new fixes at c931c9641

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 03:52:10 -07:00
brett19 3f0e9b87fa Wave 30/45: Model cache: a saved model is its kernel's (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 15c5cd5d5 brett19: Known-failing tests: cite the solidcore issues now filed
- 462738b6a brett19: Known failing after the smlib merge: the r5 test-peg corner on solidcore, main's C++ test lines
- 4a98a1f8a brett19: Model cache: a saved model is its kernel's
- 9c2388ef8 brett19: Geometry kernel strings in Vietnamese, now a complete catalog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 01:25:18 -07:00
jyviko b1a28df0ba Wave 495/509: Kernel tests: variable rounds graded by the union of their balls, the removed volume to 1e-4 of itself (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 01e2e939e jyviko: Variable rounds: graded by the union of their balls (their envelope), not the balls' great circles
- 7bba3092c jyviko: Kernel tests: variable rounds graded by the union of their balls, the removed volume to 1e-4 of itself
- 0b1cc8a8c jyviko: Kernel tests: a spline radius whose balls fold over one another at its peak is refused
- 1745e5c38 jyviko: Kernel rig: the variable round on its cone passes (the round is the balls' envelope)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 01:15:03 -04:00
brett19 4b6bbe9d72 Wave 29/45: One kernel flag: solidcore, the default, or smlib; routed is gone
1 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- afb55d806 brett19: One kernel flag: solidcore, the default, or smlib; routed is gone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 21:48:04 -07:00
brett19 7032e6c760 Wave 28/45: Rig: --route is gone; a run has one kernel (and 1 more)
2 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 3908128a8 brett19: Known-failing tests: refreshed from the default run at solidcore de85a3e00
- cd94f78f3 brett19: Rig: --route is gone; a run has one kernel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 21:48:04 -07:00
jyviko 3b31dc77d8 Wave 494/509: Kernel rig: a junction family: oblique wedges 30 to 150 degrees rounded and chamfered (exact), bosses upright and tilted, pipe tees and a Y junction
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cf5e0e3c1 jyviko: Kernel rig: a junction family: oblique wedges 30 to 150 degrees rounded and chamfered (exact), bosses upright and tilted, pipe tees and a Y junction

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 00:11:16 -04:00
jyviko 632c63f034 Wave 493/509: Kernel rig: the turn at a corner of two rounds, Mitre (the default) and Swept, at a pocket's floor and a boss's base, by exact volumes
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7577e032f jyviko: Kernel rig: the turn at a corner of two rounds, Mitre (the default) and Swept, at a pocket's floor and a boss's base, by exact volumes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 23:54:43 -04:00
jyviko 541910add2 Wave 492/509: Kernel rig: the section orders, chord, circle and curvature section, on planes and against a cylinder (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 922ee28f3 jyviko: Kernel rig: the section orders, chord, circle and curvature section, on planes and against a cylinder
- 19455396b jyviko: Kernel rig: the curvature fillets' expected bodies from the order-2 section at thumbweight 0
- 4df3adc5a jyviko: Curvature fillets: the section's default thumbweight is equal area, so the round's volumes are the circle's
- 539d12648 jyviko: Kernel rig: four G2 corners wait for the corner step: their patch meets the new section's rounds G1 at one face seam

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 23:41:35 -04:00
jyviko 6cc1acc72a Wave 491/509: Kernel rig: #316's bottom rounds as large as the wall, or larger, shell with a step wall at the opening, not refused (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- aa41c0b5d jyviko: Kernel rig: the fillets known-failing list is the 22 cases that fail on SMLib 7ac037e
- 05f5e8601 jyviko: Kernel rig: #316's bottom rounds as large as the wall, or larger, shell with a step wall at the opening, not refused
- 9d4f78001 jyviko: SMLib: pin d01d7b0 (the new blend's one Gⁿ section generator: the chord, circle and curvature sections, and the variable rounds as the union of their balls)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 10:13:51 -05:00
brett19 3ddd8c7179 Wave 27/45: Rig: solidcore known-failing lists at pin de85a3e00 (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 75229f2b9 brett19: Offset tests: a sphere moved to its centre leaves nothing again (solidcore#2092 fixed by #2096)
- 6221b7f4b brett19: Rig: solidcore known-failing lists at pin de85a3e00
- b04e363e7 brett19: Rig: #316's renamed shell cases pass on solidcore, off its known-failing list
- c786db6bf brett19: A blend's pick measures close edges on their curves, not their polylines

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 17:46:08 -07:00
bherbruck 3a5195b0a0 Release 0.29.0 2026-10-31 19:20:30 -04:00
brett19 6a3d422a83 Wave 26/45: Chamfer: second offsets through SetFilletParameters (solidcore#2095) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 197cd4f43 brett19: Booleans: the copies no longer take an index
- 0f843c295 brett19: Pin solidcore at main de85a3e00 (#2080, #2081, #2086, #2095, #2096, #2097, #2102, #2103)
- 0b48548af brett19: Turn on solidcore's new fixes and take the rational-span flag off HELD_BACK
- d0c95f0dc brett19: Chamfer: second offsets through SetFilletParameters (solidcore#2095)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 15:57:25 -07:00
brett19 8fa2488a00 Wave 25/45: Working copies by solidcore's brep_copy, not our own key domains (#2047 fixed by #2055) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 1bf9c8665 brett19: HELD_BACK: geometric_g2_continuity is a fourfold slowdown on 2992, not a hang
- 126a281bb brett19: Pin solidcore at main c093bc5a3 (#2054, #2060, #2061, #2065, #2066, #2068, #2069, #2072, #2076)
- 5d59d42d8 brett19: Turn on gap_samples_non_bspline_v_stride, gap_array_append_updates_longest, imprint_skips_collapsed_definition
- 1c90e60aa brett19: Working copies by solidcore's brep_copy, not our own key domains (#2047 fixed by #2055)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 14:08:19 -07:00
brett19 8f7a8f693c Wave 24/45: Offset tests: both kernels refuse a top moved -9; the sphere to its centre waits on solidcore (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 32b26888c brett19: Turn on offset_keep_cavity_regions and offset_four_face_vertex_split
- 38849d7b0 brett19: Hold geometric_g2_continuity: with the rational-span flag off, 2992 and 3368 don't end
- 5d7dca1a9 brett19: Offset tests: both kernels refuse a top moved -9; the sphere to its centre waits on solidcore
- da4db59a3 brett19: HELD_BACK: geometric_g2_continuity's reason is 2992 alone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 12:10:13 -07:00
jyviko 95788bb730 Wave 490/509: Kernel rig: constant rounds of the exact classes, and a tee's round (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 19014f38a jyviko: Kernel rig: constant rounds of the exact classes, and a tee's round
- 73416a9bf jyviko: Kernel rig: the exact-class rounds pass on SMLib's classified exact rounds
- 60923d8cc jyviko: SMLib: pin 7ac037e (the new blend's tangent-end event, zero-speed G2 ends, and its exact-class rounds)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 14:24:52 -04:00
brett19 91ca23359e Wave 23/45: Every solidcore fix on unless it appears broken (brett19's rule) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 2b1a63d3f brett19: Pin solidcore at main 2898e1197 (#2053)
- 9337aff4c brett19: Every solidcore fix on unless it appears broken (brett19's rule)
- 2cd566aae brett19: Hold bspline_trim_keeps_rational_end_spans: it fails 3078's check
- 9df34988c brett19: Pin solidcore at main bb6b65706 (#2049, #2051, #2055)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 11:00:12 -07:00
brett19 41700f928e Wave 22/45: A round mitred to one that overflows goes first with it (fork 9ba2b12); flags() and warnings (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- eff6416d4 brett19: Pin solidcore at main f75e9d2e8 (#2023, #2024, #2034-#2040, #2043-#2045)
- 15e3a61da brett19: Pin 8: decide the new solidcore flags against the fork at 26cc451
- 6a0166853 brett19: A round mitred to one that overflows goes first with it (fork 9ba2b12); flags() and warnings
- d4eb66f25 brett19: Turn on offset_splits_corner_vertices (fork 2e1bb8c's behaviour)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 10:18:03 -07:00
brett19 905c02afc2 Wave 21/45: boolean2d through boolean_2d, typed edge-vanishes, typed put-back refusal (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 8ad306e69 brett19: boolean2d through boolean_2d, typed edge-vanishes, typed put-back refusal
- b6285e525 brett19: Overflowing rounds go first again (solidcore#1980)
- 2647b12e5 brett19: Hold back fillet_refuse_crossing_rails: not in the fork
- 0b627d637 brett19: Restore all_solid's loop: an unused index slipped in

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:31:30 -07:00
jyviko e1b4ebfe2f Wave 489/509: Rig: fillet corners graded curvature-continuous, the default to be (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a3165f62d jyviko: Rig: fillet corners graded curvature-continuous, the default to be
- be0b1b39b jyviko: Rig: the test-peg's front chamfer builds
- 6cd4003ad jyviko: Rig: the curvature-continuous corner cases pick the curvature fillet
- 4401ffb1f jyviko: Rig: the test-peg's concave chamfer, alone and after the front chamfer, builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 10:40:56 -04:00
brett19 0cb1031f2c Wave 20/45: Pin 7: decide the new solidcore flags against the fork (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 83487c4d9 brett19: Pin solidcore at main 9f2c980b3 (#2004, #2005, #2006, #2008)
- aca0b57ee brett19: Turn on plane_recognition_origin_after_axes
- 5c0279153 brett19: Pin solidcore at main c369f8801 (#1977, #1996, #2000, #2016, #2017, #2018, #2027 and more)
- 14b1d1956 brett19: Pin 7: decide the new solidcore flags against the fork

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 06:48:40 -07:00
brett19 b6078cbe68 Wave 19/45: Offsets go through solidcore's simple calls; ignored tests cite solidcore issues (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- ec3a21778 Brett Lawson: smlib: a blend on solidcore has a history, as on the C++ kernel
- 03470c3df brett19: Pin solidcore at main 9dde25e97 (#1988, #1997, #1985, #1940, #1974, #1975, #1976)
- f01b87757 brett19: Audit the held flags against the fork's source; tabbed plate and mitred rounds parity
- 9b73dfe74 brett19: Offsets go through solidcore's simple calls; ignored tests cite solidcore issues

Co-authored-by: Brett Lawson <brett@Ubuntu-resolute-latest-amd64-base.zst>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 03:01:40 -07:00
jyviko 63ebc56842 Wave 488/509: Rig: blends that end where their face runs tangent into another
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 227337905 jyviko: Rig: blends that end where their face runs tangent into another

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 01:46:15 -04:00
jyviko 732436fd59 Wave 487/509: Rig: the test-peg corner at r5 and r7
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2c75cf424 jyviko: Rig: the test-peg corner at r5 and r7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 01:45:57 -04:00
jyviko 9af354a6db Wave 486/509: STEP import: a face bounded by a slit alone is the whole of its closed surface (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 88e00486b jyviko: STEP import: a face bounded by a slit alone is the whole of its closed surface
- 3c16884f7 jyviko: Rig: the test-peg's concave arc and front top edge rounded together stay within the body's box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 01:45:57 -04:00
jyviko 8b35e23551 Wave 485/509: STEP import: a face bounded by seams alone runs its loop the other way, never turns over (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 57edcf61a jyviko: Kernel rig: the oblique-cut round keeps its old grade until the new blend algorithm lands
- a250062c2 jyviko: Kernel rig: 1985's enclosure is 78 x 77 (74 and 73 inside, 2 mm walls); its volume 38063.827 by hand
- b0d1ba345 jyviko: Kernel rig: the three spline walls' face counts wait for the one-wall decision; their volumes grade them
- 77f127c61 jyviko: STEP import: a face bounded by seams alone runs its loop the other way, never turns over

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 09:39:30 -04:00
jyviko b78df205d1 Wave 484/509: Kernel rig: 3841 is 168's rim touching its coin along a circle, and 4092's reduced recipe is its report less a flange clear of the failing join; the kept cases carry their sources (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 889a2f866 jyviko: Kernel rig: the cut mirrored loft graded on the box its sections pin
- 37a4c5647 jyviko: Kernel rig: the three modelled-thread joins and the fine M48 graded on their volume (the basic profile's groove, Pappus)
- 6c2a2f395 jyviko: Kernel rig: the oblique-cut round graded by its seams (tangent, not curvature-continuous); the flanged rhombus says what it tests (its reliefs stay apart at 60 mm)
- cd56cd3ad jyviko: Kernel rig: 3841 is 168's rim touching its coin along a circle, and 4092's reduced recipe is its report less a flange clear of the failing join; the kept cases carry their sources

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 09:05:46 -04:00
jyviko c35be9d20e Wave 483/509: Kernel rig: the two G0 window patches graded on the box the part they close keeps (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f6847c97c jyviko: Kernel rig: the base with two adjacent flanges and a hole graded on its volume (base, bends and panels folded)
- bfdb79418 jyviko: Kernel rig: the flange beside the ledge graded on a volume range (the flange's two readings of its length)
- 130f2adaf jyviko: Kernel rig: the two G0 window patches graded on the box the part they close keeps
- 8e0f6403c jyviko: Kernel rig: the hub's six swept grooves graded on its volume (the revolved hub less each tube's part inside it)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:57:47 -04:00
jyviko cc313cc3fa Wave 482/509: Kernel rig: the two folded 72 degree trays graded on their volume (flat area x thickness) and the walls' reach (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 49c7b982e jyviko: Kernel rig: the chamfered corner of the lipped shell graded on its volume (the chamfer's triangle through the wall)
- 0bcc24ccd jyviko: Kernel rig: the concave round into the peg's cylinder graded on a volume range (the torus it must add, the band it can't leave)
- 27b7e202a jyviko: Kernel rig: the two folded 72 degree trays graded on their volume (flat area x thickness) and the walls' reach
- 9b4162a33 jyviko: Kernel rig: the flanged rhombus graded on its volume (flat area x thickness, all four reliefs cut) and its walls' ends

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:57:03 -04:00
jyviko 66327c27aa Wave 481/509: Kernel rig: shell/3576 was the ladder's drafted box with rounds shelled, recipe for recipe; the ladder case grades it and carries #3576 and #3573 (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f2aba03f8 jyviko: Kernel rig: 616 graded on its volume (the lid less its 0.5 mm-offset cavity, sharp to rounded concave edges) and box
- 764719c53 jyviko: Kernel rig: 391 graded on its volume (the shelled housing, sharp to rounded at the flange, less the letters' 0.6 mm deboss) and box
- 4b512f69e jyviko: Kernel rig: shell/3576 was the ladder's drafted box with rounds shelled, recipe for recipe; the ladder case grades it and carries #3576 and #3573
- 63dd6ae6f jyviko: Kernel rig: the two 851 chamfers of 2 graded on their volume (the cone's sweep, and its union with the front edge's prism)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:55:24 -04:00
jyviko a98d055597 Wave 480/509: Kernel rig: the arc-sided plate shell graded on its volume (sharp to rounded at the hole's bottom), faces and box (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a53f1640e jyviko: Kernel rig: the up-down squares shell graded on its volume (the columns less the 0.346 mm-offset cavity, sharp to rounded concave edges) and box
- be8e728cd jyviko: Kernel rig: 545 graded on its volume (the frame less its 0.5 mm-offset cavity, sharp to rounded concave edges), its sealed pillar void and box
- edb558bd1 jyviko: Kernel rig: the shell-again case graded on its volume (the shelled box less the 0.5 mm-offset cavity in its walls) and box
- fd9d159f4 jyviko: Kernel rig: the arc-sided plate shell graded on its volume (sharp to rounded at the hole's bottom), faces and box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:54:16 -04:00
jyviko 2eff99979a Wave 479/509: Kernel rig: 1494 graded on its volume (box and cylinder less the 1 mm-offset cavity, sharp to rounded concave edges) and box (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c740e4de1 jyviko: Kernel rig: 1494 graded on its volume (box and cylinder less the 1 mm-offset cavity, sharp to rounded concave edges) and box
- ba75de350 jyviko: Kernel rig: 4492 graded on its box and a volume range (the face's 19 mm sweep added, within the block's sides)
- bdb321cdb jyviko: Kernel rig: 745 graded on its volume (the end moved 1 mm plus the spline boss's exact area), faces and box
- 1893a5016 jyviko: Kernel rig: 4567 graded on its volume (the revolved spline less its revolved 2 mm offset), faces and box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:48:29 -04:00
jyviko e2186acfd7 Wave 478/509: Kernel rig: 1985 and 2243 STEP-export enclosures graded on their volume and box (the outline less the cavity, plus gusset and standoffs) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d54d3195f jyviko: Kernel rig: 4542 fluted wall joined on a revolved base graded on its volume and box (the base by Pappus plus the fit-spline ring)
- c0c961326 jyviko: Kernel rig: 1985 and 2243 STEP-export enclosures graded on their volume and box (the outline less the cavity, plus gusset and standoffs)
- d77aac416 jyviko: Kernel rig: both 4092 loft, ribs and pad unions graded on their volume and box
- e30459e52 jyviko: Kernel rig: 1525 graded on its volume (the convex body's exact 2 mm inward offset), faces and box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:45:31 -04:00
jyviko af35c52805 Wave 477/509: Kernel rig: 831 tapered glyph extrude graded on a volume range and box (the font's S drafted in by 10 deg) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7fdbd5ab6 jyviko: Kernel rig: 4879 window cut through a thickened spline revolve graded on a volume range and its faces
- 18c8add3f jyviko: Kernel rig: 4623 join of crossing pleated loft skins graded on its volume and box (both skins less their overlap)
- 5fb3cfa8a jyviko: Kernel rig: 831 tapered glyph extrude graded on a volume range and box (the font's S drafted in by 10 deg)
- 34e404d38 jyviko: Kernel rig: 2357 ring of 90 cylinder segments graded on its volume and box (the segments less their 90 joint overlaps)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:55:10 -04:00
jyviko 8702e71372 Wave 476/509: Kernel rig: 3604 G2 swept-tool cut graded on a volume range (filleted box minus the swept corner section) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d3c8c36ec jyviko: Kernel rig: 3243 rim and tooth join graded on its volume (rim plus the trimmed tooth less their 0.01 mm overlap)
- 9aa2651b1 jyviko: Kernel rig: 3782 emboss on a cylinder graded on its volume, area, faces and box (the wrapped 4 x 5 badge raised 1 mm)
- 391fc51b4 jyviko: Kernel rig: 3604 G2 swept-tool cut graded on a volume range (filleted box minus the swept corner section)
- 166d574cc jyviko: Kernel rig: 4505 coil joined through a cylinder wall graded on its volume, area and box (cylinder plus the wire's screw-swept segment outside r 76)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:45:26 -04:00
jyviko 9e1b41f90b Wave 475/509: Kernel rig: five cases outside fillets repeat a kept case's regime and go
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- de3483ecc jyviko: Kernel rig: five cases outside fillets repeat a kept case's regime and go

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:41:55 -04:00
jyviko 890eb79452 Wave 474/509: Kernel rig: fillets keeps one case per regime; 17 replications of a case in the same regime go
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d184f4f2d jyviko: Kernel rig: fillets keeps one case per regime; 17 replications of a case in the same regime go

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:42:19 -04:00
jyviko d4d8be7f00 Wave 473/509: Kernel rig: the two 3871 cone cases were byte-for-byte the 258 cases; the 258 cases carry their sources (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5e348ae2a jyviko: Tests: rustfmt the board fixture example and the coplanar asserts
- 033d1a122 jyviko: Kernel rig: the two 3871 cone cases were byte-for-byte the 258 cases; the 258 cases carry their sources
- 780a0652d jyviko: Kernel rig: a volume or area can be graded as a hand-derived range where analysis only bounds it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:31:27 -04:00
jyviko 1c70f2c708 Wave 472/509: Material tests: the nine copies in material_properties go; the persistence file checks the library copy's card and formats 20 and 21 in one loop (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 43551498d jyviko: STEP import test: a seam sphere whose meridian stops short of the pole imports as the whole 2 mm ball
- 6704d3094 jyviko: Material tests: the nine copies in material_properties go; the persistence file checks the library copy's card and formats 20 and 21 in one loop
- 94acc0c43 jyviko: Sample test: one loop checks every sample builds cleanly and without a panic; the robustness copy goes
- 88c7cb6a8 jyviko: Known failing: the non-antipodal seam sphere import, refused for a loop of no (u, v) area

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 09:12:14 -04:00
jyviko ef7bd814ee Wave 471/509: Kernel tests: the twelve ignored print-only debug tests and surveys go; coplanar_curved_booleans checks the flush-capped cylinder cuts and unions they printed (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f81c4b157 jyviko: Chamfer history test: the chamfer after each box cut is exactly one face on the painted block too
- 9c0d6bd1f jyviko: Grid test: a pole side's face is the five triangles fanned from its one grid node, none degenerate
- 648413556 jyviko: Kernel tests: the twelve ignored print-only debug tests and surveys go; coplanar_curved_booleans checks the flush-capped cylinder cuts and unions they printed
- 35805f899 jyviko: Kernel: the #883 board fixture generator is an example, not an ignored test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 09:01:02 -04:00
jyviko c8ea4168b1 Wave 470/509: Modify history tests: shell, offset and thicken are one test each through the public API, with the volumes, refusals and history the SMLib copies checked (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 16bef1097 jyviko: Shell regression: the saddle-corner shell opened on the top box's side has its exact volume
- 699ddb6b3 jyviko: SMLib history test: every operand's order is the identity on its record's faces and edges
- ec421252d jyviko: Boolean history tests: the SMLib module's box-minus-sphere, box-minus-cylinder and box-union-box copies go; the top-level ones check more
- f87f22874 jyviko: Modify history tests: shell, offset and thicken are one test each through the public API, with the volumes, refusals and history the SMLib copies checked

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:57:45 -04:00
jyviko b9105a394e Wave 469/509: Kernel pocket floor fillet test: the corner rounds and the floor loop round add their exact volumes, by Pappus at the corners (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 94e67d4ca jyviko: Kernel loft test: the square-to-circle loft has the oracle's exact ruled volume, without printing
- 4c7d4f5c0 jyviko: Tessellation lens test: the lens's triangles fill exactly the rhombus through its arcs' midpoints
- 0d94d5f77 jyviko: Pattern test: six chamfered holes take exactly five more holes' bore and chamfer rings
- c44cbe9ac jyviko: Kernel pocket floor fillet test: the corner rounds and the floor loop round add their exact volumes, by Pappus at the corners

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:55:02 -04:00
jyviko f60f71d878 Wave 468/509: Robustness tests: lip_after_boss and hole_as_deep_as_the_plate live once, in the engine's tests.rs with exact volumes (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d7bbf09e0 jyviko: Issue 1080 tests: the rib's rounds and the mitred corner chamfers and rounds have their exact volumes
- 0e51ffbff jyviko: Engine tests: lip_after_boss checks each lip's and groove's exact band, hole_as_deep_as_the_plate each hole's exact bore
- e03c72a3e jyviko: Robustness tests: lip_after_boss and hole_as_deep_as_the_plate live once, in the engine's tests.rs with exact volumes
- 321e56724 jyviko: Engine tests: loft_cut goes; loft_spacing's hollow elbow covers its section counts and more

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:52:02 -04:00
jyviko 133de31ec9 Wave 467/509: Frames tests: a pick on a moved component or an instance removes the exact round and bore volumes (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5fe9df533 jyviko: Known failing tests: the shell after a cut whose end touches an arc side builds on SMLib batch 7
- 8ec40d25e jyviko: Surface fair test: the energy falls strictly, the face moves, and the edges are read after the fair
- 697ea2ca8 jyviko: Sketch scaling test: the first dimension sets l1 to 40 and scales both joined rectangles about the origin
- e60cde8dc jyviko: Frames tests: a pick on a moved component or an instance removes the exact round and bore volumes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:49:23 -04:00
jyviko 59b9345750 Wave 466/509: SMLib: pin 26cc451 (batch 7: rounds past a rim, blend refusals that build, shells) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 25692b119 jyviko: Kernel rig: the ring cut frame and the up-down join shell
- 18f08bf83 jyviko: Kernel rig: #616's lid shells open at a rib's side, with the 0.15 lip
- 78b765e83 jyviko: Known failing tests: the action matrix's shells and chamfers as they fail with SMLib batch 7
- f7d4e5344 jyviko: SMLib: pin 26cc451 (batch 7: rounds past a rim, blend refusals that build, shells)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 08:56:36 -04:00
jyviko 67013acc28 Wave 465/509: Naming: a blend's seams split its edge's name at the | between its two faces (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 469a3b2f9 jyviko: Naming: a blend's seams split its edge's name at the | between its two faces
- 1d818a2d1 jyviko: Fillet rig: five refused blends build, off the known-failing list
- 8550ac7e4 jyviko: Kernel rig: the trough and the pocket whose floors fall to a drain build
- 5f826a1a6 jyviko: Kernel rig: the plate with a hole through its arc side shells open at its far end

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 01:43:36 -04:00
jyviko 4c1dee13f3 Wave 464/509: Sketch: a control spline can carry its own knots and weights (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b16e8a542 jyviko: Sketch: a control spline can carry its own knots and weights
- e6abea809 jyviko: Sketch projection: a free-form edge comes in as the one exact spline it is
- f61f25c7f jyviko: Fillet rig: blends past an outer rim of their faces build, on SMLib smlib-blends-past-rims
- 09bc14dbd jyviko: Naming: test that a round of a round's end has no seam with that round's faces

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 01:34:06 -04:00
jyviko 24134d2ed0 Wave 463/509: kernel: Extend grows a surface of several faces face by face (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- dd8867414 jyviko: kernel: Extend grows a surface of several faces face by face
- 48a757827 jyviko: kernel: Split Body by a face of a smooth sheet cuts with the whole sheet
- 3421a8ef0 jyviko: Tests: a cylinder strip's run-offs are 100 pi + 100 to 1e-6, SMLib's exact area
- 20d5d8b13 jyviko: kernel: an extension SMLib cannot make exact says so, naming the length asked

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 00:01:07 -04:00
jyviko cfd04c33fe Wave 462/509: SMLib: pin 2fc375f (tangency-labs/smlib#71, #72, #73)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6853c116d jyviko: SMLib: pin 2fc375f (tangency-labs/smlib#71, #72, #73)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 00:16:07 -04:00
jyviko 6f88c0a0a7 Wave 461/509: Sweep path: a curve of several pieces is turned round whole (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5bb43bdb1 jyviko: CI: the test jobs grade their junit against tests/KNOWN_FAILING_TESTS
- d23c37027 jyviko: Tests: the known-failing list takes develop's 10 failing tests
- e18fb40d8 jyviko: Reference tests: the eight cases that fail on SMLib eaa998a name their cause as known failures
- 9b58a5170 jyviko: Sweep path: a curve of several pieces is turned round whole

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 20:34:38 -04:00
jyviko 3db45df8be Wave 460/509: xtask: known-failing grades a nextest junit report against tests/KNOWN_FAILING_TESTS (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c19500fce jyviko: Fillet: the radius-too-large choice in plain nouns
- b75d17667 jyviko: kernel: a round that would cut through its wall into a hollow is refused
- 795394417 jyviko: Fillet rig: 1668's R7 past the inside corner is refused at 4 + 2 sqrt2
- a26d3ee41 jyviko: xtask: known-failing grades a nextest junit report against tests/KNOWN_FAILING_TESTS

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 19:59:22 -04:00
jyviko 7f9ddb31a8 Wave 459/509: kernel: the re-blend's removed picks formatted as rustfmt lays them out (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 62fe29dbd jyviko: Fillet rig: the cases SMLib 737c392 builds come off the known-failing list
- 571d711c8 jyviko: kernel: the re-blend's removed picks formatted as rustfmt lays them out
- 2fab94991 jyviko: kernel: blend_smlib laid out by the 2024 edition's rustfmt
- 38fd4a4f6 jyviko: Skills: the tests skill's unit-test example stays under the 3600-character limit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 20:22:15 -04:00
bherbruck ee6b85605a Release 0.28.0 2026-10-30 19:50:14 -04:00
Brett Lawson 39e9916cbc Wave 18/45: smlib: solidcore's four new fork-carried opt-ins are on; the trimmed face tight box waits (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- b0568524b Brett Lawson: smlib: solidcore's four new fork-carried opt-ins are on; the trimmed face tight box waits
- a2d5971be Brett Lawson: smlib: the quarter-cylinder sheet offset and the half-disc extrude match the C++ kernel on solidcore
- 509209838 Brett Lawson: solidcore: move the pin to afcee131a (main, with solidcore#1594, #1674, #1595)
- c9fcf82a5 Brett Lawson: smlib: solidcore's four new fork-carried opt-ins are on; the fillet trim status waits

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-31 00:24:30 +01:00
jyviko dfe4701d22 Wave 458/509: engine tests: probes ask for the exact point class (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cdff4ac7c jyviko: engine tests: probes ask for the exact point class
- 7ca072ec6 jyviko: ui, cli tests: probes ask for the exact point class
- a85d22e60 jyviko: kernel: Body::contains, the mesh test, is gone
- baf51b271 jyviko: kernel tests: the rim chamfers running off their rims build, on SMLib 737c392

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 17:09:20 -04:00
Brett Lawson c324acdf29 Wave 17/45: smlib: an extruded profile's arcs on one circle sweep one wall face on solidcore (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 9a901d136 Brett Lawson: smlib: tag history on solidcore is one application Tag per object, with the capi's handlers
- fecd4bee3 Brett Lawson: smlib: an extruded profile's arcs on one circle sweep one wall face on solidcore
- 5f7a21157 Brett Lawson: smlib: the half-disc extrude's C++ comparison cites solidcore#1477
- f64857f95 Brett Lawson: solidcore: move the pin to 15e72dff9 (main, with solidcore#1752, #1495, #1796)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 21:44:01 +01:00
Brett Lawson b6cd0d495e Wave 16/45: smlib: history on solidcore: a face whose edge is only cut by a vertex is Kept (fork 1c7accd) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 63864b298 Brett Lawson: smlib: solidcore's five new fork-carried opt-ins are on; the trim end-span opt-in waits
- 494a08de1 Brett Lawson: smlib: history on solidcore: a face whose edge is only cut by a vertex is Kept (fork 1c7accd)
- ccfa37a9b Brett Lawson: solidcore: move the pin to bba8d8798 (main, with solidcore#1747 application attribute handlers)
- 8d47118ff Brett Lawson: smlib: solidcore's three new fork-carried opt-ins are on; the blend-curve revolve opt-in waits

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 20:15:56 +01:00
jyviko dd2376923f Wave 457/509: kernel: Body::classify_point decides inside, outside or on the boundary exactly (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 20c0c2ffc jyviko: Kernel rig: a sloped basin's mitred rim rounds are checked tangent along their contact lines
- 56d39a576 jyviko: smlib: Brep::classify_point says exactly where a point lies against a body
- 7b3e66cba jyviko: kernel: Body::classify_point decides inside, outside or on the boundary exactly
- 3b88f1acc jyviko: doc: a hole decides whether it exits at its drill point's shoulder exactly

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 13:39:25 -04:00
Brett Lawson 8c597703f8 Wave 15/45: smlib: a face section on solidcore cuts planes, cylinders, cones and spheres too (solidcore#1769) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- cf2a15ace Brett Lawson: smlib: solidcore's four fork-carried opt-ins are on; only the trim base v opt-in waits
- c3f5bb40b Brett Lawson: smlib: a draft on solidcore keeps the body's tags and face history
- cd25e9e8f Brett Lawson: smlib: a face section on solidcore cuts planes, cylinders, cones and spheres too (solidcore#1769)
- 9c1f8904e Brett Lawson: solidcore: move the pin to 43ed10e54 (main, with solidcore#1650, fixing #1631)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 18:17:38 +01:00
jyviko ae9ff0aa71 Wave 456/509: kernel, doc: an overflowing round goes first; an edge it removes is gone, and the fillet says so (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6f0bf0dea jyviko: Tests: a 1 degree crease rounds, and the knife edge's chamfers build, on SMLib smlib-batch-4-rulings
- 3772a6e97 jyviko: kernel, doc: an overflowing round goes first; an edge it removes is gone, and the fillet says so
- 9308224ef jyviko: Fillet rig: the knife edge's 0.5 chamfer builds
- 58e0d8346 jyviko: Tests: a 15° tapered text builds, every letter grown, exact where its outline gives it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 12:25:04 -04:00
jyviko 0b206f2ed5 Wave 455/509: kernel: one smooth angle, and a round too small to change the part is refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 04955683f jyviko: Tests: a strip's tangent and curvature run-offs are the distance long across the surface
- 4f64a035a jyviko: kernel: one smooth angle, and a round too small to change the part is refused
- c23ef9d93 jyviko: Fillet rig: the knife-edge chamfers name SMLib's cause, a cusp's ball radius of 0
- 6f7172dc8 jyviko: kernel tests: a corner round wider than its faces overflows and takes the corner's other edges

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 12:25:06 -04:00
jyviko 3b4fcd25c0 Wave 454/509: SMLib: pin eaa998a (tangency-labs/smlib#68, #69, #70)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- abe571b27 jyviko: SMLib: pin eaa998a (tangency-labs/smlib#68, #69, #70)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 16:51:33 -04:00
jyviko 7d0c7e383e Wave 453/509: Model cache: a body made by rounds keeps them, so a later round blends them the same after opening (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9760feed4 jyviko: Kernel: a body's record of rounds goes with its history, and can be read back
- f3cf0c4f3 jyviko: Model cache: a body made by rounds keeps them, so a later round blends them the same after opening
- 134a34f89 jyviko: Tests: a corner patch of rounds 2/3/4 takes no more than the strips leave in its block
- 456e5b7fa jyviko: Tests: the io crate's hand-built saved models list their rounds, as format 7 records do

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 19:36:28 -04:00
jyviko 8ac8ff66b7 Wave 452/509: Fillets: a later round at a corner where earlier rounds meet blends them again with it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8ed4663ae jyviko: Mesh convert: a reconstructed bore is one wall, so the bracket has 9 faces
- 6d8e002f8 jyviko: UI: rim and wall picking tests for a circle of arcs that is one wall
- 3e5b358af jyviko: Fillets: a later round at a corner where earlier rounds meet blends them again with it
- 5d1b18f40 jyviko: Tests: a later r3 round at an r2 mitre, through the Fillet feature, makes the all-at-once corner

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 17:50:02 -04:00
jyviko 5fa7a8497c Wave 451/509: Preferences: symmetric surface extrudes read only the total distance (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2ae53d387 jyviko: Preferences: metric tapped holes drill only the tap maker's drill
- a71450aeb jyviko: Preferences: symmetric surface extrudes read only the total distance
- 26b42048c jyviko: Preferences: the Body check note says each option in one short line
- 2c1901371 jyviko: kernel: the record test takes the one wall a circle of arcs extrudes to

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 16:03:31 -04:00
jyviko bc93a653f6 Wave 450/509: STEP import: a solid the kernel refuses, its faces too, is refused with the reason, never a mesh (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 709765fca jyviko: Model cache: a saved model records its body check mode and is adopted under it
- 393c83c2a jyviko: STEP import: a solid the kernel refuses, its faces too, is refused with the reason, never a mesh
- 6700e6ef1 jyviko: kernel: a body SMLib keeps in the record's order is mapped, whatever order its export lists
- 222211de4 jyviko: Model cache: a thinned model keeps the check mode only as the model records it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 15:53:21 -04:00
jyviko 33fdadcc40 Wave 449/509: doc: names saved before format 14 find nothing; their features ask to reselect (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ef37bd445 jyviko: doc: names saved before format 14 find nothing; their features ask to reselect
- d3766865a jyviko: Tests: old designs open and evaluate; what they rebuild to is today's
- 45823002c jyviko: SMLib: pin 68fb916 (tangency-labs/smlib#67)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 15:10:21 -04:00
jyviko 47985ce485 Wave 448/509: doc, engine: a stored name finds its very face or edge, or its feature asks to reselect it
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cfa6f38d6 jyviko: doc, engine: a stored name finds its very face or edge, or its feature asks to reselect it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 12:17:38 -04:00
jyviko 0b8a0e08a0 Wave 447/509: doc: a face its feature made from several roles has each as a name
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4a652ba4a jyviko: doc: a face its feature made from several roles has each as a name

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 12:12:52 -04:00
jyviko 201617ef88 Wave 446/509: doc, ui: a feature that lost a reference asks for it to be picked again (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e43fe1ab0 jyviko: Kernel rig: diagnostics.validation is a setting, exempt from cases
- b24d90269 jyviko: doc, ui: a feature that lost a reference asks for it to be picked again
- d62d248b7 jyviko: doc: Untrim's face points pick faces of the body it untrims
- 1b08d4b8b jyviko: doc: a feature's face points are named on its own component's bodies first

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 12:12:26 -04:00
jyviko 99cd20ea20 Wave 445/509: Engine: diagnostics.validation reads and sets the mode (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5d80fc571 jyviko: Engine: diagnostics.validation reads and sets the mode
- 1a93a3977 jyviko: CLI: run and kernel-cases take the validation mode
- 50501fe14 jyviko: Preferences: Body check, once per feature by default
- 6a133042c jyviko: Preferences: the body check is the kernel's, not named after SMLib

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 10:48:24 -04:00
jyviko 143a6cb987 Wave 444/509: Kernel: a validation mode decides when sweeps, booleans and blends are checked (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 292ec65c8 jyviko: Fillet rig: the chamfer running into the openings is named for what it does
- 051a7b714 jyviko: Kernel tests: rustfmt
- 4030b795c jyviko: Kernel: a validation mode decides when sweeps, booleans and blends are checked
- 9acbcf924 jyviko: Evaluation: under each_feature a feature's kept bodies are checked once

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 09:36:05 -04:00
jyviko d263bf1e90 Wave 443/509: Kernel tests, fillet rig: a chamfer past its rim builds, cut by what lies past it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b4af45dd0 jyviko: Kernel rig: the horn torus and the circle revolved touching its axis build
- f1199f89b jyviko: Joint drive: contact is decided on the exact bodies, not their display meshes
- 3a2fac31a jyviko: Kernel tests, fillet rig: a chamfer as wide as its rim builds
- 1878274cb jyviko: Kernel tests, fillet rig: a chamfer past its rim builds, cut by what lies past it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 11:57:20 -04:00
jyviko 3f0139b4d9 Wave 442/509: kernel: a seam held as two edges is one join, drawn whole in the shaded view (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e46359ff0 jyviko: Kernel rig: the patch cases the fill now builds come off the known-failing lists
- 7c9e5ec69 jyviko: kernel: a seam held as two edges is one join, drawn whole in the shaded view
- 12496c2c1 jyviko: Tests: a round flange stays an exact circle through unfold, refold and DXF, with a cut near its rim
- 7fe880a7b jyviko: SMLib: pin f8fd83e (tangency-labs/smlib#66)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 11:23:09 -04:00
Brett Lawson 7a761d9436 Wave 14/45: smlib: solidcore's tangent-face edge check and horn-torus revolve opt-ins are on (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 5314031ba Brett Lawson: smlib: solidcore's tangent-face edge check and horn-torus revolve opt-ins are on
- 81088bf0c Brett Lawson: smlib: a sweep along a bent path is tested on solidcore (solidcore#1628 is fixed)
- a6b280467 Brett Lawson: solidcore: move the pin to 3569b5d73 (main, with solidcore#1665, #1681, #1614, #1677)
- 0bed45d82 Brett Lawson: smlib: solidcore's planar thicken side walls opt-in is on; four opt-ins wait for the fork

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 13:55:13 +01:00
jyviko 74405f5da0 Wave 441/509: geom, kernel: a loop with fewer than three corners is filled by a ring of patches (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d5941c0d0 jyviko: geom: a general fill's crown fills out to the side its neighbours' normals face
- f7409dd59 jyviko: geom, kernel: a loop with fewer than three corners is filled by a ring of patches
- c088cf43e jyviko: geom: the patches about a centre are solved the same to the last bit on every run
- 25e275722 jyviko: Tests: a patch's continuity g3 is valid, g5 is the hostile word

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 08:43:21 -04:00
jyviko 96181d3c41 Wave 440/509: geom, kernel: the patch fill's sides run from corner to corner, not edge to edge (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 49377d318 jyviko: geom: patches about a fill's centre join G1 there, with the linear gluing function
- 55cb6b32b jyviko: geom, kernel: the patch fill's sides run from corner to corner, not edge to edge
- 62d41a0cf jyviko: Tests: the fill tests evaluate a face's (u, v) on its NURBS form
- 30b12cea8 jyviko: geom: a crowned height field rises by the whole crown at its box's middle

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 08:16:18 -04:00
jyviko 47bec0a072 Wave 439/509: Raytrace: a closed box dielectric is certified from its mesh's geometry, in any tiling (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5732b62ec jyviko: Tapered extrude: the end check of a profile with holes takes the section a swallowed line leaves
- 738f336e1 jyviko: Raytrace: a closed box dielectric is certified from its mesh's geometry, in any tiling
- 9243b6550 jyviko: SMLib history: a split line between two pieces of one face comes from nothing
- 013978724 jyviko: geom: the patch fill's cross-boundary targets agree with its corners

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 07:58:06 -04:00
jyviko 4ffc6a9017 Wave 438/509: SMLib import: an extruded circle's circle comes from its widest span, not the face's range (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fb5ae6cdd jyviko: SMLib import: an extruded circle's circle comes from its widest span, not the face's range
- 17a466e6b jyviko: Ruled surface: a free strip on a straight edge gets a far curve that can bend
- f2982b47a jyviko: Sheet tests: the tiny cut inside the exact circle is above SMLib's modelling tolerance
- cf40a3e6c jyviko: Boolean regression test: the raked wedge's R4 rounds the four edges the issue picked

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 08:30:32 -04:00
jyviko ff3000e10b Wave 437/509: Curvature comb: every comb shown at one scale, kept by the command (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0b7468729 jyviko: Curvature comb: every comb shown at one scale, kept by the command
- 6ab96c658 jyviko: View analyses: one toggle group, its state in the session
- 9a45d4248 jyviko: Kernel rig: inspect.analysis is a display analysis switch, exempt like the others
- 8d590c198 jyviko: Kernel tests: the long-setback G2 patch's reach past the box from its exact surface

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 08:06:05 -04:00
jyviko faf08ec1bb Wave 436/509: Blends: an edge is smooth when its faces' normals agree all along it, decided exactly (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- dfa84e84d jyviko: Blends: an edge is smooth when its faces' normals agree all along it, decided exactly
- 6cc759750 jyviko: SMLib import: an extruded circle is a cylinder over the face's trimmed range
- 9b3572797 jyviko: Fillet rig: the known-failing list names the report- cases, not their old ids
- 9851718ea jyviko: Curvature comb: purple envelope and orange teeth from their own theme tokens

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 07:06:10 -04:00
Brett Lawson 2c5a94cd1d Wave 13/45: smlib: solidcore's new opt-in fixes are on: sliver iso curves degenerate, Coons corner patches tangent to their sides, a fillet's own edge kept at a corner patch, the corner ball centred where the axes meet, one solution for a seam point, 2D boolean covers of far faces, area only between solid and void, a coincident definition split across the split point, the tight box from the interval's knots, overlapping bands refused, and the SSI tangent-curve tracer (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 2d84f8a17 Brett Lawson: smlib: solidcore's new opt-in fixes are on: sliver iso curves degenerate, Coons corner patches tangent to their sides, a fillet's own edge kept at a corner patch, the corner ball centred where the axes meet, one solution for a seam point, 2D boolean covers of far faces, area only between solid and void, a coincident definition split across the split point, the tight box from the interval's knots, overlapping bands refused, and the SSI tangent-curve tracer
- 0877278d6 Brett Lawson: solidcore: move the pin to 2b81c033 (main, with solidcore#1640, #1623, #1655, #1673, #1668, #1662)
- 97a475d8d Brett Lawson: smlib: solidcore's torus check and step-wall opt-ins are on: the torus check reads its V interval, a spindle torus through its apex is a self-intersection, and a local operation builds the step wall between tangent faces moved apart
- f4eec76b4 Brett Lawson: solidcore: move the pin to dca3135cc (main, with solidcore#1630, #1632, #1649, #1664)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 11:52:02 +01:00
jyviko e58e85e3d6 Wave 435/509: Fillets: a curvature-continuous fillet's corners are G2 patches
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ccc690c53 jyviko: Fillets: a curvature-continuous fillet's corners are G2 patches

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:38:21 -04:00
jyviko 4a0519e464 Wave 434/509: Fillet rig: the owner's reports are report- cases; the G2 corner graded at its seams
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a9755bdd2 jyviko: Fillet rig: the owner's reports are report- cases; the G2 corner graded at its seams

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:36:17 -04:00
jyviko 103b86f8f4 Wave 433/509: Fillet rig: the concave arc where a bar's top meets a cylinder its sides run tangent into (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c9bf97ce4 jyviko: Blends: an edge is smooth only where its faces are tangent all along it
- 1e6c91a10 jyviko: Fillet rig: the concave arc where a bar's top meets a cylinder its sides run tangent into
- de9c005f2 jyviko: Blends: a blend face is named by its picked edge, not an edge it took up

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:10:46 -04:00
jyviko b9237538e4 Wave 432/509: SMLib import: an extruded circle past a turn stays its exact spline
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 977949819 jyviko: SMLib import: an extruded circle past a turn stays its exact spline

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 05:50:04 -04:00
jyviko b36140f6fd Wave 431/509: Kernel tests: the basin rim chamfers check the kernel's refusal kind, not the named size (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bf85e0a6c jyviko: Fillet rig: the knife edge's R2 round builds on the new SMLib pin
- 739e47b9d jyviko: Kernel tests: the basin rim chamfers check the kernel's refusal kind, not the named size

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 07:29:02 -04:00
jyviko e19d1d1051 Wave 430/509: Fillet rig: grade the 851 rows' rounds G1 at their own tangent seams (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 94938b3b5 jyviko: Kernel rig sources: the kinds of the four sources the new cases cite first
- 191fa9839 jyviko: Fillet rig: the R7 round past a thin wall's inside corner held to its exact volume
- ecbca1f74 jyviko: Fillet rig: grade the 851 rows' rounds G1 at their own tangent seams
- 30dce7fba jyviko: Fillet rig: the sloped basin's rim loops with their mitred corners' exact volumes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 07:05:04 -04:00
jyviko 9be549e6a1 Wave 429/509: Continuity rig: an opened tube end capped G1 and G2, as cases (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8b9e0e0c0 jyviko: Continuity rig: an opened tube end capped G1 and G2, as cases
- 24a58066c jyviko: Sweeps rig: a circle touching its axis revolved a quarter turn, as a case
- 51316b7ec jyviko: Import rig: the horn torus quarter written to STEP and read back, as a case
- 8524458ce jyviko: Tests skill: when a check is a unit test and when it is a rig case

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:57:37 -04:00
jyviko eeaddb56c1 Wave 428/509: Surfaces rig: the cylinder and torus windows the general fill patches, as cases
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 10fe62a2b jyviko: Surfaces rig: the cylinder and torus windows the general fill patches, as cases

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:56:46 -04:00
jyviko 7044a44425 Wave 427/509: Shell rig: the drain floors, the rounded opening and the arc-sided plate as cases
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 06f7fa501 jyviko: Shell rig: the drain floors, the rounded opening and the arc-sided plate as cases

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:56:46 -04:00
jyviko 02b8c88cf8 Wave 426/509: Fillet rig: the geometry of the failing fillet and chamfer unit tests, as cases
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ebd1b1509 jyviko: Fillet rig: the geometry of the failing fillet and chamfer unit tests, as cases

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:55:35 -04:00
jyviko f80b3ebc1f Wave 425/509: Motion interference: a volume it could not work out is not measured, never a sampled guess
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b6d3c8b80 jyviko: Motion interference: a volume it could not work out is not measured, never a sampled guess

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 07:02:41 -04:00
jyviko db9897fda7 Wave 424/509: Tessellation: two curves that touch within the chord tolerance share nodes, so the face pinches there (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 368b34e3b jyviko: Tessellation: a curved face's grid reads the quarter turn from its surface, not its parameter
- 9da160892 jyviko: Tessellation: two corners of a face a hair apart, within their tolerance, are one point of it
- 7cbbe2bc2 jyviko: Tessellation: two curves that touch within the chord tolerance share nodes, so the face pinches there
- 95f1258b7 jyviko: Motion interference: a collision is deepest where the parts share the most volume

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:56:28 -04:00
jyviko f1ac8d3361 Wave 423/509: Curvature comb: exact teeth on model edges and faces (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9142c6c5b jyviko: Curvature comb: exact teeth on model edges and faces
- 1af128a69 jyviko: Curvature comb: Comb length and Teeth controls in the tool

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:51:09 -04:00
jyviko 8ecfeef245 Wave 422/509: Tests: the naming corpus checks that references resolve and builds agree (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c1328212d jyviko: Tests: curved bodies' contact stop is checked, not the sweep's internal step
- 172c64cef jyviko: Tests: the naming corpus checks that references resolve and builds agree

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:38:11 -04:00
jyviko f0a2c3f99d Wave 421/509: Tests: Open in EasyPrint's STL is read back, not measured in bytes (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5ea43b5c2 jyviko: Tests: a tray's sheet names are checked by where their points lie
- 978ae1d51 jyviko: Tests: a mirrored sheet's flat pattern is its source's mirrored, as the code makes it
- 2be7b1b6f jyviko: Tests: the extruded ellipse is checked by its area, not its face count
- 51855589d jyviko: Tests: Open in EasyPrint's STL is read back, not measured in bytes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:38:11 -04:00
jyviko 54c3b1e90e Wave 420/509: Tests: the knife-edge R2 fillet is checked once, in closed form (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4d7553dd8 jyviko: Kernel tests: a ruled strip's moved handles are checked on its far curve
- 21c1ed541 jyviko: Kernel tests: rim rounds meeting at a concave corner are mitred, not swept
- 03054211b jyviko: Tests: the arc-touching cut is checked by its volume and area, not its face count
- 5e7e1485c jyviko: Tests: the knife-edge R2 fillet is checked once, in closed form

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:37:40 -04:00
jyviko 819461c908 Wave 419/509: Kernel tests: modifier histories are graded by what each face is, not how many changed (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5229bbedd jyviko: Kernel tests: a small bend's display mesh is graded on the display mesh alone
- 4ff38619c jyviko: Kernel tests: the rounded shell's planar roles are graded by name and exact volume
- a3848d1d0 jyviko: Kernel tests: modifier histories are graded by what each face is, not how many changed
- a45d56aa9 jyviko: Kernel tests: the slot plates' STEP files are graded by their bounds and volume, not surface kinds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:38:59 -04:00
jyviko fdd103fc2a Wave 418/509: Kernel tests: the collapsed taper's mesh is held to its B-rep, the taper to validity (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a0c24b87c jyviko: Kernel tests: the back edge then the arc is one more pair of the rounds-in-sequence test
- c69dbc5d3 jyviko: Kernel tests: the collapsed taper's mesh is held to its B-rep, the taper to validity
- 87e9123d3 jyviko: Kernel tests: a crowned patch's hostile crowns are refused for their range
- 65718cd41 jyviko: Kernel tests: the five- and six-sided fills are graded by what they make, not their face counts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:38:34 -04:00
jyviko f4dcd28de7 Wave 417/509: Kernel tests: a chamfer whose leg runs off the thin rim is refused, naming the largest (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3569298a4 jyviko: Kernel tests: a chamfer whose leg runs off the thin rim is refused, naming the largest
- a8f393ca3 jyviko: Kernel tests: the tabbed plate's rim rounds take their exact volume
- 5af467aef jyviko: Kernel tests: the box rounded after separate bottom rounds takes its exact volume
- 659bd866b jyviko: Kernel tests: the #871 part's fitting rounds take their exact volume

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:38:22 -04:00
jyviko e790c6428d Wave 416/509: Kernel rig: everyday chamfers of box edges and pocket rims (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2f88ca2f6 jyviko: Kernel rig: everyday chamfers of box edges and pocket rims
- 51641123c jyviko: Kernel tests: drop the mixed arc-and-line mitre test, the rig's 485 grades it
- e9963439b jyviko: Kernel tests: the round into a hole moves to the rig, with the hole cut the test's way
- 65e46a962 jyviko: Kernel tests: a round as tall as its wall and more builds on the disc

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:37:24 -04:00
jyviko f43214a52f Wave 415/509: Kernel rig: everyday fillets after fillets
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fd571d076 jyviko: Kernel rig: everyday fillets after fillets

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:07:18 -04:00
jyviko fc3062884f Wave 414/509: Kernel rig: everyday rounds of an L-bracket's bend
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 06e802ffe jyviko: Kernel rig: everyday rounds of an L-bracket's bend

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:07:18 -04:00
jyviko 8f4378db60 Wave 413/509: Kernel rig: everyday rounds and chamfers of a hole through a plate
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cd7a099f4 jyviko: Kernel rig: everyday rounds and chamfers of a hole through a plate

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:07:18 -04:00
jyviko 3afa2e874e Wave 412/509: Kernel rig: everyday rounds of a pocket and a boss
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d027399e0 jyviko: Kernel rig: everyday rounds of a pocket and a boss

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:07:18 -04:00
jyviko 5c69b88375 Wave 411/509: Kernel rig: everyday rounds on a block joined to a cylinder
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f78e7fd66 jyviko: Kernel rig: everyday rounds on a block joined to a cylinder

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:07:18 -04:00
jyviko e6d1893f1c Wave 410/509: Kernel rig: everyday box corners and box edges, rounded and chamfered
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 57090ba2e jyviko: Kernel rig: everyday box corners and box edges, rounded and chamfered

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:07:18 -04:00
jyviko eda02a5ee7 Wave 409/509: Kernel tests: a slot narrower than the taper closes partway up and builds; a closing hole is refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 01d0d6bb9 jyviko: SMLib bindings: a curve list holds up to 16384 curves, as the C API now takes
- 96b248d28 jyviko: Kernel tests: a slot narrower than the taper closes partway up and builds; a closing hole is refused
- 42d4d0ecd jyviko: Engine tests: rounding the long edge then the left upright matches the three edges their chains take
- b66821c82 jyviko: Kernel tests: the third round at a mitred corner takes its tangent chain, a sphere octant

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:20:30 -04:00
jyviko 1bffc3cc78 Wave 408/509: Kernel tests: a swallowed tip's volume is the drafted wedge's, every wall at the taper (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 785b78bea jyviko: Surface Fair test: fair the B-spline patch on a saddle rim, not an offset sphere
- 1817cffaf jyviko: Shell: a basin shelled past its 4 mm rim measures its exact sharp offset
- 2e123eb3d jyviko: Kernel tests: a swallowed tip's volume is the drafted wedge's, every wall at the taper
- 1661fe292 jyviko: SMLib: pin 985faae, the batch of 2026-10-30 evening (tangency-labs/smlib#63–#65)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:11:50 -04:00
Brett Lawson 7df316ccce Wave 12/45: smlib: a face's planar section runs on solidcore, as the capi's smlib_face_section (solidcore#1534) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 3346f4172 Brett Lawson: smlib: solidcore's new opt-in fixes are on: UV trim checks on the surface, loop orientation from the loop's box, cones extended as themselves, the local operation's box, joined drop pieces, exact edges on analytic faces after a shell, and the two SSI trace fixes
- 271f0a39e Brett Lawson: smlib: a face's planar section runs on solidcore, as the capi's smlib_face_section (solidcore#1534)
- 436fae56a Brett Lawson: smlib: drafting a cylinder's side runs on solidcore (solidcore#1606, fixed by #1611)
- 39adb66ad Brett Lawson: solidcore: move the pin to 55748ecf (main, with solidcore#1648, #1645, #1644, #1641, #1639, #1637, #1636, #1634, #1657, #1656, #1654, #1653, #1652, #1651, #1598, #1622, #1618, #1616, #1603, #1626, #1661, #1658, #1660, #1629, #1663: attributes through offsets, shells, booleans and copies (#1462 P2, P4), the tight box from the interval's knots (#1054), a merge's UV trims named after their edge use (#435), SM_API ordered-point surfaces, exact projection copies, and the fork's WR-562, WR-547, WR-546, WR-541, WR-537, WR-536, WR-535, WR-533, WR-542 and WR-75 opt-ins)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 09:00:08 +01:00
Brett Lawson 0710897b63 Wave 11/45: smlib: a sweep along lines and arcs goes piece by piece on solidcore, as the capi does (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 97d79e3b8 Brett Lawson: smlib: the solidcore tag test names what still holds it back
- 6a3558a96 Brett Lawson: smlib: a sweep along lines and arcs goes piece by piece on solidcore, as the capi does
- 1feba5af9 Brett Lawson: smlib: the bent-path sweep's ignore cites solidcore#1628
- 9ceddd9d5 Brett Lawson: solidcore: move the pin to 937a6319 (main, with solidcore#1534, #1537, #1544, #1617, #1608, #1582, #1591, #1625, #1586, #1619, #1620, #1611, #1647, #1646, #1643, #1642, #1638, #1635, #1633: planar section curves, SM_API intersections, cut, HCR silhouettes on solids, UV trim checks on the surface and tiny loops oriented, projection, trimming, tessellated boundaries and knot removal, the fillet refusal that leaves the body unchanged, Cone::lean_cylinder as a cone, and the fork's WR-260, WR-550, WR-545, WR-543, WR-80, WR-534 and WR-532 opt-ins)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 06:56:18 +01:00
jyviko 27d240d58c Wave 407/509: Native B-rep: a body is written as it serializes, not through a JSON value (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 73b053221 jyviko: Face capture test: extruding a split face in an uncaptured component is refused
- 918429c6d jyviko: Sheet machining: a trimmed To Object tool is measured as the prism its record proves
- f37b95498 jyviko: Native B-rep: a body is written as it serializes, not through a JSON value
- 298869f4d jyviko: Engine tests: the hostile-parameter test builds its starting model once per command

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 01:42:31 -04:00
jyviko 39e6e333c0 Wave 406/509: Tests: the saved curved strip is the link a truck build saved (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 01477bb14 jyviko: Tests: the saved curved strip is the link a truck build saved
- 0c4f54edf jyviko: rustfmt
- 74001e532 jyviko: Tests: check what each operation is for, not how many faces it makes
- a84369fe7 jyviko: Sheet convert: a wall cut off at its strip keeps each corner with its own edge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 00:35:26 -04:00
Brett Lawson 3ff9e634bc Wave 10/45: smlib: curvature-continuous rounds and corners left open on solidcore (solidcore#1438, #1439) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- c8adedaec Brett Lawson: smlib: solidcore's new fixes are on (taper tangent corner planes, holed revolve void, loose tangent edges refused, scaled extrusion origin zero, booleans skip faces apart)
- 744f7574d Brett Lawson: smlib: drafted extrudes keep their corners and curve sweeps keep the profile where it lies on solidcore (solidcore#1449, #1450)
- dafb25b4b Brett Lawson: smlib: the body check reads a Caller body's recorded keys on solidcore (solidcore#1584)
- 2ad118666 Brett Lawson: smlib: curvature-continuous rounds and corners left open on solidcore (solidcore#1438, #1439)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 04:41:50 +01:00
bherbruck aa1fe28ddf Release 0.27.1 2026-10-29 23:34:31 -04:00
Brett Lawson 1db07a82f8 Wave 9/45: smlib: an offset or other non-NURBS face surface exports through ApproximateSurface on solidcore (solidcore#1441), and the new fixes are on (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- a69016f21 Brett Lawson: solidcore: move the pin to e4379b45 (main, with solidcore#1573: the #1024 rail-through-boundary-vertex test, plus the CreateCurveApproxPoints and PolyBrepCopy ports)
- 2308fa5be Brett Lawson: solidcore: move the pin to ddfb3895 (main, with solidcore#1569 and #1533: the 3x2 mixed corner at a concave unfilleted edge, and SmSurface::ApproximateSurface)
- f23aa76d3 Brett Lawson: smlib: an offset or other non-NURBS face surface exports through ApproximateSurface on solidcore (solidcore#1441), and the new fixes are on
- d4cec2ca9 Brett Lawson: solidcore: move the pin to b2450cbf (main, with solidcore#1568, #1579, #1581, #1585, #1597, #1604, #1600: attributes through booleans, taper corner rules, the curve sweep, check_brep naming, fillet thirds and corner marks, WR-302)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-30 04:25:21 +01:00
jyviko a322451356 Wave 405/509: Tests: a round wall is one face, its name without a piece number (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bf74dcbbe jyviko: Tests: a round wall is one face, its name without a piece number
- 8f914ddd2 jyviko: Tests: the saw cut's halves named after their faces, listed in the kernel's order
- 1a5a3b5eb jyviko: Tests: an extended cylinder strip stays one face in every mode
- a3f150257 jyviko: Tests: the tapered bosses' volume in closed form, not truck's measure

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:55:46 -04:00
jyviko 88c7c71761 Wave 404/509: Kernel: the box-and-fillet wire records are SMLib's
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- add3ebdb0 jyviko: Kernel: the box-and-fillet wire records are SMLib's

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:25:14 -04:00
jyviko 20dde1a67a Wave 403/509: Kernel tests: a circle is one closed arc, a round wall one face (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ec4eebaa8 jyviko: sew: a folded pcurve has no piece shorter than it lifts onto its edge
- 1bc8b204f jyviko: Kernel tests: a circle is one closed arc, a round wall one face

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:25:14 -04:00
jyviko 27e5a5ea8d Wave 402/509: Sheet face names: a triangle takes a flat face's name only where that face faces its way (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 41206c065 jyviko: Sheet metal: a whole circle in the outline is sewn as its two exact halves
- 374d3b7e8 jyviko: Sheet machining: a depth an ulp off the sheet's face is on it
- 909f9a20e jyviko: Sheet face names: a triangle takes a flat face's name only where that face faces its way
- ff9ccaf1e jyviko: Sheet tests: the DXF outline and the folded volume as the exact flat pattern and measure give them

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:54:09 -04:00
jyviko 54706bbb36 Wave 401/509: Convert Mesh: a triangle of no area is dropped, not refused (#4561) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 1ae748417 jyviko: Robustness: seed 5's edge-only join keeps two bodies, as joins have since 94ee28d5c
- 48d72ba2b jyviko: Convert Mesh: a triangle of no area is dropped, not refused (#4561)
- a0a75dc78 jyviko: Kernel rig: import/4561 passes, off the known-failing list
- beaed5b35 jyviko: Kernel rig: threads/2369 names the tap maker's 6.8 mm drill for M8

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:11:16 -04:00
jyviko d76cee7ce7 Wave 400/509: Fair: a net of up to 128 x 128 control points, the band bounding the solver (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4ebc3d078 jyviko: UI tests: the thread catalogue's error and Press Pull's hole wall as they are now
- 2debdd87a jyviko: Pi case test: each standoff is four faces, its walls one face each
- db757efc7 jyviko: Tests: the pi case and the hole wall read as on green-truck-era-tests, so both branches agree
- 191c1b855 jyviko: Fair: a net of up to 128 x 128 control points, the band bounding the solver

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 21:52:09 -04:00
jyviko dbec20dbbe Wave 399/509: STEP import: a void reads as a cavity whichever way its shell flag points, again (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f8b45f277 jyviko: STEP import: a void reads as a cavity whichever way its shell flag points, again
- 64188ce43 jyviko: Planar regions: a hole goes to the material that holds it, read closer than the hole lies
- 1a0289011 jyviko: Planar region tests: edges on one line are one edge of the result
- 514426e5d jyviko: STEP import: a closed spline a face lies across the start of starts clear of the face

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:32:31 -04:00
jyviko 1e9e80b7a7 Wave 398/509: Tests: the fit and taper tests use geometry that still doesn't fit (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c47c1d26a jyviko: Tests: the fit and taper tests use geometry that still doesn't fit
- 8c37bc756 jyviko: Fillet rig: R10 past the full round is refused naming 7.5 mm, as the case asks
- a100c7c06 jyviko: Loft rails: a station grows about its section's centroid by length, not the mean of its control points
- e5476706b jyviko: Issue 616 test: the lid's volume is its closed form, 6703.5344

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:10:22 -04:00
jyviko 5cd36d55e1 Wave 397/509: Tests: convex blends past a cliff are cut from the part, as the owner decided (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 44b779364 jyviko: Tests: a point path's sweep has a wall along each line; coplanar walls join at a corner
- d945cf53a jyviko: Fillet and chamfer: a refusal as too large names the largest size that fits
- 8bcd81244 jyviko: Tests: a blend refused as too large is SMLib's NO_ROOM, in its own words
- deaf8e679 jyviko: Tests: convex blends past a cliff are cut from the part, as the owner decided

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:28:16 -04:00
jyviko e4ebb8c820 Wave 396/509: Kernel: a mitred sweep carries a slanted section all the way to each mitre (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b9d0a3308 jyviko: Mesh memo test: SMLib's booleans mesh neither operand
- b6c3bf3c5 jyviko: Face capture test: an Offset Face's top is anchored by its exact history name
- 1ee5f1af3 jyviko: Kernel: a mitred sweep carries a slanted section all the way to each mitre
- 1e4b64402 jyviko: Provenance: a sweep's origins are the ones it recorded

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:11:21 -04:00
jyviko 2cc1577a9d Wave 395/509: Kernel: planar source lineage finds each face's support through an index, with no budgets (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 15c31a96f jyviko: Kernel: planar source lineage finds each face's support through an index, with no budgets
- 049b2bc40 jyviko: Lumps: a face-source table of another length is refused, never sliced
- f60bf96df jyviko: Planar sources test: two bodies side by side joined as the record requires
- e1b762c4b jyviko: Booleans and Shell keep the lines faces were split along on purpose

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 21:51:09 -04:00
jyviko 86390de541 Wave 394/509: Exploded views are shown only: the design's placements and Capture Position leave them out (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ffb1e650d jyviko: Isocurve Analysis: count curves each way, evenly spaced across the face
- 177eb207f jyviko: Exploded views are shown only: the design's placements and Capture Position leave them out
- 8d72cfa59 jyviko: SMLib export: a face's outer area reads only its own loop's edges

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 22:42:10 -04:00
jyviko 9acdd5ec66 Wave 393/509: Point and Plane Along Path: exact on the path's curves by arc length, and a t outside 0…1 is refused (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e7e613b6f jyviko: Records: the item budget bounds input, not the kernel's own results (Refs #3992)
- cf2b3a62f jyviko: Fair Surface: a face of degree 1 one way fairs along its curved way, and a face with nothing free is left as it is
- 16d467e14 jyviko: Point and Plane Along Path: exact on the path's curves by arc length, and a t outside 0…1 is refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 20:41:33 -04:00
jyviko d0a8be5939 Wave 392/509: Compare Bodies: each region measured exactly, on the cut of the two bodies (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 97935eed8 jyviko: Inspect: the centre of mass from the exact faces, as Measure takes it
- d094d43f2 jyviko: Compare Bodies: each region measured exactly, on the cut of the two bodies
- 864bcbccb jyviko: Compare Bodies: a region the exact cut cannot measure has no volume and says why, never an estimate
- a1dbb7c08 jyviko: Kernel rig: the two G2 corner cases are graded clear of the vertices, as the ladder grades them

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 20:26:56 -04:00
jyviko 12c2310d5e Wave 391/509: SMLib: pin 1ccd461, the batch of 2026-10-30 (tangency-labs/smlib#58–#62)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2937d9e88 jyviko: SMLib: pin 1ccd461, the batch of 2026-10-30 (tangency-labs/smlib#58–#62)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 21:33:53 -04:00
jyviko aa1557009c Wave 390/509: Kernel rig: rustfmt; measured values in results are decimals, within tolerance; the ladder records 06/023 passing (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 80d08659f jyviko: Kernel rig: the booleans, import and threads lists name the 5 cases that fail on the pinned SMLib
- 5c45570c9 jyviko: Kernel rig: rustfmt; measured values in results are decimals, within tolerance; the ladder records 06/023 passing
- 393a9aab6 jyviko: CI: native and reference tests stay on pushes until develop is green
- 322ac2592 jyviko: CI: the release gate still calls ci.yml (workflow_call)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 19:53:29 -04:00
bherbruck 5b0eb08473 Release 0.27.0 2026-10-29 19:53:24 -04:00
jyviko 2b2229ab31 Wave 389/509: Kernel rig: one results check, each {step, pointer?, json, rel?, abs_mm?} (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6af622978 jyviko: Threads: a taper thread's groove follows its crest cone across the section, so no sliver of the flanks is left
- 3f5efdf70 jyviko: Kernel rig: one results check, each {step, pointer?, json, rel?, abs_mm?}
- dc093b0cb jyviko: Kernel rig: a symmetric surface extrude with no convention is the total distance (#9091); the per-side reading is its own case
- 55338e139 jyviko: Kernel rig: each area's PATHS names only its own files, and EXEMPT lists only commands no case uses

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 19:11:21 -04:00
Brett Lawson d3dc45681a Wave 8/45: smlib: a call answers None exactly when solidcore's error stands for an SMLib status (SolidError::sm_status, solidcore#1452) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 0d3c46dad Brett Lawson: solidcore: move the pin to 6a068272 (main, with solidcore#1419 WP4: the level-2 AssertValid tests and SmSurfOfExtrusion::AssertValid, #1578)
- 41e902eaa Brett Lawson: solidcore: move the pin to 0ae36782 (main, with solidcore#1452: SolidError::sm_status and a port-invariant variant)
- c13d760fa Brett Lawson: smlib: a copy queried under the arena's identities is a port-side invariant (solidcore#1452)
- 76c755508 Brett Lawson: smlib: a call answers None exactly when solidcore's error stands for an SMLib status (SolidError::sm_status, solidcore#1452)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 23:03:37 +01:00
jyviko 98ec65d94d Wave 388/509: Ladder: the golden recorded on SMLib 60b1c6a with tiers 05, 06 and 12's new cases
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 023017747 jyviko: Ladder: the golden recorded on SMLib 60b1c6a with tiers 05, 06 and 12's new cases

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:58:06 -04:00
jyviko cae382900a Wave 387/509: Ladder 12: sheet metal, from a base flange to a bracket with a lip, each answer from its flat area
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 779532f63 jyviko: Ladder 12: sheet metal, from a base flange to a bracket with a lip, each answer from its flat area

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:48:54 -04:00
jyviko 3348b60b54 Wave 386/509: Kernel rig: a flat_pattern field grades a sheet metal case's flat pattern
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 014a9eced jyviko: Kernel rig: a flat_pattern field grades a sheet metal case's flat pattern

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:48:54 -04:00
jyviko 68ea0f940f Wave 385/509: Ladder 06: pipe threads, the buttress's steep flank, the tip options and the square refusal
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 1ad966045 jyviko: Ladder 06: pipe threads, the buttress's steep flank, the tip options and the square refusal

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:41:27 -04:00
jyviko fadca8440f Wave 384/509: Kernel rig: interference and clearance between placed occurrences (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9fecf7709 jyviko: Kernel rig: interference and clearance between placed occurrences
- 22cd8e74f jyviko: Ladder generator: cases.py writes the values committed by hand for 05/007, 06/017, 07/016 and 11/003
- 487914427 jyviko: Ladder 05: UNC, UNF, Rc and NPT tapped holes, each drilled to its tap maker's drill

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:40:57 -04:00
jyviko cd5c13e78d Wave 383/509: Kernel rig: bodies moved, copied and extracted, designs inserted, occurrences copied, reparented, dragged and exploded land where worked out
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3b7dabdb7 jyviko: Kernel rig: bodies moved, copied and extracted, designs inserted, occurrences copied, reparented, dragged and exploded land where worked out

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:20:41 -04:00
jyviko 06e4d75e9c Wave 382/509: Kernel rig: contact sets stop a drive at the block, touching faces don't, and edit, list, enable and disable do as coded
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e7eb8a5d4 jyviko: Kernel rig: contact sets stop a drive at the block, touching faces don't, and edit, list, enable and disable do as coded

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:20:41 -04:00
jyviko 27a0383e1c Wave 381/509: Kernel rig: motion studies play, plot and trace to known values; a crank-slider's slider follows r cos t + sqrt(l^2 - r^2 sin^2 t)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 489441907 jyviko: Kernel rig: motion studies play, plot and trace to known values; a crank-slider's slider follows r cos t + sqrt(l^2 - r^2 sin^2 t)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:20:41 -04:00
jyviko 7623e37e7b Wave 380/509: Kernel rig: motion links, rigid groups, floating chains, named origins, edit, delete, solve, inspect, reach and sweep
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d136b313a jyviko: Kernel rig: motion links, rigid groups, floating chains, named origins, edit, delete, solve, inspect, reach and sweep

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:20:41 -04:00
jyviko 43a8e92a12 Wave 379/509: Kernel rig: gears turn by their radii, a rack travels r per radian, a screw its lead per turn, a disc cam lifts 2e
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 236a5597e jyviko: Kernel rig: gears turn by their radii, a rack travels r per radian, a screw its lead per turn, a disc cam lifts 2e

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:20:41 -04:00
jyviko 470cd4d761 Wave 378/509: Kernel rig: each joint type moves its part to the placement worked out by hand, limits clamp, as-built keeps it in place
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0da95a8cc jyviko: Kernel rig: each joint type moves its part to the placement worked out by hand, limits clamp, as-built keeps it in place

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:20:41 -04:00
jyviko 35a31aa3cb Wave 377/509: Kernel rig: parameter cases, an expression in a sketch dimension and a cyclic one refused (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 445f6faa4 jyviko: Kernel rig: parameter cases, an expression in a sketch dimension and a cyclic one refused
- 2cd1a0335 jyviko: Kernel rig: an assemblies area, with the source files that rerun it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:20:41 -04:00
jyviko 93f8ba1a8d Wave 376/509: Kernel rig: configuration cases, one configured block with each row's exact geometry
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d34f7ee17 jyviko: Kernel rig: configuration cases, one configured block with each row's exact geometry

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:09 -04:00
jyviko 22c92d8eff Wave 375/509: Kernel rig: history area, timeline cases with each part's exact answer
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 74eeda491 jyviko: Kernel rig: history area, timeline cases with each part's exact answer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:09 -04:00
jyviko 45ee28379e Wave 374/509: Kernel rig: inspect cases, the gap between two spheres, their lens where they overlap, none past the clearance (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 305c36479 jyviko: Kernel rig: inspect cases, the gap between two spheres, their lens where they overlap, none past the clearance
- 4355e15df jyviko: Kernel rig: inspect cases, a box against a taller one and an identical one, and a tolerance out of range refused
- 7b1fbb57f jyviko: Kernel rig: inspect cases, the comb of a sketch circle and line and a cylinder edge, and nothing picked refused
- 5c80ef4ad jyviko: Kernel rig: inspect cases, three isocurves each way on a cube's top, and a count of 0 refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:20 -04:00
jyviko 121439114c Wave 373/509: Kernel rig: inspect cases, the overlap volume of two boxes, none where they only touch, a box inside a box (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cacc394f9 jyviko: Kernel rig: inspect cases, the centre of mass and volume of a box, of a box and cylinder, and an unknown body refused
- f43a0c7ac jyviko: Kernel rig: inspect cases, the smallest radius of a fillet, an ellipse and a circular edge, and none on a box
- 311b57bb7 jyviko: Kernel rig: inspect cases, a fillet's seams are G1 with a 1/r curvature jump, a box edge is sharp, too few stations refused
- 58b384d7d jyviko: Kernel rig: inspect cases, the overlap volume of two boxes, none where they only touch, a box inside a box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:20 -04:00
jyviko b10cd4b8e0 Wave 372/509: Kernel rig: construction cases, where three planes meet, and parallel planes or planes through one line refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 1ac12ba72 jyviko: Kernel rig: construction cases, where three planes meet, and parallel planes or planes through one line refused
- f72108895 jyviko: Kernel rig: construction cases, where two edges meet or come closest, and parallel edges refused
- 1acbf1e9c jyviko: Kernel rig: construction cases, a point on a vertex or another construction point, and no body refused
- 33e3b6379 jyviko: Kernel rig: the inspect area, what reruns it, and the analyses that only draw

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:20 -04:00
jyviko 2aec675349 Wave 371/509: Kernel rig: construction cases, the centre of a circular edge, sphere, torus and sketch arc, and a flat face refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 02ee36ce9 jyviko: Kernel rig: construction cases, the plane through parallel and meeting edges, and skew edges refused
- fbe540b40 jyviko: Kernel rig: construction cases, a point along a sketch line and arc, and one past the end held at the end
- a0bd94f4d jyviko: Kernel rig: construction cases, the centre of a circular edge, sphere, torus and sketch arc, and a flat face refused
- 8a8960f13 jyviko: Kernel rig: construction cases, where an edge crosses a square and a slanted plane, and a parallel edge refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:12 -04:00
jyviko 992b243cb6 Wave 370/509: Kernel rig: construction cases, the tangent plane to a cylinder and a sphere, and a point on the axis refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e0e3798ae jyviko: Kernel rig: construction cases, the midplane of parallel faces, of a corner, and of a plane with itself
- 3ff1347d9 jyviko: Kernel rig: construction cases, a plane through an edge or axis square to a plane, and a line along the normal refused
- 6fed4f996 jyviko: Kernel rig: construction cases, the tangent plane to a cylinder and a sphere, and a point on the axis refused
- 8be5341c7 jyviko: Kernel rig: construction cases, the plane through three points or vertices, and collinear points refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:12 -04:00
jyviko ca8fc27e8b Wave 369/509: Kernel rig: construction cases, the axis of a cylinder, a torus and a circular edge, and a flat face refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 776d979ce jyviko: Kernel rig: construction cases, an axis square to a flat face and to a cylinder through a point, and a point on the axis refused
- 84a326f16 jyviko: Kernel rig: construction cases, the axis of a cylinder, a torus and a circular edge, and a flat face refused
- 17c0aee44 jyviko: Kernel rig: construction cases, the line where two planes meet, square and slanted, and parallel planes refused
- f9c53503b jyviko: Kernel rig: construction cases, a plane turned about an axis in it, off it and along its own normal

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:12 -04:00
jyviko f6f2f0bc38 Wave 368/509: Kernel rig: thicken a sheet into a slab and a tube, trim by a plane and by a circle, and refuse a stray keep_with (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b8c6bb921 jyviko: Kernel rig: thicken a sheet into a slab and a tube, trim by a plane and by a circle, and refuse a stray keep_with
- 70f695c6b jyviko: Kernel rig: grade construction geometry and the numbers a command replies with
- 5c0db8e82 jyviko: Kernel rig: the construction area, with what reruns it
- ffd3d5fb1 jyviko: Kernel rig: construction cases, an axis on a straight box edge, and a circular edge refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:10:12 -04:00
jyviko 709045380e Wave 367/509: Kernel rig: extend, extrude, loft, patch, revolve, stitch and sweep surfaces, a normal case and an edge case each, with their exact areas and surface kinds
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 75353cb04 jyviko: Kernel rig: extend, extrude, loft, patch, revolve, stitch and sweep surfaces, a normal case and an edge case each, with their exact areas and surface kinds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:03:27 -04:00
jyviko c5a31b96dc Wave 366/509: Kernel rig: a matched sheet meets its target's edge at the order asked, flat where both are flat, and a solid is refused (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f861f44e1 jyviko: Kernel rig: a matched sheet meets its target's edge at the order asked, flat where both are flat, and a solid is refused
- 3d080e96a jyviko: Kernel rig: fairing leaves a flat patch flat and a face with no free control rows as it was; zero strength is refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:03:27 -04:00
jyviko 295ec703fb Wave 365/509: Kernel rig: a blend between coplanar sheets is flat, a step blend meets both sheets at the order asked, and unchained edges are refused
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 425c8ed42 jyviko: Kernel rig: a blend between coplanar sheets is flat, a step blend meets both sheets at the order asked, and unchained edges are refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:03:27 -04:00
jyviko 80fb1768a8 Wave 364/509: Kernel rig: boundary surfaces through a square, a triangle and a network of four lines have their exact areas; five curves are refused (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7ac95e47e jyviko: Kernel rig: a reversed normal sends a later thicken to the other side, and a solid is refused
- 680f2ee5c jyviko: Kernel rig: boundary surfaces through a square, a triangle and a network of four lines have their exact areas; five curves are refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:03:27 -04:00
jyviko 1237203137 Wave 363/509: Kernel rig: untrim removes holes from a sheet, a cylinder sheet and a solid's face, and refuses a face with none (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a01d82f30 jyviko: Kernel rig: untrim removes holes from a sheet, a cylinder sheet and a solid's face, and refuses a face with none
- b2cc77094 jyviko: Kernel rig: unstitch takes a box and a cylinder apart into their faces, or one face out, and refuses a single face

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:03:27 -04:00
jyviko 7de16a06ee Wave 362/509: Kernel rig: ruled strips along a normal, at 45 degrees and tangent are the exact plane, cone and flat ring, and a closed chain mitres into a frame (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bc3c9185c jyviko: Kernel rig: grade the kinds of a result's surfaces, its B-spline degrees and spans, and its free edges
- 657c5af57 jyviko: Kernel rig: surfaces area; an offset plane, cylinder and sphere land exactly where the distance puts them, and faces across a sharp edge part
- 476b04ed3 jyviko: Kernel rig: ruled strips along a normal, at 45 degrees and tangent are the exact plane, cone and flat ring, and a closed chain mitres into a frame

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 17:03:27 -04:00
jyviko bb0d3800de Wave 361/509: Kernel rig: plastic cases, bosses, lips and grooves, rests, a snap fit edge case and the plastic rules, each with its answer
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5ba60bd9d jyviko: Kernel rig: plastic cases, bosses, lips and grooves, rests, a snap fit edge case and the plastic rules, each with its answer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:59:59 -04:00
jyviko f226557ab1 Wave 360/509: Kernel rig: bend table cases, JSON and CSV rows with angles, radii and K-factor allowances, and an unknown format refused (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 67dd8892f jyviko: Kernel rig: bend table cases, JSON and CSV rows with angles, radii and K-factor allowances, and an unknown format refused
- 235645db5 jyviko: Kernel rig: the ellipse length's Simpson weights as a named step

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:59:59 -04:00
jyviko 88aaf50bf1 Wave 359/509: Kernel rig: flat DXF cases, outline, cut and bend line lengths, an ellipse exact and as arcs, and no sheet refused (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fce8e4a26 jyviko: Kernel rig: perforation cases, square and staggered fields counted hole by hole, a field kept clear of a bend zone, and a pitch refused
- c114e6c35 jyviko: Kernel rig: flat DXF cases, outline, cut and bend line lengths, an ellipse exact and as arcs, and no sheet refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:52:54 -04:00
jyviko d64f60bf93 Wave 358/509: Kernel rig: hem cases, closed on a top and a bottom edge, open and flipped, on a flange, and one too short (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2edf64952 jyviko: Kernel rig: hem cases, closed on a top and a bottom edge, open and flipped, on a flange, and one too short
- c60bcb55e jyviko: Kernel rig: path flange cases, a Z section, one line at 45 degrees down, and a path straight on refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:51:50 -04:00
jyviko 4401e46c89 Wave 357/509: Kernel rig: second cases for draft (two adjacent faces), rib (in plane), press pull (an edge), split face (sketch and tool face) and sketch projection (a face loop and a silhouette) (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 815711421 jyviko: Kernel rig: second cases for draft (two adjacent faces), rib (in plane), press pull (an edge), split face (sketch and tool face) and sketch projection (a face loop and a silhouette)
- acd7bb066 jyviko: Kernel rig: the boundary-fill crescent ends at the cusps, x = 5
- 45c955326 jyviko: Kernel rig: a case can check the files it writes and the commands' answers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:51:50 -04:00
jyviko f253d56895 Wave 356/509: Kernel rig: frames area, frame member and inserted profile cases with their exact sections, placements and a too-thick wall refused
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4e7810659 jyviko: Kernel rig: frames area, frame member and inserted profile cases with their exact sections, placements and a too-thick wall refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:50:20 -04:00
jyviko ce68658422 Wave 355/509: Kernel rig: web cases, two gussets in a channel's corners and two walls grown along the sketch normal (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a5513a4e1 jyviko: Kernel rig: boundary fill cases, the lens and the crescent of two cylinders, and a point outside every tool refused
- f0eac58a2 jyviko: Kernel rig: align cases, face onto face as a move, a side face turned onto a top face, and a face onto an offset plane along its normal
- 1e9cefe1e jyviko: Kernel rig: web cases, two gussets in a channel's corners and two walls grown along the sketch normal

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:50:20 -04:00
jyviko c4e727871d Wave 354/509: Kernel rig: pattern on path cases, bosses along a line, bodies turning with an arc's tangent, and instances past the path's end refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- af8f28e34 jyviko: Kernel rig: scale cases, a cube doubled about its corner, a sphere scaled into an ellipsoid of the same volume, and a zero factor refused
- e1724be62 jyviko: Kernel rig: pattern on path cases, bosses along a line, bodies turning with an arc's tangent, and instances past the path's end refused
- cf58e3735 jyviko: Kernel rig: replace face cases, a top moved onto a plane and a lower step raised to the higher top (fails today: SMLib offset of faces refuses closing the step wall)
- be4f15db6 jyviko: Kernel rig: bounding solid cases, two boxes with a margin and a sphere's exact box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:50:20 -04:00
jyviko f0a52c36b5 Wave 353/509: Kernel rig: every registry command has a case or an exemption (kernel-cases --coverage) (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d671bbbc1 jyviko: Kernel rig: every registry command has a case or an exemption (kernel-cases --coverage)
- 6701b1c5e jyviko: Docs: how the kernel rig picks its areas, how a new area joins, and the coverage check
- 585789c60 jyviko: Kernel rig: cone cases, a frustum on X and a full cone of negative height with their exact volume, area and centroid, and a zero height refused; a new solids area

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:50:20 -04:00
jyviko e909f3e013 Wave 352/509: Kernel rig: each area runs only when the files its PATHS lists change, every area on the shared core (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e71177769 jyviko: Docs: the kernel rig gate, updating a known-failing list, re-recording the ladder golden
- d84d00bb4 jyviko: Release gate: the packages' dry run is unsigned and skips the release job
- 02e1f1841 jyviko: Kernel rig: each area runs only when the files its PATHS lists change, every area on the shared core
- b67e93211 jyviko: Kernel rig: an area's PATHS names only its own files, never the shared core

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 16:55:07 -04:00
Brett Lawson 824615e119 Wave 7/45: solidcore: move the pin to 7ca6ce7a (main, with solidcore PR #1427 SmBrep::LocalOperation, #1474 Nx1 corner, and fixes since 3c17ddb1) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 376bba92c Brett Lawson: solidcore: move the pin to 3c17ddb1 (main, with solidcore#1480: an intersection edge's end goes to its own vertex, and #1419 WP1's whole-body AssertValid walk)
- c191634b5 Brett Lawson: solidcore: move the pin to 7ca6ce7a (main, with solidcore PR #1427 SmBrep::LocalOperation, #1474 Nx1 corner, and fixes since 3c17ddb1)
- 9c7c139bd Brett Lawson: solidcore: move the pin to b19dbcb5 (main, with solidcore#1476: a shell's implicit offsets take every base upstream casts to a B-spline, and the offset sample bound scales with the input)
- 22a1c20b1 Brett Lawson: solidcore: move the pin to b3baca8e (main, with solidcore#1490 and #1491: a revolve's torus is never inside out and keeps the flag, and a one-circle full turn puts its seam at the profile)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 21:23:31 +01:00
jyviko 524b25b8ba Wave 351/509: Kernel rig: every area and the ladder as a parallel gate on pull requests that touch the kernel (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6c5537df6 jyviko: Kernel ladder: a gate run fails on any case whose status or counts differ from the golden
- ee2a1ea06 jyviko: CI: maintainers' pull requests run the tests, and the reference tests run on pull requests
- b4fcd5910 jyviko: Kernel rig: every area and the ladder as a parallel gate on pull requests that touch the kernel
- 18d2dddac jyviko: Release gate: every check in full and in parallel before a branch replaces main

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 09:48:29 -04:00
bherbruck 9df8837d43 Release 0.26.1 2026-10-29 06:33:09 -04:00
Brett Lawson 97f5208c2c Wave 6/45: smlib: the curved primitives' measures, round trips and two sweep volumes run on solidcore (solidcore#1435 landed) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 53da86734 Brett Lawson: solidcore: move the pin to 2a47645e (main, with solidcore#1435: precise properties split at the surface's knots)
- cb79c32ee Brett Lawson: smlib: the curved primitives' measures, round trips and two sweep volumes run on solidcore (solidcore#1435 landed)
- 6e5722af9 Brett Lawson: solidcore: move the pin to fa3caa94 (main, with solidcore#1463: a revolve's cylinder is never inside out, and an inside-out NURB cylinder keeps its frame)
- 9c7e54be4 Brett Lawson: solidcore: move the pin to 43ca3745 (main, with solidcore#1473: SmShell::IsInnerShellOf, and #1419's level-0 helpers)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 09:40:20 +01:00
jyviko e89b8528cd Wave 350/509: Surface Extrude: a symmetric distance is the total, as for a solid extrude (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9008d13f3 jyviko: Surface Extrude: a symmetric distance is the total, as for a solid extrude
- de5c338e7 jyviko: Preferences: keep the older per-side reading of a symmetric surface extrude
- ac70662d6 jyviko: Sweeps: a path through a drawn 3D arc follows the arc, not a spline through its three points
- 7664925fb jyviko: Sketch: Project onto Surface keeps the side the projection meets first, in one curve

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:46:51 -04:00
jyviko aa161ee924 Wave 349/509: Kernel tests: the barrel's side is the exact surface of revolution of its arc (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bb4299e56 jyviko: Tests: a drafted cube side leaves the bottom and the opposite side Kept, the rest Modified
- 29adfd0d7 jyviko: Kernel tests: the barrel's side is the exact surface of revolution of its arc
- 5ada4fc8a jyviko: SMLib: pin 90aabff, a shelled round stays a cylinder and a step wall is ruled as its plane

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 18:59:21 -04:00
jyviko 763f0632d1 Wave 348/509: Tests: expectations for the SMLib fixes of 2026-10-29 (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f3b77d71b jyviko: Tests: expectations for the SMLib fixes of 2026-10-29
- 567b764b9 jyviko: Viewport tests: the offset ellipse ring's 512 wall joins are all smooth
- 9d0fb564e jyviko: SMLib: pinned at 60b1c6a: the 43 fixes of 2026-10-29 (tangency-labs/smlib#14–#56)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 15:50:15 -04:00
jyviko 99c879f9b2 Wave 347/509: Naming tests: pieces of one name on a grooved disc, the merged boss wall by its point (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c93b3ad5a jyviko: Engine tests: SMLib's builds where truck refused or approximated
- b6b59e7b3 jyviko: Naming tests: pieces of one name on a grooved disc, the merged boss wall by its point
- ac52443df jyviko: Ring tests: a cut's volume is the piece it took, not the difference of the ring's volumes
- de606715b jyviko: Placement tests: a body mirrored in SMLib reads back from its record valid

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 01:27:37 -04:00
Brett Lawson 3d5e874943 Wave 5/45: solidcore: move the pin to 19d87ca7 (main, with solidcore#1442: walls that meet are refused as WALLS_TOUCH) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- d35dcf022 Brett Lawson: solidcore: move the pin to 19d87ca7 (main, with solidcore#1442: walls that meet are refused as WALLS_TOUCH)
- 8493abc90 Brett Lawson: smlib: shell_walls_touch runs on solidcore (solidcore#1442 landed)
- 30d6331a5 Brett Lawson: solidcore: move the pin to 19587445 (main, with solidcore#1453: an offset edge between two analytic faces is their exact line or conic)
- f44e08128 Brett Lawson: smlib: shell_cylinder_open_top runs on solidcore (solidcore#1453 landed)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 05:39:42 +01:00
Brett Lawson 0106365e64 Wave 4/45: smlib: circle, cylinder and torus NURBS forms come into solidcore (solidcore#1432, #1433) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- f62d6ee6d Brett Lawson: solidcore: move the pin to 4cd55082 (main, with Ellipse::is_nurb_curve_circle, solidcore#1432)
- c11640214 Brett Lawson: solidcore: move the pin to f020a066 (main, with IsNurbSurfaceCylinder / IsNurbSurfaceTorus, solidcore#1433)
- c9b2c18eb Brett Lawson: smlib: circle, cylinder and torus NURBS forms come into solidcore (solidcore#1432, #1433)
- 04c2af035 Brett Lawson: solidcore: move the pin to 3546c9bc (main, with solidcore#1437 and #1445)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 03:44:11 +01:00
jyviko aaecfda600 Wave 346/509: Engine tests: SMLib's faces, not truck's pieces, in the face counts and measures (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ee9fc3793 jyviko: Tests: a torus patch to thicken is cut from SMLib's one-face torus
- ca53656a2 jyviko: Schema tests: an empty face list is checked on the draft, which refuses it
- ab68a3d0f jyviko: View tests: the section cap test draws the cap in the cap colour
- 24bcaca03 jyviko: Engine tests: SMLib's faces, not truck's pieces, in the face counts and measures

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:11:05 -04:00
jyviko ce8981f167 Wave 345/509: Tests: a cylinder's side and a sphere are one face each, as SMLib builds them (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2c341006a jyviko: Tests: a cylinder's side and a sphere are one face each, as SMLib builds them
- 6c9c679dc jyviko: Tests: a revolved sheet over one radian is one face, untrimmed over its whole span
- 8075b8f70 jyviko: Tests: a swept point path is its lines, and rails must turn with a cornered path
- b9d65e6bc jyviko: Tests: thicken across a sharp edge extends the offsets until they meet

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:31:25 -04:00
jyviko 615e810f28 Wave 344/509: Tests: SMLib's faces, one per swept segment, closed along a seam, replace truck's halves (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3c680d21a jyviko: Geometry: the closest point on a full circle just before its start is found before its end
- 30ceb44e6 jyviko: Tests: SMLib's faces, one per swept segment, closed along a seam, replace truck's halves
- 908bc756c jyviko: Tests: the matchsurf and mixed-fillet helpers read an edge on the curve its interval is on
- 98284eb1e jyviko: Tests: a box thinner than a body's tolerance may be refused instead of getting no certificate

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:20:34 -04:00
jyviko 74bca47120 Wave 343/509: Tests: a face picked by point is found on a block of 256 drilled holes, as on #6720's thread (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 93bbde86e jyviko: Tests: a script keeps a fillet a parameter makes impossible, a radius below zero
- 913a61329 jyviko: Tests: a tilted cylinder's Intersect cut is checked on the cylinder, not by its mesh's count
- da4f122f4 jyviko: Tests: a face picked by point is found on a block of 256 drilled holes, as on #6720's thread
- d0daee90f jyviko: Tests: a cam's edge is picked on its rim, off the vertex where its circle's seam meets it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:34:55 -04:00
jyviko c3670a7054 Wave 342/509: UI tests: SMLib's cylinder has one wall and one edge per rim; split rims come from two arcs (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ff0dda537 jyviko: UI tests: picks that name one thing, and a thread that names its start
- 2523d13cf jyviko: UI tests: SMLib's cylinder has one wall and one edge per rim; split rims come from two arcs
- b71e5ae6f jyviko: Tests: edges are read on their NURBS forms, a chamfer's chain is its caller's, the cap test's hatch
- 138acad01 jyviko: UI tests: a frame member's volume is compared to the accuracy SMLib measures at

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 23:48:58 -04:00
jyviko 8ac38056c1 Wave 341/509: Designs before format 14: a split's pieces take the names its later features use them by (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 319e6b8b3 jyviko: Kernel tests: the chamfer on a tangent wall junction is measured on meshes fine enough
- 68a217d98 jyviko: Reference tests: the loft case is analytic, SolidCraft's correspondence with its closed form
- 73b028b5b jyviko: Kernel: a drafted extrusion of a profile with holes, every wall leaning on the material's side
- b2c5b1f5e jyviko: Designs before format 14: a split's pieces take the names its later features use them by

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:49:29 -04:00
jyviko b8b8d6b6a2 Wave 340/509: Display meshes: tests count the planner's grids; a mesh's outline is one line per straight edge (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4a0c13910 jyviko: UI kit: a field's scenario handle is where the field shows
- 271f0c5de jyviko: STEP import: a face's loop through a pole closes its turn, so a dimple keeps its area
- 983b1ca8f jyviko: Sketch projection: a projected face's curves meet at the face's vertices
- 426a505a8 jyviko: Display meshes: tests count the planner's grids; a mesh's outline is one line per straight edge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:28:10 -04:00
jyviko aba58faeff Wave 339/509: Sketch: a sketch's bounds reach its circles' and arcs' extremes (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 43c1b7b88 jyviko: UI tests: Isocurve Analysis's engine colour is drawn from the theme's accent
- 7bb5bb3d5 jyviko: Locales: Arabic and Hebrew for the version and section hatch labels
- e657e4086 jyviko: UI kit gallery: entries for the controls added without one
- 6a6cd8f56 jyviko: Sketch: a sketch's bounds reach its circles' and arcs' extremes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:27:39 -04:00
jyviko 74a97586a8 Wave 338/509: Tests: the saved fitted-letters design measures its closed form, its letter as conics (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 23bfa1cf7 jyviko: Tests: the saved fitted-letters design measures its closed form, its letter as conics
- 0e3f01ec0 jyviko: Tests: a loft cut whose top is the basin's whole outline leaves the walls above as their own body
- b3dfcf1ff jyviko: Tests: an engraved face's letters project as conics, their exact quadratic Béziers
- 367beae69 jyviko: Viewport: the analysis legend stays above the floating History card again

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:27:39 -04:00
jyviko d20efa730b Wave 337/509: Tests: interference lists the pair of a solid and an imported mesh as not checked (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4a94a025c jyviko: Tests: freezing rebuilt arc borders gets its rebuild from a notch across the arc
- 5cbfbe35d jyviko: Tests: interference lists the pair of a solid and an imported mesh as not checked
- 5489599c0 jyviko: Tests: a face with no attachment is a rib's wall, whose feature reports no roles
- f5dfb78ee jyviko: kernel: a cut's tool face blocks a planar role only where it enters the result

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 02:00:00 -04:00
jyviko ae52945298 Wave 336/509: kernel: two planar supports are one when SMLib would call them coincident (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a31272194 jyviko: Sketch: an included 3D edge keeps its exact curve from the moment it is linked
- 1fb5e94da jyviko: Tests: Intersect's box outline is compared as lines, and a tilted cylinder's whole rim projects to its ellipse
- 9be29894e jyviko: kernel: a cut by a tool apart from the body is the body itself
- 2b0357a22 jyviko: kernel: two planar supports are one when SMLib would call them coincident

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 01:00:48 -04:00
jyviko be583dbfd7 Wave 335/509: Tessellation: the band beside a slit and the sag refinement keep the face on both sides of it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fcd5f7997 jyviko: Tessellation: a node lying on another chord is untangled like a crossing
- 43ad9d0b0 jyviko: Tessellation: a slit (a side the loops run along both ways) bounds the face on neither side
- 534dffa96 jyviko: Tessellation: the band beside a slit and the sag refinement keep the face on both sides of it
- 7b984936a jyviko: kernel: an emboss's arcs run on their wall's own frame, and its seam is read from the circle's angles

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:15:19 -04:00
jyviko 5cab3f00b7 Wave 334/509: Tests: fillet removals from exact volumes; SMLib's rounds match Pappus and the quadrature (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f9347aca7 jyviko: Tests: the mirrored union's volume held to the two integrals' 1e-8 accuracy
- bb0b146a9 jyviko: Tests: #1510's parts are weighed by their exact volumes, not 1e-3 mm meshes
- d5bd1ebfd jyviko: Bridge: a support surface's shape read about a station in its middle has the right signs
- a6054603d jyviko: Tests: fillet removals from exact volumes; SMLib's rounds match Pappus and the quadrature

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 01:39:04 -04:00
jyviko d2bb84d6fb Wave 333/509: Tests: the cap whose loops prism_measure compares is found by its plane, not as the last face (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6a780de5f jyviko: Tests: the helical groove's removed volume from the cut's exact volume, not a 0.01 mm mesh's
- 80b7ce28e jyviko: Tests: volume checks held to what their measures can tell, not tighter
- a3e42e548 jyviko: Tests: the cap whose loops prism_measure compares is found by its plane, not as the last face
- fad9c44da jyviko: kernel: measure integrates to SMLib's finest accuracy, 1e-8, not 1e-4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:19:42 -04:00
jyviko 7919eaf44c Wave 332/509: Tessellation: a face's sides are flipped where the triangles lie closer along the surface the other way (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 666ccd85d jyviko: Tessellation: sag refinement splits a flat triangle's long side and never across an obtuse one's short side
- 2b22b2cbe jyviko: Tessellation: a face's sides are flipped where the triangles lie closer along the surface the other way
- e0d5ee496 jyviko: Tests: thicken and raised-band histories checked as SMLib reports them, Meet edges and seams included
- 39e1dcea0 jyviko: Faceted boolean: a body's own mesh is closed once its faces' shared corners are one vertex

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 01:02:38 -04:00
jyviko 7067258444 Wave 331/509: Tests: a face's flat area may differ from its surface's by the sails its boundary chords bridge (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7ec4b7212 jyviko: Tests: a face's flat area may differ from its surface's by the sails its boundary chords bridge
- 4626f83e5 jyviko: Tests: a sketch curve splits a cylinder's one side face in two, not a half side
- 9e97bc470 jyviko: Tests: a split face without its record exports as the body has it, and the next operation joins it
- 47b1d716d jyviko: Tessellation: a whole sphere's loop starts off its poles when its seam has two segments

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 01:31:58 -04:00
jyviko dc64e105b9 Wave 330/509: Tests: the thread whose display is checked is made as the thread feature makes one, with exact helices (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8eb77affb jyviko: Kernel: a body's size counts its edges, so a sphere, cylinder or torus is its own size
- 6a06226ad jyviko: UI tests: the split face's isocurve pieces are each wider than the lines' spacing
- eb40e161d jyviko: Tests: the thread whose display is checked is made as the thread feature makes one, with exact helices
- 71ea626d0 jyviko: Tests: a quarter disc tapered outward builds, and its volume is the exact integral of its sections

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 03:25:56 -04:00
jyviko e794c6b6e4 Wave 329/509: Tests: the sample-aliasing trap aliases by its knots, within the degree a record holds (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d91d3f2a6 jyviko: Kernel: a body moved by a non-rigid matrix keeps each face's source and paint on that face
- c1ead0fef jyviko: Kernel: a sweep along a smooth path names every wall, and a closed one has no caps
- 6387be309 jyviko: Tests: the high-degree line prism_curve certifies is written at the record's highest degree
- 55f48e4e5 jyviko: Tests: the sample-aliasing trap aliases by its knots, within the degree a record holds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:31:39 -04:00
jyviko f3b8ae5497 Wave 328/509: Kernel: an extrusion's wall seed marks only the edges nearest it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5547cd98a jyviko: Blends: a picked edge is named as the blend takes it, the rim and not the seam
- 1cb713c96 jyviko: Kernel: an extrusion's wall seed marks only the edges nearest it
- db9cf693a jyviko: Kernel: an extrusion's cap is in its own plane however thin the extrusion
- de16a6b99 jyviko: Kernel: a half turn's caps keep their roles when its end plane is its start plane

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:53:12 -04:00
jyviko 207cb82818 Wave 327/509: STEP import: FILE_DESCRIPTION and the preprocessor name a Y-up exporter again (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f8c2fba07 jyviko: STEP import: FILE_DESCRIPTION and the preprocessor name a Y-up exporter again
- 5cc0d5e9c jyviko: Threads: a metric size without a coarse pitch suggests its fine pitches again
- e0545b2bd jyviko: Measure: an arc edge's angle is its span on the circle, not its NURBS parameter
- ae5dc2416 jyviko: Split Body: a face tool runs over its own surface's parameters

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:11:05 -04:00
jyviko 21582b66e9 Wave 326/509: geom: patches about a fill's centre are solved by blocks, their banded interiors eliminated onto what they share (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6a8753443 jyviko: Fill: the height-field fill tries grids up to 64 spans
- dc3d504ba jyviko: geom: a fill patch folds where its normal reverses between neighbours, not where it turns past the middle's
- bac6674ab jyviko: geom: patches about a fill's centre run in the spaces of their own sides, not one space of every edge's breaks
- ea6500559 jyviko: geom: patches about a fill's centre are solved by blocks, their banded interiors eliminated onto what they share

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 01:32:12 -04:00
jyviko e71d2e2844 Wave 325/509: Fill: its tolerances follow a size that does not depend on where the body is (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b389601b0 jyviko: Ruled surface: a strip on a cone is SMLib's revolve of its ruling, a cone face
- 1e7713d1e jyviko: Fill: a patch's edges and vertices hold its fit's gap in SMLib's tolerance model
- 4faee7dd8 jyviko: Fill: the general fill takes a loop of one or two edges in exact pieces of their curves
- c5b038548 jyviko: Fill: its tolerances follow a size that does not depend on where the body is

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 01:02:58 -04:00
jyviko 48498d477a Wave 324/509: Fill: a patch's edges are the body's own edges again, circles and ellipses included (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9095fce42 jyviko: SMLib export: a NURBS edge's interval a rounding past its knots is the NURBS's own
- b68f71a2d jyviko: Fill: a patch's edges are the body's own edges again, circles and ellipses included
- b540faaf5 jyviko: Thicken: a surface turned to its back grows the other way again
- ebb1d843a jyviko: Sweep: a parallel sweep whose path runs along the profile's plane is refused again

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 22:19:37 -04:00
jyviko 32ca22cf6d Wave 323/509: Blend tests: a vertical round run on up a top round's end arc (ladder 07-fillets/018) is SMLib's to end, and builds (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 60f33f6fc jyviko: Feature walks: Repair Part has its fixture, its gap an input and its body renamed with the rest
- 075f307bf jyviko: UI tests: a shown dimension that breaks a later feature does it with a shell left no room
- 242bbc89f jyviko: Fillet rig: the known-failing list follows the SMLib 7e917f0 pin
- 8515dc1a3 jyviko: Blend tests: a vertical round run on up a top round's end arc (ladder 07-fillets/018) is SMLib's to end, and builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 02:36:54 -04:00
jyviko 0448d3126f Wave 322/509: Blends: a smooth edge and an unfinished tangent chain are refused saying why; SMLib's unsupported corner is named (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 229739a70 jyviko: Blends: a smooth edge and an unfinished tangent chain are refused saying why; SMLib's unsupported corner is named
- 0ec97c570 jyviko: Blends: tangent propagation off blends the picked edges alone; a refusal says how to change it
- 94d763c83 jyviko: Tests: a round run on through an earlier one by tangent propagation is matched by the same edges together
- a0eaceab5 jyviko: SMLib tests: a round larger than the cube is cut as if its faces went on, at its exact volume

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 02:05:08 -04:00
jyviko 6fc8706eea Wave 321/509: Kernel rig: patched holes graded by their continuity, at clashing corners and in one sheet (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7d00ad78c jyviko: kernel: a patch builds G0 to G4, and Continuity Analysis reads each seam's middle at the order asked
- 102cde292 jyviko: Kernel rig: patched holes graded by their continuity, at clashing corners and in one sheet
- 7c9a9051d jyviko: Patch: the continuity choice's hover text says the corners stay tangent where the faces round them clash
- ef93b18ed jyviko: SMLib: pinned at 7e917f0: a corner patch tangent to its sides, an unsupported corner named, a torus from a NURBS a whole turn round its tube

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:16:50 -04:00
Brett Lawson 091357ea58 Wave 3/45: Sweep cases name their solidcore issues (#1449 draft corners, #1450 curve-sweep placement, #1451 planar sections) (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- d6b3bf27b Brett Lawson: Shell walls-touch case waits on solidcore#1442 (port fork a759622)
- 29a1ac5a6 Brett Lawson: Sweep cases name their solidcore issues (#1449 draft corners, #1450 curve-sweep placement, #1451 planar sections)
- 4f1ad5cc6 Brett Lawson: Cylinder shell case waits on solidcore#1453 (port fork fddc366 + 98ab1b0)
- c9aa5116d Brett Lawson: solidcore: move the pin to 9b76ac13 (main, with SmApiBrepMaterialCensus, solidcore#1436)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 02:55:39 +01:00
bherbruck 409ab1ed45 Release 0.26.0 (zip 9.1.3) 2026-10-28 19:41:38 -04:00
bherbruck 5e03fe2f4b Release 0.26.0 2026-10-28 19:32:17 -04:00
Brett Lawson 2f7f0c679c Wave 2/45: solidcore backend: every UpstreamFixes flag on, and the ignored cases name their solidcore issues (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 86e4226ae Brett Lawson: solidcore backend: every UpstreamFixes flag on, and the ignored cases name their solidcore issues
- ce5de8bcf Brett Lawson: Sphere measurement cases wait on solidcore#1437 (trim_boundary_seam_wrap at the poles)
- 5140556c7 Brett Lawson: Blend refusals name their solidcore issues (#960, #1438, #1439, #430)
- 263f34850 Brett Lawson: Offset cases name their solidcore issues (#1440 face picks, #1441 ApproximateSurface, #1060, #1019, PR #1427)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-29 00:31:16 +01:00
Brett Lawson bc4741b05a Wave 1/45: Kernel: a solidcore backend behind crates/smlib, routed per operation (and 3 more)
4 commits, squashed; the originals stay reachable from branch jyviko/merge-main-develop-solidcore (#11360). Its changes conflict with main as it is, so this wave keeps the previous files; the next wave that merges cleanly holds them.

- 21eba6a38 Brett Lawson: claim: solidcore backend for develop
- 8c12073be Brett Lawson: Kernel: a solidcore backend behind crates/smlib, routed per operation
- 12ace4973 Brett Lawson: diagnostics.kernel: read and set which kernel answers, and see the routing table
- 976acfd76 Brett Lawson: Conversion tests: each ignored case names its solidcore issue (#1431, #1432, #1433)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 23:18:10 +01:00
jyviko a93baff0be Wave 320/509: geom: the patch fill is tangent continuous across its own C0 knot lines, and tapers what its corners do not allow (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7d9c84bdb jyviko: geom: the patch fill is tangent continuous across its own C0 knot lines, and tapers what its corners do not allow
- 2397a691c jyviko: geom: the patch fill is faired at the order it is asked for
- 0631d2d3a jyviko: kernel: a three-round corner patched G2 and G3, read off the faces at each seam
- 11af682c0 jyviko: examples: cleaning up rounds by patching their messy faces, G2 and G3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 21:03:45 -04:00
bherbruck 37a586dd61 Release 0.25.1 2026-10-27 20:58:30 -04:00
jyviko aba3f2e1e7 Wave 319/509: geom: the patch fill takes the dense spline edges a blend leaves, and holds what its corners allow
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ed830a168 jyviko: geom: the patch fill takes the dense spline edges a blend leaves, and holds what its corners allow

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 20:35:03 -04:00
jyviko 0d3e1eac82 Wave 318/509: geom, kernel: the patch fill meets its neighbours with G0 to G4, on rational edges too
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 99297495b jyviko: geom, kernel: the patch fill meets its neighbours with G0 to G4, on rational edges too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 19:56:01 -04:00
jyviko 0cae7f871c Wave 317/509: Repair Part: the repair runs once, as the feature evaluates (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f56e34d1c jyviko: Refused part: the Repair Part comments say it is built
- f351f42df jyviko: Repair Part: the repair runs once, as the feature evaluates

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 23:52:16 -04:00
jyviko 522a8adf91 Wave 316/509: Repair Part (body.repair, #8371): rebuild refused faces, sew gaps, patch holes
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7c8132e2d jyviko: Repair Part (body.repair, #8371): rebuild refused faces, sew gaps, patch holes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 19:04:13 -04:00
jyviko 70beda47b1 Wave 315/509: Bodies: an operation's result is its record, not the SMLib body it was exported from (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f11c0c571 jyviko: Bodies: an operation's result is its record, not the SMLib body it was exported from
- b121d8d00 jyviko: frames tests: the moved combine tool's part is made ungrounded
- e0c7867b9 jyviko: run_strict: the box's volume to 1e-9, as SMLib integrates it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 21:52:46 -04:00
jyviko 4cd4ebfa50 Wave 314/509: kernel: a planar sheet's loop splits where it passes one vertex twice (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 00faac965 jyviko: kernel: a planar sheet's loop splits where it passes one vertex twice
- 5d25684a1 jyviko: sheet tests: the flat pattern as SMLib's exact 2D boolean makes it
- 52343ba23 jyviko: Robustness tests: a round's tangent chain and the lid's closed-form volume
- bc6d31e60 jyviko: GPU tests build their designs with SMLib, and the GPU jobs fetch it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 21:41:24 -04:00
jyviko 0fa9c52b30 Wave 313/509: Mesh: a ray through an edge two triangles share crosses one of them (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ab3ba1af4 jyviko: Mesh: a ray through an edge two triangles share crosses one of them
- ccff7224c jyviko: Shell: its planar walls carry their shell roles again
- 068c6a6dc jyviko: Shell certificate tests: the saved strips are saved data, not rebuilt pieces
- b9d4ad74f jyviko: kernel: a planar region inside another's hole keeps its material

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 21:35:30 -04:00
jyviko 2480af1907 Wave 312/509: Tests: the kernel-cases ladder is the reference for what the kernel builds; the seeded robustness goldens go
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 17465a63b jyviko: Tests: the kernel-cases ladder is the reference for what the kernel builds; the seeded robustness goldens go

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 21:37:39 -04:00
jyviko 6537aaa0d0 Wave 311/509: Fillet rig: a regression gate on every pull request that touches fillet code (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 517fc01dc jyviko: Fillet rig: a regression gate on every pull request that touches fillet code
- b91ad9de2 jyviko: Splines: every degree a B-rep record holds is evaluated, so a G4 blend of degree 9 gets its pcurves
- 175b4f2ac jyviko: GPU tessellation: the shader's basis slots follow the CPU evaluator's highest degree

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 21:41:23 -04:00
jyviko 18ac5bfd45 Wave 310/509: Kernel rig: designed continuity cases, G0 to G4, that prove the measurement (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 39bf63b16 jyviko: Kernel rig: designed continuity cases, G0 to G4, that prove the measurement
- 52339b7ec jyviko: Kernel rig: fillet cases for the open fillet issues, each with its exact answer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 19:25:31 -04:00
jyviko 2b559115a7 Wave 309/509: Kernel rig: a case's expected continuity order at its blend seams
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c37b0d2f0 jyviko: Kernel rig: a case's expected continuity order at its blend seams

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 18:32:10 -04:00
jyviko 77f1bd1c1d Wave 308/509: STEP import: a torus face round most of its tube is formed within one turn of it
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c070f044a jyviko: STEP import: a torus face round most of its tube is formed within one turn of it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 18:52:45 -04:00
bherbruck a79f40a711 Release 0.25.0 2026-10-27 18:05:39 -04:00
bherbruck b5728f284b Release 0.24.1 2026-10-27 08:34:27 -04:00
bherbruck 5965439a15 Release 0.24.0 2026-10-26 19:23:21 -04:00
bherbruck 586a358ed4 Release 0.23.1 2026-10-26 07:07:21 -04:00
bherbruck 7770f8982d Release 0.23.0 2026-10-25 18:18:39 -04:00
jyviko 57c0e6b802 Wave 307/509: UI: a header layout chosen by the host app
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bd2785717 jyviko: UI: a header layout chosen by the host app

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 13:18:40 -04:00
jyviko 44e7ddfc9f Wave 306/509: Engine: an optional check before every command (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 44b859fe6 jyviko: STEP import: a whole sphere bounded by one seam has its frame on that seam
- ce71791ec jyviko: Spline surfaces: a closed spline whose outermost knots appear once is periodic
- c7373279d jyviko: Viewport: hidden edges are drawn before the visible ones, so a visible edge is never covered by a light hidden copy
- b3cb826ed jyviko: Engine: an optional check before every command

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 12:42:23 -04:00
jyviko dca61e72be Wave 305/509: step_in tests: the import's repair notes for added seams and turned faces (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6055ce6fd jyviko: step_in tests: knot multiplicities refused per knot, then by their sum
- ae393fd9c jyviko: step_in tests: a face with too many bounds is refused by the reader's own limit
- fc3a13f17 jyviko: step_in tests: the import's repair notes for added seams and turned faces
- 4688c0f20 jyviko: STEP import: a whole round face whose seam is off its frame's quarter lines is turned onto one

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 18:14:38 -04:00
jyviko 01aaf872b0 Wave 304/509: STEP import: a circle edge between two vertices is the arc between them, however short (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d2858cb3d jyviko: STEP import: a circle edge between two vertices is the arc between them, however short
- 8b4b4a9d6 jyviko: SMLib pcurves: an end SMLib moves within the tolerance it held the edge at is mapped
- 6c355fdf7 jyviko: step_in tests: the cube fixture's edge directions clear of the assembly fixtures' ids
- efdc245d1 jyviko: step_in tests: a face the reader refuses leaves the rest of the solid as surfaces, named

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 18:02:29 -04:00
jyviko 40426d19bd Wave 303/509: Section hatch by part: touching cut parts never look alike (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cfaf4ab55 jyviko: Kernel rig: the reason each refused sheet-metal, sweep, crash and ladder case must be refused for
- 30dc4c860 jyviko: Section hatch by part: touching cut parts never look alike

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 17:25:22 -04:00
jyviko 20aedb330d Wave 302/509: STEP import: a round face off its frame's quarter lines is formed within one turn (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2dd505d83 jyviko: kernel tests: rustfmt
- ee4d4b5a5 jyviko: STEP import: a round face off its frame's quarter lines is formed within one turn
- 97a31c0c0 jyviko: SMLib: the prebuilt where a union that seals a void keeps its enclosing shell first

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 16:40:45 -04:00
jyviko 6d5a12789e Wave 301/509: STEP import: a part's later instances in a window wait for its first, not end the window (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 025344dee jyviko: A refused face is tinted as well as ringed
- 25642b6d2 jyviko: STEP import: a part's later instances in a window wait for its first, not end the window
- c1713994f jyviko: Body::unmeshed_faces counts on the coarse plan, without making the mesh
- d0081b235 jyviko: kernel: a placed copy is planned as its original, moved, as its mesh already is

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 09:05:22 -04:00
jyviko 14ae2c6996 Wave 300/509: A part the modelling kernel refuses is named, with what is wrong and what to do (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 188011736 jyviko: A part the modelling kernel refuses is named, with what is wrong and what to do
- d3b8c3dc5 jyviko: Browser: Repair Part is planned under #8371
- c15c39443 jyviko: Open and import card: the step marks share one box, size and stroke
- 090fcec6c jyviko: A refused face is ringed in the error colour while the window points at it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 15:40:00 -04:00
jyviko e8d0bd9c20 Wave 299/509: STEP import: the feature's warning says in words what became of the parts
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 920acc527 jyviko: STEP import: the feature's warning says in words what became of the parts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 08:57:39 -04:00
jyviko 08156eb6d0 Wave 298/509: Fillet dialog: Setback shows its default as a length and flags one too small before OK (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 06fbcdfec jyviko: Fillet dialog: Setback shows its default as a length and flags one too small before OK
- baa44fc64 jyviko: Fillet dialog: a setback the field flags is not refused again under the dialog
- b7d813bd6 jyviko: Open and import card: three plain steps instead of a status line

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 08:42:59 -04:00
jyviko 74cb9ca753 Wave 297/509: Section cap: only closed bodies take part in the crossing count (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 33acb6dc3 jyviko: Section cap by crossing count: a body touching the cut body no longer shows through
- c33bae870 jyviko: Section cap: only closed bodies take part in the crossing count

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 15:15:13 -04:00
jyviko 7314e9440c Wave 296/509: Fillet setbacks not past where the rounds meet are refused naming the least; the rig grades a refusal by its reason (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 97721ad05 jyviko: Fillet setbacks not past where the rounds meet are refused naming the least; the rig grades a refusal by its reason
- 3fd5e138c jyviko: kernel: rustfmt
- 61a1f8bf2 jyviko: STEP import: a face's NURBS form ends where its boundary does, within its tolerance
- cd4f72572 jyviko: STEP import: a surface model's closed shell beside a sheet is a solid of its own

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 15:14:34 -04:00
jyviko 089dec39d4 Wave 295/509: kernel rig: the owner's fillet failures of 2026-10-28 as fillet cases, with the option combinations
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 762262953 jyviko: kernel rig: the owner's fillet failures of 2026-10-28 as fillet cases, with the option combinations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 10:53:58 -04:00
jyviko 159f9f40b3 Wave 294/509: Isocurve Analysis: faces on one surface share their lines (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 912bccef6 jyviko: Isocurve Analysis: faces on one surface share their lines
- 29744b811 jyviko: Preview: the ghost leaves out the surface the changed body keeps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 11:13:24 -04:00
jyviko 789b20294e Wave 293/509: Fillet dialog: one option model, plain labels, refusals in plain words (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 739153d3d jyviko: Fillet dialog: one option model, plain labels, refusals in plain words
- e4844753c jyviko: SMLib: the prebuilt with a torus or sphere keeping its NURBS form, and the concave mixed fillet corner

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 14:22:53 -04:00
jyviko 65b02ff7ab Wave 292/509: STEP import: a refused solid comes in as a surface body of its exact faces (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fd5319a0e jyviko: docs: the kernel's move from truck to SMLib, as written up on #4012
- 4cb0d6ee9 jyviko: STEP import: a refused solid comes in as a surface body of its exact faces
- e19785620 jyviko: STEP import: a refused solid's surface body faces as the file has it
- 529fb7cf3 jyviko: Release: macOS builds on macos-15 (GitHub retires macos-14 on 2026-11-02)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 12:48:43 -04:00
jyviko 53f4d607e2 Wave 291/509: Tessellation: a loop corner on a side collapsed within its vertex's tolerance is a pole; a face no method plans is left out, named (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5a596dd95 jyviko: STEP import: a patch side collapsed within its vertex's tolerance is a pole of the loop
- cfee4a720 jyviko: STEP import: a solid no B-rep can be made of is shown as a mesh of the faces that read
- 5bfecd8a0 jyviko: Tessellation: a loop corner on a side collapsed within its vertex's tolerance is a pole; a face no method plans is left out, named
- 0102f95dc jyviko: Tessellation tests: rustfmt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-28 08:06:13 -04:00
jyviko 5a2e050f71 Wave 290/509: STEP and SMLib: no edge or vertex tolerance past the 1 mm SMLib takes (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0bee8c2ed jyviko: solidcraft-smlib: Brep::edge_face_distance, SMLib's own edge/face gap
- 5d6810128 jyviko: STEP and SMLib: no edge or vertex tolerance past the 1 mm SMLib takes
- 005b1e6ea jyviko: SMLib pcurves: an edge past its face's patch gets a tolerance that covers it
- f327cdb3d jyviko: solidcraft-smlib test: an edge 2.5 um past its patch keeps its interval

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 22:02:31 -04:00
jyviko 7c40ff2805 Wave 289/509: SMLib: the prebuilt with trims never stretched and the edge/face distance
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9d2abb2eb jyviko: SMLib: the prebuilt with trims never stretched and the edge/face distance

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 22:02:31 -04:00
jyviko 3099117942 Wave 288/509: UI: one continuity control for every continuity choice (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fd34314d5 jyviko: UI: one continuity control for every continuity choice
- fab8948b3 jyviko: Clippy: assign operators and is_multiple_of in the continuity code
- 1260353f4 jyviko: Fillet Corners: the shared continuity control says what each corner builds
- bf16a76a4 jyviko: SMLib: the prebuilt with eased setbacks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 21:11:56 -04:00
jyviko 7c14ae2ce2 Wave 287/509: Continuity Analysis measures G3 and G4; the dialogs offer what each construction builds
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2fed39c85 jyviko: Continuity Analysis measures G3 and G4; the dialogs offer what each construction builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 20:14:44 -04:00
jyviko fb6a38693e Wave 286/509: geom: exact surface partials to the fourth order, and the normal section's curvature jet
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d6961636d jyviko: geom: exact surface partials to the fourth order, and the normal section's curvature jet

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 19:55:11 -04:00
jyviko ab4f92674b Wave 285/509: Continuity: one table of orders G0-G4, and one check of what each construction builds (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f042d2073 jyviko: Isocurve test: the spline face's hole is an inner loop of one face (Refs #770)
- cb8712aa0 jyviko: Continuity: one table of orders G0-G4, and one check of what each construction builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 19:51:28 -04:00
jyviko a48570cd40 Wave 284/509: Isocurve Analysis draws each face's exact iso curves, cut to its trims (Refs #770)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- be859aa0d jyviko: Isocurve Analysis draws each face's exact iso curves, cut to its trims (Refs #770)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 20:14:24 -04:00
jyviko fceb07b797 Wave 283/509: STEP import: an edge through a face's pole is split there (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0694fd4e8 jyviko: STEP import: an edge through a face's pole is split there
- 1d70ac267 jyviko: tess: a face whose boundary still crosses itself after untangling is filled leniently, not the whole body refused
- 77bd85cab jyviko: cli: snapshot --quality coarse|normal|fine|ultra meshes the bodies at that display quality
- 1404bc1f5 jyviko: STEP import: a spline face's edges are measured on their pcurves only, not by nearest point first

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 20:45:43 -04:00
jyviko ffb0e6650b Wave 282/509: SMLib pcurves: an end SMLib sets within the edge's tolerance is mapped onto our interval (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e2c0c0a20 jyviko: pcurve: the lift check samples its interval's end exactly
- 293d19f65 jyviko: STEP import: a vertex's tolerance covers its edges', and edge samples end exactly
- 19c4a1502 jyviko: SMLib pcurves: an end SMLib sets within the edge's tolerance is mapped onto our interval
- fc08b5f99 jyviko: bspline: a parameter a rounding past the domain's end is that end

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 19:08:15 -04:00
jyviko 894b02e02f Wave 281/509: SMLib: the prebuilt where a set-back corner's sections are their rounds' exact arcs
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 365d7545c jyviko: SMLib: the prebuilt where a set-back corner's sections are their rounds' exact arcs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 20:45:26 -04:00
jyviko 57921d7fcd Wave 280/509: STEP import: spindle and horn tori, and a negative major radius (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- dfcdefa92 jyviko: STEP import: a loop jumps at a pole to within the tolerance, as its pcurves closed it
- 7ba82d729 jyviko: STEP import: spindle and horn tori, and a negative major radius
- 3a7b51f72 jyviko: STEP import: an edge's distance from an analytic face is measured before its closed-form pcurve
- fcb162448 jyviko: brep: the geometry check reads a pcurve at its edge's parameter within the interval's rounding

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 16:27:16 -04:00
jyviko 40f16c36bb Wave 279/509: STEP import: an edge off its face's surface carries its gap as its tolerance (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 07cb8c7cc jyviko: STEP import: an edge off its face's surface carries its gap as its tolerance
- 21c64fb24 jyviko: tess: an edge loop of fewer than three segments is split until it encloses an area
- 9da3174bb jyviko: solidcraft-smlib: a revolution goes to SMLib as its NURBS form alone
- 31b9410f5 jyviko: solidcraft-smlib: a horn torus to rounding is no ring torus

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 16:45:52 -04:00
jyviko 01be42ef41 Wave 278/509: Tapped holes: the tap maker's drill for every form, and a drill of the user's within 5% (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 05f1c6b9a jyviko: Tapped holes: the tap maker's drill for every form, and a drill of the user's within 5%
- 87e7fe472 jyviko: Tapped holes: a preference keeps metric's major-less-pitch drill

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 12:27:35 -04:00
jyviko e98cd0a0e2 Wave 277/509: Tapped holes: Rc and NPT take the tap maker's tabulated drill
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e7994d48c jyviko: Tapped holes: Rc and NPT take the tap maker's tabulated drill

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 11:15:38 -04:00
jyviko cc2de29abb Wave 276/509: Tapped holes: Rc and NPT, and a modelled thread with the thread's End (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9717fab2f jyviko: Tapped holes: Rc and NPT, and a modelled thread with the thread's End
- 72e0e0094 jyviko: Ladder 06/017: the golden entry from a run of the case
- 376a91ad7 jyviko: Hole presets: a modelled tapped thread and its End, and every catalogued size
- b6c3b32a9 jyviko: Tapped holes: an Rc or NPT hole takes the stocked drill under its standard minor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 10:56:34 -04:00
jyviko 4531ab6182 Wave 275/509: Thread: the pipe forms in the dialog, ISO 7-1's Rp, a chamfered tip on a taper thread (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 361b35afe jyviko: Thread: a shoulder thinner than the overrun's reach is still a shoulder
- 5fe141c0f jyviko: Thread: the start never fades; ease_in is gone
- 386598282 jyviko: Thread dialog: the Ends section is Start (None, Chamfer) and End (Square, Fade)
- 80e47130b jyviko: Thread: the pipe forms in the dialog, ISO 7-1's Rp, a chamfered tip on a taper thread

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 07:57:20 -04:00
jyviko 64dfa3ca11 Wave 274/509: Thread: ISO 228-1, ISO 7-1 and NPT pipe threads, taper threads by a radial law (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2c4212c04 jyviko: Thread: the chamfered tip at the start or at both ends
- 75deb73aa jyviko: Thread: ISO 228-1, ISO 7-1 and NPT pipe threads, taper threads by a radial law

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 03:07:57 -04:00
jyviko d1b64fb2ff Wave 273/509: Continuity in words: surface dialogs and Continuity Analysis show no G codes (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 28e3b8a19 jyviko: Continuity in words: surface dialogs and Continuity Analysis show no G codes
- 81ecc872f jyviko: Guide: the Fillet dialog's Type and Corners in their new words
- d1a8f0417 jyviko: Thread: a boss thread keeps clear of the plate below
- a30a85698 jyviko: Thread: the chamfered tip reaches ISO 724's external minor diameter

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 01:58:51 -04:00
jyviko cf8ad08ec3 Wave 272/509: Fillet dialog: plain words for continuity, Corners with Setback out of Advanced (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4f6f254d0 jyviko: smlib: a setback left open is a profiler span like every other SMLib call
- 676919d4d jyviko: tess: a face no method plans is filled leniently in (u, v), and named in the stats
- 1acbe2806 jyviko: Fillet dialog: plain words for continuity, Corners with Setback out of Advanced

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 11:12:59 -04:00
jyviko 0968a2a42d Wave 271/509: smlib, kernel: a refused setback corner is named by its point and why (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b2fc5e1fb jyviko: smlib, kernel: a refused setback corner is named by its point and why
- 855575473 jyviko: SMLib: the prebuilt with setback-open corners and the refused-corner index

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 11:56:36 -04:00
jyviko 34c5bc74a5 Wave 270/509: kernel-cases: a continuity check, and ladder 07/015 graded by it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d8282b336 jyviko: doc, engine: corner: g2 sets each corner back for its G2 patch
- 8fbb575a5 jyviko: kernel-cases: a continuity check, and ladder 07/015 graded by it
- 808913777 jyviko: kernel: G2 corners at concave corners, mixed ones refused
- ba38fbd2a jyviko: kernel-cases: ladder 07/019, a concave corner's G2 patch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 13:37:34 -04:00
jyviko 706eafbb17 Wave 269/509: kernel: fillet_g2_corners, set-back corners filled G2 to every face round them
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 704640375 jyviko: kernel: fillet_g2_corners, set-back corners filled G2 to every face round them

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 12:32:39 -04:00
jyviko 68263a8e02 Wave 268/509: smlib: Brep::blend_setback_open, set-back corners left open with their holes (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6263db8d6 jyviko: smlib: Brep::blend_setback_open, set-back corners left open with their holes
- d63a50c47 jyviko: kernel: seam diagnostics give every station's values

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 12:32:39 -04:00
jyviko 57b4ce6453 Wave 267/509: geom: fill_matched, a height field G1/G2 to the faces beside its loop (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- faffa6664 jyviko: Profiler: the diagnostics.profile test holds while other tests record
- 7fde0bdff jyviko: Profiler: docs/perf.md says how to switch it on and read it
- 29225d2c8 jyviko: geom: fill_matched, a height field G1/G2 to the faces beside its loop

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 12:32:39 -04:00
jyviko 335278e3c7 Wave 266/509: Profiler: commands, feature evaluation, io; diagnostics.profile; CLI --profile (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 10ea00e74 jyviko: Profiler: every SMLib C API call is a span, timed by the C API itself
- 319c0bc9f jyviko: Profiler: kernel operations and STEP/IGES import stages are spans
- 9cd655259 jyviko: Profiler: commands, feature evaluation, io; diagnostics.profile; CLI --profile
- fafd977b0 jyviko: Profiler: the Profile operations preference switches recording at run time

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 08:22:36 -04:00
jyviko 3dc5d6d475 Wave 265/509: Profiler crate: nested per-thread spans, an aggregate table and a Chrome trace
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bc205bf86 jyviko: Profiler crate: nested per-thread spans, an aggregate table and a Chrome trace

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 03:49:33 -04:00
jyviko ae7a464148 Wave 264/509: Smooth edges: hide only joins inside one smooth surface (G2); draw tangent joins (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f6645e2c6 jyviko: Threads: a modelled thread's tangent flank joins are not drawn
- 970c29745 jyviko: Smooth edges: a measured crease is kept apart from a tangent display join
- 541b94a60 jyviko: Smooth edges: hide only joins inside one smooth surface (G2); draw tangent joins

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 02:25:51 -04:00
jyviko c025baddd4 Wave 263/509: Smooth edges: one G1 rule on exact surfaces and pcurves (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 57d48aa9f jyviko: Clippy: the kernel's and engine's warnings on develop
- b52a01e29 jyviko: Attribution: the hand-written box STL of kernel case 4561
- 15caa50d2 jyviko: CI affected crates: no truck crates are vendored any more
- c95580d04 jyviko: Smooth edges: one G1 rule on exact surfaces and pcurves

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 01:15:08 -04:00
jyviko e7aadf8f40 Wave 262/509: CI: develop runs like main; SMLib is fetched after the Rust cache is restored (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d13300b0a jyviko: cargo fmt: the format-40 change and the rebase's export list
- 873124c49 jyviko: CI: develop runs like main; SMLib is fetched after the Rust cache is restored
- 6517d1ee6 jyviko: Arabic and Hebrew catalogs: #4414's thread direction labels out, as in every other catalog
- fddb57c0d jyviko: Thread dialog: its labels in the catalogs; Arabic and Hebrew pending messages compare in display order

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 03:05:23 -04:00
jyviko 176202b238 Wave 261/509: Format 40: a thread's hand on tapped holes too; v0.24.0's handedness opens as hand (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4e26dc640 jyviko: The command line and the web app link SMLib by default too
- 826f36a79 jyviko: CI and releases fetch SMLib before building
- 8aea8e5a8 jyviko: Format 40: a thread's hand on tapped holes too; v0.24.0's handedness opens as hand
- 652d3a2cb jyviko: ui: main's browser picks (#4774) read the placed model through session_world

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-27 02:33:33 -04:00
jyviko 5a4e482e9c Wave 260/509: Formatting: rustfmt over the rebased branch (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 562a5bd33 jyviko: Formatting: rustfmt over the rebased branch
- bc15221fa jyviko: The desktop app links SMLib by default
- e476aba94 jyviko: SMLib in the browser: built with wasi-sdk for wasm32-unknown-unknown
- e1ad6ec1a jyviko: SMLib links prebuilt: one build per commit, pinned by SHA-256

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 22:57:25 -04:00
jyviko 88736dc9e4 Wave 259/509: thread: main's screw direction (#4414) out; the thread's hand is the one direction (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a57ce13e7 jyviko: thread: a shaft thicker than a modelled thread is refused, never turned down
- 6b9f5e0e4 jyviko: thread: main's screw direction (#4414) out; the thread's hand is the one direction
- 5fc160732 jyviko: Main's new callers of the placing calls that now return their error

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 19:21:58 -04:00
jyviko d6dacbd6d8 Wave 258/509: Cargo.lock: resolved for the merged manifests (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3e9c70e26 jyviko: Cargo.lock: resolved for the merged manifests
- 6e15b9676 jyviko: engine, kernel-cases: tangent joins out of the corner-pick count; 3383 and 5024 recipes to main's rules
- 46294c7c2 jyviko: kernel: STEP placements by a transformation operator keep its axes and scales
- 3d0f6aa3f jyviko: kernel: IGES trim pieces closed onto their meeting points in main's assembly reader

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 13:52:59 -04:00
jyviko dc8b5489fc Wave 257/509: Main's new callers of the placing calls that now return their error (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d63aa814f jyviko: threads: main's tapped-hole sizes and shaft turn-down on the reworked thread
- cfc393d68 jyviko: Main's new callers of the placing calls that now return their error

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 13:18:38 -04:00
jyviko 27b8046c6f Wave 256/509: Rebase onto main: what the merged code needs to build together
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9138e8704 jyviko: Rebase onto main: what the merged code needs to build together

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 13:02:55 -04:00
jyviko 5238a30bef Wave 255/509: kernel-cases: the ladder's golden recorded on SMLib a15b5a2
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fb5b2520a jyviko: kernel-cases: the ladder's golden recorded on SMLib a15b5a2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 11:55:44 -04:00
jyviko 9ae514b41f Wave 254/509: kernel-ladder: 07/016 is a refusal; 07/018 the same corner with r2; cases.py makes 013 (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b310512e9 jyviko: kernel-ladder: tier 11 threaded parts grade their geometry
- f6b42d416 jyviko: kernel-ladder: 07/016 is a refusal; 07/018 the same corner with r2; cases.py makes 013
- fb384be9c jyviko: smlib: build against SMLib a15b5a2 (replay of usd-brep 1.0.1 with the fork's fixes)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 11:40:34 -04:00
jyviko 90ef5af541 Wave 253/509: kernel-ladder: tier 09 shells grade their geometry (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d3f771998 jyviko: kernel-ladder: tier 07 corner cases grade their geometry
- 0d7acb0ce jyviko: kernel-ladder: 08/007 grades the rounds run into the chamfer
- c9dcc42a1 jyviko: kernel-ladder: tier 09 shells grade their geometry
- 05e0dc17b jyviko: kernel-ladder: 10/008 grades the vents as four times one

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 11:18:21 -04:00
jyviko 242d8d9a7d Wave 252/509: kernel-ladder: tier 04 cases grade their geometry (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 191b2f4c4 jyviko: kernel-ladder: cases.py makes every committed case again
- 977230b7c jyviko: kernel-ladder: tier 04 cases grade their geometry
- 84473f61f jyviko: kernel-ladder: tier 06 grades the threaded boss; both hands and Tr40x14(P7) added

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 11:13:53 -04:00
jyviko 6fcd6713f5 Wave 251/509: kernel: fillet_setback, constant-radius rounds with corners set back (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c2361c000 jyviko: smlib: Brep::blend_setback, blends with corner setbacks (smlib_blend_setback)
- f85343879 jyviko: kernel: fillet_setback, constant-radius rounds with corners set back
- c854239d1 jyviko: doc, engine: solid.fillet setbacks: [{vertex, distance}]
- 9ffd2f783 jyviko: kernel-cases: ladder 07/013 corner setback graded by invariants

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 11:14:20 -04:00
jyviko d94ed7adb9 Wave 250/509: kernel-cases: the ladder's golden recorded after the thread rework (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8edf5b873 jyviko: kernel-cases: the ladder's golden recorded after the thread rework
- 2e1c1097a jyviko: geom: a degenerate point's normal steps into the parameter interval

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 10:56:37 -04:00
jyviko 062054482b Wave 249/509: ui: the thread dialog takes its forms from the document and reopens every option
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 986c649c9 jyviko: ui: the thread dialog takes its forms from the document and reopens every option

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 10:39:36 -04:00
jyviko cc425a6e5c Wave 248/509: Thread runouts: the groove fades out instead of stopping square (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3287bcba9 jyviko: Threads with several starts
- 7bfc184e8 jyviko: A modelled thread's chamfered tip (ISO 4753)
- d433ce2c9 jyviko: Thread runouts: the groove fades out instead of stopping square
- fdede5a0a jyviko: Thread work in rustfmt's layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 09:50:52 -04:00
jyviko 5047403bb1 Wave 247/509: Threads in the standard forms, right- or left-handed or both
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b4549d270 jyviko: Threads in the standard forms, right- or left-handed or both

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 09:19:00 -04:00
jyviko 71a81514ee Wave 246/509: Threads start at the end meant and stop clear of a shoulder
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 366b90597 jyviko: Threads start at the end meant and stop clear of a shoulder

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 08:57:30 -04:00
jyviko 2931f71d78 Wave 245/509: ui: the thread dialog offers every option of solid.thread
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- eb9c424b4 jyviko: ui: the thread dialog offers every option of solid.thread

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 08:42:58 -04:00
jyviko fb292f17b4 Wave 244/509: doc: threads in their own module
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 350d2884a jyviko: doc: threads in their own module

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 08:31:30 -04:00
jyviko cffbe6a72b Wave 243/509: kernel: sag refinement adds no node to a face's boundary
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3f2585569 jyviko: kernel: sag refinement adds no node to a face's boundary

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 07:51:14 -04:00
jyviko db2552f078 Wave 242/509: kernel-cases: the ladder takes twelve cases for this round's kernel fixes
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 376363c73 jyviko: kernel-cases: the ladder takes twelve cases for this round's kernel fixes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 07:33:13 -04:00
jyviko 8f28952005 Wave 241/509: An edge flange picked inside a notch is built on the notch's edge (#5306)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9a93f9d21 jyviko: An edge flange picked inside a notch is built on the notch's edge (#5306)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 05:55:43 -04:00
jyviko cbd7b07767 Wave 240/509: A converted sheet takes its rule's values at its own thickness (#4328) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 610173e1f jyviko: combine: move each tool into its target's frame
- 3fb263d00 jyviko: hole: keep a countersink's tool within its rim above the face
- 1171c4c2a jyviko: A sheet metal body mirrored or patterned into new bodies is sheet metal (#3353)
- 5a9bf4742 jyviko: A converted sheet takes its rule's values at its own thickness (#4328)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 05:55:36 -04:00
jyviko 7c481d281f Wave 239/509: engine: a shell that opens no face makes a closed hollow body (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 48abbbcc1 jyviko: kernel: a vertex a face's loops pass twice is one point of its (u, v)
- 1df330c79 jyviko: engine: a shell that opens no face makes a closed hollow body
- 5aeff43f8 jyviko: smlib: a horn or spindle torus face comes out as its NURBS form
- bd4e1926a jyviko: kernel-cases: 2928's base extrudes the ring it describes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-26 05:04:57 -04:00
jyviko 2425f8b453 Wave 238/509: geom: a face's box reaches its boundary's extremes, not its samples' (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 903e371fa jyviko: geom: a face's box reaches its boundary's extremes, not its samples'
- cfe1b8b92 jyviko: step: a loop through its surface's pole has its seam
- 0bea4631b jyviko: kernel: IGES trim pieces that miss their meeting point are closed onto it
- 0e6681a2d jyviko: kernel: the largest fitting fillet shrinks only on a refusal as too large

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 21:27:27 -04:00
jyviko a5fc58bfed Wave 237/509: kernel, kernel-cases: a convex blend overflowing a cliff is built, with its analytic answer (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 237f0ae74 jyviko: kernel, kernel-cases: a convex blend overflowing a cliff is built, with its analytic answer
- 7d300984b jyviko: kernel, kernel-cases: a shell whose walls would meet is refused, saying so
- 3be6ad433 jyviko: kernel: a tangent chain stops where the edges' convexity flips
- 098fac037 jyviko: geom: a face's loops lie in one turn of its periodic surface

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 19:51:02 -04:00
bherbruck 72ad6383ef Release 0.22.1 2026-10-25 10:38:39 -04:00
jyviko 2c2f2e5140 Wave 236/509: kernel-cases: #5198–#5463 triaged: 14 cases, 100 skipped
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4856fd3df jyviko: kernel-cases: #5198–#5463 triaged: 14 cases, 100 skipped

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 08:39:05 -04:00
jyviko 8e1005c82d Wave 235/509: kernel-cases: #4830–#5197 triaged: 21 cases, 110 skipped
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e47c33807 jyviko: kernel-cases: #4830–#5197 triaged: 21 cases, 110 skipped

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 08:39:05 -04:00
jyviko 4c922a19a9 Wave 234/509: kernel-cases: #4432–#4829 triaged: 21 cases, 175 skipped
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 173000b44 jyviko: kernel-cases: #4432–#4829 triaged: 21 cases, 175 skipped

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 08:39:05 -04:00
jyviko cc085dcd52 Wave 233/509: kernel-cases: #4161–#4431 triaged: 19 cases, 93 skipped
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5bc0dc688 jyviko: kernel-cases: #4161–#4431 triaged: 19 cases, 93 skipped

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 08:38:47 -04:00
jyviko e5bca0495d Wave 232/509: sew: a cut-out touching its face's outline at a corner is one loop through it
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c991a2613 jyviko: sew: a cut-out touching its face's outline at a corner is one loop through it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 08:48:02 -04:00
jyviko a68a6ca981 Wave 231/509: doc: a join groups pieces that touch nothing; only edge and point contacts are kept apart (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 810f0d66d jyviko: doc: a join groups pieces that touch nothing; only edge and point contacts are kept apart
- 1d98d5111 jyviko: smlib: solids touching round a pocket each export as one closed shell

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-25 08:48:02 -04:00
jyviko 7fe4469fc4 Wave 230/509: tess: a face's sampled boundary never crosses itself (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 773e627b4 jyviko: tess: no edge segment spans more than a quarter turn; loops touching at a vertex close
- 806268714 jyviko: tess: a face's sampled boundary never crosses itself

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-24 22:52:57 -04:00
jyviko 8554b2a0e4 Wave 229/509: doc: a join keeps solids that only touch as separate bodies (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 94ee28d5c jyviko: doc: a join keeps solids that only touch as separate bodies
- 3e2b109cc jyviko: engine: feature commands take touching; a join's result notice
- ec6fa9706 jyviko: kernel: a seam with one face on both of its sides is a seam, and no pick takes it
- 19cf11ef3 jyviko: kernel-cases: ladder 07-fillets/016's second fillet rounds only its picked edge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-24 22:49:17 -04:00
bherbruck 0537623a75 Release 0.22.0 2026-10-24 18:53:43 -04:00
bherbruck 65d288227e Release 0.21.0 (rc.2's code, version only)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:51:08 -04:00
bherbruck fedb3bcdb1 Release 0.21.0-rc.2 2026-10-23 17:14:38 -04:00
bherbruck 097b8b7550 Release 0.21.0-rc.1
The tree is main at f120285c9 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-23 13:48:05 -04:00
bherbruck af7ca3a8a2 Release 0.21.0-rc.1
The tree is main at b31fddb98 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-23 13:37:43 -04:00
bherbruck 27ddb725c7 Release 0.21.0-rc.1
The tree is main at 2bf3d4e11 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-23 12:10:02 -04:00
bherbruck a06bdf5cfc Release 0.20.0
The tree is main at 030187452 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-22 18:34:40 -04:00
jyviko c7ead5658d Wave 228/509: kernel: how a body's material regions meet, read from the record (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 42e50a87c jyviko: smooth edges: tangent joins of planes, cylinders and cones, along straight splines too
- 89e23d1eb jyviko: record: a body built from a sketch has new edges, with no origins
- 8eb93ff06 jyviko: step_in tests: the cube fixture's edges lie on their lines
- 4b418c0d2 jyviko: kernel: how a body's material regions meet, read from the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 09:02:24 -04:00
jyviko a889da6000 Wave 227/509: smlib: an SmCylinder rebuilt from its NURBS keeps one radius (f06b48a, solidcore#713)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 38a626401 jyviko: smlib: an SmCylinder rebuilt from its NURBS keeps one radius (f06b48a, solidcore#713)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 23:27:31 -04:00
jyviko fd0022ee15 Wave 226/509: smlib: parallel cylinders intersect along their faces (7edbf5a, solidcore#711)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8cca84361 jyviko: smlib: parallel cylinders intersect along their faces (7edbf5a, solidcore#711)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 23:13:53 -04:00
jyviko 30fbf80cc4 Wave 225/509: kernel tests: a blend meant to run along a tangent chain asks for it (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 667ee5665 jyviko: kernel tests: a blend meant to run along a tangent chain asks for it
- 74d02d2a0 jyviko: smlib: the fork with NVIDIA usd-brep 1.0.1 merged (f7f012b)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 22:42:32 -04:00
jyviko 06c2c6087b Wave 224/509: STEP and IGES import: SMLib makes the pcurves that have no closed form (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 306c7b75b jyviko: pcurve: a rim at a steady pace on a spline face, read from the edge itself
- 28e0eea80 jyviko: pcurve: each use's closed form or none, and a kernel's trims for the rest
- 1bf206259 jyviko: STEP and IGES import: SMLib makes the pcurves that have no closed form
- 879958721 jyviko: pcurves: a flat patch's are a plane's; SMLib's sheet loops read either way round

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 22:22:32 -04:00
jyviko 9767f95c31 Wave 223/509: brep: meridians, revolutions and whole turns exact on their forms (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2883981a0 jyviko: brep: meridians, revolutions and whole turns exact on their forms
- 6c385c843 jyviko: sew, step: face forms from the boundary's extent; trimmed profiles exact
- fd71e6a95 jyviko: kernel: assembled faces and edges on their NURBS forms
- f6f8b28c0 jyviko: Records require NURBS forms on circles, ellipses and curved analytic faces

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 20:07:48 -04:00
jyviko 51f0a9df43 Wave 222/509: brep, step: the pcurve fit is gone (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 819928205 jyviko: step: a swept surface's circle or ellipse profile is its NURBS form
- 6cc0401fa jyviko: brep, step: the pcurve fit is gone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 18:20:36 -04:00
jyviko cf0ff5159d Wave 221/509: sew: an edge folded across a bend gets a Hermite pcurve on the bend's form (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fd873bb83 jyviko: sew: an edge folded across a bend gets a Hermite pcurve on the bend's form
- c376e8403 jyviko: step: imported faces and edges on their NURBS forms
- 69702833f jyviko: solidcraft-smlib: ellipse edges on their NURBS form, as circles are (fork 0c5868e)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 18:20:36 -04:00
jyviko b11e66e606 Wave 220/509: sew: faces and edges on their NURBS forms, their pcurves exact (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c5dbf879a jyviko: brep: exact pcurves of forms: cut on planes, along the parameters of spline faces
- a4180ab42 jyviko: sew: faces and edges on their NURBS forms, their pcurves exact
- 57080f88c jyviko: fixup! sew: faces and edges on their NURBS forms, their pcurves exact
- 76a254137 jyviko: sew: a circle on a revolved face is labelled on that face's frame

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 17:04:39 -04:00
jyviko c2a1e7524e Wave 219/509: brep: forms on their frame's quarter grid, across the seam (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f070eee2b jyviko: brep, kernel: a face's side is read on its NURBS form (#4149)
- 58f60adbf jyviko: kernel: an assembled face keeps its NURBS form
- 807010c49 jyviko: brep: the NURBS forms of lines, circles, ellipses, cylinders, cones, spheres and tori
- f370d1e42 jyviko: brep: forms on their frame's quarter grid, across the seam

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 16:34:50 -04:00
jyviko c1b2eb638a Wave 218/509: solidcraft-smlib: corner UV gaps closed without moving trims off their edges (fork 5af7070)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 768034bbb jyviko: solidcraft-smlib: corner UV gaps closed without moving trims off their edges (fork 5af7070)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-23 08:03:02 -04:00
jyviko 0a108aac38 Wave 217/509: solidcraft-smlib: the record relays SMLib's tolerances and edges as SMLib holds them (fork aec68dd)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 76bd53403 jyviko: solidcraft-smlib: the record relays SMLib's tolerances and edges as SMLib holds them (fork aec68dd)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 19:55:28 -04:00
jyviko 7b19f68368 Wave 216/509: brep, kernel: code that reads an edge's angles takes them from the circle, code that evaluates takes the NURBS form
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6892ceac7 jyviko: brep, kernel: code that reads an edge's angles takes them from the circle, code that evaluates takes the NURBS form

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 17:55:46 -04:00
jyviko 9a508571fd Wave 215/509: brep: an edge on a line, circle or ellipse carries the NURBS form SMLib holds it as (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b1326e48d jyviko: brep: an edge on a line, circle or ellipse carries the NURBS form SMLib holds it as
- 6adba90e2 jyviko: solidcraft-smlib: circle edges on their NURBS form, SMLib's trims kept on them (fork deec9cb)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 17:35:54 -04:00
jyviko 69a2c57cfe Wave 214/509: solidcraft-smlib: a plane face takes SMLib's own trims (fork c6530bf)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a683077c4 jyviko: solidcraft-smlib: a plane face takes SMLib's own trims (fork c6530bf)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 16:34:43 -04:00
jyviko 0de308b21d Wave 213/509: kernel: a tangent chain stops at a smooth edge (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e6f993fff jyviko: Revert "kernel: merged topology counts no seam edge (a face on both sides of it)"
- 4ea29e307 jyviko: kernel-cases: 818 counts its two cylinders' seams, as every case counts edges
- de0e5bf52 jyviko: kernel: a tangent chain stops at a smooth edge
- 369c897d8 jyviko: kernel, cli: clippy and the cli tests build again

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 16:26:38 -04:00
jyviko b1c82e0582 Wave 212/509: solidcraft-smlib: the fork at c8a19a2, the offset step wall
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0d783f889 jyviko: solidcraft-smlib: the fork at c8a19a2, the offset step wall

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 14:38:00 -04:00
jyviko 8b3eedd0aa Wave 211/509: doc, engine, ui: placing the model returns its error; placements are checked where they are set
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9a7958857 jyviko: doc, engine, ui: placing the model returns its error; placements are checked where they are set

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 13:38:41 -04:00
jyviko 9aedc5faed Wave 210/509: doc, engine, kernel: solid.fillet and solid.chamfer round each picked edge's tangent chain by default (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 84bd2daad jyviko: doc, engine, kernel: solid.fillet and solid.chamfer round each picked edge's tangent chain by default
- d0ff1dcfa jyviko: doc: an extrude's taper without a corner rule picks one per profile
- 5e7aba8df jyviko: loft sections matched to their neighbours
- 2752eee61 jyviko: kernel: merged topology counts no seam edge (a face on both sides of it)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 14:24:15 -04:00
jyviko 227e4b7794 Wave 209/509: solidcraft-smlib: the fork at f6b7a66, SMLib's trims on every curved face
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 50bc9f302 jyviko: solidcraft-smlib: the fork at f6b7a66, SMLib's trims on every curved face

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 14:12:17 -04:00
jyviko 59e1da2bd8 Wave 208/509: solidcraft-smlib: the fork at ea6c6c0, NURBS-form face ranges
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 70ffeaf0e jyviko: solidcraft-smlib: the fork at ea6c6c0, NURBS-form face ranges

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 13:56:09 -04:00
jyviko bfae336ce1 Wave 207/509: brep: a face on a cylinder, cone, sphere or torus carries the NURBS form SMLib holds it as (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b6a3b31ff jyviko: brep: a face on a cylinder, cone, sphere or torus carries the NURBS form SMLib holds it as
- 2e26e0567 jyviko: solidcraft-smlib: the export reads FACE_NURBS_FORM
- 03db54a23 jyviko: solidcraft-smlib: SMLib at the merged fixes: slice, seam check, analytic revolve, draft corners, blend refusal, union of many, NURBS forms (fork 03c14ca)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 13:34:10 -04:00
jyviko b6dcdd163e Wave 206/509: kernel, smlib: a blend larger than its faces is SMLib's refusal; blends take exactly the given edges (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bcbb99005 jyviko: kernel, smlib: a blend larger than its faces is SMLib's refusal; blends take exactly the given edges
- 13e49e069 jyviko: engine: solid.fillet and solid.chamfer say they blend exactly the edges given

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 09:11:27 -04:00
jyviko 3557e3c563 Wave 205/509: kernel: union_all, one SMLib union of many bodies checked once, history over every operand (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2ffbbc74d jyviko: step: a cone within the file's uncertainty of its limit plane over the face is read as that plane
- 0185ccc1e jyviko: solidcraft-smlib: Brep::union_all, the union of many bodies in one SMLib call
- 0213c3dfa jyviko: kernel: union_all, one SMLib union of many bodies checked once, history over every operand
- 83d965f30 jyviko: doc: a join into one target and an intersection's tools are one union_all call

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 08:46:55 -04:00
jyviko 0a014857ab Wave 204/509: doc: an extrude's taper saves how it closes the profile's corners (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 045961445 jyviko: doc: an extrude's taper saves how it closes the profile's corners
- 1b5ca02b8 jyviko: solidcraft-smlib: SMLib's tangent draft corner meets lines at an edge (fork ccc56fd and docs)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 13:14:40 -04:00
jyviko 542715de62 Wave 203/509: kernel: a tapered extrusion closes its corners by a rule, preserving curvature by default
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 384c5866f jyviko: kernel: a tapered extrusion closes its corners by a rule, preserving curvature by default

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 09:11:24 -04:00
jyviko 6354e472ed Wave 202/509: kernel: a raised band reads its arcs' circles from the record (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 09c979a4b jyviko: brep: a full circle in a profile is one closed arc
- 8e6c24aeb jyviko: kernel: a raised band reads its arcs' circles from the record
- d10041743 jyviko: kernel: emboss reads a wall's span from its arc's interval
- 0414f5a7a jyviko: kernel: assemble's unused CurveEval import goes with edge_point

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 13:14:56 -04:00
jyviko e2723501ab Wave 201/509: solidcraft-smlib: SMLib at the candidate: solver statuses, range-end refinement, arc sweeps as cylinders (fork 1c8e415)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 99024b368 jyviko: solidcraft-smlib: SMLib at the candidate: solver statuses, range-end refinement, arc sweeps as cylinders (fork 1c8e415)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 09:01:26 -04:00
jyviko 82f1404518 Wave 200/509: kernel: planar sheets are built one simple loop at a time (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 44744d3aa jyviko: kernel: a face's boundary runs along a pole as its pcurves say
- 01845c189 jyviko: kernel: planar sheets are built one simple loop at a time
- 529c2cf04 jyviko: solidcraft-smlib: SMLib's area counts the faces between solid and void only (fork 8400690)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 08:43:57 -04:00
jyviko 2ed50ed7df Wave 199/509: solidcraft-smlib: SMLib pinned at the fork's integration head
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- af3615e08 jyviko: solidcraft-smlib: SMLib pinned at the fork's integration head

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 08:15:21 -04:00
jyviko a59ec94b02 Wave 198/509: brep: one basis-derivative routine, bspline::basis_derivatives (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 78937d1db jyviko: brep: one basis-derivative routine, bspline::basis_derivatives
- afce22bb6 jyviko: solidcraft-smlib: mass properties of any body, by its material regions (fork 311946c)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 08:14:27 -04:00
jyviko 95a242cb67 Wave 197/509: kernel: a free ruled strip is the exact ruled surface to a far curve of its own (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 81cef1c60 jyviko: kernel: a free ruled strip is the exact ruled surface to a far curve of its own
- 9e2c1c57c jyviko: kernel: ruled surface docs and test for the free strip's far curve

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 08:12:08 -04:00
jyviko 460f7fa0f7 Wave 196/509: kernel: the test target compiles: the last tests on the record and SMLib (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2a09b9943 jyviko: kernel: the test target compiles: the last tests on the record and SMLib
- 2f83aaa5d jyviko: kernel: clippy's own fixes across the kernel (needless borrows, assign ops, contains)
- f6afec8ea jyviko: kernel: dead code left by the port deleted; clippy -D warnings clean on all targets
- a0e17daa5 jyviko: kernel: cargo fmt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:53:11 -04:00
jyviko 8291eff436 Wave 195/509: kernel: tests.rs reads the record
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 018bdbad3 jyviko: kernel: tests.rs reads the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:43:43 -04:00
jyviko 8a9315e7f7 Wave 194/509: kernel: native and SMLib-import tests on the record; the adapter's tests go
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 623f1b9c1 jyviko: kernel: native and SMLib-import tests on the record; the adapter's tests go

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:42:34 -04:00
jyviko 37c118042c Wave 193/509: kernel: mesh, lump, loft-rail, untouched-face and intersection-curve tests read the record (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 1b7fda4d3 jyviko: kernel: surfaces and SMLib blends without the smlib feature gate
- e1b9ea10c jyviko: kernel: placement, history, mesh-memo, display and issue tests read the record
- 8237cc927 jyviko: kernel: mesh, lump, loft-rail, untouched-face and intersection-curve tests read the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:41:46 -04:00
jyviko 50ca3c5a61 Wave 192/509: kernel: corner rules for direction, rails and closed paths; no feature gate on SMLib sweeps (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- af4e97b64 jyviko: cli: the rig and the oracle reach MeshTolerance through the engine
- f7daf6124 jyviko: doc, engine: the unused revolve targets and the formatting of the exact tools
- caa5ed0e6 jyviko: kernel: twisted and scaled sweeps round corners by the plain sweep's corner model
- dead22ba7 jyviko: kernel: corner rules for direction, rails and closed paths; no feature gate on SMLib sweeps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:49:18 -04:00
jyviko 816e43c5d0 Wave 191/509: engine: no boolean retries to report; overlaps are SMLib's exact intersection (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 712caf8bf jyviko: engine: no boolean retries to report; overlaps are SMLib's exact intersection
- 431c3f6d0 jyviko: doc: plastic features' tools stand on the face as drawn
- 4ca7793a3 jyviko: doc: a hole in sheet metal is a cut-out or a bore by its drill's direction
- 8d91c19f1 jyviko: brep: an intersection curve's point is a function of t alone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:48:53 -04:00
jyviko 209ef1f6c0 Wave 190/509: kernel: dead code the ports left behind, deleted (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 206c53487 jyviko: kernel: dead code the ports left behind, deleted
- 337b8096f jyviko: kernel: dead code the ports left is gone; core files formatted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:50:43 -04:00
jyviko 7ddfd0a389 Wave 189/509: kernel: surfaces, bridge and loft rails clippy-clean; picked_loop gone (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7646e8ff6 jyviko: kernel: compiles on the record — trim reads the tool's side near its body; mesh memo typed
- 748e796b2 jyviko: kernel: sweep histories attach with no edge origins given
- a5f5809ba jyviko: kernel: a ruled strip's side builder needs no mutable binding
- ee79235f5 jyviko: kernel: surfaces, bridge and loft rails clippy-clean; picked_loop gone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:45:52 -04:00
jyviko f6dd5c8c2e Wave 188/509: kernel: IGES export from the record (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7d9eb68e4 jyviko: solidcraft-step: a record's layout (solids, voids, sheets) and outer loops for every writer
- ed43871f7 jyviko: kernel: IGES export from the record
- 1d4811201 jyviko: kernel: STEP import tests and docs without the deleted face splitting

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:38:43 -04:00
jyviko 3696bf259e Wave 187/509: kernel: STEP import and export on the schema 4 record and SMLib
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ab8bc6625 jyviko: kernel: STEP import and export on the schema 4 record and SMLib

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:34:27 -04:00
jyviko 33ffde4d5a Wave 186/509: solidcraft-step: write a schema 4 record as ISO 10303-42 topology (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 30ddda306 jyviko: solidcraft-step: write a schema 4 record as ISO 10303-42 topology
- d59bb0084 jyviko: solidcraft-step: revolutions under axis-keeping placements; void shells as the record has them; Reader::frame

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:32:15 -04:00
jyviko 540aa0da1b Wave 185/509: engine: feature replies carry no boolean diagnostics (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 88b1ba507 jyviko: doc: a feature result has no boolean diagnostics any more
- 1ecf00b5a jyviko: engine: feature replies carry no boolean diagnostics

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:36:40 -04:00
jyviko 13bb81b847 Wave 184/509: kernel: the general fill's tests read the record; five- and six-sided fills are patches about a centre (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4a8ca6d0f jyviko: kernel: Assembly::finish ends in Brep::canonical
- bd1095fff jyviko: kernel: the general fill's tests read the record; five- and six-sided fills are patches about a centre
- 5aaf405d8 jyviko: kernel: the second-derivative tests check the record's SurfaceEval::second
- 4897ce17b jyviko: kernel: loft rails tests measure against the record's surfaces

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:36:06 -04:00
jyviko 00659d4d12 Wave 183/509: kernel: face sections along a direction as SMLib's exact curves (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 849bb1f24 jyviko: kernel: face sections along a direction as SMLib's exact curves
- 876333480 jyviko: doc: an iso link along a direction on a solid is SMLib's exact section
- d9274aaf1 jyviko: kernel: the point-path sweep test expects the polyline's walls
- 13e9aca7e jyviko: kernel: exact projection, section and iso curves exported; SMLib at the fork's integration head

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:35:57 -04:00
jyviko 58dd3a66cf Wave 182/509: solidcraft-smlib: face sections as SMLib's B-splines
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d80328595 jyviko: solidcraft-smlib: face sections as SMLib's B-splines

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:29:27 -04:00
jyviko e45d7a3873 Wave 181/509: kernel: iso_curves, a face's isoparametric curve exactly, trimmed by its loops (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7b5d732e3 jyviko: kernel: project_onto_face, sketch curves projected onto a face as SMLib's curves
- 0ef5b910f jyviko: doc: a curve projected onto a solid's face is SMLib's projection of the curve
- 95e9a80fa jyviko: kernel: iso_curves, a face's isoparametric curve exactly, trimmed by its loops
- 814475f4f jyviko: doc: an iso curve of a solid's face along u or v is the surface's own curve

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:22:43 -04:00
jyviko 68c1c18e73 Wave 180/509: kernel: the last truck wire, face and loft helpers leave the construction files
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 453d6395e jyviko: kernel: the last truck wire, face and loft helpers leave the construction files

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:20:11 -04:00
jyviko 4b94403dd6 Wave 179/509: solidcraft-smlib: Brep::project_curves, curves projected onto a face as SMLib's B-splines (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6d0993817 jyviko: kernel: a ruled strip whose rulings turn along a free-form edge is refused, not fitted
- a6b41dd82 jyviko: solidcraft-smlib: Brep::project_curves, curves projected onto a face as SMLib's B-splines

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:16:31 -04:00
jyviko b9e0543ef5 Wave 178/509: kernel-cases: the rig runs SMLib only and keeps each run's SMLib dumps
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 001c62ab1 jyviko: kernel-cases: the rig runs SMLib only and keeps each run's SMLib dumps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:31:00 -04:00
jyviko fc66604b07 Wave 177/509: kernel: matchsurf and loft blend tests read the record
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 715ed5db7 jyviko: kernel: matchsurf and loft blend tests read the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:32:24 -04:00
jyviko 2c3f760f05 Wave 176/509: kernel: one canonicaliser; one tensor sheet (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 1708fe0e0 jyviko: brep: Brep::canonical, any record in canonical order
- 98548fe16 jyviko: kernel: one canonicaliser; one tensor sheet
- f8e175273 jyviko: brep: Brep::split_edges, a record's edges split exactly at parameters inside them
- 65e141ac4 jyviko: kernel: stitch splits an edge at another sheet's vertex lying on it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:31:45 -04:00
jyviko 9f7f510843 Wave 175/509: kernel: ruled surfaces on the record
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- db0ac6129 jyviko: kernel: ruled surfaces on the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:31:05 -04:00
jyviko 2e39a45145 Wave 174/509: kernel: surface sweeps mitre at corners, as the solid sweep does (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 30b02cdfa jyviko: kernel: the solid loft's rails anchored by loft_rails::railed; path curves shared
- 0d611ed84 jyviko: kernel: surface sweeps mitre at corners, as the solid sweep does

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:26:30 -04:00
jyviko 6d9703c97c Wave 173/509: kernel: the touching-face checks, extrusion batching and clearance probe are gone (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c7afe5eb4 jyviko: doc: a lip is SMLib's raised band and a groove its exact rim band, nothing else
- 89423b88e jyviko: doc: a sheet bore is cut once, with the drill clipped to its panel
- f4fa8a407 jyviko: kernel: the touching-face checks, extrusion batching and clearance probe are gone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:30:36 -04:00
jyviko 18618bb72c Wave 172/509: doc: extrude and revolve tools go into the boolean as drawn
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b90cdc521 jyviko: doc: extrude and revolve tools go into the boolean as drawn

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:29:39 -04:00
jyviko 13df957b01 Wave 171/509: kernel: surface match on the record, through bridge's record API (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7c0d9b5e8 jyviko: kernel: the general fill on loops of five or more edges, its patches about a centre
- 87907628e jyviko: kernel: surface match on the record, through bridge's record API
- 22fde06a3 jyviko: kernel: loft blend on the record, through bridge's record API
- 7e7193b33 jyviko: doc: the faceted thread groove is gone; the groove is SMLib's exact screw sweep

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:25:17 -04:00
jyviko 2c4a5b6872 Wave 170/509: geom: fill_iso fills loops of five or more edges with patches about a centre
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 1f8c91873 jyviko: geom: fill_iso fills loops of five or more edges with patches about a centre

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:20:56 -04:00
jyviko ab9c676627 Wave 169/509: kernel: an intersection curve is where SMLib's imprint cuts, exactly (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- beebf2203 jyviko: kernel-cases: --dumps=DIR leaves each failing SMLib call's inputs for replay
- 83c0f4e2c jyviko: AGENTS.md: SMLib is the kernel; no switch, no other kernel
- 1b27c134d jyviko: kernel: an intersection curve is where SMLib's imprint cuts, exactly
- 9398b2586 jyviko: kernel: intersection edges exported from the crate root

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:27:07 -04:00
jyviko 966af74030 Wave 168/509: The truck crates leave the workspace; the rig and threads run on SMLib alone
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 166ebe2ee jyviko: The truck crates leave the workspace; the rig and threads run on SMLib alone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:23:52 -04:00
jyviko 585a6b4efe Wave 167/509: kernel: boundary surfaces on the record (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e00645ca5 jyviko: kernel: crate root follows the split, surfaces and SSI ports
- 252b2947a jyviko: kernel: mesh bodies built by Body::of_mesh; fuzz booleans have no fallback counts
- 0013249c4 jyviko: kernel: Patch of a body's edges is fill's patch with no crown
- 08f061b02 jyviko: kernel: boundary surfaces on the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:21:31 -04:00
jyviko 186b145be8 Wave 166/509: solidcraft-smlib: ssi hands out SMLib's intersection curves exactly, as schema 4 B-splines
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c3f99d0e9 jyviko: solidcraft-smlib: ssi hands out SMLib's intersection curves exactly, as schema 4 B-splines

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:19:00 -04:00
jyviko ce74cebdc2 Wave 165/509: kernel: bridges read their support faces on the record (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9b5e0a8b4 jyviko: kernel: T-spline sheets as record faces; NURBS faces on the record
- 5c1b335e1 jyviko: kernel: bridges read their support faces on the record
- b5a7d52b7 jyviko: kernel: bridges and surfaces read the body's own record
- c83bd8f94 jyviko: kernel: T-spline and offset tests read the body's record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:15:40 -04:00
jyviko fde43b5317 Wave 164/509: kernel: surfaces on the schema 4 record and SMLib
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 23bfae010 jyviko: kernel: surfaces on the schema 4 record and SMLib

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:58:54 -04:00
jyviko 89457d7917 Wave 163/509: kernel: loft rails on exact NURBS sections, the last section met where the rail ends (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f6fb1af00 jyviko: kernel: an arc's knots built without a borrowed temporary
- d3ca6e089 jyviko: kernel: loft rails on exact NURBS sections, the last section met where the rail ends

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:58:54 -04:00
jyviko 11be845827 Wave 162/509: kernel: profile segments as exact schema 4 edge curves and pcurves (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0cbd9e19d jyviko: kernel: profile segments as exact schema 4 edge curves and pcurves
- e1326f37f jyviko: solidcraft-smlib: Brep::stitch and Brep::offset_sheet, and the fork pinned at e3d478d

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:45:07 -04:00
jyviko 739c9d8f5b Wave 161/509: kernel: planar source lineage on the record, coplanar faces joined by SMLib (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 585334a29 jyviko: kernel: planar source lineage on the record, coplanar faces joined by SMLib
- 5c16e8dd1 jyviko: kernel: coplanar faces joined by SMLib's merge_faces, the record read from the body
- c802458ef jyviko: solidcraft-smlib: Brep::face_points, a point inside each face (smlib_face_points)
- 453a4dec7 jyviko: kernel: a trimmed piece's side is read at a point inside it, exactly

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:17:16 -04:00
jyviko 5fded8864a Wave 160/509: kernel: delete the coplanar, seam and flat-face boolean strategies
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 60b817e67 jyviko: kernel: delete the coplanar, seam and flat-face boolean strategies

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:54:55 -04:00
jyviko a8038a81df Wave 159/509: kernel: Split Face and Split Body on SMLib, the tool as exact record surface patches
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7225d3f2b jyviko: kernel: Split Face and Split Body on SMLib, the tool as exact record surface patches

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:53:26 -04:00
jyviko b885929d8a Wave 158/509: solidcraft-smlib: Brep::split_faces and Brep::split_body on the fork's split shims (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e520c9d42 jyviko: kernel: a body's record may be a surface body of open shells
- befcfecb7 jyviko: solidcraft-smlib: Brep::split_faces and Brep::split_body on the fork's split shims

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:42:30 -04:00
jyviko 60244c2dcd Wave 157/509: kernel: outline_union deleted, a retry of the old boolean with no caller left (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d5d783066 jyviko: kernel: outline_union deleted, a retry of the old boolean with no caller left
- 25b128698 jyviko: kernel: crate root follows the query-module port; SMLib at the fork's integration head

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:16:51 -04:00
jyviko 0d502d2634 Wave 156/509: kernel: face_params deleted; a face's boundary in its parameters is the record's pcurves (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- abf46cc21 jyviko: kernel: clearance reads each face's surface from the schema 4 record
- f53405d6b jyviko: kernel: plane_fit fits and certifies planes on the schema 4 record
- bd956b88a jyviko: kernel: spline_conv makes record curves, surfaces and tensor sheets
- abb7c37d8 jyviko: kernel: face_params deleted; a face's boundary in its parameters is the record's pcurves

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:15:29 -04:00
jyviko 22d1ca264a Wave 155/509: kernel: topo reads each face's surface from the schema 4 record (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e463eabb6 jyviko: kernel: topo reads each face's surface from the schema 4 record
- 80e34cc8c jyviko: kernel: surface_kind reads faces and edges off the schema 4 record
- b0ad6f62b jyviko: kernel: body distance projects onto the schema 4 record's faces and edges

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 01:09:07 -04:00
jyviko 73e7636790 Wave 154/509: kernel: planar region booleans are SMLib's exact 2D boolean
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d4f6c16a4 jyviko: kernel: planar region booleans are SMLib's exact 2D boolean

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 01:03:15 -04:00
jyviko 894022904f Wave 153/509: kernel: the general fill is the iso-parametric patch on three or four edges (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3ef93b363 jyviko: kernel: the general fill is the iso-parametric patch on three or four edges
- cfb5dc3ba jyviko: solidcraft-smlib: Brep::planar_faces and Brep::boolean2d

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:59:46 -04:00
jyviko 73713b0de2 Wave 152/509: geom: fill_iso, a patch on three or four exact curves whose boundary rows are the curves
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 628b268b9 jyviko: geom: fill_iso, a patch on three or four exact curves whose boundary rows are the curves

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 01:07:50 -04:00
jyviko a51c09e063 Wave 151/509: kernel: measure is SMLib's exact integrals; one kernel, no switch
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 32ae0cd9c jyviko: kernel: measure is SMLib's exact integrals; one kernel, no switch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:14:51 -04:00
jyviko be01004e30 Wave 150/509: kernel: a saved body is its record; SMLib bodies convert with no healer
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f6590bcaa jyviko: kernel: a saved body is its record; SMLib bodies convert with no healer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 07:13:34 -04:00
jyviko 12dd1a17cc Wave 149/509: kernel: booleans, placements and splits on SMLib only, with no retries
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e36f8d777 jyviko: kernel: booleans, placements and splits on SMLib only, with no retries

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 01:08:38 -04:00
jyviko 38ef4e83cc Wave 148/509: kernel: record.rs records history on the schema 4 record, by index (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5fa086dd5 jyviko: kernel: record.rs records history on the schema 4 record, by index
- c5c411de5 jyviko: kernel: an assembled record is the body; its history through record::attach
- 796d3e7d2 jyviko: kernel: boolean_record composes histories; healing is heal's
- f56a94eac jyviko: kernel: exact path helpers exported; SMLib pinned at the fork's integration head

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 01:03:13 -04:00
jyviko 4a589aca8c Wave 147/509: doc: sweeps along linked and planar curves follow the exact curves (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7952516eb jyviko: doc: sweeps along linked and planar curves follow the exact curves
- 43e8b0349 jyviko: kernel: a point path's polyline is swept as the lines it is, however smooth

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 01:01:49 -04:00
jyviko c302f6cbb3 Wave 146/509: kernel: path segments hold any rational Bézier span, and edges as paths
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 33cfa34d4 jyviko: kernel: path segments hold any rational Bézier span, and edges as paths

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:53:56 -04:00
jyviko 9f8e44b216 Wave 145/509: kernel: extend on SMLib: the surface's own extension, up to a target by trim, to bounds by untrim
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0a216d692 jyviko: kernel: extend on SMLib: the surface's own extension, up to a target by trim, to bounds by untrim

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 01:01:34 -04:00
jyviko b1dc94da99 Wave 144/509: kernel: untrim on SMLib (smlib_untrim_face), its history from SMLib's tags (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 166bfbacd jyviko: brep: records of bodies apart from each other join into one; islands stay inside their voids
- 065e61ec7 jyviko: kernel: Body is its schema 4 record, with its SMLib body made once
- 22734a55f jyviko: kernel: trim on the record: split, side by the tool's field, pieces removed
- 7bbdd3713 jyviko: kernel: untrim on SMLib (smlib_untrim_face), its history from SMLib's tags

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:52:03 -04:00
jyviko bc9ab68c20 Wave 143/509: kernel: CornerPatch exported with the G2 corner patch
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 66e31bede jyviko: kernel: CornerPatch exported with the G2 corner patch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:59:42 -04:00
jyviko 3e564dffb0 Wave 142/509: kernel: the plain and crowned patch on a loop of the body's record edges, built by SMLib
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 291af4bdb jyviko: kernel: the plain and crowned patch on a loop of the body's record edges, built by SMLib

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:58:16 -04:00
jyviko 6ada9b193e Wave 141/509: kernel: the G2 corner patch is a record surface with its seams as intervals of its boundary line
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8db140280 jyviko: kernel: the G2 corner patch is a record surface with its seams as intervals of its boundary line

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:53:02 -04:00
jyviko ba83c9c6fd Wave 140/509: kernel: fairing works on record curves and surfaces; fair_faces rebuilds through SMLib (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 1d289dfd6 jyviko: kernel: fairing works on record curves and surfaces; fair_faces rebuilds through SMLib
- f9f59d826 jyviko: brep: SurfaceEval::second, a record surface's exact second partial derivatives
- 748d9f25e jyviko: brep: CurveEval::derivs, a record curve's point and first derivative
- e01018839 jyviko: kernel: seam continuity measures the body's record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:51:36 -04:00
jyviko a1b9d92d22 Wave 139/509: kernel: sew assembles a schema 4 record and SMLib builds the body
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8d844f715 jyviko: kernel: sew assembles a schema 4 record and SMLib builds the body

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:45:57 -04:00
jyviko dedcd516e5 Wave 138/509: kernel: crate root follows the emboss, lip and delete-face port
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c748aeabf jyviko: kernel: crate root follows the emboss, lip and delete-face port

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:57:52 -04:00
jyviko 16f7253218 Wave 137/509: kernel: healing through SMLib's merge of faces; the boolean retries deleted
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5aec7a7d1 jyviko: kernel: healing through SMLib's merge of faces; the boolean retries deleted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:54:23 -04:00
jyviko ab69757e9b Wave 136/509: kernel: Delete Face with healing on the schema 4 record (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9f71e93e2 jyviko: kernel: Delete Face with healing on the schema 4 record
- 3bd1cc534 jyviko: solidcraft-smlib: Brep::merge_faces, SMLib's removal of topological edges and vertices

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:52:47 -04:00
jyviko 60fbf550b6 Wave 135/509: kernel: raising a band (lip) and its rim profile on the schema 4 record
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ed78b8200 jyviko: kernel: raising a band (lip) and its rim profile on the schema 4 record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:44:44 -04:00
jyviko 79e81613fa Wave 134/509: kernel: emboss on a cylinder builds on the schema 4 record; any pick on the wall is accepted
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 624f6d6da jyviko: kernel: emboss on a cylinder builds on the schema 4 record; any pick on the wall is accepted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:42:51 -04:00
jyviko cba1f888b6 Wave 133/509: brep: part of a record, a material region with its voids, in canonical order
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a46874f89 jyviko: brep: part of a record, a material region with its voids, in canonical order

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:54:38 -04:00
jyviko e4a9870353 Wave 132/509: solidcraft-smlib: SMLib's "no change" as Error::NoEffect, the fork pinned at its integration head (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cbf28a4fd jyviko: kernel: the prism boolean modules are gone from the crate root
- 9268a1e88 jyviko: solidcraft-smlib: SMLib's "no change" as Error::NoEffect, the fork pinned at its integration head

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:45:07 -04:00
jyviko c34789dcf6 Wave 131/509: kernel: the faceted boolean is SMLib's boolean with the mesh made a polyhedral solid
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 877f8acb6 jyviko: kernel: the faceted boolean is SMLib's boolean with the mesh made a polyhedral solid

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:50:07 -04:00
jyviko 3092bf60b7 Wave 130/509: kernel: planar regions stay one 2D arrangement; prism booleans are SMLib's boolean
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 42c41464a jyviko: kernel: planar regions stay one 2D arrangement; prism booleans are SMLib's boolean

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:48:06 -04:00
jyviko 4708184430 Wave 129/509: kernel: certified prism comparison reads the schema 4 record
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6a6857124 jyviko: kernel: certified prism comparison reads the schema 4 record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:45:44 -04:00
jyviko 54cd0d89d3 Wave 128/509: kernel: prism curves are read off schema 4 record edges
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- da24f8ae2 jyviko: kernel: prism curves are read off schema 4 record edges

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:42:22 -04:00
jyviko e92a411dd7 Wave 127/509: brep: a record moved rigidly, exactly (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b11433bc5 jyviko: kernel: smooth display edges classified on the schema 4 record
- 3ca3638c5 jyviko: kernel: the curve, loop and vertex blend modules are gone from the crate root
- b0cc84b28 jyviko: brep: a record moved rigidly, exactly
- fa3d914af jyviko: kernel: SMLib measures mass properties at its documented 1e-4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:49:57 -04:00
jyviko 6a7581deaa Wave 126/509: kernel: the rolling-ball, corner, loop and vertex blend builders are gone
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f86048879 jyviko: kernel: the rolling-ball, corner, loop and vertex blend builders are gone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:44:43 -04:00
jyviko e8f47435a1 Wave 125/509: kernel: variable and chord fillets on SMLib, the taper's room on the record
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5c7381bc5 jyviko: kernel: variable and chord fillets on SMLib, the taper's room on the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:44:18 -04:00
jyviko 9aa0c22097 Wave 124/509: kernel: fillet_radii rounds every edge at its own radius in one SMLib blend
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fd6fdfcce jyviko: kernel: fillet_radii rounds every edge at its own radius in one SMLib blend

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:42:28 -04:00
jyviko 4db0e94082 Wave 123/509: kernel: fillets and chamfers run on SMLib, their fit checked on the record
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bb1670768 jyviko: kernel: fillets and chamfers run on SMLib, their fit checked on the record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:41:55 -04:00
jyviko d4173f612a Wave 122/509: kernel: shell, offset, boolean and sweep notes say SMLib is the kernel
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c29845f40 jyviko: kernel: shell, offset, boolean and sweep notes say SMLib is the kernel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:43:10 -04:00
jyviko c30f621b98 Wave 121/509: kernel: extrude, revolve, primitives, lofts and sweeps on SMLib only
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e0f57ff87 jyviko: kernel: extrude, revolve, primitives, lofts and sweeps on SMLib only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:42:23 -04:00
jyviko 52f1f0273e Wave 120/509: kernel: solids swept along 3D point paths on SMLib only
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e96b7d6cb jyviko: kernel: solids swept along 3D point paths on SMLib only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:39:10 -04:00
jyviko 3e069a389a Wave 119/509: kernel: a cornered sweep carries on from where SMLib placed the profile
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c4bb4a352 jyviko: kernel: a cornered sweep carries on from where SMLib placed the profile

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:38:13 -04:00
jyviko ab7d133c40 Wave 118/509: kernel: convex polyhedra, shell, draft and offset faces on SMLib only
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a5634078e jyviko: kernel: convex polyhedra, shell, draft and offset faces on SMLib only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:36:18 -04:00
jyviko b8533c79a7 Wave 117/509: kernel: helical sweeps and lofts to a point on SMLib only (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2d3d0a081 jyviko: kernel-cases: a join that meets nothing keeps the tool as a lump (#2896)
- 2b77f09f8 jyviko: kernel: helical sweeps and lofts to a point on SMLib only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:33:33 -04:00
jyviko ec7077e326 Wave 116/509: doc: a sweep round a closed path starts where the profile is (#3345) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ba99405e2 jyviko: doc: a pattern or mirror of a pattern or mirror copies what that one made
- 386b1d123 jyviko: doc: a sweep round a closed path starts where the profile is (#3345)
- 5df8a5565 jyviko: engine: an extrude Join, Cut or Intersect leaves hidden bodies alone (#2464)
- f10dfd8d0 jyviko: kernel-cases: crossing equal holes leave each wall in two faces

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 23:55:26 -04:00
jyviko efddcdfeeb Wave 115/509: brep: a spline's closedness is worked out once, not on every evaluation (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6e17d26dd jyviko: brep: a spline's closedness is worked out once, not on every evaluation
- 51d7fc413 jyviko: kernel: IGES trimmed surfaces close their loops and split into separate bodies
- f71cb3d99 jyviko: engine: revolve about a construction axis given by name
- 85da7d6c2 jyviko: engine: count a face pick's work as it is done

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:22:51 -04:00
jyviko 699bfc12e0 Wave 114/509: kernel: the tessellator's tests plan the body's schema 4 record (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d61efb306 jyviko: kernel: a face's boundary takes its (u, v) from the record's exact pcurves
- 4b8edef06 jyviko: kernel: the tessellator's tests plan the body's schema 4 record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:35:06 -04:00
jyviko ce8c6063bd Wave 113/509: kernel: SMLib sweeps along drawn 3D sketch splines, exactly (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d1eb8b20a jyviko: kernel: SMLib sweeps along drawn 3D sketch splines, exactly
- f73b3be1a jyviko: kernel: a 3D sketch spline path takes the SMLib sweep only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:22:49 -04:00
jyviko 4eff79e57e Wave 112/509: solidcraft-smlib: pcurves on B-spline faces are SMLib's own UV trims (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 667cd3356 jyviko: solidcraft-smlib: pcurves on B-spline faces are SMLib's own UV trims
- e57f2f2a5 jyviko: brep: a face's points search one grid of its surface, made once
- 1bc0df6d0 jyviko: doc: a join of many tools into one target unions them in a balanced tree

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 23:39:37 -04:00
jyviko 52453f50fb Wave 111/509: kernel: the mesher plans a schema 4 record, with no truck types
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8b6bfc48c jyviko: kernel: the mesher plans a schema 4 record, with no truck types

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:28:20 -04:00
jyviko 0bd4531c7c Wave 110/509: WIP kernel: Body::mesh(&MeshTolerance) as the one mesher (does not build yet)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 42997a62e jyviko: WIP kernel: Body::mesh(&MeshTolerance) as the one mesher (does not build yet)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:18:36 -04:00
jyviko f4e2f38a27 Wave 109/509: solidcraft-smlib: Brep::bounds, the exact box, and the fork pinned at 530ee93
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a1ebe8df3 jyviko: solidcraft-smlib: Brep::bounds, the exact box, and the fork pinned at 530ee93

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-22 00:17:28 -04:00
jyviko d62301ad01 Wave 108/509: kernel: SMLib sweeps round corners and along free-form paths, lofts with holes or to a point, drafts on a foot
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 69a7a85cb jyviko: kernel: SMLib sweeps round corners and along free-form paths, lofts with holes or to a point, drafts on a foot

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 22:55:56 -04:00
jyviko 782457f960 Wave 107/509: solidcraft-smlib: Brep::loft_to_point, and the fork pinned at 0294982 (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cac7d6eff jyviko: kernel-cases: the hollow ball of case 450 has two shells
- faae48d6e jyviko: solidcraft-smlib: Brep::loft_to_point, and the fork pinned at 0294982

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 22:55:56 -04:00
jyviko 623679bf9d Wave 106/509: kernel: SMLib sweeps that twist, scale or follow rails, railed lofts, and paths of points (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 520d934fe jyviko: kernel: SMLib sweeps that twist, scale or follow rails, railed lofts, and paths of points
- f870ecb87 jyviko: solidcraft-smlib: pin the fork at ffaf4e8, offset merge and intersection-edge ends

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 23:14:00 -04:00
jyviko ba418eb40d Wave 105/509: solidcraft-smlib: Brep::sweep_stations, and SMLIB_REV at the fork's smlib_sweep_stations
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5701150f3 jyviko: solidcraft-smlib: Brep::sweep_stations, and SMLIB_REV at the fork's smlib_sweep_stations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 22:09:14 -04:00
bherbruck 33fdcdb3a0 Release 0.19.0
The tree is main at 5899e5b6c exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-21 21:13:33 -04:00
jyviko e63bcc3808 Wave 104/509: solidcraft-smlib: pin the fork at 2d7c7ed, the second round of SMLib C++ fixes (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e1a257169 jyviko: kernel-cases: SOLIDCRAFT_KERNEL=truck grades as the default kernel
- 1336352a4 jyviko: solidcraft-smlib: pin the fork at 2d7c7ed, the second round of SMLib C++ fixes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 20:02:59 -04:00
jyviko 24df37a653 Wave 103/509: kernel: a curved strip straight across and narrower than a side is its boundary nodes alone (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5a630daee jyviko: tess: a hole in a closed face lies in its outer loop's period
- 693cba4e2 jyviko: kernel: a curved strip straight across and narrower than a side is its boundary nodes alone
- 20d4b1f4e jyviko: kernel: a spline wall winding round an axis sends its body to the display plan for meshing
- 5ed1e95a4 jyviko: kernel: a cut grid past the grid cap thins its lines instead of giving the face to Delaunay

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 17:24:51 -04:00
jyviko 3f20ea1358 Wave 102/509: brep: a point's parameters on a spline winding several turns are found on its own turn (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 69ad1ae45 jyviko: solidcraft-smlib: the curve list carries nothing in a build without SMLib
- 1a5e60349 jyviko: brep: a point's parameters on a spline winding several turns are found on its own turn
- e1c631dd3 jyviko: brep: a pcurve keeps its tangent where its curve is smooth through a full knot
- 829d161f6 jyviko: brep: the projection runs Newton from up to 32 starts, nearest first, until one lands

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 15:23:31 -04:00
jyviko 249139ece8 Wave 101/509: solidcraft-smlib: pin the fork at 276b509, SMLib C++ fixes from solidcore
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 22cfc69c0 jyviko: solidcraft-smlib: pin the fork at 276b509, SMLib C++ fixes from solidcore

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 15:26:25 -04:00
jyviko cf2b37d9c9 Wave 100/509: solidcraft-smlib: a solid touching itself along an edge comes back with every edge bounding two faces (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 02bfd6e10 bherbruck: kernel: draft through SMLib
- d20e91f8c jyviko: doc: re-anchor a stored face pick strictly inside its named face
- 36b7aa267 jyviko: solidcraft-smlib: a build without SMLib keeps the sweeps' curve lists without a dead-code error
- d22e89bcc jyviko: solidcraft-smlib: a solid touching itself along an edge comes back with every edge bounding two faces

Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 13:26:19 -04:00
bherbruck 6fd5b65c1d Wave 99/509: solidcraft-smlib: Brep::draft, and SMLIB_REV at the fork's smlib_draft
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 523270fe5 bherbruck: solidcraft-smlib: Brep::draft, and SMLIB_REV at the fork's smlib_draft

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 12:50:11 -04:00
Brennen Herbruck 043d213ce1 Wave 98/509: docs/kernel-cases.md: the rig on both kernels at c65fc91a
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 45f8e2916 Brennen Herbruck: docs/kernel-cases.md: the rig on both kernels at c65fc91a

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 12:39:31 -04:00
Brennen Herbruck a90020efb4 Wave 97/509: solidcraft-step: faces around a spline closed on itself get a seam
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a89c67adf Brennen Herbruck: solidcraft-step: faces around a spline closed on itself get a seam

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 12:35:19 -04:00
bherbruck eaa434e518 Wave 96/509: solidcraft-smlib: the fork at be3fc10, whose boolean no longer reads a freed edge
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b886ac36b bherbruck: solidcraft-smlib: the fork at be3fc10, whose boolean no longer reads a freed edge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 12:29:01 -04:00
bherbruck c07ab5f8f9 Release 0.18.4
The tree is main at 728f753b8 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-21 12:26:34 -04:00
bherbruck 2c4da62525 Wave 95/509: kernel: measure through SMLib's exact mass properties, checked against the mesh (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 714475b84 bherbruck: kernel: measure through SMLib's exact mass properties, checked against the mesh
- 07c36cfd0 bherbruck: solidcraft-smlib: Brep::chamfer_sides, and Error::Unsupported for a radius law with a corner
- ae1d746ae bherbruck: kernel: chamfers with two setbacks through SMLib
- a043e4ae2 bherbruck: kernel: an SMLib blend's corner patch comes from the edges meeting there

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 11:40:45 -04:00
Brennen Herbruck 84aa2c5b1b Wave 94/509: kernel: with SOLIDCRAFT_KERNEL=smlib, STEP solids are SMLib's bodies (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8fde178fe Brennen Herbruck: kernel: any schema 4 record into SMLib with its order, healed where refused
- 5014c4f17 Brennen Herbruck: kernel: with SOLIDCRAFT_KERNEL=smlib, STEP solids are SMLib's bodies
- 8ad09ec64 bherbruck: smlib export: a face's loop crosses its poles where the face's parameter box says
- f4da25243 bherbruck: solidcraft-smlib: the fork at bf7c272, whose operation results hold their own gaps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 11:44:05 -04:00
Brennen Herbruck 532027f7a6 Wave 93/509: docs: SMLib vs truck triage of the sweeps, threads and shell cases (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 96bdbbf3b bherbruck: docs: SMLib vs truck triage of the sweeps, threads and shell cases
- 82fe0e59e Brennen Herbruck: solidcraft-smlib: Brep::imprint
- 7e208529c Brennen Herbruck: solidcraft-step: each record face names its face in the file
- 863afb5e3 Brennen Herbruck: solidcraft-smlib: an arc past a full turn goes to SMLib a turn back

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 11:25:39 -04:00
jyviko 7622329499 Wave 92/509: kernel: fillets and chamfers through SMLib when SOLIDCRAFT_KERNEL=smlib (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- baae4ee19 jyviko: kernel: fillets and chamfers through SMLib when SOLIDCRAFT_KERNEL=smlib
- f73d40383 jyviko: kernel: an SMLib blend pick at a seam's end takes the sharp edge there
- 1d8299aed jyviko: kernel: an SMLib body keeps each edge's and vertex's tolerance through its record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 10:45:10 -04:00
bherbruck fea32f8aac Release 0.18.3
The tree is main at 034aa60d4 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-21 08:46:37 -04:00
jyviko f9f8f21918 Wave 91/509: solidcraft-smlib: Brep::blend (per-edge sizes; round, G2, chord, chamfer) and Brep::fillet_variable
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3fcb3ea5c jyviko: solidcraft-smlib: Brep::blend (per-edge sizes; round, G2, chord, chamfer) and Brep::fillet_variable

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 08:03:11 -04:00
jyviko 723b84a044 Wave 90/509: kernel: solids an SMLib boolean leaves touching come back as separate solids (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 29d307bdc jyviko: doc: a modelled thread through SMLib cuts the exact groove
- 5dd3acdec Brennen Herbruck: kernel-cases: on the kernel branch a thread off its hole or shaft size is refused
- b900d6d46 jyviko: kernel: solids an SMLib boolean leaves touching come back as separate solids

Co-authored-by: Brennen Herbruck <brennen.herbruck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 10:13:34 -04:00
jyviko b2c79e44d8 Wave 89/509: kernel: extrude, revolve, sweep, loft and coil through SMLib behind SOLIDCRAFT_KERNEL
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fe7b37720 jyviko: kernel: extrude, revolve, sweep, loft and coil through SMLib behind SOLIDCRAFT_KERNEL

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 08:36:53 -04:00
jyviko b5b2701591 Wave 88/509: solidcraft-smlib: the fork's sweeps, from lists of curves
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 62b5add28 jyviko: solidcraft-smlib: the fork's sweeps, from lists of curves

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 08:27:27 -04:00
jyviko fa6243a283 Wave 87/509: kernel: shell, offset faces and thicken through SMLib, with SMLib's history (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0f3d6f177 jyviko: kernel: shell, offset faces and thicken through SMLib, with SMLib's history
- 82865e283 jyviko: kernel: a body SMLib walks some loops of the other way keeps its order
- 6bfbe1041 jyviko: kernel: an SMLib shell opens a round wall whole; split pieces press on either kernel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 08:13:26 -04:00
jyviko 5f743c46b7 Wave 86/509: kernel: one switch, SOLIDCRAFT_KERNEL, picks the kernel for every operation (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d672cfa01 jyviko: kernel: one switch, SOLIDCRAFT_KERNEL, picks the kernel for every operation
- f35f06d98 jyviko: kernel: a revolution that is no analytic surface goes into SMLib as its B-spline
- a6ca4e0dd jyviko: AGENTS.md: one switch, SOLIDCRAFT_KERNEL, in place of the booleans-only note
- 51211ad1f jyviko: solidcraft-smlib: offset faces, thicken, and NoRoom for walls with no room

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 07:35:00 -04:00
jyviko f4e6dbd1d0 Wave 85/509: kernel: a body's record for SMLib takes a larger tolerance where an edge needs it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e35b4d744 jyviko: kernel: revolutions of a line square to the axis go into SMLib as planes
- 00e43aacc jyviko: kernel: an operand SMLib's check refuses goes through SMLib's healer
- 94c159825 jyviko: kernel: SMLib's round faces decode as truck's own revolutions are laid out
- ff0f7ccfa jyviko: kernel: a body's record for SMLib takes a larger tolerance where an edge needs it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:30:20 -04:00
jyviko ffc289d7d8 Wave 84/509: kernel: truck's extruded circles go into SMLib as its cylinders (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b27751d43 jyviko: kernel: planes go into SMLib as its planes; analytic angles start at zero
- 640d3d9ea jyviko: kernel: truck's extruded circles go into SMLib as its cylinders
- 1980f9743 jyviko: kernel: SMLib's export keeps every face of a void's shell
- c344801cc jyviko: kernel: note that the engine's and CLI's `smlib` features reach SOLIDCRAFT_BOOLEANS

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:58:01 -04:00
jyviko ac27a36f76 Wave 83/509: kernel: revolutions go into SMLib as its cylinders, cones, spheres and tori (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5238840bc jyviko: kernel: booleans through SMLib behind SOLIDCRAFT_BOOLEANS, with SMLib's history
- d271add1a jyviko: kernel: revolutions go into SMLib as its cylinders, cones, spheres and tori

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:23:49 -04:00
jyviko da75341655 Wave 82/509: kernel: hold every display-plan triangle to the chord tolerance (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c992630e1 bherbruck: ATTRIBUTION.md: rows for the kernel rig's STEP import fixtures
- b90a5851c jyviko: kernel: open a half sphere's loop at its pole, so its seam closes
- 54542890d jyviko: kernel: hold every display-plan triangle to the chord tolerance
- f7336497f jyviko: AGENTS.md: the kernel does geometry, sugar lives above it

Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 08:48:47 -04:00
Brennen Herbruck 244f8d81cf Wave 81/509: smlib: pin the fork's SSI fixes (1499681); the corpus passes 111 of 119
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- de6633b9c Brennen Herbruck: smlib: pin the fork's SSI fixes (1499681); the corpus passes 111 of 119

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 08:15:36 -04:00
Brennen Herbruck ae52813f2b Wave 80/509: smlib tests: score SMLib's GlobalSurfaceIntersect on the SSI corpus (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 201ca9a81 Brennen Herbruck: smlib tests: score SMLib's GlobalSurfaceIntersect on the SSI corpus
- f8b48d0e4 Brennen Herbruck: smlib: pin the fork at 70e1bf5 (capi: surface/surface intersection)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:43:36 -04:00
Brennen Herbruck 8b6604dc63 Wave 79/509: smlib: surface/surface intersection wrapper (smlib_surface_*, smlib_ssi)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 880523514 Brennen Herbruck: smlib: surface/surface intersection wrapper (smlib_surface_*, smlib_ssi)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:43:36 -04:00
Brennen Herbruck 47c5f081d4 Wave 78/509: smlib tests: SSI corpus scorer and its parity with score.py
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3c1fbf4c9 Brennen Herbruck: smlib tests: SSI corpus scorer and its parity with score.py

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:25:53 -04:00
Brennen Herbruck 157b53cb34 Wave 77/509: smlib tests: SSI scorer geometry (truth distances, polyline sets)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6dbda8ecf Brennen Herbruck: smlib tests: SSI scorer geometry (truth distances, polyline sets)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:25:53 -04:00
Brennen Herbruck 452da45fac Wave 76/509: tests: SSI corpus fixtures (119 cases with exact truth) (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 17eafa2d4 Brennen Herbruck: solidcraft-smlib: revolved surfaces into SMLib as exact rational B-splines
- 1edeb2a6f Brennen Herbruck: tests: SSI corpus fixtures (119 cases with exact truth)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:08:01 -04:00
bherbruck 924ed1b57d Wave 75/509: kernel-cases: tessellation cases from mesh-hole reports grade watertightness (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 58ce14f45 bherbruck: kernel-cases: count ranges, a watertight mesh check, and per-case timeouts
- e809edd33 Brennen Herbruck: kernel-cases: thread cases that are slow by nature get 600 s
- 8cb976b9b bherbruck: kernel-cases: watertight checks the display mesh, welding vertices by distance
- 3feb9ba2c Brennen Herbruck: kernel-cases: tessellation cases from mesh-hole reports grade watertightness

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 07:31:04 -04:00
bherbruck 11aa1db4a4 Wave 74/509: docs/kernel-cases.md: first full run of the kernel regression rig
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ae8809a4b bherbruck: docs/kernel-cases.md: first full run of the kernel regression rig

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 07:15:20 -04:00
bherbruck 0f92dda7eb Wave 73/509: kernel-cases: coverage by kind of source, and the ring join of #2357
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c87bb72f0 bherbruck: kernel-cases: coverage by kind of source, and the ring join of #2357

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 07:15:20 -04:00
Brennen Herbruck 2493b2f8c4 Wave 72/509: kernel-cases: thread fit cases say what they grade
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 146ab740a Brennen Herbruck: kernel-cases: thread fit cases say what they grade

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 07:01:33 -04:00
jyviko 96aae9c316 Wave 71/509: kernel-cases: a thread off its hole or shaft size is refused (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 35ebc816b jyviko: kernel-cases: a missing capability's message is the case's own text
- 248fee75b jyviko: ladder: every ladder run measures one case at a time
- e1575385b Brennen Herbruck: kernel-cases: a thread off its hole or shaft size is refused
- d7381a1fa bherbruck: kernel-cases: threads fit a hole or shaft off the thread's size again

Co-authored-by: Brennen Herbruck <brennen.herbruck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 07:01:22 -04:00
jyviko 9134b3c73e Wave 70/509: ladder: 116 cases in 11 tiers, from primitives to a threaded, shelled housing
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b249100ea jyviko: ladder: 116 cases in 11 tiers, from primitives to a threaded, shelled housing

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:32:22 -04:00
jyviko 11de8516a1 Wave 69/509: ladder: cargo xtask kernel-cases --ladder, the complexity ladder's runner
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 208c39461 jyviko: ladder: `cargo xtask kernel-cases --ladder`, the complexity ladder's runner

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:32:22 -04:00
Brennen Herbruck 68033b4357 Wave 68/509: kernel-cases: fillets cases from #1008, #1191, #3276 and #3753 (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 9c9ec27c3 Brennen Herbruck: kernel-cases: fillets cases from #1008, #1191, #3276 and #3753
- 22fdb5249 Brennen Herbruck: kernel-cases: tessellation case from #466, skipped sources for sheet-metal, sweeps and tessellation
- bf0761f6b jyviko: kernel-cases: base recipes, missing capabilities, and the commands' own time

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:46:15 -04:00
Brennen Herbruck ed5bed8f00 Wave 67/509: kernel-cases: sweeps skipped sources (72) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 75aa8acb6 Brennen Herbruck: kernel-cases: sweeps skipped sources (72)
- 678a70da2 bherbruck: kernel-cases: shells as a graded count, no SMLib verdict where it can't take the record, $OUT
- c24b066d2 bherbruck: kernel-cases: an outcome for geometry with no single manifold answer
- 8764a76ff Brennen Herbruck: kernel-cases: threads cases from #1995 and #3368 (finely faceted booleans), skipped #987 #3130 #3824

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:52:51 -04:00
Brennen Herbruck dcab94fcd7 Wave 66/509: kernel-cases: sweeps coil and surface cases from #793-#4056
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 434a68bbc Brennen Herbruck: kernel-cases: sweeps coil and surface cases from #793-#4056

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:21:00 -04:00
Brennen Herbruck b86ae1b6b4 Wave 65/509: kernel-cases: sweeps closed, twisted and joined sweeps from #561-#3897, ribs, tripod pipes
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5f131cb88 Brennen Herbruck: kernel-cases: sweeps closed, twisted and joined sweeps from #561-#3897, ribs, tripod pipes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:50 -04:00
Brennen Herbruck 1fc1497af3 Wave 64/509: kernel-cases: sweeps sweep and pipe cases from #96-#3505 (end scale, rails, corners, closed paths)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a9002968f Brennen Herbruck: kernel-cases: sweeps sweep and pipe cases from #96-#3505 (end scale, rails, corners, closed paths)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:48 -04:00
Brennen Herbruck ba8cca8fd7 Wave 63/509: kernel-cases: sweeps revolve cases from #2183-#4008 (refusals, flush ends, dome seam, primitives)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5e71db662 Brennen Herbruck: kernel-cases: sweeps revolve cases from #2183-#4008 (refusals, flush ends, dome seam, primitives)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:39 -04:00
Brennen Herbruck aa3ca73268 Wave 62/509: kernel-cases: sweeps revolve cases from #450-#2947 (faces, axis, cuts, seams)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b60debec1 Brennen Herbruck: kernel-cases: sweeps revolve cases from #450-#2947 (faces, axis, cuts, seams)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:37 -04:00
bherbruck be90b0ec6d Wave 61/509: kernel-cases: booleans cases from items another area had skipped (#451, #1107, #1140, #2928, #3850/#3741, #1984, #3573)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ec154f542 bherbruck: kernel-cases: booleans cases from items another area had skipped (#451, #1107, #1140, #2928, #3850/#3741, #1984, #3573)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:32 -04:00
Brennen Herbruck 57efe54fbd Wave 60/509: kernel-cases: sweeps lofted tubes, blades and windows from #968-#2992
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 85f7200bb Brennen Herbruck: kernel-cases: sweeps lofted tubes, blades and windows from #968-#2992

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:29 -04:00
Brennen Herbruck b82fd0b769 Wave 59/509: kernel-cases: sweeps loft cases from #96-#3936 (shallow cuts, cones, comb, rails)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- bec9db59e Brennen Herbruck: kernel-cases: sweeps loft cases from #96-#3936 (shallow cuts, cones, comb, rails)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:27 -04:00
Brennen Herbruck b5853aec6c Wave 58/509: kernel-cases: sweeps lofts from #271-#3412 (zig-zag pairing, ring sections, flush joins and cuts)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 739524a17 Brennen Herbruck: kernel-cases: sweeps lofts from #271-#3412 (zig-zag pairing, ring sections, flush joins and cuts)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:20:15 -04:00
Brennen Herbruck 3c66261621 Wave 57/509: kernel-cases: threads cases from modelled-thread reports (2 of 2), skipped sources
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ead88e582 Brennen Herbruck: kernel-cases: threads cases from modelled-thread reports (2 of 2), skipped sources

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:17:39 -04:00
Brennen Herbruck 5f8a58956f Wave 56/509: kernel-cases: threads cases from modelled-thread reports (1 of 2)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 04135da96 Brennen Herbruck: kernel-cases: threads cases from modelled-thread reports (1 of 2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:17:39 -04:00
jyviko ad39519794 Wave 55/509: kernel: spline edges on part of their curve load as that piece (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ce201eea1 jyviko: kernel: SMLib spheres cut by a boolean decode oriented and meshed
- 62142ef38 jyviko: brep: a revolution of a closed profile is periodic along it
- 62124a711 jyviko: kernel: spline edges on part of their curve load as that piece

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:06:32 -04:00
Brennen Herbruck 98c7b65864 Wave 54/509: kernel-cases: fillets skipped sources (287)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5a6a91ebb Brennen Herbruck: kernel-cases: fillets skipped sources (287)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:11:03 -04:00
Brennen Herbruck 5675da8ee9 Wave 53/509: kernel-cases: fillets correct the union volume quoted in 1262
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3dc7f90e6 Brennen Herbruck: kernel-cases: fillets correct the union volume quoted in 1262

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:11:03 -04:00
Brennen Herbruck b77d6f2df9 Wave 52/509: kernel-cases: fillets pattern and G2 cases from #193, #219, #862, #1488, #2341, #2708, #2811
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d235bd7a0 Brennen Herbruck: kernel-cases: fillets pattern and G2 cases from #193, #219, #862, #1488, #2341, #2708, #2811

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:08:48 -04:00
Brennen Herbruck 24e1e79cde Wave 51/509: kernel-cases: fillets outline and corner cases from #237, #334, #485, #556, #851, #1207, #1213, #1262, #1557, #1667, #2498
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- cc3f8b178 Brennen Herbruck: kernel-cases: fillets outline and corner cases from #237, #334, #485, #556, #851, #1207, #1213, #1262, #1557, #1667, #2498

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:08:47 -04:00
Brennen Herbruck eaf1fcf436 Wave 50/509: kernel-cases: fillets refusal, fit and straight-edge cases from #190, #199, #324, #896, #1668, #2752, #2852, #3369, #3435, #4141, #4143
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 18af04b91 Brennen Herbruck: kernel-cases: fillets refusal, fit and straight-edge cases from #190, #199, #324, #896, #1668, #2752, #2852, #3369, #3435, #4141, #4143

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:08:47 -04:00
Brennen Herbruck 5cdff8906e Wave 49/509: kernel-cases: fillets chamfer cases from #814, #1080, #1390, #1986, #2672, #2719, #2797, #2907, #3655, #3779, #3868, #4055, #4101
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- aefca3452 Brennen Herbruck: kernel-cases: fillets chamfer cases from #814, #1080, #1390, #1986, #2672, #2719, #2797, #2907, #3655, #3779, #3868, #4055, #4101

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 06:08:47 -04:00
bherbruck dd6ab191aa Wave 48/509: kernel-cases: booleans from #3404-#4124 (28 cases, 76 skipped)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6a9b8fd74 bherbruck: kernel-cases: booleans from #3404-#4124 (28 cases, 76 skipped)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:57:04 -04:00
Brennen Herbruck bf818a3fc0 Wave 47/509: kernel-cases: sheet-metal skipped sources (87)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0ae42f411 Brennen Herbruck: kernel-cases: sheet-metal skipped sources (87)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:54:30 -04:00
Brennen Herbruck 69ac6ffabd Wave 46/509: kernel-cases: sheet-metal tray and unfold cases from #349, #405, #436, #514, #723, #1797, #3417
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 676670ba8 Brennen Herbruck: kernel-cases: sheet-metal tray and unfold cases from #349, #405, #436, #514, #723, #1797, #3417

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:54:30 -04:00
Brennen Herbruck 7710849823 Wave 45/509: kernel-cases: sheet-metal convert and unfolded tray cases from #479, #488, #723, #725, #839, #1092, #1285, #1481
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 474f60853 Brennen Herbruck: kernel-cases: sheet-metal convert and unfolded tray cases from #479, #488, #723, #725, #839, #1092, #1285, #1481

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:54:30 -04:00
Brennen Herbruck 90820291dc Wave 44/509: kernel-cases: sheet-metal flange and cut-out cases from #416, #529, #570, #601, #634, #659, #702, #978
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 943a7d66b Brennen Herbruck: kernel-cases: sheet-metal flange and cut-out cases from #416, #529, #570, #601, #634, #659, #702, #978

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:54:30 -04:00
Brennen Herbruck e1e7b4fceb Wave 43/509: kernel-cases: sheet-metal cut-out, flange and refusal cases from #296, #1095, #1280, #1295, #1311, #1979, #3078, #3234, #3324, #3353
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b13155cbb Brennen Herbruck: kernel-cases: sheet-metal cut-out, flange and refusal cases from #296, #1095, #1280, #1295, #1311, #1979, #3078, #3234, #3324, #3353

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:54:30 -04:00
Brennen Herbruck 0b25fe582c Wave 42/509: kernel-cases: sheet-metal convert and hole cases from #774, #1040, #1092, #3316, #541, #542, #560, #955
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a11a736ce Brennen Herbruck: kernel-cases: sheet-metal convert and hole cases from #774, #1040, #1092, #3316, #541, #542, #560, #955

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:49:22 -04:00
Brennen Herbruck 06bdfc1c13 Wave 41/509: kernel-cases: sheet-metal fold cases from #262, #264, #638, #639, #685
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3c465e680 Brennen Herbruck: kernel-cases: sheet-metal fold cases from #262, #264, #638, #639, #685

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:49:22 -04:00
bherbruck 9f47145da7 Wave 40/509: kernel-cases: booleans from #2896-#3383 (11 cases) and the skipped list
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 611567c63 bherbruck: kernel-cases: booleans from #2896-#3383 (11 cases) and the skipped list

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:50:11 -04:00
bherbruck 73056666a6 Wave 39/509: kernel-cases: booleans from #2564-#2896 (11 cases)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6cf966bd5 bherbruck: kernel-cases: booleans from #2564-#2896 (11 cases)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:50:11 -04:00
bherbruck 6d72c526bf Wave 38/509: kernel-cases: booleans from #13-#2534, first half (30 cases, 73 skipped)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 48db4fa2c bherbruck: kernel-cases: booleans from #13-#2534, first half (30 cases, 73 skipped)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:49:10 -04:00
Brennen Herbruck 059d9654c1 Wave 37/509: kernel-cases: tessellation skipped sources (253)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 035aa6512 Brennen Herbruck: kernel-cases: tessellation skipped sources (253)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:48:32 -04:00
Brennen Herbruck d747b2f970 Wave 36/509: kernel-cases: tessellation cases from #311-#2712 (14 cases)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8ff1b2a65 Brennen Herbruck: kernel-cases: tessellation cases from #311-#2712 (14 cases)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:48:32 -04:00
bherbruck 8b023a06be Wave 35/509: kernel-cases: crashes and hangs from the #140-#4149 reports (9 cases, 45 skipped)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 02712a003 bherbruck: kernel-cases: crashes and hangs from the #140-#4149 reports (9 cases, 45 skipped)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:47:59 -04:00
bherbruck 906cb69d6f Wave 34/509: kernel-cases: import from #1721-#4006 (19 cases, 59 skipped)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 0eae22a5e bherbruck: kernel-cases: import from #1721-#4006 (19 cases, 59 skipped)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:43:31 -04:00
bherbruck 82983c2e63 Wave 33/509: kernel-cases: shell and offset from #12-#4144 (21 cases, 59 skipped)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 771a48e4f bherbruck: kernel-cases: shell and offset from #12-#4144 (21 cases, 59 skipped)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:42:46 -04:00
bherbruck 9e3d118f54 Wave 32/509: kernel-cases: the no-keyword kernel items, #25-#4148 (4 cases, 98 skipped)
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c3a0b0951 bherbruck: kernel-cases: the no-keyword kernel items, #25-#4148 (4 cases, 98 skipped)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:40:18 -04:00
Brennen Herbruck 03e3bee095 Wave 31/509: kernel: boolean runner grades the seeds against a reference volume (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a7c0109ea Brennen Herbruck: kernel: boolean runner grades the seeds against a reference volume
- 7bb74d1c6 bherbruck: kernel-cases: an smlib feature for the CLI, and no grading of a kernel the build isn't running

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:31:54 -04:00
bherbruck 9f1b47d689 Wave 30/509: kernel-cases: a regression rig that grades each kernel against the case's own answer
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 732fd2ace bherbruck: kernel-cases: a regression rig that grades each kernel against the case's own answer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:23:10 -04:00
jyviko bdca59e7a0 Wave 29/509: kernel: boolean runner times both kernels and runs the cut sequence (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ac6ddbdbe jyviko: kernel: boolean runner times both kernels and runs the cut sequence
- 79ae117dd jyviko: kernel: boolean runner measures SMLib's results again on truck

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 05:14:20 -04:00
jyviko e931576723 Wave 28/509: brep: splines closed on themselves are periodic for pcurves and tessellation (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 27e996c44 jyviko: brep: splines closed on themselves are periodic for pcurves and tessellation
- 204b650d9 jyviko: brep: check_geometry refuses loops that enclose no area or turn the wrong way
- 19cf3d94a jyviko: brep: orientation, not position, tells a face's outer loop
- 2196129f1 jyviko: kernel: side-by-side boolean runner calls SMLib's boolean

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 04:59:26 -04:00
jyviko 539f52cc0a Wave 27/509: solidcraft-smlib: booleans, fillet, chamfer and shell through SMLib (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5b8d89abd Brennen Herbruck: kernel: schema 4 STEP records of revolved and conic-bounded parts against closed-form volumes
- c35fd77f6 jyviko: solidcraft-smlib: rebuild SMLib when its own sources change
- 734883bdb jyviko: solidcraft-smlib: booleans, fillet, chamfer and shell through SMLib

Co-authored-by: Brennen Herbruck <brennen.herbruck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:36:36 -04:00
Brennen Herbruck 7808c5f286 Wave 26/509: solidcraft-step: surfaces of revolution and extrusion, offset surfaces, hyperbola and parabola edges
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d41ae8512 Brennen Herbruck: solidcraft-step: surfaces of revolution and extrusion, offset surfaces, hyperbola and parabola edges

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 02:10:00 -04:00
Brennen Herbruck 39118d67a9 Wave 25/509: solidcraft-step: refuse loops across a closed spline surface's seam; conformance parts and truck volumes (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 91e482fc8 Brennen Herbruck: solidcraft-step: refuse loops across a closed spline surface's seam; conformance parts and truck volumes
- 8f31c088f jyviko: brep: a budget of 4,000,000 items, pcurves included

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:55:38 -04:00
Brennen Herbruck f63a15bc68 Wave 24/509: solidcraft-step: seams for STEP faces that wind around their surface, looser pcurve fits
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 3d7e465b1 Brennen Herbruck: solidcraft-step: seams for STEP faces that wind around their surface, looser pcurve fits

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:40:05 -04:00
Brennen Herbruck b1315a3de9 Wave 23/509: solidcraft-step: STEP topology into schema 4 B-rep records
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 54b10b9a3 Brennen Herbruck: solidcraft-step: STEP topology into schema 4 B-rep records

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:33:08 -04:00
bherbruck 517471d0d3 Wave 22/509: solidcraft-step: representation context units and uncertainty, shared with the kernel's STEP reader (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- e0bad4161 bherbruck: solidcraft-smlib: check test on every primitive
- 7050e9cfc bherbruck: solidcraft-smlib: mass properties of every primitive against closed forms
- 4983b8872 Brennen Herbruck: kernel: the boolean runner builds every SMLib operand
- acff340a0 Brennen Herbruck: solidcraft-step: representation context units and uncertainty, shared with the kernel's STEP reader

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:23:02 -04:00
jyviko 4c4dbe4121 Wave 21/509: solidcraft-smlib: SMLib bodies into SolidCraft through schema 4
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 144b56924 jyviko: solidcraft-smlib: SMLib bodies into SolidCraft through schema 4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:12:36 -04:00
Brennen Herbruck e0fb4ef757 Wave 20/509: solidcraft-smlib: schema 4 records into SMLib through the flat arrays
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2a22f4641 Brennen Herbruck: solidcraft-smlib: schema 4 records into SMLib through the flat arrays

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:10:59 -04:00
jyviko c72062a96a Wave 19/509: brep: a seam from pole to pole gets pcurves a period apart (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 161832976 jyviko: AGENTS.md: unsafe in the SMLib FFI module and its child modules
- 25d2056a2 jyviko: brep: a seam from pole to pole gets pcurves a period apart

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 01:00:51 -04:00
bherbruck 61f8fbcbfe Wave 18/509: solidcraft-smlib: exact mass properties, Brep::mass_properties and Brep::area
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 8f90187c3 bherbruck: solidcraft-smlib: exact mass properties, Brep::mass_properties and Brep::area

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 00:55:05 -04:00
bherbruck 0e2b0345eb Wave 17/509: solidcraft-smlib: SMLib's own validity check, Brep::check
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 74912755e bherbruck: solidcraft-smlib: SMLib's own validity check, Brep::check

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 00:52:33 -04:00
jyviko d05b24fb5e Wave 16/509: brep: check_geometry, the geometric agreement of a record (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- b85b51e81 Brennen Herbruck: solidcraft-smlib: blend faces come from the edge they replace
- 4a6494b48 jyviko: brep: check_geometry, the geometric agreement of a record
- 570028f31 jyviko: brep: the truck adapter checks a record's geometry before decoding it
- 30f5e617c jyviko: brep: document check_geometry in the validation section

Co-authored-by: Brennen Herbruck <brennen.herbruck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 00:47:15 -04:00
Brennen Herbruck af6528b420 Wave 15/509: kernel: a side-by-side runner for truck and SMLib booleans (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- fd80377dd Brennen Herbruck: solidcraft-smlib: face and edge history out of SMLib operations
- 4a4e11ef7 Brennen Herbruck: kernel: a side-by-side runner for truck and SMLib booleans

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 00:29:14 -04:00
Brennen Herbruck a7ede4efab Wave 14/509: solidcraft-smlib: SMLIB_REV at the fork's history commit
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ca9b25e7b Brennen Herbruck: solidcraft-smlib: SMLIB_REV at the fork's history commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 00:36:05 -04:00
Brennen Herbruck 7f7358f918 Wave 13/509: STEP geometry as plain data: read and write ISO 10303-42 curves and surfaces without truck
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- f06581ca5 Brennen Herbruck: STEP geometry as plain data: read and write ISO 10303-42 curves and surfaces without truck

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 22:21:19 -04:00
jyviko b9758637c8 Wave 12/509: solidcraft-smlib: read SMLib's log lines inside the FFI module (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 60aa5e697 jyviko: solidcraft-smlib: build every C API source file
- 3c0b53935 jyviko: solidcraft-smlib: read SMLib's log lines inside the FFI module
- 858f2c3bd jyviko: solidcraft-smlib: the C types are imported only when SMLib is built

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 00:35:15 -04:00
jyviko 709191218c Wave 11/509: solidcraft-smlib: SMLib statically linked behind its C API, with a safe wrapper (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- c06c3cb2c jyviko: brep: cones narrowing along z, and a linear duplicate-shell check
- 8695af8ac Brennen Herbruck: solidcraft-smlib: SMLib statically linked behind its C API, with a safe wrapper

Co-authored-by: Brennen Herbruck <brennen.herbruck@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:14:39 -04:00
jyviko cddc4db061 Wave 10/509: kernel: the truck adapter writes pcurves through brep::pcurve
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 95b229516 jyviko: kernel: the truck adapter writes pcurves through brep::pcurve

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-21 00:14:18 -04:00
jyviko 453b257a7f Wave 9/509: brep: pcurves from plain records
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 6dc759197 jyviko: brep: pcurves from plain records

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:55:57 -04:00
jyviko 6224363182 Wave 8/509: brep: a surface point's parameters move to geom (and 2 more)
3 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 692fba51a jyviko: naming: say how to re-record the corpus names
- a8c8f8832 jyviko: naming: list removed lines before added ones in the corpus diff
- 1d4916008 jyviko: brep: a surface point's parameters move to geom

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:49:36 -04:00
jyviko 4b72c3e257 Wave 7/509: naming: the corpus rebuilds with the same names and references
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- a55196e7a jyviko: naming: the corpus rebuilds with the same names and references

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:06:27 -04:00
jyviko b96d239c16 Wave 6/509: brep: docs for schema 4, and a pcurve lift test (and 1 more)
2 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 02abecd52 jyviko: brep: docs for schema 4, and a pcurve lift test
- 7f1e85f71 jyviko: naming: make the reference lookups a rebuild uses public

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:05:44 -04:00
jyviko 0b9d8600b5 Wave 5/509: brep: working tolerance, golden v5 records, cache producer 4
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 2f4d6acac jyviko: brep: working tolerance, golden v5 records, cache producer 4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:11:19 -04:00
jyviko b3cf2ff2af Wave 4/509: brep: schema 4 types, validator and truck adapter
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 445fb2385 jyviko: brep: schema 4 types, validator and truck adapter

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:05:31 -04:00
jyviko 1db9bf54f0 Wave 3/509: brep: history types move to solidcraft_geom::brep::history
1 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 5a9bd4398 jyviko: brep: history types move to solidcraft_geom::brep::history

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 22:53:52 -04:00
jyviko 3faf15f08c Wave 2/509: kernel: fitted pcurves on curved surfaces, unwrapped and closed per wire (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 099026d94 jyviko: kernel: fitted pcurves on curved surfaces, unwrapped and closed per wire
- c7088fac9 jyviko: kernel: pcurve tests for seams, poles and loop orientation, and pictures
- 0d026e975 jyviko: kernel: pcurve fits start from four samples per span
- 4afbe3b90 jyviko: kernel: pcurve test for a face round its surface without a seam

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 23:16:28 -04:00
jyviko 9e3dc7848b Wave 1/509: kernel: exact pcurves of lines and splines on planes (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 7024ceec8 jyviko: CI: no runs for pull requests into kernel-smlib for now
- 92d433ca9 jyviko: AGENTS.md: the kernel-smlib branch's rules (ADR 0002)
- ee5deffaa jyviko: brep: Curve2 pcurve type and the truck pcurve entry point
- 26ab8981d jyviko: kernel: exact pcurves of lines and splines on planes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-10-20 22:53:02 -04:00
bherbruck 4927214976 Release 0.18.2
The tree is main at 57bcc4083 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-20 22:09:18 -04:00
bherbruck b621819c0c Release 0.18.1
The tree is main at 522ae7755 exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-20 17:39:11 -04:00
bherbruck ec552a5300 Release 0.18.0
The tree is main at c3151fb7f exactly; the previous release commit is kept as a parent so release only moves forward.
2026-10-20 16:28:59 -04:00
bherbruck e0cc740cc3 Release 0.17.0
The tree is main at 511faedcf exactly; the 0.16.x release commits are kept as a parent so release only moves forward.
2026-10-20 11:41:48 -04:00
bherbruck 5de48e916d Release 0.16.2 2026-10-19 00:39:30 +00:00
bherbruck 80af7bbe3e Release 0.16.2
Version 0.16.2: 0.16.1 with the rigid orbit fix (#2753). Same design format (27).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:38:53 +00:00
bherbruck 191e983423 Fix orbit about the picked point (regression in 0.16.0) (#2753)
Orbiting about the point under the cursor (or the origin) turned the camera
about its target and then panned to put the pivot back. The pan works at the
target's depth with the parallel-view scale, so in a perspective view the
pivot slid off its pixel and the model swung about the camera.

The camera now turns rigidly about the pivot: Camera::orbit_about keeps the
pivot's coordinates in the camera's frame and rebuilds the target from the
new orientation, so the pivot stays exactly on its pixel in both projections.
The Shift snap spring and view.navigate's pivot orbit use the same.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit e88779218)
2026-10-19 00:38:52 +00:00
bherbruck 2b9445b049 Release 0.16.1 2026-10-18 20:16:21 +00:00
bherbruck 7ddf48ca16 Release 0.16.1
Version 0.16.1: 0.16.0 with the orbit fix (reverts #2142). Same design format (27).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 20:12:04 +00:00
bherbruck d2f6848377 Revert #2142: orbit about the picked point like 0.15.0
#2142 made orbiting about the point under the cursor turn the camera in place instead of turning the part about that point. Restore the 0.15.0 behaviour.

This reverts commit cac4bccea8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 20:12:00 +00:00
bherbruck 0b6d6fecd8 Release 0.16.0 2026-10-18 18:16:11 +00:00
bherbruck fa691707c2 Release 0.15.0 2026-10-17 13:54:24 +00:00
bherbruck b9a55c74e2 Release 0.15.0
Version 0.15.0; the pending design-format changes are folded into format 26.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 13:53:44 +00:00
bherbruck 2bb9c81069 Release 0.14.0 2026-10-16 09:19:14 +00:00
bherbruck cedb51b8ea Release 0.14.0
Version 0.14.0; the pending design-format changes are folded into format 25.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 09:19:10 +00:00
bherbruck 66d13059dd Release 0.13.1 2026-10-15 21:56:43 +00:00
bherbruck 800ea40c0d Release 0.13.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 21:56:35 +00:00
bherbruck 20442eecd3 Agent chat on Windows: start npm agents through their .cmd shim
npm puts a Unix shell script with the bare name (codex-acp,
claude-code-acp, gemini) beside the .cmd shim. The lookup tried the bare
name first, so every npm-installed agent failed with "not a valid Win32
application (os error 193)". Windows now only considers .exe/.cmd/.bat,
and a command saved with the bare path runs the shim beside it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 60ea8c69d2)
2026-10-15 21:51:01 +00:00
bherbruck 22d1cd7032 Release 0.13.0 2026-10-15 20:34:13 +00:00
bherbruck 6a0dc18655 Fix the Windows 32-bit and macOS release builds
On 32-bit Windows SetWindowLongPtrW is SetWindowLongW, which takes and
returns i32, so the window-procedure hook didn't compile for i686.
The macOS app bundle now signs the bundled solidcraft-cli before the
bundle itself; codesign refuses a bundle with an unsigned helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 94e76cd97e)
2026-10-15 20:34:12 +00:00
bherbruck e006dbf1af Release 0.13.0
The tree is the 0.13.0 version commit (8241a750fa) on main exactly; the previous release is kept as a parent so release only moves forward.
2026-10-15 19:59:50 +00:00
bherbruck 8241a750fa Release 0.13.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 19:59:42 +00:00
bherbruck 41779cf7bb Release 0.12.0: release branch follows main again after the 0.11.1 patch
The tree is main at c36a6f9f exactly; the 0.11.1 patch commit is kept as a parent so release only moves forward.
2026-10-15 13:32:01 +00:00
bherbruck b01b9689c8 Release 0.11.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:41:41 +00:00
bherbruck 4426da6f5d Windows: start Direct3D 12 first, and Vulkan only without a D3D12 GPU (#1190)
* Windows: start Direct3D 12 first, and Vulkan only without a D3D12 GPU

wgpu started Vulkan, D3D12 and OpenGL together and preferred Vulkan, so
every Windows start loaded all installed Vulkan drivers. An old Intel
Vulkan driver (igvk64.dll) crashed 0.10.1 at startup inside the driver.

The app now probes D3D12, then Vulkan, then OpenGL, one backend at a
time, and starts only the first with a hardware adapter (WARP when none
has one). WGPU_BACKEND still wins; graphics.json's "backend" sets the
order by hand; the software renderer (safe mode, the retry) uses D3D12
alone. A new Windows CI job starts the real app under several settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* CI: a test filter YAML parses

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* CI: the startup smoke test writes graphics.json where the app reads it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* CI: run the WARP shader tests one at a time

WARP's shader JIT (d3d10warp.dll) crashed twice in 124 runs of the gpu
tests with four test threads, with a null read inside its own optimizer
while several devices compiled compute pipelines at once. Serial runs
did not crash.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 95ea05e7c8)
2026-10-14 20:41:37 +00:00
bherbruck 5ead82e627 Release 0.11.0: release branch follows main again after the 0.10.1 patch
The tree is main at cccbe125 exactly; c29b0d2f (0.10.1) is kept as a parent so release only moves forward.
2026-10-14 20:07:41 +00:00
bherbruck c29b0d2f13 Release 0.10.1 2026-10-14 14:41:19 +00:00
bherbruck 480fd8d517 Fix the startup crash on D3D12 with FXC: CPU fallback for the tessellation pipeline, FXC-friendly shader (#1098) (#1099)
* GPU tessellation: a pipeline the device cannot build falls back to CPU meshing instead of crashing (#1098)

Build the tessellation compute pipeline inside error scopes; TessGpu::new returns an error,
and the viewport logs it and meshes bodies on the CPU. A Windows CI job builds the pipeline
with D3D12's FXC on the WARP adapter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Tessellation shader: basis functions in one-dimensional local arrays, so D3D12's FXC compiles it (#1098)

FXC has to unroll loops that write an array inside a struct (Basis.n0/n1) or a 2-D array
(ndu) by a counter, and cannot with run-time trip counts (X3511). A2.2 basis functions in a
local 1-D array returned whole; derivatives from the degree p-1 functions; the pole step
offsets computed rather than indexed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:41:16 +00:00
bherbruck 4c09fa5355 Hovered and selected faces light solidly again over GPU-drawn bodies (#1064)
Since the model's mesh went back to the reference mesher (#940), the GPU viewport drew
opaque bodies from their display plans while hover and selection lit faces with the
reference mesh's triangles. Two triangulations of the same face at equal depth fought, so
a hovered face shimmered in wedges instead of lighting whole.

Faces lit over a body drawn from its plan now use the plan's own triangles
(ModelBody::plan_mesh, evaluated once on the CPU), and the highlight pass gets a small
depth bias toward the eye so f32 rounding between the GPU and CPU evaluations of the same
triangles cannot speckle it either.

Test: every face of a box with a pocket and a round boss, hovered and rendered offscreen
through the viewport's real pipelines on the GPU path, lights the same pixels as on the
CPU path (skipped without a GPU adapter).

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:56:47 +00:00
244 changed files with 18276 additions and 8610 deletions
-35
View File
@@ -442,9 +442,6 @@ jobs:
with:
key: quick-compile
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Cargo check
run: cargo check --workspace --all-targets --locked
@@ -464,9 +461,6 @@ jobs:
with:
key: native-clippy
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Clippy
env:
FULL: ${{ needs.changes.outputs.full }}
@@ -510,9 +504,6 @@ jobs:
with:
key: native-tests
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Set up compiler cache
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
with:
@@ -584,9 +575,6 @@ jobs:
with:
key: native-tests
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Set up compiler cache
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
with:
@@ -703,9 +691,6 @@ jobs:
with:
key: native-gpu
save-if: ${{ (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') && matrix.shard == 1 }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Set up compiler cache
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
with:
@@ -862,9 +847,6 @@ jobs:
with:
key: doc-tests
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Set up compiler cache
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
with:
@@ -923,9 +905,6 @@ jobs:
with:
key: oracle
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Set up compiler cache
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
with:
@@ -965,9 +944,6 @@ jobs:
with:
key: windows-fxc
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
# 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
@@ -992,9 +968,6 @@ jobs:
with:
key: windows-startup
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- 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
@@ -1132,9 +1105,6 @@ jobs:
with:
key: wasm
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh wasm32-unknown-unknown
- run: cargo xtask wasm
riscv64-gates:
@@ -1157,9 +1127,6 @@ jobs:
with:
key: riscv64
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh riscv64gc-unknown-linux-gnu
- name: Install cross-compilation dependencies
run: |
# Ubuntu's regular archive serves amd64; RISC-V packages live in ports.
@@ -1180,8 +1147,6 @@ jobs:
- name: Cargo check on RISC-V
env:
CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER: riscv64-linux-gnu-gcc
# SMLib has no prebuilt library for RISC-V: its sources are compiled with this.
CXX_riscv64gc_unknown_linux_gnu: riscv64-linux-gnu-g++
PKG_CONFIG_SYSROOT_DIR: /
PKG_CONFIG_PATH: /usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig
PKG_CONFIG_ALLOW_CROSS: 1
-3
View File
@@ -53,9 +53,6 @@ jobs:
with:
key: docker-web
save-if: ${{ github.ref == 'refs/heads/main' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh wasm32-unknown-unknown
- name: Install trunk
run: |
mkdir -p "$HOME/.local/bin"
-3
View File
@@ -29,9 +29,6 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@stable
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Build the CLI
run: cargo build --profile ci -p solidcraft-cli
- name: Import and check every entry
+3 -8
View File
@@ -1,5 +1,5 @@
# 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/ on SMLib, through one release build of
# 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.
@@ -25,7 +25,6 @@ on:
# The rig itself: the grading, the runner and this workflow.
- "apps/solidcraft-cli/src/kernel_cases.rs"
- "xtask/src/kernel_cases.rs"
- "scripts/fetch-smlib.sh"
- ".github/workflows/fillet-rig.yml"
push:
branches: [main, develop]
@@ -42,7 +41,6 @@ on:
# The rig itself: the grading, the runner and this workflow.
- "apps/solidcraft-cli/src/kernel_cases.rs"
- "xtask/src/kernel_cases.rs"
- "scripts/fetch-smlib.sh"
- ".github/workflows/fillet-rig.yml"
workflow_dispatch:
@@ -86,15 +84,12 @@ jobs:
with:
key: fillet-rig
save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Set up compiler cache
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
with:
version: v0.16.0
- name: Build the CLI (release, SMLib)
run: cargo build --release --locked -p solidcraft-cli --features smlib
- 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
-3
View File
@@ -48,9 +48,6 @@ jobs:
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: generated-files
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: THIRD-PARTY-LICENSES.txt
run: cargo xtask licences
- name: docs/features.md
+15 -11
View File
@@ -1,8 +1,9 @@
# 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; the ladder runs whenever any
# area does. One job then builds solidcraft-cli once (release, SMLib prebuilt), checks that every
# 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.
@@ -34,11 +35,13 @@ on:
- "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/fetch-smlib.sh"
- "scripts/ci/kernel_rig_plan.py"
- "scripts/ci/test_kernel_rig_plan.py"
- ".github/workflows/kernel-rig.yml"
@@ -54,11 +57,13 @@ on:
- "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/fetch-smlib.sh"
- "scripts/ci/kernel_rig_plan.py"
- "scripts/ci/test_kernel_rig_plan.py"
- ".github/workflows/kernel-rig.yml"
@@ -107,7 +112,9 @@ jobs:
# 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"
python3 -I scripts/ci/kernel_rig_plan.py --paths "$RUNNER_TEMP/rig-paths" --github-output "$GITHUB_OUTPUT"
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
@@ -141,16 +148,13 @@ jobs:
with:
key: kernel-rig
save-if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Set up compiler cache
uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11
with:
version: v0.16.0
- name: Build the CLI (release, SMLib) and the rig's runner
- name: Build the CLI (release) and the rig's runner
run: |
cargo build --release --locked -p solidcraft-cli --features smlib
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
@@ -209,7 +213,7 @@ jobs:
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: kernel-rig-results-${{ matrix.shard }}
path: ${{ runner.temp }}/kernel-rig/results.json
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.
-3
View File
@@ -41,9 +41,6 @@ jobs:
with:
targets: wasm32-unknown-unknown
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh wasm32-unknown-unknown
- name: Install mdbook and trunk
run: |
mkdir -p "$HOME/.local/bin"
+22 -16
View File
@@ -126,9 +126,6 @@ jobs:
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: release-icons
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- run: cargo build --release --locked -p solidcraft-cli
- run: |
. packaging/env.sh
@@ -168,9 +165,6 @@ jobs:
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: release-linux-${{ matrix.arch }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh
- name: Build and package (AppImage, deb, rpm, tar.gz)
run: packaging/linux/package.sh
- name: Check the packages
@@ -240,6 +234,8 @@ 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:
@@ -256,10 +252,29 @@ 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-${{ env.VERSION }}-linux-${{ matrix.arch }}.tar.gz
tarball: dist/linux/solidcraft-${{ steps.pkgver.outputs.pkgver }}-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
@@ -395,9 +410,6 @@ jobs:
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: release-macos-${{ matrix.arch }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh ${{ matrix.target }}
- name: Build
run: packaging/macos/package.sh --build-only ${{ matrix.target }}
# Not named release-*: the release job collects every release-* artifact as an asset.
@@ -496,9 +508,6 @@ jobs:
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: release-windows-${{ matrix.arch }}
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh ${{ matrix.target }}
- name: Install WiX
shell: pwsh
run: |
@@ -630,9 +639,6 @@ jobs:
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: release-web
- name: Fetch SMLib (crates/smlib/SMLIB_REV)
shell: bash
run: scripts/fetch-smlib.sh wasm32-unknown-unknown
- name: Install trunk
run: |
curl -fsSL "https://github.com/trunk-rs/trunk/releases/download/v${TRUNK_VERSION}/trunk-x86_64-unknown-linux-gnu.tar.gz" \
+11
View File
@@ -771,6 +771,7 @@ Original SolidCraft drawings, Open for owner review; no runtime assignments.
| 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 |
## Code adapted from sibling projects
@@ -810,6 +811,15 @@ 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)
@@ -825,6 +835,7 @@ 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
Generated
+30 -23
View File
@@ -4051,9 +4051,17 @@ 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 = "solidcraft"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"block2 0.6.2",
"eframe",
@@ -4090,11 +4098,11 @@ dependencies = [
[[package]]
name = "solidcraft-3dx-client"
version = "0.30.1"
version = "0.40.0-rc.1"
[[package]]
name = "solidcraft-cli"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"image",
"log",
@@ -4107,7 +4115,7 @@ dependencies = [
[[package]]
name = "solidcraft-derive"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"proc-macro2",
"quote",
@@ -4116,7 +4124,7 @@ dependencies = [
[[package]]
name = "solidcraft-doc"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"log",
"serde",
@@ -4134,7 +4142,7 @@ dependencies = [
[[package]]
name = "solidcraft-engine"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"image",
"log",
@@ -4156,7 +4164,7 @@ dependencies = [
[[package]]
name = "solidcraft-geom"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"serde",
"serde_json",
@@ -4165,7 +4173,7 @@ dependencies = [
[[package]]
name = "solidcraft-gpu"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"image",
"log",
@@ -4185,7 +4193,7 @@ dependencies = [
[[package]]
name = "solidcraft-io"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"cadmpeg-core",
"cadmpeg-ir",
@@ -4211,7 +4219,7 @@ dependencies = [
[[package]]
name = "solidcraft-kernel"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"log",
"proptest",
@@ -4229,7 +4237,7 @@ dependencies = [
[[package]]
name = "solidcraft-mcp"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"image",
"serde_json",
@@ -4239,7 +4247,7 @@ dependencies = [
[[package]]
name = "solidcraft-profile"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"serde_json",
"web-time",
@@ -4247,7 +4255,7 @@ dependencies = [
[[package]]
name = "solidcraft-render"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"image",
"moxcms",
@@ -4262,7 +4270,7 @@ dependencies = [
[[package]]
name = "solidcraft-sketch"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"harfrust",
"serde",
@@ -4275,27 +4283,26 @@ dependencies = [
[[package]]
name = "solidcraft-smlib"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"cc",
"flate2",
"log",
"serde_json",
"solidcore",
"solidcraft-geom",
"solidcraft-profile",
"web-time",
]
[[package]]
name = "solidcraft-space-mouse"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"serde",
]
[[package]]
name = "solidcraft-step"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"solidcraft-geom",
"solidcraft-profile",
@@ -4303,11 +4310,11 @@ dependencies = [
[[package]]
name = "solidcraft-testkit"
version = "0.30.1"
version = "0.40.0-rc.1"
[[package]]
name = "solidcraft-ui-egui"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"arboard",
"egui",
@@ -4338,7 +4345,7 @@ dependencies = [
[[package]]
name = "solidcraft-web"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"eframe",
"egui",
@@ -5745,7 +5752,7 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
[[package]]
name = "xtask"
version = "0.30.1"
version = "0.40.0-rc.1"
dependencies = [
"proc-macro2",
"quick-xml",
+6 -1
View File
@@ -5,7 +5,7 @@ members = ["crates/*", "apps/*", "xtask"]
exclude = ["vendor"]
[workspace.package]
version = "0.30.1"
version = "0.40.0-rc.1"
edition = "2024"
license = "MIT OR Apache-2.0"
rust-version = "1.95"
@@ -31,6 +31,11 @@ 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" }
# test tooling: a dev-dependency only (xtask/src/layers.rs)
solidcraft-testkit = { path = "crates/testkit" }
+386 -1167
View File
File diff suppressed because it is too large Load Diff
+1 -4
View File
@@ -20,12 +20,9 @@ name = "solvecraft-cli"
path = "src/alias.rs"
[features]
default = ["raytrace-cpu", "smlib", "profile"]
default = ["raytrace-cpu", "profile"]
bundled-render-library = ["solidcraft-engine/bundled-render-library"]
raytrace-cpu = ["solidcraft-engine/raytrace-cpu"]
# Link SMLib into the kernel (solidcraft-engine/smlib; needs scripts/fetch-smlib.sh). SMLib is the
# only kernel, so without it the command line models nothing.
smlib = ["solidcraft-engine/smlib"]
# 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"]
+6 -13
View File
@@ -9,9 +9,9 @@ use serde_json::{Value, json};
use crate::oracle::{ABS_FRAC, Checks, REL_TOL, totals, v3};
use crate::{read_json, recipe};
/// The kernel the cases run on: SMLib, the only one.
/// The kernel the cases run on: solidcore, the only one.
fn kernel() -> String {
"smlib".into()
"solidcore".into()
}
/// How many cases a chain of `base` recipes may go through (a ladder case builds on the one
@@ -692,28 +692,21 @@ fn check_case(dir: &str, dumps: Option<&std::path::Path>, validation: solidcraft
return out;
}
};
if !solidcraft_engine::kernel::smlib_built() {
out["status"] = json!("unsupported");
out["error"] = json!("this build has no SMLib: build solidcraft-cli with --features smlib");
return out;
}
// `refused`: only a clean refusal is right; `solid_or_refused`: a clean refusal, or a result
// graded as usual (where the geometry has no manifold answer, such as bodies touching along a
// curve only).
let outcome = want["outcome"].as_str().unwrap_or("solid");
let refused = outcome == "refused";
let may_refuse = refused || outcome == "solid_or_refused";
// The SMLib calls that fail in this case leave their inputs in its own folder.
// The kernel calls that fail in this case leave their inputs in its own folder.
if let Some(root) = dumps {
let folder = root.join(format!("{area}-{name}"));
if let Err(e) = std::fs::create_dir_all(&folder)
.map_err(|e| e.to_string())
.and_then(|()| solidcraft_engine::kernel::smlib_dump_dir(Some(&folder)).map_err(|e| e.to_string()))
{
if let Err(e) = std::fs::create_dir_all(&folder) {
out["status"] = json!("fail");
out["error"] = json!(format!("--dumps: {}: {e}", folder.display()));
return out;
}
solidcraft_engine::kernel::smlib_dump_dir(Some(&folder));
}
let mut s = solidcraft_engine::Session::default();
s.set_validation(validation);
@@ -985,7 +978,7 @@ pub fn run(args: &[String]) -> Result<(), String> {
};
let results: Vec<Value> = dirs.iter().map(|d| check_case(d, dumps.as_deref(), validation)).collect();
if dumps.is_some() {
solidcraft_engine::kernel::smlib_dump_dir(None).map_err(|e| format!("kernel-cases: --dumps: {e}"))?;
solidcraft_engine::kernel::smlib_dump_dir(None);
}
report(args, &results);
let bad = results.iter().filter(|r| matches!(r["status"].as_str(), Some("fail" | "crash"))).count();
+1 -1
View File
@@ -1,5 +1,5 @@
//! `--profile` and `--profile-out FILE` for `run`, `eval` and `bench-open` (and
//! `SOLIDCRAFT_PROFILE=1` for any command): record where the time goes, SMLib's calls to the
//! `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.
+1 -5
View File
@@ -14,12 +14,8 @@ name = "solidcraft-web"
path = "src/main.rs"
[features]
default = ["smlib", "profile"]
default = ["profile"]
bundled-render-library = ["solidcraft-engine/bundled-render-library"]
# Link SMLib into the kernel (solidcraft-engine/smlib; needs scripts/fetch-smlib.sh
# wasm32-unknown-unknown, or the sources and wasi-sdk in WASI_SDK_PATH, crates/smlib/build.rs). SMLib
# is the only kernel, so without it the web app models nothing.
smlib = ["solidcraft-engine/smlib"]
# 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"]
+9
View File
@@ -0,0 +1,9 @@
//! 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 -4
View File
@@ -8,12 +8,9 @@ publish = false
default-run = "solidcraft"
[features]
default = ["raytrace-cpu", "bundled-render-library", "smlib", "profile"]
default = ["raytrace-cpu", "bundled-render-library", "profile"]
bundled-render-library = ["solidcraft-engine/bundled-render-library"]
raytrace-cpu = ["solidcraft-engine/raytrace-cpu"]
# Link SMLib into the kernel (solidcraft-engine/smlib; needs scripts/fetch-smlib.sh). SMLib is the
# only kernel, so without it the app models nothing.
smlib = ["solidcraft-engine/smlib"]
# 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"]
+123
View File
@@ -496,6 +496,7 @@
"Render Stage": "مرحلة التصيير",
"Reopen designs": "إعادة فتح التصاميم",
"Reopen the designs that were open when SolidCraft was last closed": "إعادة فتح التصاميم التي كانت مفتوحة آخر مرة",
"Repair Part": "إصلاح الجزء",
"Replace existing library file": "استبدال ملف المكتبة الموجود",
"Report a bug — review a screenshot and open a GitHub draft": "الإبلاغ عن خطأ — راجع لقطة الشاشة وافتح مسودة GitHub",
"Report copied. Keep this text to submit on GitHub when you are online.": "تم نسخ التقرير. احتفظ بهذا النص لإرساله على GitHub عند الاتصال بالإنترنت.",
@@ -790,6 +791,7 @@
"browser.edit_canvas_title": "تعديل اللوحة: {name}",
"browser.edit_point_cloud_title": "تحرير سحابة النقاط: {name}",
"browser.move_title": "تحريك: {name}",
"browser.needs_repair": "{name}: يحتاج إلى إصلاح",
"browser.parameters": "المعاملات ({count})",
"browser.precision": "الدقة: {precision}",
"browser.sketch_attachment_lost": "{name} (فُقد الارتباط)",
@@ -834,6 +836,7 @@
"cmd.assembly_mass_properties": "خصائص الكتلة",
"cmd.body.print_face": "وجه الطباعة",
"cmd.body_rename": "إعادة تسمية الجسم",
"cmd.body_repair": "إصلاح الجزء",
"cmd.browser_collapse_all": "طي الكل",
"cmd.browser_expand_all": "توسيع الكل",
"cmd.browser_group": "مجموعة جديدة",
@@ -918,6 +921,8 @@
"cmd.diagnostics_crash_reports": "تقارير الأعطال",
"cmd.diagnostics_crash_reports_clear": "حذف تقارير الأعطال",
"cmd.diagnostics_crash_test": "اختبار العطل",
"cmd.diagnostics_profile": "التحليل الزمني",
"cmd.diagnostics_validation": "التحقق",
"cmd.doc_recover": "استعادة التصميم",
"cmd.doc_recovery_discard": "تجاهل التصميم المستعاد",
"cmd.doc_recovery_list": "التصاميم القابلة للاستعادة",
@@ -955,6 +960,7 @@
"cmd.frame_profile_list": "مكتبة المقاطع",
"cmd.frame_profile_properties": "خصائص المقطع",
"cmd.inspect_accessibility": "تحليل إمكانية الوصول",
"cmd.inspect_analysis": "تحليل العرض",
"cmd.inspect_center_of_mass": "مركز الكتلة",
"cmd.inspect_clearance": "الخلوص",
"cmd.inspect_colored_components": "تفعيل ألوان المكوّنات",
@@ -1360,6 +1366,7 @@
"crash.unclean_explanation": "اكتُشف عند تشغيل لاحق، ولم يُسجَّل وقت الخروج بدقة. قد يسبب إيقاف تشغيل النظام أو الإيقاف القسري خروجًا غير سليم أيضًا.",
"delete.and_more": "… و{count} غيرها",
"diagnostic.empty_boolean_component": "لا يوجد جسم للقص أو التقاطع في المكوّن '{component}'؛ قد تتداخل الأداة مع '{body}' في المكوّن '{other}' — نشّط ذلك المكوّن أو اختر الجسم هدفًا",
"diagnostic.reselect_reference": "{feature}: المرجع `{reference}` لم يعد موجودًا كما اختير؛ أعد اختياره",
"dialog.bodies_count": "{count} أجسام",
"dialog.clearance_invalid": "يجب أن يكون الخلوص طولًا قيمته 0 أو أكثر",
"dialog.compute": "احسب",
@@ -1425,6 +1432,14 @@
"file_load.reading_percent": "قراءة الملف... {percent}%",
"file_load.rebuilding": "إعادة بناء الميزة {done} من {total}",
"file_load.recovering": "استعادة التصميم",
"file_load.step_build": "جارٍ بناء النموذج",
"file_load.step_feature": "الميزة {done} من {total}",
"file_load.step_part": "الجزء {done} من {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "جارٍ قراءة الملف",
"file_load.step_rebuild": "جارٍ إعادة بناء الميزات",
"file_load.step_repair": "جارٍ فحص الأجزاء وإصلاحها",
"file_load.step_show": "جارٍ تجهيز العرض",
"file_load.stopping": "انتظار توقف العملية السابقة...",
"file_load.updating_links": "تحديث الروابط",
"file_load.waiting": "انتظار عملية الملف",
@@ -1719,6 +1734,7 @@
"help.timeline.delete": "يحذف الميزات المحددة من السجل، وحذف رسمٍ يحذف معه الميزات المبنية عليه. استخدمه لإزالة خطوة لم تعد مطلوبة.",
"help.timeline.dependents": "يسرد الميزات التي ستُحذف مع ميزة ما، وتلك التي ستفشل بدونها. استخدمه قبل حذف ميزة أو تغييرها.",
"help.timeline.play": "أعد تشغيل الميزات المتبقية واحدة تلو الأخرى، مع توقف لمدة نصف ثانية بعد كل إعادة بناء. شغّل هذا الأمر مرة أخرى أو اضغط Escape للإيقاف؛ ينتقل «الذهاب إلى النهاية» فورًا إلى النهاية.",
"help.version": "الإصدار {version}",
"help.view.apply": "يدير العرض إلى اتجاه قياسي مثل الأمامي أو العلوي أو الأيزومتري، أو إلى عرض مسمّى محفوظ. استخدمه للنظر إلى النموذج من زاوية ثابتة.",
"help.view.delete": "يحذف عرضًا مسمّى محفوظًا. لا يتغير النموذج.",
"help.view.fit": "يضبط التكبير ويُزيح العرض حتى يملأ النموذج كله أو التحديد منطقة العرض. استخدمه حين يخرج النموذج من مجال الرؤية.",
@@ -1806,6 +1822,27 @@
"home.start_hint": "أنشئ تصميمًا، أو افتح ملفًا حديثًا، أو استكشف مثالًا.",
"home.whats_new": "ما الجديد",
"home.yesterday": "أمس",
"import_report.details": "التفاصيل:",
"import_report.file_one": "كانت هناك مشكلة أخرى واحدة في الملف.",
"import_report.file_other": "كانت هناك {count} مشكلات أخرى في الملف.",
"import_report.hint": "قد يحل ذلك تصدير هذه الأجزاء مرة أخرى من البرنامج الذي أنشأها. يحتوي «نسخ رسالة التحذير» على التفاصيل.",
"import_report.left_out_one": "تعذّر إصلاح وجه واحد وهو مفقود.",
"import_report.left_out_other": "تعذّر إصلاح {count} أوجه وهي مفقودة.",
"import_report.needs_repair_one": "يحتاج جزء واحد إلى إصلاح قبل النمذجة عليه.",
"import_report.needs_repair_other": "تحتاج {count} أجزاء إلى إصلاح قبل النمذجة عليها.",
"import_report.not_imported_one": "تعذّر استيراد جزء واحد.",
"import_report.not_imported_other": "تعذّر استيراد {count} أجزاء.",
"import_report.not_shown_one": "تعذّر رسم وجه واحد وهو مخفي.",
"import_report.not_shown_other": "تعذّر رسم {count} أوجه وهي مخفية.",
"import_report.open_one": "في جزء واحد فجوات بين أوجهه، فاستُورد كجسم مفتوح.",
"import_report.open_other": "في {count} أجزاء فجوات بين أوجهها، فاستُوردت كأجسام مفتوحة.",
"import_report.refused_one": "تعذّر تحويل جزء واحد إلى مجسم، فلم يُستورد.",
"import_report.refused_other": "تعذّر تحويل {count} أجزاء إلى مجسمات، فلم تُستورد.",
"import_report.repaired_one": "أُصلحت عيوب صغيرة في جزء واحد.",
"import_report.repaired_other": "أُصلحت عيوب صغيرة في {count} أجزاء.",
"import_report.solids": "استُورد {solids} من {parts} أجزاء كمجسمات.",
"import_report.surfaces_one": "تعذّر تحويل جزء واحد إلى مجسم، فاستُورد كأسطح.",
"import_report.surfaces_other": "تعذّر تحويل {count} أجزاء إلى مجسمات، فاستُوردت كأسطح.",
"install.button_tip": "ثبّت SolidCraft كتطبيق: يُفتح في نافذته الخاصة ويعمل دون اتصال",
"install.dock_1": "اختر ملف › إضافة إلى Dock.",
"install.dock_2": "انقر إضافة.",
@@ -2351,6 +2388,8 @@
"prefs.profile_exported": "تم تصدير ملف التعريف.",
"prefs.profile_imported": "تم استيراد ملف التعريف.",
"prefs.profile_name_hint": "اسم ملف التعريف، مثل: حاسوب محمول",
"prefs.profile_operations": "تحليل زمن العمليات",
"prefs.profile_operations_note": "يسجّل المدة التي تستغرقها استدعاءات SMLib وعمليات النواة والميزات والأوامر وعمليات الاستيراد. يقرؤه الوكلاء عبر diagnostics.profile.",
"prefs.profile_rename": "إعادة تسمية",
"prefs.profile_renamed": "تمت إعادة تسمية ملف التعريف.",
"prefs.profile_save": "حفظ",
@@ -2380,6 +2419,9 @@
"prefs.scale_text": "الحجم والنص",
"prefs.search": "البحث في الإعدادات",
"prefs.search_empty": "لا توجد إعدادات مطابقة",
"prefs.section_hatch": "تهشير المقطع",
"prefs.section_hatch_by_part": "حسب الجزء",
"prefs.section_hatch_one": "نمط واحد",
"prefs.select": "تحديد",
"prefs.select_one_item": "تحديد عنصر واحد",
"prefs.select_other_hidden": "تحديد العناصر الهندسية المخفية باستخدام «تحديد عنصر آخر»",
@@ -2494,6 +2536,12 @@
"prefs.under_cursor": "تحت المؤشر",
"prefs.units_precision": "الوحدات والدقة",
"prefs.updates": "التحديثات",
"prefs.validation": "التحقق من الأجسام",
"prefs.validation.each_feature": "مرة لكل ميزة",
"prefs.validation.each_step": "بعد كل خطوة",
"prefs.validation.label": "فحص النواة الكامل",
"prefs.validation.off": "متوقف (تجريبي)",
"prefs.validation_note": "بعد كل خطوة: يفحص كل عملية سحب ودمج وتقويس.\nمرة لكل ميزة: يفحص ناتج كل ميزة مرة واحدة.\nمتوقف (تجريبي): لا فحص.",
"prefs.value_boxes_in_view": "إظهار القيم بجانب مقابضها في العرض",
"prefs.value_boxes_in_view_tip": "قيمة الأمر (المسافة، نصف القطر…) في مربع بجانب مقبضه، فوق النموذج. عند الإيقاف: تكتبها في نافذة الأمر، التي تتلقى لوحة المفاتيح بعد التحديد، ولا شيء يغطي النموذج.",
"prefs.view": "سلوك العرض",
@@ -2528,6 +2576,17 @@
"recovery.just_now": "الآن",
"recovery.min_ago": "قبل {count} دقيقة",
"recovery.never_saved": "لم يُحفظ قط",
"refused.change": "تعذّر تغيير {body}.",
"refused.cut": "تعذّر قطع {body}.",
"refused.face_curved": "أحد أوجهه المنحنية لا يمكن استخدامه في النمذجة.",
"refused.face_flat": "أحد أوجهه المستوية لا يمكن استخدامه في النمذجة.",
"refused.face_freeform": "أحد أوجهه الحرة لا يمكن استخدامه في النمذجة.",
"refused.face_rounded": "أحد أوجهه المستديرة لا يمكن استخدامه في النمذجة.",
"refused.faces_apart": "أوجهه لا تلتقي بدقة كافية لاستخدامها في النمذجة.",
"refused.intersect": "تعذّر التقاطع مع {body}.",
"refused.join": "تعذّر الضم إلى {body}.",
"refused.repair": "إصلاح الجزء",
"refused.show_face": "إظهار الوجه",
"render.adaptive_absolute": "الحد الأدنى المطلق لخطأ RGB",
"render.adaptive_coverage": "هدف خطأ التغطية",
"render.adaptive_enable": "توزيع العيّنات باستخدام عيّنات استكشافية مستقلة",
@@ -3995,7 +4054,19 @@
"the section's profiles must be in one sketch": "يجب أن تكون مقاطع المقطع العرضي في رسم واحد",
"the two origins are on the same component": "يقع الأصلان على المكوّن نفسه",
"thread.automatic_size": "حجم تلقائي",
"thread.chamfer_depth_needed": "مطلوب لهذا الشكل",
"thread.designation": "التسمية",
"thread.drill_range": "مثقاب صانع اللقمة {drill} مم. القطر الأصغر القياسي للسن الداخلي {minor} مم. يُقبل مثقاب من {low} إلى {high} مم.",
"thread.drill_range_custom": "المثقاب هو القطر الأكبر ناقص الخطوة، {drill} مم. القطر الأصغر القياسي للسن الداخلي {minor} مم. يُقبل مثقاب من {low} إلى {high} مم.",
"thread.drill_range_taper": "مثقاب صانع اللقمة {drill} مم. القطر الأصغر القياسي عند نهاية السن {minor} مم. يُقبل مثقاب من {low} إلى {high} مم.",
"thread.end_square": "قائمة",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"thread.fits_the_face": "يناسب الوجه، مثلاً {example}",
"thread.form_bspp": "سن أنابيب G (ISO 228-1)",
"thread.form_bspt": "سن أنابيب مخروطي R، Rc (ISO 7-1)",
"thread.form_npt": "سن أنابيب مخروطي NPT (ASME B1.20.1)",
"thread.form_rp": "سن أنابيب داخلي متوازٍ Rp (ISO 7-1)",
"thread.iso_metric": "متري ISO",
"thread.select_size": "اختر الحجم",
"timeline.delete_after_marker_one": "حذف ميزة واحدة بعد مؤشر السجل",
@@ -4468,6 +4539,8 @@
"ui.centerline": "خط المركز",
"ui.chain": "سلسلة",
"ui.chamfer": "شطف",
"ui.chamfer_angle": "زاوية الشطف",
"ui.chamfer_depth": "عمق الشطف",
"ui.chamfer_type": "نوع الشطف",
"ui.change_workspace": "تغيير مساحة العمل",
"ui.circle": "دائرة",
@@ -4498,6 +4571,10 @@
"ui.colour_vision_sample": "عيّنة",
"ui.colour_vision_tritan": "ضعف الأزرق",
"ui.colour_vision_tritan_tip": "لضعف أو غياب الإحساس باللون الأزرق",
"ui.comb_length": "طول المشط",
"ui.comb_length_tip": "طول الأسنان: مضاعف للطول التلقائي الذي يجعل أطول سنّ خُمس حجم المنحنيات المعروضة.",
"ui.comb_teeth": "الأسنان",
"ui.comb_teeth_tip": "عدد أسنان كل مشط، موزّعة بالتساوي على طول المنحنى. كلما زادت الأسنان ظهرت تفاصيل أكثر عن تغيّر الانحناء.",
"ui.combine": "دمج",
"ui.coming_later": "قريبًا",
"ui.command_done": "تم {command}",
@@ -4522,11 +4599,24 @@
"ui.construction.ribbon_label": "خطوط مساعدة",
"ui.construction.side_hint": "خط إنشائي: انقر الجهة التي يمتد نحوها الخط؛ انقر بزر الفأرة الأيمن للبدء من جديد",
"ui.context_menu": "القائمة السياقية",
"ui.continuity_crease": "تجعّد",
"ui.continuity_curvature": "الانحناء",
"ui.continuity_curvature_change": "تغيّر الانحناء",
"ui.continuity_curvature_change_tip": "تغيّر الانحناء (G3): يتغير الانحناء أيضًا بسلاسة عبر خط الالتقاء.",
"ui.continuity_curvature_tip": "متصل الانحناء (G2): تمر الانعكاسات دون انكسار.",
"ui.continuity_g0": "G0 تجعّد",
"ui.continuity_g1": "G1 مماس",
"ui.continuity_g2": "G2 انحناء",
"ui.continuity_gap": "فجوة",
"ui.continuity_position": "الموضع",
"ui.continuity_position_tip": "الموضع (G0): تلتقي الأسطح، مع تجعّد عند التقائها.",
"ui.continuity_smooth_curvature_change": "تغيّر انحناء سلس",
"ui.continuity_smooth_curvature_change_tip": "تغيّر انحناء سلس (G4): حتى طريقة تغيّر الانحناء تستمر بسلاسة عبر خط الالتقاء.",
"ui.continuity_tangent": "مماس",
"ui.continuity_tangent_tip": "مماس (G1): لا تجعّد، لكن الانحناء يقفز عبر خط الالتقاء.",
"ui.copy": "نسخ",
"ui.copy_details": "نسخ التفاصيل",
"ui.copy_details_tip": "انسخ الرسالة كاملة للبحث عنها أو للإبلاغ عنها.",
"ui.corner": "زاوية",
"ui.corners": "الزوايا",
"ui.cosmetic_thread_markings": "علامات السن اللولبي الشكلية",
@@ -4644,8 +4734,10 @@
"ui.edit_sketch_empty": "لا توجد رسومات لتعديلها",
"ui.ellipse": "قطع ناقص",
"ui.emboss_wrap_note": "تلتف ملامح الخطوط المتعامدة المماسة لأسطوانة مدعومة تلقائيًا. اختر جدارًا لتحديد الهدف.",
"ui.end": "النهاية",
"ui.end_radius": "نصف قطر النهاية",
"ui.end_scale": "مقياس النهاية",
"ui.ends": "الطرفان",
"ui.entities": "العناصر",
"ui.equal": "متساوٍ",
"ui.equation_end": "النهاية",
@@ -4665,6 +4757,7 @@
"ui.export_ellipsis_keymap": "تصدير…",
"ui.export_keymap_tip": "المفاتيح ومفضلات مربع S وشريط الأدوات، كملف",
"ui.extend": "تمديد",
"ui.extent": "الامتداد",
"ui.extent_type": "نوع الامتداد",
"ui.extract_component": "استخراج إلى ملف…",
"ui.extract_design_changed": "تغيّر التصميم أثناء اختيار الملف. ابدأ الاستخراج إلى ملف من جديد.",
@@ -4673,11 +4766,39 @@
"ui.extrude_auto_to_object": "البثق إلى هدف مختار",
"ui.extrude_auto_to_object_tip": "في البثق، مع اختيار مقطع، يؤدي اختيار وجه أو رأس أو مستوى موازٍ خارج مستواه إلى تبديل الامتداد إلى «إلى كائن»",
"ui.factor": "المعامل",
"ui.fade": "تلاشٍ",
"ui.fade_length": "طول التلاشي",
"ui.feature_history": "سجل الميزات",
"ui.feature_options": "خيارات الميزة",
"ui.features": "الميزات",
"ui.file": "ملف",
"ui.fillet": "تقويس",
"ui.fillet_corner_ball": "كرة",
"ui.fillet_corner_ball_tip": "جزء من سطح الكرة المتدحرجة، مماسّ (G1) لكل تقويس.",
"ui.fillet_corner_curvature_tip": "الانحناء (G2): رقعة ناعمة. تُرجَع الزاوية على طول كل حافة بمقدار الإرجاع ({factor} ضعف نصف القطر ما لم تكتب قيمة) وتُملأ برقعة، فتمر الانعكاسات عبرها دون انكسار.",
"ui.fillet_corner_needs_constant": "زوايا الرقعة الناعمة (G2) تتطلب نصف قطر ثابتًا وملاءمة دقيقة لنصف القطر.",
"ui.fillet_corner_patch": "رقعة ناعمة",
"ui.fillet_corner_patch_tip": "متصل الانحناء (G2): تُرجَع الزاوية على طول كل حافة وتُملأ برقعة، فتمر الانعكاسات عبرها دون انكسار.",
"ui.fillet_corner_tangent_tip": "مماس (G1): زاوية بالكرة المتدحرجة، جزء من سطح الكرة المتدحرجة مماسّ لكل تقويس.",
"ui.fillet_error_corner": "تعذّر بناء الزاوية الناعمة هنا. جرّب مسافة إرجاع أخرى، أو زوايا مماسّة.",
"ui.fillet_error_failed": "تعذّر بناء هذا التقويس على هذه الحواف. جرّب نصف قطر آخر، أو قوّس حوافّ أقل في المرة الواحدة.",
"ui.fillet_error_setback_short": "مسافة الإرجاع قصيرة جدًا على رقعة هذه الزاوية: تُبنى ابتداءً من {least}. جرّب مسافة إرجاع أطول.",
"ui.fillet_error_too_large": "نصف القطر كبير جدًا على الوجوه المجاورة لهذه الحواف. جرّب نصف قطر أصغر، أو اختر في «حدود الوجوه» الخيار «أكبر نصف قطر».",
"ui.fillet_fit": "حدود الوجوه",
"ui.fillet_fit_exact": "نصف قطر دقيق",
"ui.fillet_fit_needs_constant": "ملاءمة نصف القطر تتطلب نصف قطر ثابتًا.",
"ui.fillet_fit_reduce": "أكبر نصف قطر",
"ui.fillet_fit_taper": "نصف قطر مُضيَّق",
"ui.fillet_fit_tip": "عندما يكون نصف القطر أكبر مما تسمح به الوجوه المجاورة للحافة.\nنصف قطر دقيق: نصف القطر كما هو، أو لا تقويس ورسالة توضّح السبب.\nأكبر نصف قطر: تُقوَّس كل حافة بأكبر نصف قطر يتّسع.\nنصف قطر مُضيَّق: يبقى نصف القطر، ويُضيَّق التقويس فقط حيث تنتهي الوجوه.",
"ui.fillet_options_tip": "سلسلة مماسّة: قوّس أيضًا الحواف التي تتصل بسلاسة بالحواف المختارة.\nمعاينة: اعرض النتيجة في العرض أثناء التحرير.",
"ui.fillet_setback": "مسافة الإرجاع",
"ui.fillet_setback_hint": "{factor} × نصف القطر",
"ui.fillet_setback_least": "أكثر من {least}",
"ui.fillet_setback_tip": "حيث تبدأ رقعة الزاوية الناعمة: المسافة على طول كل حافة من الزاوية. الافتراضي {factor} ضعف نصف القطر. يجب أن تكون أكبر من أقل مسافة إرجاع، حيث تلتقي الاستدارات بدونها: نصف القطر حيث تكون الأوجه متعامدة.",
"ui.fillet_smooth_radius": "تغيّر ناعم لنصف القطر",
"ui.fillet_type_choices_tip": "نصف قطر ثابت: نصف قطر واحد على طول الحافة.\nطول الوتر: يبقى عرض التقويس نفسه مهما كانت الزاوية بين الوجوه.\nنصف قطر متغيّر: نصف قطر عند كل طرف، ومزيد على طول الحافة إن أضفته.\nمتصل الانحناء: مقطع بلا انكسار في الانعكاسات حيث يلتقي بالوجوه المستوية (G2).\nمنحنى: يتبع نصف القطر على طول الحافة أنصاف أقطار تحكّم تحدّدها.",
"ui.fillet_type_curvature": "متصل الانحناء",
"ui.fillet_type_tip": "المقطع عبر الحافة. متصل الانحناء: مقطع متصل الانحناء (G2) بين وجوه مستوية، فتمر الانعكاسات من الوجوه إلى التقويس دون انكسار.",
"ui.filter_commands_or_keys": "تصفية الأوامر أو المفاتيح",
"ui.findInTimeline": "البحث في الخط الزمني",
"ui.findInWindow": "البحث في النافذة",
@@ -4827,6 +4948,7 @@
"ui.inspect": "فحص",
"ui.instances": "النسخ",
"ui.intersect": "تقاطع",
"ui.iso_4753": "ISO 4753",
"ui.isolate": "عزل",
"ui.join": "ضم",
"ui.joint_play": "▶ تشغيل",
@@ -4929,6 +5051,7 @@
"ui.part_size_needs_a_part": "حدد قطعة قياسية مُدرجة (برغي أو صامولة أو حلقة مسطحة أو مسمار) لتغيير مقاسها. لتكبير جسم أو تصغيره، استخدم «تحجيم».",
"ui.part_size_shared": "يعيد بناء القطعة مستبدلًا أي ميزات مضافة. تتحدث كل نسخ هذا المكوّن.",
"ui.paste": "لصق",
"ui.patch_continuity_corner_tip": "تلتقي الرقعة بالأوجه المحيطة بها بالاستمرارية المختارة على طول كل جانب. وعند زاوية تلتقي فيها تلك الأوجه بعضها ببعض بانحناءات مختلفة، تبقى مماسّة (G1) هناك.",
"ui.path": "المسار",
"ui.pattern_object_type_tip": "الأجسام: أشكال مصمتة تُختار في العرض أو في المستعرض؛ يُنسخ كل منها كاملًا.\nالميزات: خطوات في السجل، مثل بثق أو ثقب، تُختار في السجل أو على وجه صنعته؛ تتكرر الخطوة.\nالرسم ليس أيًّا منهما: كرّر منحنياته بأداة النمط أو المرآة داخل الرسم، أو ابثقه أولًا.",
"ui.pattern_on_path": "نمط على مسار",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+112
View File
@@ -496,6 +496,7 @@
"Render Stage": "Renderphase",
"Reopen designs": "Designs erneut öffnen",
"Reopen the designs that were open when SolidCraft was last closed": "Die zuletzt geöffneten Entwürfe erneut öffnen",
"Repair Part": "Teil reparieren",
"Replace existing library file": "Vorhandene Bibliotheksdatei ersetzen",
"Report a bug — review a screenshot and open a GitHub draft": "Fehler melden — Screenshot prüfen und einen GitHub-Entwurf öffnen",
"Report copied. Keep this text to submit on GitHub when you are online.": "Bericht kopiert. Bewahren Sie diesen Text auf, um ihn auf GitHub einzureichen, sobald Sie online sind.",
@@ -790,6 +791,7 @@
"browser.edit_canvas_title": "Leinwand bearbeiten: {name}",
"browser.edit_point_cloud_title": "Punktwolke bearbeiten: {name}",
"browser.move_title": "Verschieben: {name}",
"browser.needs_repair": "{name}: muss repariert werden",
"browser.parameters": "Parameter ({count})",
"browser.precision": "Genauigkeit: {precision}",
"browser.sketch_attachment_lost": "{name} (Bezug verloren)",
@@ -834,6 +836,7 @@
"cmd.assembly_mass_properties": "Masseeigenschaften",
"cmd.body.print_face": "Auflagefläche",
"cmd.body_rename": "Körper umbenennen",
"cmd.body_repair": "Teil reparieren",
"cmd.browser_collapse_all": "Alles einklappen",
"cmd.browser_expand_all": "Alles ausklappen",
"cmd.browser_group": "Neue Gruppe",
@@ -916,6 +919,8 @@
"cmd.diagnostics_crash_reports": "Absturzberichte",
"cmd.diagnostics_crash_reports_clear": "Absturzberichte löschen",
"cmd.diagnostics_crash_test": "Absturztest",
"cmd.diagnostics_profile": "Profil",
"cmd.diagnostics_validation": "Prüfung",
"cmd.doc_recover": "Konstruktion wiederherstellen",
"cmd.doc_recovery_discard": "Wiederhergestellte Konstruktion verwerfen",
"cmd.doc_recovery_list": "Wiederherstellbare Konstruktionen",
@@ -1356,6 +1361,7 @@
"crash.unclean_explanation": "Beim späteren Start erkannt; der genaue Zeitpunkt des Beendens wurde nicht aufgezeichnet. Auch ein Herunterfahren des Systems oder ein erzwungener Stopp kann ein unsauberes Beenden verursachen.",
"delete.and_more": "… und {count} weitere",
"diagnostic.empty_boolean_component": "In Komponente '{component}' gibt es keinen Körper zum Abziehen oder für eine Schnittmenge; das Werkzeug überschneidet sich eventuell mit '{body}' in Komponente '{other}' – aktivieren Sie diese Komponente oder wählen Sie den Körper als Ziel",
"diagnostic.reselect_reference": "{feature}: Die Referenz `{reference}` existiert nicht mehr so, wie sie ausgewählt wurde; wählen Sie sie erneut aus",
"dialog.bodies_count": "{count} Körper",
"dialog.clearance_invalid": "der Abstand muss eine Länge von 0 oder mehr sein",
"dialog.compute": "Berechnen",
@@ -1421,6 +1427,14 @@
"file_load.reading_percent": "Datei wird gelesen... {percent} %",
"file_load.rebuilding": "Merkmal {done} von {total} wird neu aufgebaut",
"file_load.recovering": "Design wird wiederhergestellt",
"file_load.step_build": "Modell wird aufgebaut",
"file_load.step_feature": "Merkmal {done} von {total}",
"file_load.step_part": "Teil {done} von {total}",
"file_load.step_percent": "{percent} %",
"file_load.step_read": "Datei wird gelesen",
"file_load.step_rebuild": "Merkmale werden neu aufgebaut",
"file_load.step_repair": "Teile werden geprüft und repariert",
"file_load.step_show": "Ansicht wird vorbereitet",
"file_load.stopping": "Warten, bis der vorherige Vorgang beendet ist...",
"file_load.updating_links": "Verknüpfungen werden aktualisiert",
"file_load.waiting": "Warten auf Dateivorgang",
@@ -1802,6 +1816,27 @@
"home.start_hint": "Erstellen Sie einen Entwurf, öffnen Sie eine zuletzt verwendete Datei oder erkunden Sie ein Beispiel.",
"home.whats_new": "Neuigkeiten",
"home.yesterday": "Gestern",
"import_report.details": "Details:",
"import_report.file_one": "Die Datei hatte 1 weiteres Problem.",
"import_report.file_other": "Die Datei hatte {count} weitere Probleme.",
"import_report.hint": "Die Teile erneut aus dem Programm zu exportieren, mit dem sie erstellt wurden, kann das beheben. „Warnmeldung kopieren“ enthält die Details.",
"import_report.left_out_one": "1 Fläche konnte nicht repariert werden und fehlt.",
"import_report.left_out_other": "{count} Flächen konnten nicht repariert werden und fehlen.",
"import_report.needs_repair_one": "1 Teil muss repariert werden, bevor daran modelliert werden kann.",
"import_report.needs_repair_other": "{count} Teile müssen repariert werden, bevor daran modelliert werden kann.",
"import_report.not_imported_one": "1 Teil konnte nicht importiert werden.",
"import_report.not_imported_other": "{count} Teile konnten nicht importiert werden.",
"import_report.not_shown_one": "1 Fläche konnte nicht gezeichnet werden und ist ausgeblendet.",
"import_report.not_shown_other": "{count} Flächen konnten nicht gezeichnet werden und sind ausgeblendet.",
"import_report.open_one": "1 Teil hat Lücken zwischen seinen Flächen und kam als offener Körper herein.",
"import_report.open_other": "{count} Teile haben Lücken zwischen ihren Flächen und kamen als offene Körper herein.",
"import_report.refused_one": "1 Teil konnte nicht zu einem Volumenkörper werden und wurde nicht importiert.",
"import_report.refused_other": "{count} Teile konnten nicht zu Volumenkörpern werden und wurden nicht importiert.",
"import_report.repaired_one": "Kleine Fehler wurden an 1 Teil repariert.",
"import_report.repaired_other": "Kleine Fehler wurden an {count} Teilen repariert.",
"import_report.solids": "{solids} von {parts} Teilen als Volumenkörper importiert.",
"import_report.surfaces_one": "1 Teil konnte nicht zu einem Volumenkörper werden und kam als Flächen herein.",
"import_report.surfaces_other": "{count} Teile konnten nicht zu Volumenkörpern werden und kamen als Flächen herein.",
"install.button_tip": "SolidCraft als App installieren: eigenes Fenster, funktioniert auch offline",
"install.dock_1": "Wählen Sie Ablage › Zum Dock hinzufügen.",
"install.dock_2": "Klicken Sie auf „Hinzufügen“.",
@@ -2334,6 +2369,8 @@
"prefs.profile_exported": "Profil exportiert.",
"prefs.profile_imported": "Profil importiert.",
"prefs.profile_name_hint": "Profilname, z. B. Laptop",
"prefs.profile_operations": "Vorgänge profilieren",
"prefs.profile_operations_note": "Zeichnet auf, wie lange SMLib-Aufrufe, Kernel-Vorgänge, Features, Befehle und Importe dauern. Agenten lesen es mit diagnostics.profile.",
"prefs.profile_rename": "Umbenennen",
"prefs.profile_renamed": "Profil umbenannt.",
"prefs.profile_save": "Speichern",
@@ -2477,6 +2514,12 @@
"prefs.under_cursor": "Unter dem Cursor",
"prefs.units_precision": "Einheiten und Genauigkeit",
"prefs.updates": "Updates",
"prefs.validation": "Körperprüfung",
"prefs.validation.each_feature": "Einmal je Feature",
"prefs.validation.each_step": "Nach jedem Schritt",
"prefs.validation.label": "Vollständige Kernel-Prüfung",
"prefs.validation.off": "Aus (experimentell)",
"prefs.validation_note": "Nach jedem Schritt: prüft jeden Sweep, jede Boolesche Operation und jede Rundung.\nEinmal je Feature: prüft das Ergebnis jedes Features einmal.\nAus (experimentell): keine Prüfung.",
"prefs.value_boxes_in_view": "Werte in der Ansicht neben ihren Griffen zeigen",
"prefs.value_boxes_in_view_tip": "Der Wert eines Befehls (Abstand, Radius …) in einem Feld neben seinem Griff, über dem Modell. Aus: Sie geben ihn im Befehlsfenster ein, das nach einer Auswahl die Tastatur erhält, und nichts verdeckt das Modell.",
"prefs.view": "Ansichtsverhalten",
@@ -2511,6 +2554,17 @@
"recovery.just_now": "gerade eben",
"recovery.min_ago": "vor {count} Min.",
"recovery.never_saved": "nie gespeichert",
"refused.change": "{body} konnte nicht geändert werden.",
"refused.cut": "{body} konnte nicht geschnitten werden.",
"refused.face_curved": "Eine seiner gekrümmten Flächen kann nicht zum Modellieren verwendet werden.",
"refused.face_flat": "Eine seiner ebenen Flächen kann nicht zum Modellieren verwendet werden.",
"refused.face_freeform": "Eine seiner Freiformflächen kann nicht zum Modellieren verwendet werden.",
"refused.face_rounded": "Eine seiner gerundeten Flächen kann nicht zum Modellieren verwendet werden.",
"refused.faces_apart": "Seine Flächen treffen nicht genau genug aufeinander, um damit zu modellieren.",
"refused.intersect": "Schnittmenge mit {body} nicht möglich.",
"refused.join": "Konnte nicht mit {body} vereinigt werden.",
"refused.repair": "Teil reparieren",
"refused.show_face": "Fläche zeigen",
"render.adaptive_absolute": "Absolute RGB-Fehleruntergrenze",
"render.adaptive_coverage": "Zielwert für den Abdeckungsfehler",
"render.adaptive_enable": "Samples mithilfe unabhängiger Pilot-Samples zuteilen",
@@ -3978,7 +4032,18 @@
"the section's profiles must be in one sketch": "die Profile des Querschnitts müssen in einer Skizze liegen",
"the two origins are on the same component": "die beiden Ursprünge liegen auf derselben Komponente",
"thread.automatic_size": "Automatische Größe",
"thread.chamfer_depth_needed": "für diese Form erforderlich",
"thread.designation": "Bezeichnung",
"thread.drill_range": "Der Bohrer des Gewindebohrerherstellers ist {drill} mm. Der genormte Kerndurchmesser des Innengewindes ist {minor} mm. Ein Bohrer von {low} bis {high} mm wird angenommen.",
"thread.drill_range_custom": "Der Bohrer ist der Nenndurchmesser minus Steigung, {drill} mm. Der genormte Kerndurchmesser des Innengewindes ist {minor} mm. Ein Bohrer von {low} bis {high} mm wird angenommen.",
"thread.drill_range_taper": "Der Bohrer des Gewindebohrerherstellers ist {drill} mm. Der genormte Kerndurchmesser am Gewindeende ist {minor} mm. Ein Bohrer von {low} bis {high} mm wird angenommen.",
"thread.end_square": "Rechtwinklig",
"thread.fade_short": "1,25 P (ISO 3508)",
"thread.fade_standard": "2,5 P (ISO 3508)",
"thread.form_bspp": "Rohrgewinde G (ISO 228-1)",
"thread.form_bspt": "Kegeliges Rohrgewinde R, Rc (ISO 7-1)",
"thread.form_npt": "Kegeliges Rohrgewinde NPT (ASME B1.20.1)",
"thread.form_rp": "Zylindrisches Innenrohrgewinde Rp (ISO 7-1)",
"thread.iso_metric": "ISO metrisch",
"thread.select_size": "Größe wählen",
"timeline.delete_after_marker_one": "1 Merkmal nach der Verlaufsmarkierung löschen",
@@ -4481,6 +4546,10 @@
"ui.colour_vision_sample": "Beispiel",
"ui.colour_vision_tritan": "Tritan",
"ui.colour_vision_tritan_tip": "Bei schwachem oder fehlendem Blausinn",
"ui.comb_length": "Kammlänge",
"ui.comb_length_tip": "Wie lang die Zähne sind: ein Vielfaches der automatischen Länge, bei der der längste Zahn ein Fünftel der Größe der gezeigten Kurven ist.",
"ui.comb_teeth": "Zähne",
"ui.comb_teeth_tip": "Wie viele Zähne jeder Kamm hat, gleichmäßig entlang der Kurve verteilt. Mehr Zähne zeigen genauer, wie sich die Krümmung ändert.",
"ui.combine": "Kombinieren",
"ui.coming_later": "bald verfügbar",
"ui.command_done": "{command} fertig",
@@ -4505,11 +4574,24 @@
"ui.construction.ribbon_label": "Hilfslinien",
"ui.construction.side_hint": "Konstruktionslinie: die Seite anklicken, zu der die Linie läuft; Rechtsklick beginnt neu",
"ui.context_menu": "Kontextmenü",
"ui.continuity_crease": "Knick",
"ui.continuity_curvature": "Krümmung",
"ui.continuity_curvature_change": "Krümmungsänderung",
"ui.continuity_curvature_change_tip": "Krümmungsänderung (G3): Auch die Krümmung ändert sich an der Naht glatt.",
"ui.continuity_curvature_tip": "Krümmungsstetig (G2): Spiegelungen laufen ohne Knick hindurch.",
"ui.continuity_g0": "G0 Knick",
"ui.continuity_g1": "G1 Tangente",
"ui.continuity_g2": "G2 Krümmung",
"ui.continuity_gap": "Lücke",
"ui.continuity_position": "Position",
"ui.continuity_position_tip": "Position (G0): Die Flächen treffen sich, mit einem Knick an der Naht.",
"ui.continuity_smooth_curvature_change": "Glatte Krümmungsänderung",
"ui.continuity_smooth_curvature_change_tip": "Glatte Krümmungsänderung (G4): Selbst die Art, wie sich die Krümmung ändert, läuft an der Naht glatt weiter.",
"ui.continuity_tangent": "Tangential",
"ui.continuity_tangent_tip": "Tangential (G1): kein Knick, aber die Krümmung springt an der Naht.",
"ui.copy": "Kopieren",
"ui.copy_details": "Details kopieren",
"ui.copy_details_tip": "Die vollständige Meldung kopieren, um sie nachzuschlagen oder zu melden.",
"ui.corner": "Ecke",
"ui.corners": "Ecken",
"ui.cosmetic_thread_markings": "Kosmetische Gewindemarkierungen",
@@ -4627,6 +4709,7 @@
"ui.edit_sketch_empty": "Keine Skizzen zum Bearbeiten",
"ui.ellipse": "Ellipse",
"ui.emboss_wrap_note": "Senkrechte Linienprofile, die einen unterstützten Zylinder berühren, werden automatisch aufgewickelt. Eine Wand auswählen, um ein Ziel festzulegen.",
"ui.end": "Ende",
"ui.end_radius": "Endradius",
"ui.end_scale": "Endskalierung",
"ui.entities": "Elemente",
@@ -4656,11 +4739,39 @@
"ui.extrude_auto_to_object": "Bis zu einem gewählten Ziel extrudieren",
"ui.extrude_auto_to_object_tip": "Wenn in „Extrudieren“ ein Profil gewählt ist, schaltet das Wählen einer Fläche, eines Eckpunkts oder einer parallelen Ebene außerhalb der Profilebene die Ausdehnung auf „Bis Objekt“ um",
"ui.factor": "Faktor",
"ui.fade": "Auslauf",
"ui.fade_length": "Auslauflänge",
"ui.feature_history": "Feature-Verlauf",
"ui.feature_options": "Funktionsoptionen",
"ui.features": "Funktionen",
"ui.file": "Datei",
"ui.fillet": "Vollrundung",
"ui.fillet_corner_ball": "Kugel",
"ui.fillet_corner_ball_tip": "Ein Stück der Kugel des rollenden Balls, tangential (G1) zu jeder Rundung.",
"ui.fillet_corner_curvature_tip": "Krümmung (G2): ein glattes Flächenstück. Die Ecke wird entlang jeder Kante um den Rücksprung zurückgesetzt ({factor} × der Radius, sofern Sie keinen eingeben) und mit einem Flächenstück gefüllt, sodass Spiegelungen ohne Knick hindurchlaufen.",
"ui.fillet_corner_needs_constant": "Ecken mit glattem Flächenstück (G2) brauchen einen konstanten Radius und exakte Radiusanpassung.",
"ui.fillet_corner_patch": "Glattes Flächenstück",
"ui.fillet_corner_patch_tip": "Krümmungsstetig (G2): Die Ecke wird entlang jeder Kante zurückgesetzt und mit einem Flächenstück gefüllt, sodass Spiegelungen ohne Knick hindurchlaufen.",
"ui.fillet_corner_tangent_tip": "Tangential (G1): eine Kugelecke, ein Stück der Kugel des rollenden Balls, tangential zu jeder Rundung.",
"ui.fillet_error_corner": "Die glatte Ecke ließ sich hier nicht bauen. Versuchen Sie einen anderen Rücksprung oder tangentiale Ecken.",
"ui.fillet_error_failed": "Diese Rundung ließ sich an diesen Kanten nicht bauen. Versuchen Sie einen anderen Radius oder runden Sie weniger Kanten auf einmal.",
"ui.fillet_error_setback_short": "Der Rücksprung ist für das Eckstück zu kurz: Es lässt sich ab {least} bauen. Versuchen Sie einen längeren Rücksprung.",
"ui.fillet_error_too_large": "Der Radius ist zu groß für die Flächen neben diesen Kanten. Versuchen Sie einen kleineren Radius oder stellen Sie „Flächengrenzen“ auf „Größter Radius“.",
"ui.fillet_fit": "Flächengrenzen",
"ui.fillet_fit_exact": "Exakter Radius",
"ui.fillet_fit_needs_constant": "Radiusanpassung braucht einen konstanten Radius.",
"ui.fillet_fit_reduce": "Größter Radius",
"ui.fillet_fit_taper": "Verjüngter Radius",
"ui.fillet_fit_tip": "Wenn der Radius größer ist, als die Flächen neben einer Kante zulassen.\nExakter Radius: der angegebene Radius, oder keine Rundung und eine Meldung mit dem Grund.\nGrößter Radius: jede Kante mit dem größten passenden Radius gerundet.\nVerjüngter Radius: der Radius bleibt, die Rundung wird nur dort verjüngt, wo die Flächen enden.",
"ui.fillet_options_tip": "Tangentenkette: auch die Kanten runden, die glatt an die gewählten anschließen.\nVorschau: das Ergebnis beim Bearbeiten in der Ansicht zeigen.",
"ui.fillet_setback": "Rücksprung",
"ui.fillet_setback_hint": "{factor} × Radius",
"ui.fillet_setback_least": "Mehr als {least}",
"ui.fillet_setback_tip": "Wo das glatte Eckflächenstück beginnt: wie weit von der Ecke entlang jeder Kante. Standard ist {factor} × der Radius. Er muss größer sein als der kleinste Rücksprung, wo sich die Rundungen ohne ihn treffen: der Radius, wo die Flächen rechtwinklig zueinander stehen.",
"ui.fillet_smooth_radius": "Radius glatt ändern",
"ui.fillet_type_choices_tip": "Konstanter Radius: ein Radius entlang der ganzen Kante.\nSehnenlänge: die Breite der Rundung bleibt gleich, in welchem Winkel die Flächen auch aufeinandertreffen.\nVariabler Radius: ein Radius an jedem Ende und weitere entlang der Kante, wenn Sie sie hinzufügen.\nKrümmungsstetig: ein Querschnitt ohne Knick in den Spiegelungen, wo er auf ebene Flächen trifft (G2).\nSpline: der Radius entlang der Kante folgt Steuerradien, die Sie festlegen.",
"ui.fillet_type_curvature": "Krümmungsstetig",
"ui.fillet_type_tip": "Der Querschnitt über die Kante. Krümmungsstetig: ein krümmungsstetiger Querschnitt (G2) zwischen ebenen Flächen, sodass Spiegelungen ohne Knick von den Flächen in die Rundung laufen.",
"ui.filter_commands_or_keys": "Befehle oder Tasten filtern",
"ui.findInTimeline": "In der Zeitleiste suchen",
"ui.findInWindow": "Im Fenster suchen",
@@ -4909,6 +5020,7 @@
"ui.part_size_needs_a_part": "Wählen Sie ein eingefügtes Standardbauteil (Schraube, Mutter, Scheibe oder Stift) aus, um seine Größe zu ändern. Einen Körper vergrößern oder verkleinern Sie mit Skalieren.",
"ui.part_size_shared": "Baut das Teil neu auf und ersetzt alle hinzugefügten Merkmale. Alle Vorkommen dieser Komponente werden aktualisiert.",
"ui.paste": "Einfügen",
"ui.patch_continuity_corner_tip": "Der Patch schließt entlang jeder Seite mit der gewählten Stetigkeit an die umgebenden Flächen an. An einer Ecke, an der diese Flächen mit unterschiedlicher Krümmung aufeinandertreffen, bleibt er dort tangential (G1).",
"ui.path": "Pfad",
"ui.pattern_object_type_tip": "Körper: feste Formen, in der Ansicht oder im Browser gewählt; jeder wird ganz kopiert.\nFunktionen: Schritte im Verlauf, etwa eine Extrusion oder eine Bohrung, im Verlauf oder auf einer von ihnen erzeugten Fläche gewählt; der Schritt wird wiederholt.\nEine Skizze ist keines von beiden: Ihre Kurven mit Muster oder Spiegeln in der Skizze wiederholen oder sie zuerst extrudieren.",
"ui.pattern_on_path": "Pfadmuster",
+123
View File
@@ -496,6 +496,7 @@
"Render Stage": "Render Stage",
"Reopen designs": "Reopen designs",
"Reopen the designs that were open when SolidCraft was last closed": "Reopen the designs that were open last time",
"Repair Part": "Repair Part",
"Replace existing library file": "Replace existing library file",
"Report a bug — review a screenshot and open a GitHub draft": "Report a bug — review a screenshot and open a GitHub draft",
"Report copied. Keep this text to submit on GitHub when you are online.": "Report copied. Keep this text to submit on GitHub when you are online.",
@@ -790,6 +791,7 @@
"browser.edit_canvas_title": "Edit Canvas: {name}",
"browser.edit_point_cloud_title": "Edit Point Cloud: {name}",
"browser.move_title": "Move: {name}",
"browser.needs_repair": "{name}: needs repair",
"browser.parameters": "Parameters ({count})",
"browser.precision": "Precision: {precision}",
"browser.sketch_attachment_lost": "{name} (attachment lost)",
@@ -834,6 +836,7 @@
"cmd.assembly_mass_properties": "Mass Properties",
"cmd.body.print_face": "Print Face",
"cmd.body_rename": "Rename Body",
"cmd.body_repair": "Repair Part",
"cmd.browser_collapse_all": "Collapse All",
"cmd.browser_expand_all": "Expand All",
"cmd.browser_group": "New Group",
@@ -918,6 +921,8 @@
"cmd.diagnostics_crash_reports": "Crash Reports",
"cmd.diagnostics_crash_reports_clear": "Delete Crash Reports",
"cmd.diagnostics_crash_test": "Crash Test",
"cmd.diagnostics_profile": "Profile",
"cmd.diagnostics_validation": "Validation",
"cmd.doc_recover": "Recover Design",
"cmd.doc_recovery_discard": "Discard Recovered Design",
"cmd.doc_recovery_list": "Recoverable Designs",
@@ -955,6 +960,7 @@
"cmd.frame_profile_list": "Profile Library",
"cmd.frame_profile_properties": "Profile Properties",
"cmd.inspect_accessibility": "Accessibility Analysis",
"cmd.inspect_analysis": "View Analysis",
"cmd.inspect_center_of_mass": "Center of Mass",
"cmd.inspect_clearance": "Clearance",
"cmd.inspect_colored_components": "Enable Component Colors",
@@ -1360,6 +1366,7 @@
"crash.unclean_explanation": "Detected on a later launch; the exact exit time was not recorded. A system shutdown or forced stop can also cause an unclean exit.",
"delete.and_more": "… and {count} more",
"diagnostic.empty_boolean_component": "there is no body to cut or intersect in component '{component}'; the tool may overlap '{body}' in component '{other}' — activate that component or pick the body as a target",
"diagnostic.reselect_reference": "{feature}: the reference `{reference}` no longer exists as it was picked; reselect it",
"dialog.bodies_count": "{count} bodies",
"dialog.clearance_invalid": "the clearance must be a length of 0 or more",
"dialog.compute": "Compute",
@@ -1425,6 +1432,14 @@
"file_load.reading_percent": "Reading the file... {percent}%",
"file_load.rebuilding": "Rebuilding feature {done} of {total}",
"file_load.recovering": "Recovering design",
"file_load.step_build": "Building the model",
"file_load.step_feature": "Feature {done} of {total}",
"file_load.step_part": "Part {done} of {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "Reading the file",
"file_load.step_rebuild": "Rebuilding the features",
"file_load.step_repair": "Checking and repairing the parts",
"file_load.step_show": "Preparing the view",
"file_load.stopping": "Waiting for the previous operation to stop...",
"file_load.updating_links": "Updating links",
"file_load.waiting": "Waiting for file operation",
@@ -1719,6 +1734,7 @@
"help.timeline.delete": "Deletes the selected features from the timeline; deleting a sketch also deletes the features built from it. Use it to remove a step that is no longer wanted.",
"help.timeline.dependents": "Lists the features that would be deleted with a feature, and those that would fail without it. Use it before deleting or changing a feature.",
"help.timeline.play": "Replay the remaining features one at a time, with a half-second pause after each rebuild. Run this command again or press Escape to stop; Go to end jumps immediately.",
"help.version": "Version {version}",
"help.view.apply": "Turns the view to a standard direction such as front, top or iso, or to a saved named view. Use it to look at the model from a fixed angle.",
"help.view.delete": "Deletes a saved named view. The model is not changed.",
"help.view.fit": "Zooms and pans so the whole model, or the selection, fills the view. Use it when the model has gone out of sight.",
@@ -1806,6 +1822,27 @@
"home.start_hint": "Create a design, open a recent file, or explore a sample.",
"home.whats_new": "What's new",
"home.yesterday": "Yesterday",
"import_report.details": "Details:",
"import_report.file_one": "There was 1 other problem with the file.",
"import_report.file_other": "There were {count} other problems with the file.",
"import_report.hint": "Exporting these parts again from the program that made them may fix this. Copy Warning Message has the details.",
"import_report.left_out_one": "1 face couldn't be repaired and is missing.",
"import_report.left_out_other": "{count} faces couldn't be repaired and are missing.",
"import_report.needs_repair_one": "1 part needs repair before it can be modelled on.",
"import_report.needs_repair_other": "{count} parts need repair before they can be modelled on.",
"import_report.not_imported_one": "1 part couldn't be imported.",
"import_report.not_imported_other": "{count} parts couldn't be imported.",
"import_report.not_shown_one": "1 face couldn't be drawn and is hidden.",
"import_report.not_shown_other": "{count} faces couldn't be drawn and are hidden.",
"import_report.open_one": "1 part has gaps between its faces and came in as an open body.",
"import_report.open_other": "{count} parts have gaps between their faces and came in as open bodies.",
"import_report.refused_one": "1 part couldn't be made into a solid and was not imported.",
"import_report.refused_other": "{count} parts couldn't be made into solids and were not imported.",
"import_report.repaired_one": "Small flaws were repaired in 1 part.",
"import_report.repaired_other": "Small flaws were repaired in {count} parts.",
"import_report.solids": "Imported {solids} of {parts} parts as solids.",
"import_report.surfaces_one": "1 part couldn't be made into a solid and came in as surfaces.",
"import_report.surfaces_other": "{count} parts couldn't be made into solids and came in as surfaces.",
"install.button_tip": "Install SolidCraft as an app: it opens in its own window and works offline",
"install.dock_1": "Choose File › Add to Dock.",
"install.dock_2": "Click Add.",
@@ -2351,6 +2388,8 @@
"prefs.profile_exported": "Profile exported.",
"prefs.profile_imported": "Profile imported.",
"prefs.profile_name_hint": "Profile name, e.g. Laptop",
"prefs.profile_operations": "Profile operations",
"prefs.profile_operations_note": "Records how long SMLib calls, kernel operations, features, commands and imports take. Agents read it with diagnostics.profile.",
"prefs.profile_rename": "Rename",
"prefs.profile_renamed": "Profile renamed.",
"prefs.profile_save": "Save",
@@ -2380,6 +2419,9 @@
"prefs.scale_text": "Scale and text",
"prefs.search": "Search preferences",
"prefs.search_empty": "No matching preferences",
"prefs.section_hatch": "Section hatch",
"prefs.section_hatch_by_part": "By part",
"prefs.section_hatch_one": "One style",
"prefs.select": "Select",
"prefs.select_one_item": "Select one item",
"prefs.select_other_hidden": "Select hidden geometry with Select Other",
@@ -2494,6 +2536,12 @@
"prefs.under_cursor": "Under cursor",
"prefs.units_precision": "Units and precision",
"prefs.updates": "Updates",
"prefs.validation": "Body check",
"prefs.validation.each_feature": "Once per feature",
"prefs.validation.each_step": "After every step",
"prefs.validation.label": "Full kernel check",
"prefs.validation.off": "Off (experimental)",
"prefs.validation_note": "After every step: checks each sweep, boolean and blend.\nOnce per feature: checks each feature's result once.\nOff (experimental): no check.",
"prefs.value_boxes_in_view": "Show values beside their handles in the view",
"prefs.value_boxes_in_view_tip": "A command's value (Distance, Radius…) in a box next to its handle, over the model. Off: you type it in the command window, which takes the keyboard after a pick, and nothing covers the model.",
"prefs.view": "View behavior",
@@ -2528,6 +2576,17 @@
"recovery.just_now": "just now",
"recovery.min_ago": "{count} min ago",
"recovery.never_saved": "never saved",
"refused.change": "Couldn't change {body}.",
"refused.cut": "Couldn't cut {body}.",
"refused.face_curved": "One of its curved faces can't be used for modelling.",
"refused.face_flat": "One of its flat faces can't be used for modelling.",
"refused.face_freeform": "One of its freeform faces can't be used for modelling.",
"refused.face_rounded": "One of its rounded faces can't be used for modelling.",
"refused.faces_apart": "Its faces don't meet closely enough to be used for modelling.",
"refused.intersect": "Couldn't intersect with {body}.",
"refused.join": "Couldn't join to {body}.",
"refused.repair": "Repair part",
"refused.show_face": "Show face",
"render.adaptive_absolute": "Absolute RGB error floor",
"render.adaptive_coverage": "Coverage error target",
"render.adaptive_enable": "Allocate samples with independent pilots",
@@ -3995,7 +4054,19 @@
"the section's profiles must be in one sketch": "the section's profiles must be in one sketch",
"the two origins are on the same component": "the two origins are on the same component",
"thread.automatic_size": "Automatic size",
"thread.chamfer_depth_needed": "required for this form",
"thread.designation": "Designation",
"thread.drill_range": "The tap maker's drill is {drill} mm. The internal thread's standard minor diameter is {minor} mm. A drill from {low} to {high} mm is accepted.",
"thread.drill_range_custom": "The drill is the major diameter less the pitch, {drill} mm. The internal thread's standard minor diameter is {minor} mm. A drill from {low} to {high} mm is accepted.",
"thread.drill_range_taper": "The tap maker's drill is {drill} mm. The standard's minor diameter where the thread ends is {minor} mm. A drill from {low} to {high} mm is accepted.",
"thread.end_square": "Square",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"thread.fits_the_face": "fits the face, e.g. {example}",
"thread.form_bspp": "Pipe G (ISO 228-1)",
"thread.form_bspt": "Pipe taper R, Rc (ISO 7-1)",
"thread.form_npt": "Pipe taper NPT (ASME B1.20.1)",
"thread.form_rp": "Pipe Rp (ISO 7-1)",
"thread.iso_metric": "ISO metric",
"thread.select_size": "Select size",
"timeline.delete_after_marker_one": "Delete 1 Feature After History Marker",
@@ -4468,6 +4539,8 @@
"ui.centerline": "Centerline",
"ui.chain": "Chain",
"ui.chamfer": "Chamfer",
"ui.chamfer_angle": "Chamfer Angle",
"ui.chamfer_depth": "Chamfer Depth",
"ui.chamfer_type": "Chamfer Type",
"ui.change_workspace": "Change workspace",
"ui.circle": "Circle",
@@ -4498,6 +4571,10 @@
"ui.colour_vision_sample": "Sample",
"ui.colour_vision_tritan": "Tritan",
"ui.colour_vision_tritan_tip": "For a weak or missing blue sense",
"ui.comb_length": "Comb length",
"ui.comb_length_tip": "How long the teeth are: a multiple of the automatic length, which makes the longest tooth a fifth of the size of the curves shown.",
"ui.comb_teeth": "Teeth",
"ui.comb_teeth_tip": "How many teeth each comb has, evenly spaced along the curve. More teeth show more detail of how the curvature changes.",
"ui.combine": "Combine",
"ui.coming_later": "coming later",
"ui.command_done": "{command} done",
@@ -4522,11 +4599,24 @@
"ui.construction.ribbon_label": "X-Lines",
"ui.construction.side_hint": "Construction line: click the side the line runs towards; right-click to restart",
"ui.context_menu": "Context menu",
"ui.continuity_crease": "Crease",
"ui.continuity_curvature": "Curvature",
"ui.continuity_curvature_change": "Curvature change",
"ui.continuity_curvature_change_tip": "Curvature change (G3): the curvature also changes smoothly across the seam.",
"ui.continuity_curvature_tip": "Curvature-continuous (G2): reflections run through without a kink.",
"ui.continuity_g0": "G0 crease",
"ui.continuity_g1": "G1 tangent",
"ui.continuity_g2": "G2 curvature",
"ui.continuity_gap": "Gap",
"ui.continuity_position": "Position",
"ui.continuity_position_tip": "Position (G0): the surfaces meet, with a crease where they do.",
"ui.continuity_smooth_curvature_change": "Smooth curvature change",
"ui.continuity_smooth_curvature_change_tip": "Smooth curvature change (G4): even the way the curvature changes runs on smoothly across the seam.",
"ui.continuity_tangent": "Tangent",
"ui.continuity_tangent_tip": "Tangent (G1): no crease, though the curvature jumps across the seam.",
"ui.copy": "Copy",
"ui.copy_details": "Copy Details",
"ui.copy_details_tip": "Copy the full message, to look it up or to report it.",
"ui.corner": "Corner",
"ui.corners": "Corners",
"ui.cosmetic_thread_markings": "Cosmetic thread markings",
@@ -4644,8 +4734,10 @@
"ui.edit_sketch_empty": "No sketches to edit",
"ui.ellipse": "Ellipse",
"ui.emboss_wrap_note": "Orthogonal line profiles tangent to one supported cylinder wrap automatically. Pick a wall to choose a target.",
"ui.end": "End",
"ui.end_radius": "End Radius",
"ui.end_scale": "End Scale",
"ui.ends": "Ends",
"ui.entities": "Entities",
"ui.equal": "Equal",
"ui.equation_end": "End",
@@ -4665,6 +4757,7 @@
"ui.export_ellipsis_keymap": "Export…",
"ui.export_keymap_tip": "Keys, S box favorites and the toolbar, as a file",
"ui.extend": "Extend",
"ui.extent": "Extent",
"ui.extent_type": "Extent Type",
"ui.extract_component": "Extract to File…",
"ui.extract_design_changed": "The design changed while choosing a file. Start Extract to File again.",
@@ -4673,11 +4766,39 @@
"ui.extrude_auto_to_object": "Extrude to a picked target",
"ui.extrude_auto_to_object_tip": "In Extrude, with a profile picked, picking a face, vertex or parallel plane off its plane switches the extent to To Object",
"ui.factor": "Factor",
"ui.fade": "Fade",
"ui.fade_length": "Fade Length",
"ui.feature_history": "Feature history",
"ui.feature_options": "Feature Options",
"ui.features": "Features",
"ui.file": "File",
"ui.fillet": "Fillet",
"ui.fillet_corner_ball": "Ball",
"ui.fillet_corner_ball_tip": "A piece of the rolling ball's sphere, tangent (G1) to each round.",
"ui.fillet_corner_curvature_tip": "Curvature (G2): a smooth patch. The corner is set back along each edge by the Setback ({factor} × the radius unless you type one) and filled with a patch, so reflections run through it without a kink.",
"ui.fillet_corner_needs_constant": "Smooth patch corners (G2) need Constant radius and Exact fit.",
"ui.fillet_corner_patch": "Smooth patch",
"ui.fillet_corner_patch_tip": "Curvature-continuous (G2): the corner is set back along each edge and filled with a patch, so reflections run through it without a kink.",
"ui.fillet_corner_tangent_tip": "Tangent (G1): a rolling-ball corner, a piece of the rolling ball's sphere tangent to each round.",
"ui.fillet_error_corner": "The smooth corner could not be built here. Try another Setback, or Tangent corners.",
"ui.fillet_error_failed": "This fillet could not be built on these edges. Try another radius, or round fewer edges at once.",
"ui.fillet_error_setback_short": "The setback is too short for this corner's patch: it builds from {least} on. Try a longer Setback.",
"ui.fillet_error_too_large": "The radius is too large for the faces beside these edges. Try a smaller radius, or set Face limits to Largest radius.",
"ui.fillet_fit": "Face limits",
"ui.fillet_fit_exact": "Exact radius",
"ui.fillet_fit_needs_constant": "Radius fit needs Constant radius.",
"ui.fillet_fit_reduce": "Largest radius",
"ui.fillet_fit_taper": "Narrowed radius",
"ui.fillet_fit_tip": "When the radius is larger than the faces beside an edge allow.\nExact radius: the radius as given, or nothing rounded and a message saying why.\nLargest radius: every edge rounded with the largest radius that fits.\nNarrowed radius: the radius kept, the round narrowed only where the faces run out.",
"ui.fillet_options_tip": "Tangent chain: also round the edges that continue smoothly from the picked ones.\nPreview: show the result in the view while you edit.",
"ui.fillet_setback": "Setback",
"ui.fillet_setback_hint": "{factor} × radius",
"ui.fillet_setback_least": "More than {least}",
"ui.fillet_setback_tip": "Where the smooth corner patch starts: how far along each edge from the corner. The default is {factor} × the radius. It must be more than the least setback, where the rounds meet without one: the radius where the faces are square to each other.",
"ui.fillet_smooth_radius": "Smooth radius change",
"ui.fillet_type_choices_tip": "Constant radius: one radius all along the edge.\nChord length: the width across the round stays the same, whatever angle the faces meet at.\nVariable radius: a radius at each end, and more along the edge if you add them.\nCurvature continuous: a section without a kink in reflections where it meets flat faces (G2).\nSpline: the radius along the edge follows control radii you set.",
"ui.fillet_type_curvature": "Curvature continuous",
"ui.fillet_type_tip": "The section across the edge. Curvature continuous: a curvature-continuous (G2) section between planar faces, so reflections run from the faces into the round without a kink.",
"ui.filter_commands_or_keys": "Filter commands or keys",
"ui.findInTimeline": "Find in Timeline",
"ui.findInWindow": "Find in Window",
@@ -4827,6 +4948,7 @@
"ui.inspect": "Inspect",
"ui.instances": "Instances",
"ui.intersect": "Intersect",
"ui.iso_4753": "ISO 4753",
"ui.isolate": "Isolate",
"ui.join": "Join",
"ui.joint_play": "▶ Play",
@@ -4929,6 +5051,7 @@
"ui.part_size_needs_a_part": "Select an inserted standard part (a screw, nut, washer or pin) to change its size. To make a body larger or smaller, use Scale.",
"ui.part_size_shared": "Rebuilds the part, replacing any added features. All occurrences of this component update.",
"ui.paste": "Paste",
"ui.patch_continuity_corner_tip": "The patch meets the faces round it at the chosen continuity along each side. At a corner where those faces meet each other with different curvatures, it stays tangent (G1) there.",
"ui.path": "Path",
"ui.pattern_object_type_tip": "Bodies: solid shapes, picked in the view or the Browser; each is copied whole.\nFeatures: steps of the History, such as an extrude or a hole, picked in the History or on a face they made; the step is repeated.\nA sketch is neither: repeat its curves with the sketch's own Pattern or Mirror, or extrude it first.",
"ui.pattern_on_path": "Pattern on Path",
+5
View File
@@ -4104,10 +4104,15 @@
"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",
+5
View File
@@ -4369,10 +4369,15 @@
"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.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",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+123
View File
@@ -496,6 +496,7 @@
"Render Stage": "שלב הרינדור",
"Reopen designs": "פתיחה מחדש של תכנים",
"Reopen the designs that were open when SolidCraft was last closed": "פתיחה מחדש של התכנונים שהיו פתוחים בפעם הקודמת",
"Repair Part": "תיקון חלק",
"Replace existing library file": "החלפת קובץ הספרייה הקיים",
"Report a bug — review a screenshot and open a GitHub draft": "דיווח על באג — בדיקת צילום מסך ופתיחת טיוטה ב־GitHub",
"Report copied. Keep this text to submit on GitHub when you are online.": "הדיווח הועתק. יש לשמור את הטקסט כדי לשלוח אותו ב-GitHub כשהחיבור לאינטרנט יהיה זמין.",
@@ -790,6 +791,7 @@
"browser.edit_canvas_title": "עריכת קנבס: {name}",
"browser.edit_point_cloud_title": "עריכת ענן נקודות: {name}",
"browser.move_title": "הזזה: {name}",
"browser.needs_repair": "{name}: דרוש תיקון",
"browser.parameters": "פרמטרים ({count})",
"browser.precision": "דיוק: {precision}",
"browser.sketch_attachment_lost": "{name} (ההצמדה אבדה)",
@@ -834,6 +836,7 @@
"cmd.assembly_mass_properties": "תכונות מסה",
"cmd.body.print_face": "פאת הדפסה",
"cmd.body_rename": "שינוי שם גוף",
"cmd.body_repair": "תיקון חלק",
"cmd.browser_collapse_all": "כיווץ הכול",
"cmd.browser_expand_all": "הרחבת הכול",
"cmd.browser_group": "קבוצה חדשה",
@@ -918,6 +921,8 @@
"cmd.diagnostics_crash_reports": "דוחות קריסה",
"cmd.diagnostics_crash_reports_clear": "מחיקת דוחות קריסה",
"cmd.diagnostics_crash_test": "בדיקת קריסה",
"cmd.diagnostics_profile": "פרופיל ביצועים",
"cmd.diagnostics_validation": "אימות",
"cmd.doc_recover": "שחזור תכן",
"cmd.doc_recovery_discard": "השלכת תכן משוחזר",
"cmd.doc_recovery_list": "תכנים לשחזור",
@@ -955,6 +960,7 @@
"cmd.frame_profile_list": "ספריית פרופילים",
"cmd.frame_profile_properties": "מאפייני פרופיל",
"cmd.inspect_accessibility": "ניתוח נגישות",
"cmd.inspect_analysis": "ניתוח תצוגה",
"cmd.inspect_center_of_mass": "מרכז מסה",
"cmd.inspect_clearance": "מרווח",
"cmd.inspect_colored_components": "הפעלת צבעי רכיבים",
@@ -1360,6 +1366,7 @@
"crash.unclean_explanation": "זוהה בהפעלה מאוחרת יותר; זמן היציאה המדויק לא נרשם. גם כיבוי של המערכת או עצירה בכפייה עלולים לגרום ליציאה לא תקינה.",
"delete.and_more": "… ועוד {count}",
"diagnostic.empty_boolean_component": "אין גוף להסרה או לחיתוך משותף ברכיב '{component}'; ייתכן שהכלי חופף ל־'{body}' ברכיב '{other}' — יש להפעיל את הרכיב הזה או לבחור את הגוף כיעד",
"diagnostic.reselect_reference": "{feature}: ההפניה `{reference}` כבר אינה קיימת כפי שנבחרה; יש לבחור אותה מחדש",
"dialog.bodies_count": "{count} גופים",
"dialog.clearance_invalid": "המרווח חייב להיות אורך של 0 ומעלה",
"dialog.compute": "חישוב",
@@ -1425,6 +1432,14 @@
"file_load.reading_percent": "קורא את הקובץ... {percent}%",
"file_load.rebuilding": "בונה מחדש פיצ'ר {done} מתוך {total}",
"file_load.recovering": "משחזר את התכן",
"file_load.step_build": "בונה את המודל",
"file_load.step_feature": "תכונה {done} מתוך {total}",
"file_load.step_part": "חלק {done} מתוך {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "קורא את הקובץ",
"file_load.step_rebuild": "בונה מחדש את התכונות",
"file_load.step_repair": "בודק ומתקן את החלקים",
"file_load.step_show": "מכין את התצוגה",
"file_load.stopping": "ממתין לעצירת הפעולה הקודמת...",
"file_load.updating_links": "עדכון קישורים",
"file_load.waiting": "ממתין לפעולת קובץ",
@@ -1719,6 +1734,7 @@
"help.timeline.delete": "מחיקת הפיצ'רים שנבחרו מציר הזמן; מחיקת סקיצה מוחקת גם את הפיצ'רים שנבנו ממנה. מתאים להסרת שלב שכבר אין בו צורך.",
"help.timeline.dependents": "הצגת הפיצ'רים שיימחקו יחד עם פיצ'ר, ואלה שייכשלו בלעדיו. מתאים לפני מחיקה או שינוי של פיצ'ר.",
"help.timeline.play": "הפעלה מחדש של הפיצ'רים שנותרו, אחד בכל פעם, עם השהיה של חצי שנייה לאחר כל בנייה מחדש. להפסקה יש להפעיל שוב את הפקודה או ללחוץ על Escape; מעבר לסוף מתבצע מיד.",
"help.version": "גרסה {version}",
"help.view.apply": "סיבוב התצוגה לכיוון סטנדרטי כמו חזית, מבט עליון או איזומטרי, או לתצוגה שמורה בשם. מתאים להתבוננות במודל מזווית קבועה.",
"help.view.delete": "מחיקת תצוגה שמורה. המודל אינו משתנה.",
"help.view.fit": "זום והזזה כך שכל המודל, או הבחירה, ימלאו את התצוגה. מתאים כשהמודל יצא מהטווח הנראה.",
@@ -1806,6 +1822,27 @@
"home.start_hint": "אפשר ליצור תכן, לפתוח קובץ אחרון או לעיין בדוגמה.",
"home.whats_new": "מה חדש",
"home.yesterday": "אתמול",
"import_report.details": "פרטים:",
"import_report.file_one": "הייתה בעיה נוספת אחת בקובץ.",
"import_report.file_other": "היו {count} בעיות נוספות בקובץ.",
"import_report.hint": "ייצוא מחדש של החלקים האלה מהתוכנה שיצרה אותם עשוי לפתור זאת. ב„העתקת הודעת האזהרה” יש את הפרטים.",
"import_report.left_out_one": "לא ניתן היה לתקן פאה אחת והיא חסרה.",
"import_report.left_out_other": "לא ניתן היה לתקן {count} פאות והן חסרות.",
"import_report.needs_repair_one": "חלק אחד דורש תיקון לפני שאפשר למדל עליו.",
"import_report.needs_repair_other": "{count} חלקים דורשים תיקון לפני שאפשר למדל עליהם.",
"import_report.not_imported_one": "לא ניתן היה לייבא חלק אחד.",
"import_report.not_imported_other": "לא ניתן היה לייבא {count} חלקים.",
"import_report.not_shown_one": "לא ניתן היה לצייר פאה אחת והיא מוסתרת.",
"import_report.not_shown_other": "לא ניתן היה לצייר {count} פאות והן מוסתרות.",
"import_report.open_one": "בחלק אחד יש רווחים בין הפאות והוא יובא כגוף פתוח.",
"import_report.open_other": "ב-{count} חלקים יש רווחים בין הפאות והם יובאו כגופים פתוחים.",
"import_report.refused_one": "לא ניתן היה להפוך חלק אחד לגוף מוצק והוא לא יובא.",
"import_report.refused_other": "לא ניתן היה להפוך {count} חלקים לגופים מוצקים והם לא יובאו.",
"import_report.repaired_one": "תוקנו פגמים קטנים בחלק אחד.",
"import_report.repaired_other": "תוקנו פגמים קטנים ב-{count} חלקים.",
"import_report.solids": "{solids} מתוך {parts} חלקים יובאו כגופים מוצקים.",
"import_report.surfaces_one": "לא ניתן היה להפוך חלק אחד לגוף מוצק והוא יובא כמשטחים.",
"import_report.surfaces_other": "לא ניתן היה להפוך {count} חלקים לגופים מוצקים והם יובאו כמשטחים.",
"install.button_tip": "התקנת SolidCraft כיישום: נפתח בחלון משלו ועובד גם ללא חיבור לרשת",
"install.dock_1": "יש לבחור קובץ › הוספה ל־Dock.",
"install.dock_2": "יש ללחוץ על הוספה.",
@@ -2351,6 +2388,8 @@
"prefs.profile_exported": "הפרופיל יוצא.",
"prefs.profile_imported": "הפרופיל יובא.",
"prefs.profile_name_hint": "שם הפרופיל, למשל מחשב נייד",
"prefs.profile_operations": "מדידת זמני פעולות",
"prefs.profile_operations_note": "מתעד כמה זמן לוקחות קריאות SMLib, פעולות ליבה, תכונות, פקודות וייבוא. סוכנים קוראים זאת עם diagnostics.profile.",
"prefs.profile_rename": "שינוי שם",
"prefs.profile_renamed": "שם הפרופיל שונה.",
"prefs.profile_save": "שמירה",
@@ -2380,6 +2419,9 @@
"prefs.scale_text": "קנה מידה וטקסט",
"prefs.search": "חיפוש הגדרות",
"prefs.search_empty": "אין הגדרות תואמות",
"prefs.section_hatch": "קווקוו חתך",
"prefs.section_hatch_by_part": "לפי חלק",
"prefs.section_hatch_one": "סגנון אחד",
"prefs.select": "בחירה",
"prefs.select_one_item": "בחירת פריט אחד",
"prefs.select_other_hidden": "בחירת גאומטריה מוסתרת באמצעות בחירה אחרת",
@@ -2494,6 +2536,12 @@
"prefs.under_cursor": "מתחת לסמן",
"prefs.units_precision": "יחידות ודיוק",
"prefs.updates": "עדכונים",
"prefs.validation": "בדיקת גופים",
"prefs.validation.each_feature": "פעם אחת לכל תכונה",
"prefs.validation.each_step": "אחרי כל שלב",
"prefs.validation.label": "הבדיקה המלאה של הקרנל",
"prefs.validation.off": "כבוי (ניסיוני)",
"prefs.validation_note": "אחרי כל שלב: בודק כל סחיפה, פעולה בוליאנית ועיגול.\nפעם אחת לכל תכונה: בודק את התוצאה של כל תכונה פעם אחת.\nכבוי (ניסיוני): אין בדיקה.",
"prefs.value_boxes_in_view": "הצגת ערכים ליד הידיות שלהם בתצוגה",
"prefs.value_boxes_in_view_tip": "ערך הפקודה (מרחק, רדיוס…) בתיבה ליד הידית שלו, מעל המודל. כבוי: מקלידים אותו בחלון הפקודה, שמקבל את המקלדת אחרי בחירה, ושום דבר לא מסתיר את המודל.",
"prefs.view": "התנהגות המבט",
@@ -2528,6 +2576,17 @@
"recovery.just_now": "זה עתה",
"recovery.min_ago": "לפני {count} דק'",
"recovery.never_saved": "לא נשמר מעולם",
"refused.change": "לא ניתן היה לשנות את {body}.",
"refused.cut": "לא ניתן היה לחתוך את {body}.",
"refused.face_curved": "אחת הפאות המעוקלות שלו אינה ניתנת לשימוש במידול.",
"refused.face_flat": "אחת הפאות השטוחות שלו אינה ניתנת לשימוש במידול.",
"refused.face_freeform": "אחת הפאות החופשיות שלו אינה ניתנת לשימוש במידול.",
"refused.face_rounded": "אחת הפאות המעוגלות שלו אינה ניתנת לשימוש במידול.",
"refused.faces_apart": "הפאות שלו אינן נפגשות בצמידות מספקת לשימוש במידול.",
"refused.intersect": "לא ניתן היה לחתוך עם {body}.",
"refused.join": "לא ניתן היה לחבר אל {body}.",
"refused.repair": "תיקון חלק",
"refused.show_face": "הצגת הפאה",
"render.adaptive_absolute": "רצפת שגיאת RGB מוחלטת",
"render.adaptive_coverage": "יעד שגיאת כיסוי",
"render.adaptive_enable": "הקצאת דגימות באמצעות דגימות גישוש עצמאיות",
@@ -3995,7 +4054,19 @@
"the section's profiles must be in one sketch": "הפרופילים של החתך חייבים להיות בסקיצה אחת",
"the two origins are on the same component": "שתי הראשיות נמצאות על אותו רכיב",
"thread.automatic_size": "גודל אוטומטי",
"thread.chamfer_depth_needed": "נדרש לצורה זו",
"thread.designation": "סימון",
"thread.drill_range": "מקדח יצרן המברז הוא {drill} מ\"מ. הקוטר הקטן התקני של התבריג הפנימי הוא {minor} מ\"מ. מתקבל מקדח מ-{low} עד {high} מ\"מ.",
"thread.drill_range_custom": "המקדח הוא הקוטר הגדול פחות הפסיעה, {drill} מ\"מ. הקוטר הקטן התקני של התבריג הפנימי הוא {minor} מ\"מ. מתקבל מקדח מ-{low} עד {high} מ\"מ.",
"thread.drill_range_taper": "מקדח יצרן המברז הוא {drill} מ\"מ. הקוטר הקטן התקני בסוף התבריג הוא {minor} מ\"מ. מתקבל מקדח מ-{low} עד {high} מ\"מ.",
"thread.end_square": "ישר",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"thread.fits_the_face": "מתאים לפאה, למשל {example}",
"thread.form_bspp": "תבריג צנרת G (ISO 228-1)",
"thread.form_bspt": "תבריג צנרת קוני R, Rc (ISO 7-1)",
"thread.form_npt": "תבריג צנרת קוני NPT (ASME B1.20.1)",
"thread.form_rp": "תבריג צנרת פנימי מקביל Rp (ISO 7-1)",
"thread.iso_metric": "ISO מטרי",
"thread.select_size": "בחירת גודל",
"timeline.delete_after_marker_one": "מחיקת פיצ'ר אחד אחרי סמן ציר הזמן",
@@ -4468,6 +4539,8 @@
"ui.centerline": "קו מרכז",
"ui.chain": "שרשרת",
"ui.chamfer": "פאזה",
"ui.chamfer_angle": "זווית פאזה",
"ui.chamfer_depth": "עומק פאזה",
"ui.chamfer_type": "סוג פאזה",
"ui.change_workspace": "החלפת סביבת עבודה",
"ui.circle": "מעגל",
@@ -4498,6 +4571,10 @@
"ui.colour_vision_sample": "דוגמה",
"ui.colour_vision_tritan": "טריטן",
"ui.colour_vision_tritan_tip": "לתחושת כחול חלשה או חסרה",
"ui.comb_length": "אורך המסרק",
"ui.comb_length_tip": "אורך השיניים: כפולה של האורך האוטומטי, שבו השן הארוכה ביותר היא חמישית מגודל העקומות המוצגות.",
"ui.comb_teeth": "שיניים",
"ui.comb_teeth_tip": "כמה שיניים יש לכל מסרק, במרווחים שווים לאורך העקומה. יותר שיניים מראות בפירוט רב יותר איך העקמומיות משתנה.",
"ui.combine": "שילוב",
"ui.coming_later": "בקרוב",
"ui.command_done": "{command} הושלם",
@@ -4522,11 +4599,24 @@
"ui.construction.ribbon_label": "קווי עזר",
"ui.construction.side_hint": "ישר עזר: לחיצה על הצד שאליו הקו נמשך; לחיצה ימנית להתחלה מחדש",
"ui.context_menu": "תפריט הקשר",
"ui.continuity_crease": "שבר",
"ui.continuity_curvature": "עקמומיות",
"ui.continuity_curvature_change": "שינוי עקמומיות",
"ui.continuity_curvature_change_tip": "שינוי עקמומיות (G3): גם העקמומיות משתנה בצורה חלקה לאורך התפר.",
"ui.continuity_curvature_tip": "רציף בעקמומיות (G2): ההשתקפויות עוברות בלי שבר.",
"ui.continuity_g0": "G0 שבר",
"ui.continuity_g1": "G1 משיק",
"ui.continuity_g2": "G2 עקמומיות",
"ui.continuity_gap": "פער",
"ui.continuity_position": "מיקום",
"ui.continuity_position_tip": "מיקום (G0): המשטחים נפגשים, עם שבר במקום המפגש.",
"ui.continuity_smooth_curvature_change": "שינוי עקמומיות חלק",
"ui.continuity_smooth_curvature_change_tip": "שינוי עקמומיות חלק (G4): גם האופן שבו העקמומיות משתנה ממשיך בצורה חלקה לאורך התפר.",
"ui.continuity_tangent": "משיק",
"ui.continuity_tangent_tip": "משיק (G1): אין שבר, אך העקמומיות קופצת לאורך התפר.",
"ui.copy": "העתקה",
"ui.copy_details": "העתקת פרטים",
"ui.copy_details_tip": "העתקת ההודעה המלאה, כדי לחפש אותה או לדווח עליה.",
"ui.corner": "פינה",
"ui.corners": "פינות",
"ui.cosmetic_thread_markings": "סימוני הברגה קוסמטיים",
@@ -4644,8 +4734,10 @@
"ui.edit_sketch_empty": "אין סקיצות לעריכה",
"ui.ellipse": "אליפסה",
"ui.emboss_wrap_note": "פרופילי קווים ניצבים המשיקים לגליל נתמך נכרכים אוטומטית. יש לבחור דופן כדי לקבוע יעד.",
"ui.end": "סוף",
"ui.end_radius": "רדיוס סיום",
"ui.end_scale": "קנה מידה בסיום",
"ui.ends": "קצוות",
"ui.entities": "ישויות",
"ui.equal": "שווה",
"ui.equation_end": "סוף",
@@ -4665,6 +4757,7 @@
"ui.export_ellipsis_keymap": "ייצוא…",
"ui.export_keymap_tip": "מקשים, מועדפי תיבת S וסרגל הכלים, כקובץ",
"ui.extend": "הארכה",
"ui.extent": "גבול",
"ui.extent_type": "סוג גבול",
"ui.extract_component": "חילוץ לקובץ…",
"ui.extract_design_changed": "התכן השתנה בזמן בחירת הקובץ. יש להפעיל שוב את חילוץ לקובץ.",
@@ -4673,11 +4766,39 @@
"ui.extrude_auto_to_object": "שליפה עד יעד שנבחר",
"ui.extrude_auto_to_object_tip": "בשליפה, כשנבחר פרופיל, בחירת פאה, קודקוד או מישור מקביל מחוץ למישור שלו מעבירה את התחום ל\"עד אובייקט\"",
"ui.factor": "מקדם",
"ui.fade": "דעיכה",
"ui.fade_length": "אורך דעיכה",
"ui.feature_history": "ציר הזמן",
"ui.feature_options": "אפשרויות פיצ'ר",
"ui.features": "פיצ'רים",
"ui.file": "קובץ",
"ui.fillet": "עיגול פינה",
"ui.fillet_corner_ball": "כדור",
"ui.fillet_corner_ball_tip": "חלק מספירת הכדור המתגלגל, משיק (G1) לכל עיגול.",
"ui.fillet_corner_curvature_tip": "עקמומיות (G2): טלאי חלק. הפינה נסוגה לאורך כל קצה במרחק הנסיגה (פי {factor} מהרדיוס אלא אם תקלידו ערך) ומתמלאת בטלאי, כך שההשתקפויות עוברות בה בלי שבר.",
"ui.fillet_corner_needs_constant": "פינות עם טלאי חלק (G2) דורשות רדיוס קבוע והתאמת רדיוס מדויקת.",
"ui.fillet_corner_patch": "טלאי חלק",
"ui.fillet_corner_patch_tip": "רציף בעקמומיות (G2): הפינה נסוגה לאורך כל קצה ומתמלאת בטלאי, כך שההשתקפויות עוברות בה בלי שבר.",
"ui.fillet_corner_tangent_tip": "משיק (G1): פינת כדור מתגלגל, חלק מספירת הכדור המתגלגל, משיק לכל עיגול.",
"ui.fillet_error_corner": "לא ניתן היה לבנות כאן את הפינה החלקה. נסו נסיגה אחרת, או פינות משיקות.",
"ui.fillet_error_failed": "לא ניתן היה לבנות את העיגול הזה על הקצוות האלה. נסו רדיוס אחר, או עגלו פחות קצוות בבת אחת.",
"ui.fillet_error_setback_short": "הנסיגה קצרה מדי עבור הטלאי של פינה זו: הוא נבנה החל מ-{least}. נסו נסיגה ארוכה יותר.",
"ui.fillet_error_too_large": "הרדיוס גדול מדי עבור הפאות שליד הקצוות האלה. נסו רדיוס קטן יותר, או בחרו ב„גבולות הפאות” את „הרדיוס הגדול ביותר”.",
"ui.fillet_fit": "גבולות הפאות",
"ui.fillet_fit_exact": "רדיוס מדויק",
"ui.fillet_fit_needs_constant": "התאמת רדיוס דורשת רדיוס קבוע.",
"ui.fillet_fit_reduce": "הרדיוס הגדול ביותר",
"ui.fillet_fit_taper": "רדיוס מוצר",
"ui.fillet_fit_tip": "כשהרדיוס גדול ממה שהפאות שליד הקצה מאפשרות.\nרדיוס מדויק: הרדיוס כפי שניתן, או ללא עיגול והודעה שמסבירה למה.\nהרדיוס הגדול ביותר: כל קצה מעוגל ברדיוס הגדול ביותר שנכנס.\nרדיוס מוצר: הרדיוס נשמר, והעיגול מוצר רק היכן שהפאות נגמרות.",
"ui.fillet_options_tip": "שרשרת משיקה: לעגל גם את הקצוות שממשיכים בחלקות מהקצוות שנבחרו.\nתצוגה מקדימה: להציג את התוצאה בתצוגה בזמן העריכה.",
"ui.fillet_setback": "נסיגה",
"ui.fillet_setback_hint": "{factor} × רדיוס",
"ui.fillet_setback_least": "יותר מ-{least}",
"ui.fillet_setback_tip": "היכן מתחיל טלאי הפינה החלק: המרחק לאורך כל קצה מהפינה. ברירת המחדל היא פי {factor} מהרדיוס. עליה להיות גדולה מהנסיגה המזערית, שבה העיגולים נפגשים בלעדיה: הרדיוס כשהפאות ניצבות זו לזו.",
"ui.fillet_smooth_radius": "שינוי רדיוס חלק",
"ui.fillet_type_choices_tip": "רדיוס קבוע: רדיוס אחד לכל אורך הקצה.\nאורך מיתר: רוחב העיגול נשאר זהה, בכל זווית שבה הפאות נפגשות.\nרדיוס משתנה: רדיוס בכל קצה, ועוד לאורך הקצה אם מוסיפים.\nרציף בעקמומיות: חתך בלי שבר בהשתקפויות היכן שהוא פוגש פאות מישוריות (G2).\nספליין: הרדיוס לאורך הקצה עוקב אחרי רדיוסי בקרה שאתם קובעים.",
"ui.fillet_type_curvature": "רציף בעקמומיות",
"ui.fillet_type_tip": "החתך לרוחב הקצה. רציף בעקמומיות: חתך רציף בעקמומיות (G2) בין פאות מישוריות, כך שההשתקפויות עוברות מהפאות אל העיגול בלי שבר.",
"ui.filter_commands_or_keys": "סינון פקודות או מקשים",
"ui.findInTimeline": "איתור בציר הזמן",
"ui.findInWindow": "איתור בחלון",
@@ -4827,6 +4948,7 @@
"ui.inspect": "בדיקה",
"ui.instances": "מופעים",
"ui.intersect": "חיתוך משותף",
"ui.iso_4753": "ISO 4753",
"ui.isolate": "בידוד",
"ui.join": "איחוד",
"ui.joint_play": "▶ הפעלה",
@@ -4929,6 +5051,7 @@
"ui.part_size_needs_a_part": "בחרו חלק סטנדרטי שהוכנס (בורג, אום, דסקית או פין) כדי לשנות את גודלו. כדי להגדיל או להקטין גוף, השתמשו בשינוי קנה מידה.",
"ui.part_size_shared": "בונה מחדש את החלק ומחליף פיצ'רים שנוספו. כל המופעים של רכיב זה מתעדכנים.",
"ui.paste": "הדבקה",
"ui.patch_continuity_corner_tip": "הטלאי פוגש את הפאות שסביבו ברציפות שנבחרה לאורך כל צלע. בפינה שבה הפאות האלה נפגשות זו עם זו בעקמומיות שונה, הוא נשאר משיק (G1) שם.",
"ui.path": "מסלול",
"ui.pattern_object_type_tip": "גופים: צורות מלאות, נבחרות בתצוגה או בעץ התכן; כל אחד מועתק בשלמותו.\nפיצ'רים: שלבים בציר הזמן, כמו שליפה או חור, נבחרים בציר הזמן או על פאה שהם יצרו; השלב חוזר על עצמו.\nסקיצה אינה אף אחד מהם: חזרו על העקומות שלה בעזרת המערך או השיקוף של הסקיצה עצמה, או בצעו לה שליפה קודם.",
"ui.pattern_on_path": "מערך לאורך מסלול",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+5
View File
@@ -4482,10 +4482,15 @@
"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",
+123
View File
@@ -496,6 +496,7 @@
"Render Stage": "レンダリング段階",
"Reopen designs": "デザインを再度開く",
"Reopen the designs that were open when SolidCraft was last closed": "前回開いていたデザインを再び開く",
"Repair Part": "パーツを修復",
"Replace existing library file": "既存のライブラリファイルを置き換える",
"Report a bug — review a screenshot and open a GitHub draft": "バグを報告 — スクリーンショットを確認してGitHub下書きを作成",
"Report copied. Keep this text to submit on GitHub when you are online.": "レポートをコピーしました。このテキストを保存し、オンラインになったらGitHubで送信してください。",
@@ -790,6 +791,7 @@
"browser.edit_canvas_title": "キャンバスを編集: {name}",
"browser.edit_point_cloud_title": "点群を編集: {name}",
"browser.move_title": "移動: {name}",
"browser.needs_repair": "{name}: 修復が必要",
"browser.parameters": "パラメータ ({count})",
"browser.precision": "精度: {precision}",
"browser.sketch_attachment_lost": "{name} (アタッチメント消失)",
@@ -834,6 +836,7 @@
"cmd.assembly_mass_properties": "質量特性",
"cmd.body.print_face": "造形面",
"cmd.body_rename": "ボディの名前を変更",
"cmd.body_repair": "パーツを修復",
"cmd.browser_collapse_all": "すべて折りたたむ",
"cmd.browser_expand_all": "すべて展開",
"cmd.browser_group": "新規グループ",
@@ -918,6 +921,8 @@
"cmd.diagnostics_crash_reports": "クラッシュレポート一覧",
"cmd.diagnostics_crash_reports_clear": "クラッシュレポートを消去",
"cmd.diagnostics_crash_test": "クラッシュテスト",
"cmd.diagnostics_profile": "プロファイル",
"cmd.diagnostics_validation": "検証",
"cmd.doc_recover": "デザインを復元",
"cmd.doc_recovery_discard": "復元デザインを破棄",
"cmd.doc_recovery_list": "復元可能なデザイン",
@@ -955,6 +960,7 @@
"cmd.frame_profile_list": "形材ライブラリ",
"cmd.frame_profile_properties": "形材のプロパティ",
"cmd.inspect_accessibility": "アクセシビリティ解析",
"cmd.inspect_analysis": "表示解析",
"cmd.inspect_center_of_mass": "重心",
"cmd.inspect_clearance": "クリアランス",
"cmd.inspect_colored_components": "コンポーネントの色分けを有効化",
@@ -1360,6 +1366,7 @@
"crash.unclean_explanation": "次回以降の起動時に検出されました。正確な終了時刻は記録されていません。システムのシャットダウンや強制停止によっても、正常終了が記録されない場合があります。",
"delete.and_more": "…ほか{count}件",
"diagnostic.empty_boolean_component": "コンポーネント '{component}' に切り取りまたは交差の対象となるボディがありません。ツールはコンポーネント '{other}' の '{body}' と重なる可能性があります。そのコンポーネントをアクティブにするか、ボディを対象として選択してください",
"diagnostic.reselect_reference": "{feature}: 参照 `{reference}` は選択したときのままでは存在しません。選択し直してください",
"dialog.bodies_count": "{count} ボディ",
"dialog.clearance_invalid": "クリアランスは 0 以上の長さにしてください",
"dialog.compute": "計算",
@@ -1425,6 +1432,14 @@
"file_load.reading_percent": "ファイルを読み込み中... {percent}%",
"file_load.rebuilding": "フィーチャーを再構築中: {done}/{total}",
"file_load.recovering": "デザインを復元中",
"file_load.step_build": "モデルを構築中",
"file_load.step_feature": "フィーチャー {done}/{total}",
"file_load.step_part": "パーツ {done}/{total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "ファイルを読み込み中",
"file_load.step_rebuild": "フィーチャーを再構築中",
"file_load.step_repair": "パーツを確認・修復中",
"file_load.step_show": "ビューを準備中",
"file_load.stopping": "前の操作の停止を待っています...",
"file_load.updating_links": "リンクを更新中",
"file_load.waiting": "ファイル操作を待っています",
@@ -1719,6 +1734,7 @@
"help.timeline.delete": "選択したフィーチャをタイムラインから削除します。スケッチを削除すると、そこから作ったフィーチャも削除されます。不要になったステップを取り除くときに使います。",
"help.timeline.dependents": "フィーチャーと一緒に削除されるフィーチャーと、それがないと失敗するフィーチャーを一覧にします。フィーチャーを削除または変更する前に使います。",
"help.timeline.play": "残りのフィーチャを一つずつ再生し、再構築のたびに0.5秒間停止します。このコマンドをもう一度実行するかEscキーで停止し、「最後へ」で直ちに最後へ移動します。",
"help.version": "バージョン {version}",
"help.view.apply": "ビューをフロント、トップ、アイソメなどの標準方向、または保存した名前付きビューに回転します。固定した角度からモデルを見るときに使います。",
"help.view.delete": "保存した名前付きビューを削除します。モデルは変更されません。",
"help.view.fit": "モデル全体、または選択したものがビューいっぱいになるように、ズームと移動をします。モデルが視界から外れたときに使います。",
@@ -1806,6 +1822,27 @@
"home.start_hint": "デザインを作成するか、最近使ったファイルを開くか、サンプルをご覧ください。",
"home.whats_new": "新機能",
"home.yesterday": "昨日",
"import_report.details": "詳細:",
"import_report.file_one": "ファイルにほかに 1 件の問題がありました。",
"import_report.file_other": "ファイルにほかに {count} 件の問題がありました。",
"import_report.hint": "作成元のプログラムからこれらのパーツを書き出し直すと直ることがあります。詳細は「警告メッセージをコピー」で確認できます。",
"import_report.left_out_one": "1 個の面を修復できず、欠けています。",
"import_report.left_out_other": "{count} 個の面を修復できず、欠けています。",
"import_report.needs_repair_one": "1 個のパーツはモデリングの前に修復が必要です。",
"import_report.needs_repair_other": "{count} 個のパーツはモデリングの前に修復が必要です。",
"import_report.not_imported_one": "1 個のパーツを読み込めませんでした。",
"import_report.not_imported_other": "{count} 個のパーツを読み込めませんでした。",
"import_report.not_shown_one": "1 個の面を描画できず、非表示です。",
"import_report.not_shown_other": "{count} 個の面を描画できず、非表示です。",
"import_report.open_one": "1 個のパーツは面の間にすき間があり、開いたボディとして読み込まれました。",
"import_report.open_other": "{count} 個のパーツは面の間にすき間があり、開いたボディとして読み込まれました。",
"import_report.refused_one": "1 個のパーツをソリッドにできず、読み込みませんでした。",
"import_report.refused_other": "{count} 個のパーツをソリッドにできず、読み込みませんでした。",
"import_report.repaired_one": "1 個のパーツの小さな不具合を修復しました。",
"import_report.repaired_other": "{count} 個のパーツの小さな不具合を修復しました。",
"import_report.solids": "{parts} 個のパーツのうち {solids} 個をソリッドとして読み込みました。",
"import_report.surfaces_one": "1 個のパーツをソリッドにできず、サーフェスとして読み込みました。",
"import_report.surfaces_other": "{count} 個のパーツをソリッドにできず、サーフェスとして読み込みました。",
"install.button_tip": "SolidCraft をアプリとしてインストールします。専用のウィンドウで開き、オフラインでも使えます",
"install.dock_1": "「ファイル」›「Dockに追加」を選びます。",
"install.dock_2": "「追加」をクリックします。",
@@ -2351,6 +2388,8 @@
"prefs.profile_exported": "プロファイルをエクスポートしました。",
"prefs.profile_imported": "プロファイルをインポートしました。",
"prefs.profile_name_hint": "プロファイル名(例: ノートPC)",
"prefs.profile_operations": "処理をプロファイル",
"prefs.profile_operations_note": "SMLib の呼び出し、カーネル処理、フィーチャー、コマンド、インポートにかかる時間を記録します。エージェントは diagnostics.profile で読み取ります。",
"prefs.profile_rename": "名前を変更",
"prefs.profile_renamed": "プロファイルの名前を変更しました。",
"prefs.profile_save": "保存",
@@ -2380,6 +2419,9 @@
"prefs.scale_text": "拡大率と文字",
"prefs.search": "設定を検索",
"prefs.search_empty": "一致する設定がありません",
"prefs.section_hatch": "断面ハッチング",
"prefs.section_hatch_by_part": "部品ごと",
"prefs.section_hatch_one": "単一スタイル",
"prefs.select": "選択",
"prefs.select_one_item": "項目を 1 つ選択",
"prefs.select_other_hidden": "「他を選択」で非表示のジオメトリを選択",
@@ -2494,6 +2536,12 @@
"prefs.under_cursor": "カーソル下",
"prefs.units_precision": "単位と精度",
"prefs.updates": "更新",
"prefs.validation": "ボディのチェック",
"prefs.validation.each_feature": "フィーチャーごとに 1 回",
"prefs.validation.each_step": "各ステップの後",
"prefs.validation.label": "カーネルの完全チェック",
"prefs.validation.off": "オフ (試験的)",
"prefs.validation_note": "各ステップの後: スイープ、ブーリアン、ブレンドのたびにチェックします。\nフィーチャーごとに 1 回: 各フィーチャーの結果を 1 回チェックします。\nオフ (試験的): チェックしません。",
"prefs.value_boxes_in_view": "ビューでハンドルの横に値を表示",
"prefs.value_boxes_in_view_tip": "コマンドの値(距離、半径など)をモデル上のハンドルの横のボックスに表示します。オフにすると、値はコマンドウィンドウに入力します。選択後はそのウィンドウにキーボード入力が入り、モデルを覆うものはありません。",
"prefs.view": "ビューの動作",
@@ -2528,6 +2576,17 @@
"recovery.just_now": "たった今",
"recovery.min_ago": "{count}分前",
"recovery.never_saved": "未保存",
"refused.change": "{body} を変更できませんでした。",
"refused.cut": "{body} をカットできませんでした。",
"refused.face_curved": "曲面の 1 つがモデリングに使えません。",
"refused.face_flat": "平らな面の 1 つがモデリングに使えません。",
"refused.face_freeform": "自由曲面の 1 つがモデリングに使えません。",
"refused.face_rounded": "丸みのある面の 1 つがモデリングに使えません。",
"refused.faces_apart": "面どうしが十分に合っておらず、モデリングに使えません。",
"refused.intersect": "{body} と交差できませんでした。",
"refused.join": "{body} に結合できませんでした。",
"refused.repair": "パーツを修復",
"refused.show_face": "面を表示",
"render.adaptive_absolute": "RGB 絶対誤差の下限",
"render.adaptive_coverage": "被覆率の誤差目標",
"render.adaptive_enable": "独立した予備サンプルで配分",
@@ -3995,7 +4054,19 @@
"the section's profiles must be in one sketch": "セクションのプロファイルは1つのスケッチ内にある必要があります",
"the two origins are on the same component": "2つの原点が同じコンポーネント上にあります",
"thread.automatic_size": "サイズを自動選択",
"thread.chamfer_depth_needed": "この形状では必須",
"thread.designation": "ねじの呼び",
"thread.drill_range": "タップメーカーの下穴ドリルは {drill} mm です。めねじの規格の内径は {minor} mm です。{low}~{high} mm のドリルを使用できます。",
"thread.drill_range_custom": "下穴ドリルは外径からピッチを引いた {drill} mm です。めねじの規格の内径は {minor} mm です。{low}~{high} mm のドリルを使用できます。",
"thread.drill_range_taper": "タップメーカーの下穴ドリルは {drill} mm です。ねじ終端での規格の内径は {minor} mm です。{low}~{high} mm のドリルを使用できます。",
"thread.end_square": "直角",
"thread.fade_short": "1.25 P(ISO 3508)",
"thread.fade_standard": "2.5 P(ISO 3508)",
"thread.fits_the_face": "面に合うサイズ。例: {example}",
"thread.form_bspp": "管用平行ねじ G(ISO 228-1)",
"thread.form_bspt": "管用テーパねじ R、Rc(ISO 7-1)",
"thread.form_npt": "管用テーパねじ NPT(ASME B1.20.1)",
"thread.form_rp": "管用平行めねじ Rp(ISO 7-1)",
"thread.iso_metric": "ISOメートルねじ",
"thread.select_size": "サイズを選択",
"timeline.delete_after_marker_one": "履歴マーカー以降の 1 個のフィーチャーを削除",
@@ -4468,6 +4539,8 @@
"ui.centerline": "中心線",
"ui.chain": "チェーン",
"ui.chamfer": "面取り",
"ui.chamfer_angle": "面取り角度",
"ui.chamfer_depth": "面取り深さ",
"ui.chamfer_type": "面取りタイプ",
"ui.change_workspace": "ワークスペースの変更",
"ui.circle": "円",
@@ -4498,6 +4571,10 @@
"ui.colour_vision_sample": "サンプル",
"ui.colour_vision_tritan": "3型色覚(T型)",
"ui.colour_vision_tritan_tip": "青を感じにくい、または感じない場合に",
"ui.comb_length": "コームの長さ",
"ui.comb_length_tip": "歯の長さ: 自動の長さの倍率です。自動の長さでは、いちばん長い歯が表示中の曲線の大きさの 5 分の 1 になります。",
"ui.comb_teeth": "歯の数",
"ui.comb_teeth_tip": "各コームの歯の数です。曲線に沿って等間隔に並びます。歯を増やすと、曲率の変わり方がより細かく見えます。",
"ui.combine": "結合",
"ui.coming_later": "準備中",
"ui.command_done": "{command} 完了",
@@ -4522,11 +4599,24 @@
"ui.construction.ribbon_label": "補助線",
"ui.construction.side_hint": "補助直線: 線を伸ばす側をクリック。右クリックで最初から",
"ui.context_menu": "コンテキスト メニュー",
"ui.continuity_crease": "折れ",
"ui.continuity_curvature": "曲率",
"ui.continuity_curvature_change": "曲率変化",
"ui.continuity_curvature_change_tip": "曲率変化 (G3): 境目で曲率の変化もなめらかです。",
"ui.continuity_curvature_tip": "曲率連続 (G2): 映り込みが折れずに通ります。",
"ui.continuity_g0": "G0 折れ",
"ui.continuity_g1": "G1 接線",
"ui.continuity_g2": "G2 曲率",
"ui.continuity_gap": "隙間",
"ui.continuity_position": "位置",
"ui.continuity_position_tip": "位置 (G0): 面はつながりますが、境目に折れがあります。",
"ui.continuity_smooth_curvature_change": "なめらかな曲率変化",
"ui.continuity_smooth_curvature_change_tip": "なめらかな曲率変化 (G4): 境目で曲率の変わり方そのものもなめらかに続きます。",
"ui.continuity_tangent": "接線",
"ui.continuity_tangent_tip": "接線 (G1): 折れはありませんが、境目で曲率が飛びます。",
"ui.copy": "コピー",
"ui.copy_details": "詳細をコピー",
"ui.copy_details_tip": "調べたり報告したりできるよう、メッセージ全文をコピーします。",
"ui.corner": "コーナー",
"ui.corners": "コーナー",
"ui.cosmetic_thread_markings": "ねじの簡略表示",
@@ -4644,8 +4734,10 @@
"ui.edit_sketch_empty": "編集できるスケッチはありません",
"ui.ellipse": "楕円",
"ui.emboss_wrap_note": "サポートされる円柱に接する直交線のプロファイルは自動的に巻き付けられます。対象を選ぶには壁を選択してください。",
"ui.end": "終端",
"ui.end_radius": "終了半径",
"ui.end_scale": "終端スケール",
"ui.ends": "端部",
"ui.entities": "エンティティ",
"ui.equal": "等しい",
"ui.equation_end": "終了",
@@ -4665,6 +4757,7 @@
"ui.export_ellipsis_keymap": "エクスポート…",
"ui.export_keymap_tip": "ショートカット、Sボックスのお気に入り、ツールバー設定をファイルに保存",
"ui.extend": "延長",
"ui.extent": "範囲",
"ui.extent_type": "範囲タイプ",
"ui.extract_component": "ファイルに抽出…",
"ui.extract_design_changed": "ファイルの選択中にデザインが変更されました。ファイルへの抽出をやり直してください。",
@@ -4673,11 +4766,39 @@
"ui.extrude_auto_to_object": "選択した対象まで押し出し",
"ui.extrude_auto_to_object_tip": "押し出しでプロファイルを選択した後、その平面外の面・頂点・平行な平面を選ぶと、範囲タイプが「オブジェクトまで」に切り替わります",
"ui.factor": "倍率",
"ui.fade": "切り上げ",
"ui.fade_length": "切り上げ長さ",
"ui.feature_history": "フィーチャー履歴",
"ui.feature_options": "フィーチャーオプション",
"ui.features": "フィーチャー",
"ui.file": "ファイル",
"ui.fillet": "フィレット",
"ui.fillet_corner_ball": "ボール",
"ui.fillet_corner_ball_tip": "転がるボールの球面の一部で、各フィレットに接します (G1)。",
"ui.fillet_corner_curvature_tip": "曲率 (G2): なめらかなパッチ。コーナーを各エッジに沿ってセットバック分 (入力しなければ半径の {factor} 倍) 後退させてパッチで埋め、映り込みが折れずに通ります。",
"ui.fillet_corner_needs_constant": "スムーズパッチのコーナー (G2) には、一定の半径と厳密な半径フィットが必要です。",
"ui.fillet_corner_patch": "スムーズパッチ",
"ui.fillet_corner_patch_tip": "曲率連続 (G2): コーナーを各エッジに沿って後退させてパッチで埋め、映り込みが折れずに通ります。",
"ui.fillet_corner_tangent_tip": "接線 (G1): 転がるボールのコーナー。転がるボールの球面の一部で、各フィレットに接します。",
"ui.fillet_error_corner": "ここではなめらかなコーナーを作れませんでした。別のセットバックか、接線のコーナーを試してください。",
"ui.fillet_error_failed": "このフィレットをこれらのエッジに作れませんでした。別の半径を試すか、一度に丸めるエッジを減らしてください。",
"ui.fillet_error_setback_short": "このコーナーのパッチにはセットバックが短すぎます。{least} 以上で作れます。より長いセットバックを試してください。",
"ui.fillet_error_too_large": "これらのエッジの隣の面に対して半径が大きすぎます。小さい半径を試すか、「面の境界」を「最大半径」にしてください。",
"ui.fillet_fit": "面の境界",
"ui.fillet_fit_exact": "正確な半径",
"ui.fillet_fit_needs_constant": "半径フィットには一定の半径が必要です。",
"ui.fillet_fit_reduce": "最大半径",
"ui.fillet_fit_taper": "狭めた半径",
"ui.fillet_fit_tip": "半径がエッジの隣の面で収まる大きさを超えるとき。\n正確な半径: 指定どおりの半径。収まらなければ丸めずに理由を知らせます。\n最大半径: 各エッジを収まる最大の半径で丸めます。\n狭めた半径: 半径を保ち、面が足りない所だけフィレットを細くします。",
"ui.fillet_options_tip": "正接チェーン: 選んだエッジからなめらかに続くエッジも丸めます。\nプレビュー: 編集中に結果をビューに表示します。",
"ui.fillet_setback": "セットバック",
"ui.fillet_setback_hint": "{factor} × 半径",
"ui.fillet_setback_least": "{least} より大きく",
"ui.fillet_setback_tip": "なめらかなコーナーパッチが始まる位置: コーナーから各エッジに沿った距離。既定値は半径の {factor} 倍。最小セットバック (セットバックなしでラウンド同士が交わる位置。面どうしが直角なら半径) より大きくする必要があります。",
"ui.fillet_smooth_radius": "半径をなめらかに変化",
"ui.fillet_type_choices_tip": "一定の半径: エッジ全体で一つの半径。\n弦長: 面がどんな角度で交わっても、フィレットの幅が同じ。\n可変半径: 両端の半径と、追加すればエッジ沿いの半径。\n曲率連続: 平面と接する所で映り込みが折れない断面 (G2)。\nスプライン: エッジ沿いの半径が、設定した制御半径に従います。",
"ui.fillet_type_curvature": "曲率連続",
"ui.fillet_type_tip": "エッジを横切る断面。曲率連続: 平面の間の曲率連続 (G2) 断面で、映り込みが面からフィレットへ折れずにつながります。",
"ui.filter_commands_or_keys": "コマンドまたはキーを検索",
"ui.findInTimeline": "タイムラインで検索",
"ui.findInWindow": "ウィンドウで検索",
@@ -4827,6 +4948,7 @@
"ui.inspect": "検査",
"ui.instances": "インスタンス",
"ui.intersect": "交差",
"ui.iso_4753": "ISO 4753",
"ui.isolate": "分離表示",
"ui.join": "結合",
"ui.joint_play": "▶ 再生",
@@ -4929,6 +5051,7 @@
"ui.part_size_needs_a_part": "サイズを変更する挿入済みの標準パーツ(ねじ、ナット、座金、ピン)を選択してください。ボディを拡大・縮小するには尺度を使います。",
"ui.part_size_shared": "パーツを再構築し、追加したフィーチャを置き換えます。このコンポーネントのすべての配置が更新されます。",
"ui.paste": "貼り付け",
"ui.patch_continuity_corner_tip": "パッチは各辺に沿って、周囲の面と選んだ連続性でつながります。周囲の面どうしが異なる曲率で接するコーナーでは、そこで接線 (G1) にとどまります。",
"ui.path": "パス",
"ui.pattern_object_type_tip": "ボディ: ビューまたはブラウザで選ぶ立体形状。それぞれがまるごとコピーされます。\nフィーチャー: 押し出しや穴など履歴のステップ。履歴で、またはそれが作った面で選びます。そのステップが繰り返されます。\nスケッチはどちらでもありません: 曲線はスケッチ内のパターンかミラーで繰り返すか、先に押し出してください。",
"ui.pattern_on_path": "パス上のパターン",
+112
View File
@@ -424,6 +424,7 @@
"Rename Folder": "폴더 이름 바꾸기",
"Render Stage": "렌더링 단계",
"Reopen the designs that were open when SolidCraft was last closed": "지난번에 열려 있던 디자인 다시 열기",
"Repair Part": "부품 복구",
"Replace existing library file": "기존 라이브러리 파일 바꾸기",
"Report a bug — review a screenshot and open a GitHub draft": "버그 신고 — 스크린샷을 검토하고 GitHub 초안 열기",
"Report text copied. Paste it into GitHub and submit your report there.": "보고서 텍스트를 복사했습니다. GitHub에 붙여넣고 그곳에서 보고서를 제출하세요.",
@@ -682,6 +683,7 @@
"browser.edit_canvas_title": "캔버스 편집: {name}",
"browser.edit_point_cloud_title": "포인트 클라우드 편집: {name}",
"browser.move_title": "이동: {name}",
"browser.needs_repair": "{name}: 복구 필요",
"browser.parameters": "매개변수 ({count})",
"browser.precision": "정밀도: {precision}",
"browser.sketch_attachment_lost": "{name} (부착 해제됨)",
@@ -717,6 +719,7 @@
"cmd.assembly_mass_properties": "질량 특성",
"cmd.body.print_face": "출력 바닥면",
"cmd.body_rename": "바디 이름 변경",
"cmd.body_repair": "부품 복구",
"cmd.browser_group": "새 그룹",
"cmd.browser_move": "브라우저 항목 이동",
"cmd.browser_order": "브라우저 항목 정렬",
@@ -790,6 +793,8 @@
"cmd.diagnostics_crash_reports": "충돌 보고서",
"cmd.diagnostics_crash_reports_clear": "충돌 보고서 삭제",
"cmd.diagnostics_crash_test": "충돌 테스트",
"cmd.diagnostics_profile": "프로파일",
"cmd.diagnostics_validation": "검증",
"cmd.doc_recover": "설계 복구",
"cmd.doc_recovery_discard": "복구된 설계 폐기",
"cmd.doc_recovery_list": "복구 가능한 설계",
@@ -1164,6 +1169,7 @@
"crash.report": "보고…",
"crash.unclean_explanation": "이후 실행 시 감지되었으며 정확한 종료 시각은 기록되지 않았습니다. 시스템 종료나 강제 중지로도 비정상 종료가 발생할 수 있습니다.",
"delete.and_more": "… 외 {count}개",
"diagnostic.reselect_reference": "{feature}: 참조 `{reference}`이(가) 선택했을 때의 모습으로 더 이상 존재하지 않습니다. 다시 선택하세요",
"dialog.bodies_count": "바디 {count}개",
"dialog.clearance_invalid": "간격은 0 이상의 길이여야 합니다",
"dialog.compute": "계산",
@@ -1214,6 +1220,14 @@
"file_load.reading_percent": "파일 읽는 중... {percent}%",
"file_load.rebuilding": "피처 다시 빌드 중 {done}/{total}",
"file_load.recovering": "디자인 복구 중",
"file_load.step_build": "모델 만드는 중",
"file_load.step_feature": "피처 {done}/{total}",
"file_load.step_part": "부품 {done}/{total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "파일 읽는 중",
"file_load.step_rebuild": "피처 다시 빌드 중",
"file_load.step_repair": "부품 확인 및 복구 중",
"file_load.step_show": "뷰 준비 중",
"file_load.stopping": "이전 작업이 중지되기를 기다리는 중...",
"file_load.waiting": "파일 작업 대기 중",
"fits the face, e.g. M8": "면에 맞음, 예: M8",
@@ -1301,6 +1315,27 @@
"home.start_hint": "설계를 만들거나, 최근 파일을 열거나, 예제를 살펴보세요.",
"home.whats_new": "새로운 기능",
"home.yesterday": "어제",
"import_report.details": "세부 정보:",
"import_report.file_one": "파일에 다른 문제가 1개 있었습니다.",
"import_report.file_other": "파일에 다른 문제가 {count}개 있었습니다.",
"import_report.hint": "이 부품을 만든 프로그램에서 다시 내보내면 해결될 수 있습니다. 세부 정보는 경고 메시지 복사에 있습니다.",
"import_report.left_out_one": "면 1개를 복구하지 못해 빠져 있습니다.",
"import_report.left_out_other": "면 {count}개를 복구하지 못해 빠져 있습니다.",
"import_report.needs_repair_one": "부품 1개는 모델링하기 전에 복구해야 합니다.",
"import_report.needs_repair_other": "부품 {count}개는 모델링하기 전에 복구해야 합니다.",
"import_report.not_imported_one": "부품 1개를 가져오지 못했습니다.",
"import_report.not_imported_other": "부품 {count}개를 가져오지 못했습니다.",
"import_report.not_shown_one": "면 1개를 그리지 못해 숨겨져 있습니다.",
"import_report.not_shown_other": "면 {count}개를 그리지 못해 숨겨져 있습니다.",
"import_report.open_one": "부품 1개는 면 사이에 틈이 있어 열린 바디로 들어왔습니다.",
"import_report.open_other": "부품 {count}개는 면 사이에 틈이 있어 열린 바디로 들어왔습니다.",
"import_report.refused_one": "부품 1개를 솔리드로 만들지 못해 가져오지 않았습니다.",
"import_report.refused_other": "부품 {count}개를 솔리드로 만들지 못해 가져오지 않았습니다.",
"import_report.repaired_one": "부품 1개의 작은 결함을 복구했습니다.",
"import_report.repaired_other": "부품 {count}개의 작은 결함을 복구했습니다.",
"import_report.solids": "부품 {parts}개 중 {solids}개를 솔리드로 가져왔습니다.",
"import_report.surfaces_one": "부품 1개를 솔리드로 만들지 못해 서피스로 들어왔습니다.",
"import_report.surfaces_other": "부품 {count}개를 솔리드로 만들지 못해 서피스로 들어왔습니다.",
"install.button_tip": "SolidCraft를 앱으로 설치합니다. 별도 창에서 열리며 오프라인에서도 작동합니다",
"install.dock_1": "파일 › Dock에 추가를 선택합니다.",
"install.dock_2": "추가를 클릭합니다.",
@@ -1690,6 +1725,8 @@
"prefs.print_face_highlight_tip": "뷰에서 바디의 출력 바닥면을 색칠하고 윤곽을 그리는 강도입니다. 0 %이면 강조하지 않습니다.",
"prefs.profile_export": "내보내기",
"prefs.profile_imported": "프로필을 가져왔습니다.",
"prefs.profile_operations": "작업 프로파일링",
"prefs.profile_operations_note": "SMLib 호출, 커널 작업, 피처, 명령, 가져오기에 걸리는 시간을 기록합니다. 에이전트는 diagnostics.profile로 읽습니다.",
"prefs.project_options_dialog": "Project 옵션 대화상자",
"prefs.project_options_dialog_note": "켜기: 투영 전에 지오메트리 또는 바디와 투영 링크를 선택합니다. 끄기: 기존 직접 선택 작업 흐름을 유지합니다.",
"prefs.quality_default": "기본값",
@@ -1804,6 +1841,12 @@
"prefs.under_cursor": "커서 아래",
"prefs.units_precision": "단위 및 정밀도",
"prefs.updates": "업데이트",
"prefs.validation": "바디 검사",
"prefs.validation.each_feature": "피처마다 한 번",
"prefs.validation.each_step": "모든 단계 후",
"prefs.validation.label": "커널 전체 검사",
"prefs.validation.off": "끄기 (실험적)",
"prefs.validation_note": "모든 단계 후: 스윕, 불리언, 블렌드마다 검사합니다.\n피처마다 한 번: 각 피처의 결과를 한 번 검사합니다.\n끄기 (실험적): 검사하지 않습니다.",
"prefs.value_boxes_in_view": "뷰에서 핸들 옆에 값 표시",
"prefs.value_boxes_in_view_tip": "명령의 값(거리, 반경 등)을 모델 위 핸들 옆 상자에 표시합니다. 끄면 값은 명령 창에 입력하며, 선택 후 키보드 입력이 그 창으로 가고 모델을 가리는 것이 없습니다.",
"prefs.view": "뷰 동작",
@@ -1835,6 +1878,17 @@
"recovery.just_now": "방금",
"recovery.min_ago": "{count}분 전",
"recovery.never_saved": "저장된 적 없음",
"refused.change": "{body}을(를) 변경하지 못했습니다.",
"refused.cut": "{body}을(를) 자르지 못했습니다.",
"refused.face_curved": "곡면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.face_flat": "평면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.face_freeform": "자유 곡면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.face_rounded": "둥근 면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.faces_apart": "면들이 충분히 맞물리지 않아 모델링에 사용할 수 없습니다.",
"refused.intersect": "{body}과(와) 교차하지 못했습니다.",
"refused.join": "{body}에 결합하지 못했습니다.",
"refused.repair": "부품 복구",
"refused.show_face": "면 보기",
"render.add_ground": "Add fitted ground to setup",
"render.all_shots_label": "모든 샷",
"render.appearance_editor.absorption": "흡수",
@@ -2832,7 +2886,18 @@
"the section's profiles must be in one sketch": "단면의 프로파일은 하나의 스케치 안에 있어야 합니다",
"the two origins are on the same component": "두 원점이 같은 구성요소에 있습니다",
"thread.automatic_size": "자동 크기",
"thread.chamfer_depth_needed": "이 형상에 필요",
"thread.designation": "호칭",
"thread.drill_range": "탭 제조사의 드릴은 {drill} mm입니다. 암나사의 규격 골지름은 {minor} mm입니다. {low}~{high} mm 드릴을 사용할 수 있습니다.",
"thread.drill_range_custom": "드릴은 바깥지름에서 피치를 뺀 {drill} mm입니다. 암나사의 규격 골지름은 {minor} mm입니다. {low}~{high} mm 드릴을 사용할 수 있습니다.",
"thread.drill_range_taper": "탭 제조사의 드릴은 {drill} mm입니다. 나사 끝에서의 규격 골지름은 {minor} mm입니다. {low}~{high} mm 드릴을 사용할 수 있습니다.",
"thread.end_square": "직각",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"thread.form_bspp": "관용 평행나사 G (ISO 228-1)",
"thread.form_bspt": "관용 테이퍼나사 R, Rc (ISO 7-1)",
"thread.form_npt": "관용 테이퍼나사 NPT (ASME B1.20.1)",
"thread.form_rp": "관용 평행 암나사 Rp (ISO 7-1)",
"thread.iso_metric": "ISO 미터",
"thread.select_size": "크기 선택",
"timeline.feature_hint": "두 번 클릭하여 편집 · 드래그하여 순서 변경 · 마우스 오른쪽 버튼을 클릭하여 더 보기",
@@ -3266,6 +3331,10 @@
"ui.colour_vision_sample": "예시",
"ui.colour_vision_tritan": "청색각이상 (Tritan)",
"ui.colour_vision_tritan_tip": "파란색 감각이 약하거나 없는 경우",
"ui.comb_length": "빗 길이",
"ui.comb_length_tip": "빗살의 길이: 자동 길이의 배수입니다. 자동 길이에서는 가장 긴 빗살이 표시된 곡선 크기의 5분의 1이 됩니다.",
"ui.comb_teeth": "빗살 수",
"ui.comb_teeth_tip": "각 빗의 빗살 수이며, 곡선을 따라 같은 간격으로 놓입니다. 빗살이 많을수록 곡률이 어떻게 바뀌는지 더 자세히 보입니다.",
"ui.combine": "결합",
"ui.coming_later": "추후 지원 예정",
"ui.command_done": "{command} 완료",
@@ -3290,11 +3359,24 @@
"ui.construction.ribbon_label": "보조선",
"ui.construction.side_hint": "보조 직선: 선이 뻗어 나갈 쪽 클릭; 마우스 오른쪽 버튼으로 다시 시작",
"ui.context_menu": "컨텍스트 메뉴",
"ui.continuity_crease": "꺾임",
"ui.continuity_curvature": "곡률",
"ui.continuity_curvature_change": "곡률 변화",
"ui.continuity_curvature_change_tip": "곡률 변화(G3): 이음매에서 곡률의 변화도 부드럽습니다.",
"ui.continuity_curvature_tip": "곡률 연속(G2): 반사가 꺾임 없이 이어집니다.",
"ui.continuity_g0": "G0 꺾임",
"ui.continuity_g1": "G1 접선",
"ui.continuity_g2": "G2 곡률",
"ui.continuity_gap": "틈",
"ui.continuity_position": "위치",
"ui.continuity_position_tip": "위치(G0): 면이 만나지만, 만나는 곳에 꺾임이 있습니다.",
"ui.continuity_smooth_curvature_change": "부드러운 곡률 변화",
"ui.continuity_smooth_curvature_change_tip": "부드러운 곡률 변화(G4): 이음매에서 곡률이 변하는 방식까지 부드럽게 이어집니다.",
"ui.continuity_tangent": "접선",
"ui.continuity_tangent_tip": "접선(G1): 꺾임은 없지만, 이음매에서 곡률이 급변합니다.",
"ui.copy": "복사",
"ui.copy_details": "세부 정보 복사",
"ui.copy_details_tip": "찾아보거나 보고할 수 있도록 전체 메시지를 복사합니다.",
"ui.corner": "코너",
"ui.corners": "코너",
"ui.counterbore": "카운터보어",
@@ -3409,6 +3491,7 @@
"ui.edit_sketch_empty": "편집할 스케치가 없습니다",
"ui.ellipse": "타원",
"ui.emboss_wrap_note": "지원되는 원통에 접하는 직교 선 프로파일은 자동으로 감깁니다. 대상을 고르려면 벽을 선택하세요.",
"ui.end": "끝",
"ui.end_radius": "끝 반지름",
"ui.end_scale": "끝 배율",
"ui.entities": "요소",
@@ -3433,11 +3516,39 @@
"ui.extent_type": "범위 유형",
"ui.extrude": "돌출",
"ui.factor": "배율",
"ui.fade": "페이드",
"ui.fade_length": "페이드 길이",
"ui.feature_history": "피처 기록",
"ui.feature_options": "피처 옵션",
"ui.features": "피처",
"ui.file": "파일",
"ui.fillet": "필렛",
"ui.fillet_corner_ball": "볼",
"ui.fillet_corner_ball_tip": "굴러가는 볼의 구면 일부로, 각 라운드에 접합니다(G1).",
"ui.fillet_corner_curvature_tip": "곡률(G2): 부드러운 패치. 코너를 각 모서리를 따라 셋백만큼(입력하지 않으면 반지름의 {factor}배) 물려 패치로 채우므로, 반사가 꺾임 없이 지나갑니다.",
"ui.fillet_corner_needs_constant": "부드러운 패치 코너(G2)에는 일정한 반지름과 정확한 반지름 맞춤이 필요합니다.",
"ui.fillet_corner_patch": "부드러운 패치",
"ui.fillet_corner_patch_tip": "곡률 연속(G2): 코너를 각 모서리를 따라 물려 패치로 채우므로, 반사가 꺾임 없이 지나갑니다.",
"ui.fillet_corner_tangent_tip": "접선(G1): 굴러가는 볼 코너. 굴러가는 볼의 구면 일부로, 각 라운드에 접합니다.",
"ui.fillet_error_corner": "여기에서는 부드러운 코너를 만들 수 없었습니다. 다른 셋백이나 접선 코너를 시도해 보세요.",
"ui.fillet_error_failed": "이 모서리들에 이 필렛을 만들 수 없었습니다. 다른 반지름을 시도하거나 한 번에 둥글게 하는 모서리 수를 줄여 보세요.",
"ui.fillet_error_setback_short": "이 코너의 패치에 비해 셋백이 너무 짧습니다. {least}부터 만들 수 있습니다. 더 긴 셋백을 시도해 보세요.",
"ui.fillet_error_too_large": "이 모서리 옆의 면에 비해 반지름이 너무 큽니다. 더 작은 반지름을 시도하거나 '면 경계'를 '최대 반지름'으로 설정하세요.",
"ui.fillet_fit": "면 경계",
"ui.fillet_fit_exact": "정확한 반지름",
"ui.fillet_fit_needs_constant": "반지름 맞춤에는 일정한 반지름이 필요합니다.",
"ui.fillet_fit_reduce": "최대 반지름",
"ui.fillet_fit_taper": "좁힌 반지름",
"ui.fillet_fit_tip": "반지름이 모서리 옆 면이 허용하는 것보다 클 때.\n정확한 반지름: 지정한 반지름 그대로, 또는 둥글게 하지 않고 이유를 알리는 메시지.\n최대 반지름: 모든 모서리를 들어가는 가장 큰 반지름으로 둥글게 합니다.\n좁힌 반지름: 반지름을 유지하고 면이 모자란 곳에서만 라운드를 좁힙니다.",
"ui.fillet_options_tip": "접선 체인: 선택한 모서리에서 부드럽게 이어지는 모서리도 둥글게 합니다.\n미리 보기: 편집하는 동안 결과를 뷰에 표시합니다.",
"ui.fillet_setback": "셋백",
"ui.fillet_setback_hint": "{factor} × 반지름",
"ui.fillet_setback_least": "{least}보다 크게",
"ui.fillet_setback_tip": "부드러운 코너 패치가 시작되는 위치: 코너에서 각 모서리를 따른 거리. 기본값은 반지름의 {factor}배. 최소 셋백(셋백 없이 라운드가 만나는 곳, 면이 서로 직각이면 반지름)보다 커야 합니다.",
"ui.fillet_smooth_radius": "반지름 부드럽게 변화",
"ui.fillet_type_choices_tip": "일정한 반지름: 모서리 전체에 하나의 반지름.\n현 길이: 면이 어떤 각도로 만나든 라운드의 폭이 같습니다.\n가변 반지름: 양 끝의 반지름과, 추가하면 모서리를 따라 더.\n곡률 연속: 평면과 만나는 곳에서 반사가 꺾이지 않는 단면(G2).\n스플라인: 모서리를 따라 반지름이 설정한 제어 반지름을 따릅니다.",
"ui.fillet_type_curvature": "곡률 연속",
"ui.fillet_type_tip": "모서리를 가로지르는 단면. 곡률 연속: 평면 사이의 곡률 연속(G2) 단면으로, 반사가 면에서 라운드로 꺾임 없이 이어집니다.",
"ui.filter_commands_or_keys": "명령 또는 키 필터",
"ui.findInTimeline": "타임라인에서 찾기",
"ui.findInWindow": "창에서 찾기",
@@ -3670,6 +3781,7 @@
"ui.part_size_needs_a_part": "크기를 바꿀 삽입된 표준 부품(나사, 너트, 와셔 또는 핀)을 선택하십시오. 바디를 키우거나 줄이려면 축척을 사용하십시오.",
"ui.part_size_shared": "부품을 다시 빌드하며 추가된 피처는 모두 대체됩니다. 이 구성요소의 모든 인스턴스가 업데이트됩니다.",
"ui.paste": "붙여넣기",
"ui.patch_continuity_corner_tip": "패치는 각 변을 따라 주변 면과 선택한 연속성으로 이어집니다. 주변 면끼리 서로 다른 곡률로 만나는 모서리에서는 그곳에서 접선(G1)으로 유지됩니다.",
"ui.path": "경로",
"ui.pattern_object_type_tip": "바디: 뷰나 브라우저에서 선택하는 솔리드 형상이며, 각각 통째로 복사됩니다.\n피처: 돌출이나 구멍 같은 기록의 단계이며, 기록에서 또는 그 단계가 만든 면에서 선택합니다. 그 단계가 반복됩니다.\n스케치는 둘 다 아닙니다. 곡선은 스케치 안의 패턴이나 대칭 복사로 반복하거나, 먼저 돌출하세요.",
"ui.pattern_on_path": "경로 패턴",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
-44
View File
@@ -1,44 +0,0 @@
{
"en": {
"ui.continuity_smooth_curvature_change": "Smooth curvature change",
"ui.continuity_smooth_curvature_change_tip": "Smooth curvature change (G4): even the way the curvature changes runs on smoothly across the seam.",
"ui.fillet_corner_tangent_tip": "Tangent (G1): a rolling-ball corner, a piece of the rolling ball's sphere tangent to each round.",
"ui.fillet_corner_curvature_tip": "Curvature (G2): a smooth patch. The corner is set back along each edge by the Setback ({factor} × the radius unless you type one) and filled with a patch, so reflections run through it without a kink."
},
"ar": {
"ui.continuity_smooth_curvature_change": "تغيّر انحناء سلس",
"ui.continuity_smooth_curvature_change_tip": "تغيّر انحناء سلس (G4): حتى طريقة تغيّر الانحناء تستمر بسلاسة عبر خط الالتقاء.",
"ui.fillet_corner_tangent_tip": "مماس (G1): زاوية بالكرة المتدحرجة، جزء من سطح الكرة المتدحرجة مماسّ لكل تقويس.",
"ui.fillet_corner_curvature_tip": "الانحناء (G2): رقعة ناعمة. تُرجَع الزاوية على طول كل حافة بمقدار الإرجاع ({factor} ضعف نصف القطر ما لم تكتب قيمة) وتُملأ برقعة، فتمر الانعكاسات عبرها دون انكسار."
},
"de": {
"ui.continuity_smooth_curvature_change": "Glatte Krümmungsänderung",
"ui.continuity_smooth_curvature_change_tip": "Glatte Krümmungsänderung (G4): Selbst die Art, wie sich die Krümmung ändert, läuft an der Naht glatt weiter.",
"ui.fillet_corner_tangent_tip": "Tangential (G1): eine Kugelecke, ein Stück der Kugel des rollenden Balls, tangential zu jeder Rundung.",
"ui.fillet_corner_curvature_tip": "Krümmung (G2): ein glattes Flächenstück. Die Ecke wird entlang jeder Kante um den Rücksprung zurückgesetzt ({factor} × der Radius, sofern Sie keinen eingeben) und mit einem Flächenstück gefüllt, sodass Spiegelungen ohne Knick hindurchlaufen."
},
"he": {
"ui.continuity_smooth_curvature_change": "שינוי עקמומיות חלק",
"ui.continuity_smooth_curvature_change_tip": "שינוי עקמומיות חלק (G4): גם האופן שבו העקמומיות משתנה ממשיך בצורה חלקה לאורך התפר.",
"ui.fillet_corner_tangent_tip": "משיק (G1): פינת כדור מתגלגל, חלק מספירת הכדור המתגלגל, משיק לכל עיגול.",
"ui.fillet_corner_curvature_tip": "עקמומיות (G2): טלאי חלק. הפינה נסוגה לאורך כל קצה במרחק הנסיגה (פי {factor} מהרדיוס אלא אם תקלידו ערך) ומתמלאת בטלאי, כך שההשתקפויות עוברות בה בלי שבר."
},
"ja": {
"ui.continuity_smooth_curvature_change": "なめらかな曲率変化",
"ui.continuity_smooth_curvature_change_tip": "なめらかな曲率変化 (G4): 境目で曲率の変わり方そのものもなめらかに続きます。",
"ui.fillet_corner_tangent_tip": "接線 (G1): 転がるボールのコーナー。転がるボールの球面の一部で、各フィレットに接します。",
"ui.fillet_corner_curvature_tip": "曲率 (G2): なめらかなパッチ。コーナーを各エッジに沿ってセットバック分 (入力しなければ半径の {factor} 倍) 後退させてパッチで埋め、映り込みが折れずに通ります。"
},
"ko": {
"ui.continuity_smooth_curvature_change": "부드러운 곡률 변화",
"ui.continuity_smooth_curvature_change_tip": "부드러운 곡률 변화(G4): 이음매에서 곡률이 변하는 방식까지 부드럽게 이어집니다.",
"ui.fillet_corner_tangent_tip": "접선(G1): 굴러가는 볼 코너. 굴러가는 볼의 구면 일부로, 각 라운드에 접합니다.",
"ui.fillet_corner_curvature_tip": "곡률(G2): 부드러운 패치. 코너를 각 모서리를 따라 셋백만큼(입력하지 않으면 반지름의 {factor}배) 물려 패치로 채우므로, 반사가 꺾임 없이 지나갑니다."
},
"zh": {
"ui.continuity_smooth_curvature_change": "平滑曲率变化",
"ui.continuity_smooth_curvature_change_tip": "平滑曲率变化 (G4):连曲率的变化方式在接缝处也平滑延续。",
"ui.fillet_corner_tangent_tip": "相切 (G1):滚球角,滚球球面的一部分,与每个圆角相切。",
"ui.fillet_corner_curvature_tip": "曲率 (G2):平滑曲面片。角点沿每条边后退一个后退距离(未输入时为半径的 {factor} 倍),并用曲面片填充,反射穿过时没有折痕。"
}
}
@@ -1,219 +0,0 @@
{
"en": {
"ui.continuity_position": "Position",
"ui.continuity_tangent": "Tangent",
"ui.continuity_curvature": "Curvature",
"ui.continuity_curvature_change": "Curvature change",
"ui.continuity_crease": "Crease",
"ui.continuity_curvature_change_tip": "Curvature change (G3): the curvature also changes smoothly across the seam.",
"ui.continuity_curvature_tip": "Curvature-continuous (G2): reflections run through without a kink.",
"ui.continuity_position_tip": "Position (G0): the surfaces meet, with a crease where they do.",
"ui.continuity_tangent_tip": "Tangent (G1): no crease, though the curvature jumps across the seam."
},
"ar": {
"ui.continuity_position": "الموضع",
"ui.continuity_tangent": "مماس",
"ui.continuity_curvature": "الانحناء",
"ui.continuity_curvature_change": "تغيّر الانحناء",
"ui.continuity_crease": "تجعّد",
"ui.continuity_curvature_change_tip": "تغيّر الانحناء (G3): يتغير الانحناء أيضًا بسلاسة عبر خط الالتقاء.",
"ui.continuity_curvature_tip": "متصل الانحناء (G2): تمر الانعكاسات دون انكسار.",
"ui.continuity_position_tip": "الموضع (G0): تلتقي الأسطح، مع تجعّد عند التقائها.",
"ui.continuity_tangent_tip": "مماس (G1): لا تجعّد، لكن الانحناء يقفز عبر خط الالتقاء."
},
"cs": {
"ui.continuity_position": "Poloha",
"ui.continuity_tangent": "Tečnost",
"ui.continuity_curvature": "Křivost",
"ui.continuity_curvature_change": "Změna křivosti",
"ui.continuity_crease": "Hrana"
},
"da": {
"ui.continuity_position": "Positionskontinuitet",
"ui.continuity_tangent": "Tangentkontinuitet",
"ui.continuity_curvature": "Krumning",
"ui.continuity_curvature_change": "Ændring i krumning",
"ui.continuity_crease": "Knæk"
},
"de": {
"ui.continuity_position": "Position",
"ui.continuity_tangent": "Tangential",
"ui.continuity_curvature": "Krümmung",
"ui.continuity_curvature_change": "Krümmungsänderung",
"ui.continuity_crease": "Knick",
"ui.continuity_curvature_change_tip": "Krümmungsänderung (G3): Auch die Krümmung ändert sich an der Naht glatt.",
"ui.continuity_curvature_tip": "Krümmungsstetig (G2): Spiegelungen laufen ohne Knick hindurch.",
"ui.continuity_position_tip": "Position (G0): Die Flächen treffen sich, mit einem Knick an der Naht.",
"ui.continuity_tangent_tip": "Tangential (G1): kein Knick, aber die Krümmung springt an der Naht."
},
"es": {
"ui.continuity_position": "Posición",
"ui.continuity_tangent": "Tangente",
"ui.continuity_curvature": "Curvatura",
"ui.continuity_curvature_change": "Cambio de curvatura",
"ui.continuity_crease": "Arista"
},
"fr": {
"ui.continuity_position": "Position",
"ui.continuity_tangent": "Tangence",
"ui.continuity_curvature": "Courbure",
"ui.continuity_curvature_change": "Variation de courbure",
"ui.continuity_crease": "Angle vif"
},
"gl": {
"ui.continuity_position": "Posición",
"ui.continuity_tangent": "Tanxente",
"ui.continuity_curvature": "Curvatura",
"ui.continuity_curvature_change": "Cambio de curvatura",
"ui.continuity_crease": "Aresta"
},
"he": {
"ui.continuity_position": "מיקום",
"ui.continuity_tangent": "משיק",
"ui.continuity_curvature": "עקמומיות",
"ui.continuity_curvature_change": "שינוי עקמומיות",
"ui.continuity_crease": "שבר",
"ui.continuity_curvature_change_tip": "שינוי עקמומיות (G3): גם העקמומיות משתנה בצורה חלקה לאורך התפר.",
"ui.continuity_curvature_tip": "רציף בעקמומיות (G2): ההשתקפויות עוברות בלי שבר.",
"ui.continuity_position_tip": "מיקום (G0): המשטחים נפגשים, עם שבר במקום המפגש.",
"ui.continuity_tangent_tip": "משיק (G1): אין שבר, אך העקמומיות קופצת לאורך התפר."
},
"hu": {
"ui.continuity_position": "Pozíció",
"ui.continuity_tangent": "Érintő",
"ui.continuity_curvature": "Görbület",
"ui.continuity_curvature_change": "Görbületváltozás",
"ui.continuity_crease": "Törés"
},
"id": {
"ui.continuity_position": "Posisi",
"ui.continuity_tangent": "Tangen",
"ui.continuity_curvature": "Kelengkungan",
"ui.continuity_curvature_change": "Perubahan kelengkungan",
"ui.continuity_crease": "Lipatan"
},
"it": {
"ui.continuity_position": "Posizione",
"ui.continuity_tangent": "Tangente",
"ui.continuity_curvature": "Curvatura",
"ui.continuity_curvature_change": "Variazione di curvatura",
"ui.continuity_crease": "Spigolo vivo"
},
"ja": {
"ui.continuity_position": "位置",
"ui.continuity_tangent": "接線",
"ui.continuity_curvature": "曲率",
"ui.continuity_curvature_change": "曲率変化",
"ui.continuity_crease": "折れ",
"ui.continuity_curvature_change_tip": "曲率変化 (G3): 境目で曲率の変化もなめらかです。",
"ui.continuity_curvature_tip": "曲率連続 (G2): 映り込みが折れずに通ります。",
"ui.continuity_position_tip": "位置 (G0): 面はつながりますが、境目に折れがあります。",
"ui.continuity_tangent_tip": "接線 (G1): 折れはありませんが、境目で曲率が飛びます。"
},
"ko": {
"ui.continuity_position": "위치",
"ui.continuity_tangent": "접선",
"ui.continuity_curvature": "곡률",
"ui.continuity_curvature_change": "곡률 변화",
"ui.continuity_crease": "꺾임",
"ui.continuity_curvature_change_tip": "곡률 변화(G3): 이음매에서 곡률의 변화도 부드럽습니다.",
"ui.continuity_curvature_tip": "곡률 연속(G2): 반사가 꺾임 없이 이어집니다.",
"ui.continuity_position_tip": "위치(G0): 면이 만나지만, 만나는 곳에 꺾임이 있습니다.",
"ui.continuity_tangent_tip": "접선(G1): 꺾임은 없지만, 이음매에서 곡률이 급변합니다."
},
"ms": {
"ui.continuity_position": "Kedudukan",
"ui.continuity_tangent": "Tangen",
"ui.continuity_curvature": "Kelengkungan",
"ui.continuity_curvature_change": "Perubahan kelengkungan",
"ui.continuity_crease": "Lipatan"
},
"nb": {
"ui.continuity_position": "Posisjon",
"ui.continuity_tangent": "Tangent",
"ui.continuity_curvature": "Krumning",
"ui.continuity_curvature_change": "Krumningsendring",
"ui.continuity_crease": "Knekk"
},
"nl": {
"ui.continuity_position": "Positie",
"ui.continuity_tangent": "Tangentieel",
"ui.continuity_curvature": "Kromming",
"ui.continuity_curvature_change": "Krommingsverandering",
"ui.continuity_crease": "Knik"
},
"pl": {
"ui.continuity_position": "Położenie",
"ui.continuity_tangent": "Styczność",
"ui.continuity_curvature": "Krzywizna",
"ui.continuity_curvature_change": "Zmiana krzywizny",
"ui.continuity_crease": "Załamanie"
},
"pt-BR": {
"ui.continuity_position": "Posição",
"ui.continuity_tangent": "Tangente",
"ui.continuity_curvature": "Curvatura",
"ui.continuity_curvature_change": "Variação de curvatura",
"ui.continuity_crease": "Vinco"
},
"ro": {
"ui.continuity_position": "Poziție",
"ui.continuity_tangent": "Tangent",
"ui.continuity_curvature": "Curbură",
"ui.continuity_curvature_change": "Variația curburii",
"ui.continuity_crease": "Muchie"
},
"ru": {
"ui.continuity_position": "Положение",
"ui.continuity_tangent": "Касание",
"ui.continuity_curvature": "Кривизна",
"ui.continuity_curvature_change": "Изменение кривизны",
"ui.continuity_crease": "Излом"
},
"sv": {
"ui.continuity_position": "Läge",
"ui.continuity_tangent": "Tangent",
"ui.continuity_curvature": "Krökning",
"ui.continuity_curvature_change": "Krökningsändring",
"ui.continuity_crease": "Veck"
},
"tr": {
"ui.continuity_position": "Konum",
"ui.continuity_tangent": "Teğet",
"ui.continuity_curvature": "Eğrilik",
"ui.continuity_curvature_change": "Eğrilik değişimi",
"ui.continuity_crease": "Kırık"
},
"uk": {
"ui.continuity_position": "Положення",
"ui.continuity_tangent": "Дотична",
"ui.continuity_curvature": "Кривизна",
"ui.continuity_curvature_change": "Зміна кривини",
"ui.continuity_crease": "Злам"
},
"vi": {
"ui.continuity_position": "Vị trí liên tục",
"ui.continuity_tangent": "Tiếp tuyến",
"ui.continuity_curvature": "Độ cong",
"ui.continuity_curvature_change": "Thay đổi độ cong",
"ui.continuity_crease": "Nếp gập"
},
"zh": {
"ui.continuity_position": "位置",
"ui.continuity_tangent": "相切",
"ui.continuity_curvature": "曲率",
"ui.continuity_curvature_change": "曲率变化",
"ui.continuity_crease": "折痕",
"ui.continuity_curvature_change_tip": "曲率变化 (G3):曲率在接缝处的变化也是平滑的。",
"ui.continuity_curvature_tip": "曲率连续 (G2):反射平滑穿过,没有折痕。",
"ui.continuity_position_tip": "位置 (G0):曲面相接,但接缝处有折痕。",
"ui.continuity_tangent_tip": "相切 (G1):没有折痕,但曲率在接缝处突变。"
},
"zh-TW": {
"ui.continuity_position": "位置",
"ui.continuity_tangent": "相切",
"ui.continuity_curvature": "曲率",
"ui.continuity_curvature_change": "曲率變化",
"ui.continuity_crease": "摺痕"
}
}
@@ -1,44 +0,0 @@
{
"en": {
"ui.comb_length": "Comb length",
"ui.comb_length_tip": "How long the teeth are: a multiple of the automatic length, which makes the longest tooth a fifth of the size of the curves shown.",
"ui.comb_teeth": "Teeth",
"ui.comb_teeth_tip": "How many teeth each comb has, evenly spaced along the curve. More teeth show more detail of how the curvature changes."
},
"ar": {
"ui.comb_length": "طول المشط",
"ui.comb_length_tip": "طول الأسنان: مضاعف للطول التلقائي الذي يجعل أطول سنّ خُمس حجم المنحنيات المعروضة.",
"ui.comb_teeth": "الأسنان",
"ui.comb_teeth_tip": "عدد أسنان كل مشط، موزّعة بالتساوي على طول المنحنى. كلما زادت الأسنان ظهرت تفاصيل أكثر عن تغيّر الانحناء."
},
"de": {
"ui.comb_length": "Kammlänge",
"ui.comb_length_tip": "Wie lang die Zähne sind: ein Vielfaches der automatischen Länge, bei der der längste Zahn ein Fünftel der Größe der gezeigten Kurven ist.",
"ui.comb_teeth": "Zähne",
"ui.comb_teeth_tip": "Wie viele Zähne jeder Kamm hat, gleichmäßig entlang der Kurve verteilt. Mehr Zähne zeigen genauer, wie sich die Krümmung ändert."
},
"he": {
"ui.comb_length": "אורך המסרק",
"ui.comb_length_tip": "אורך השיניים: כפולה של האורך האוטומטי, שבו השן הארוכה ביותר היא חמישית מגודל העקומות המוצגות.",
"ui.comb_teeth": "שיניים",
"ui.comb_teeth_tip": "כמה שיניים יש לכל מסרק, במרווחים שווים לאורך העקומה. יותר שיניים מראות בפירוט רב יותר איך העקמומיות משתנה."
},
"ja": {
"ui.comb_length": "コームの長さ",
"ui.comb_length_tip": "歯の長さ: 自動の長さの倍率です。自動の長さでは、いちばん長い歯が表示中の曲線の大きさの 5 分の 1 になります。",
"ui.comb_teeth": "歯の数",
"ui.comb_teeth_tip": "各コームの歯の数です。曲線に沿って等間隔に並びます。歯を増やすと、曲率の変わり方がより細かく見えます。"
},
"ko": {
"ui.comb_length": "빗 길이",
"ui.comb_length_tip": "빗살의 길이: 자동 길이의 배수입니다. 자동 길이에서는 가장 긴 빗살이 표시된 곡선 크기의 5분의 1이 됩니다.",
"ui.comb_teeth": "빗살 수",
"ui.comb_teeth_tip": "각 빗의 빗살 수이며, 곡선을 따라 같은 간격으로 놓입니다. 빗살이 많을수록 곡률이 어떻게 바뀌는지 더 자세히 보입니다."
},
"zh": {
"ui.comb_length": "梳长",
"ui.comb_length_tip": "梳齿的长度:自动长度的倍数。自动长度使最长的梳齿为所示曲线尺寸的五分之一。",
"ui.comb_teeth": "梳齿数",
"ui.comb_teeth_tip": "每个梳的梳齿数,沿曲线均匀分布。梳齿越多,越能看清曲率如何变化。"
}
}
@@ -1,100 +0,0 @@
{
"en": {
"ui.fillet_corner_ball": "Ball",
"ui.fillet_corner_ball_tip": "A piece of the rolling ball's sphere, tangent (G1) to each round.",
"ui.fillet_corner_needs_constant": "Smooth patch corners (G2) need Constant radius and Exact fit.",
"ui.fillet_corner_patch": "Smooth patch",
"ui.fillet_corner_patch_tip": "Curvature-continuous (G2): the corner is set back along each edge and filled with a patch, so reflections run through it without a kink.",
"ui.fillet_fit_needs_constant": "Radius fit needs Constant radius.",
"ui.fillet_setback": "Setback",
"ui.fillet_setback_hint": "{factor} × radius",
"ui.fillet_setback_tip": "Where the smooth corner patch starts: how far along each edge from the corner. The default is {factor} × the radius. It must be more than the least setback, where the rounds meet without one: the radius where the faces are square to each other.",
"ui.fillet_smooth_radius": "Smooth radius change",
"ui.fillet_type_curvature": "Curvature continuous",
"ui.fillet_type_tip": "The section across the edge. Curvature continuous: a curvature-continuous (G2) section between planar faces, so reflections run from the faces into the round without a kink."
},
"ar": {
"ui.fillet_corner_ball": "كرة",
"ui.fillet_corner_ball_tip": "جزء من سطح الكرة المتدحرجة، مماسّ (G1) لكل تقويس.",
"ui.fillet_corner_needs_constant": "زوايا الرقعة الناعمة (G2) تتطلب نصف قطر ثابتًا وملاءمة دقيقة لنصف القطر.",
"ui.fillet_corner_patch": "رقعة ناعمة",
"ui.fillet_corner_patch_tip": "متصل الانحناء (G2): تُرجَع الزاوية على طول كل حافة وتُملأ برقعة، فتمر الانعكاسات عبرها دون انكسار.",
"ui.fillet_fit_needs_constant": "ملاءمة نصف القطر تتطلب نصف قطر ثابتًا.",
"ui.fillet_setback": "مسافة الإرجاع",
"ui.fillet_setback_hint": "{factor} × نصف القطر",
"ui.fillet_setback_tip": "حيث تبدأ رقعة الزاوية الناعمة: المسافة على طول كل حافة من الزاوية. الافتراضي {factor} ضعف نصف القطر. يجب أن تكون أكبر من أقل مسافة إرجاع، حيث تلتقي الاستدارات بدونها: نصف القطر حيث تكون الأوجه متعامدة.",
"ui.fillet_smooth_radius": "تغيّر ناعم لنصف القطر",
"ui.fillet_type_curvature": "متصل الانحناء",
"ui.fillet_type_tip": "المقطع عبر الحافة. متصل الانحناء: مقطع متصل الانحناء (G2) بين وجوه مستوية، فتمر الانعكاسات من الوجوه إلى التقويس دون انكسار."
},
"de": {
"ui.fillet_corner_ball": "Kugel",
"ui.fillet_corner_ball_tip": "Ein Stück der Kugel des rollenden Balls, tangential (G1) zu jeder Rundung.",
"ui.fillet_corner_needs_constant": "Ecken mit glattem Flächenstück (G2) brauchen einen konstanten Radius und exakte Radiusanpassung.",
"ui.fillet_corner_patch": "Glattes Flächenstück",
"ui.fillet_corner_patch_tip": "Krümmungsstetig (G2): Die Ecke wird entlang jeder Kante zurückgesetzt und mit einem Flächenstück gefüllt, sodass Spiegelungen ohne Knick hindurchlaufen.",
"ui.fillet_fit_needs_constant": "Radiusanpassung braucht einen konstanten Radius.",
"ui.fillet_setback": "Rücksprung",
"ui.fillet_setback_hint": "{factor} × Radius",
"ui.fillet_setback_tip": "Wo das glatte Eckflächenstück beginnt: wie weit von der Ecke entlang jeder Kante. Standard ist {factor} × der Radius. Er muss größer sein als der kleinste Rücksprung, wo sich die Rundungen ohne ihn treffen: der Radius, wo die Flächen rechtwinklig zueinander stehen.",
"ui.fillet_smooth_radius": "Radius glatt ändern",
"ui.fillet_type_curvature": "Krümmungsstetig",
"ui.fillet_type_tip": "Der Querschnitt über die Kante. Krümmungsstetig: ein krümmungsstetiger Querschnitt (G2) zwischen ebenen Flächen, sodass Spiegelungen ohne Knick von den Flächen in die Rundung laufen."
},
"he": {
"ui.fillet_corner_ball": "כדור",
"ui.fillet_corner_ball_tip": "חלק מספירת הכדור המתגלגל, משיק (G1) לכל עיגול.",
"ui.fillet_corner_needs_constant": "פינות עם טלאי חלק (G2) דורשות רדיוס קבוע והתאמת רדיוס מדויקת.",
"ui.fillet_corner_patch": "טלאי חלק",
"ui.fillet_corner_patch_tip": "רציף בעקמומיות (G2): הפינה נסוגה לאורך כל קצה ומתמלאת בטלאי, כך שההשתקפויות עוברות בה בלי שבר.",
"ui.fillet_fit_needs_constant": "התאמת רדיוס דורשת רדיוס קבוע.",
"ui.fillet_setback": "נסיגה",
"ui.fillet_setback_hint": "{factor} × רדיוס",
"ui.fillet_setback_tip": "היכן מתחיל טלאי הפינה החלק: המרחק לאורך כל קצה מהפינה. ברירת המחדל היא פי {factor} מהרדיוס. עליה להיות גדולה מהנסיגה המזערית, שבה העיגולים נפגשים בלעדיה: הרדיוס כשהפאות ניצבות זו לזו.",
"ui.fillet_smooth_radius": "שינוי רדיוס חלק",
"ui.fillet_type_curvature": "רציף בעקמומיות",
"ui.fillet_type_tip": "החתך לרוחב הקצה. רציף בעקמומיות: חתך רציף בעקמומיות (G2) בין פאות מישוריות, כך שההשתקפויות עוברות מהפאות אל העיגול בלי שבר."
},
"ja": {
"ui.fillet_corner_ball": "ボール",
"ui.fillet_corner_ball_tip": "転がるボールの球面の一部で、各フィレットに接します (G1)。",
"ui.fillet_corner_needs_constant": "スムーズパッチのコーナー (G2) には、一定の半径と厳密な半径フィットが必要です。",
"ui.fillet_corner_patch": "スムーズパッチ",
"ui.fillet_corner_patch_tip": "曲率連続 (G2): コーナーを各エッジに沿って後退させてパッチで埋め、映り込みが折れずに通ります。",
"ui.fillet_fit_needs_constant": "半径フィットには一定の半径が必要です。",
"ui.fillet_setback": "セットバック",
"ui.fillet_setback_hint": "{factor} × 半径",
"ui.fillet_setback_tip": "なめらかなコーナーパッチが始まる位置: コーナーから各エッジに沿った距離。既定値は半径の {factor} 倍。最小セットバック (セットバックなしでラウンド同士が交わる位置。面どうしが直角なら半径) より大きくする必要があります。",
"ui.fillet_smooth_radius": "半径をなめらかに変化",
"ui.fillet_type_curvature": "曲率連続",
"ui.fillet_type_tip": "エッジを横切る断面。曲率連続: 平面の間の曲率連続 (G2) 断面で、映り込みが面からフィレットへ折れずにつながります。"
},
"ko": {
"ui.fillet_corner_ball": "볼",
"ui.fillet_corner_ball_tip": "굴러가는 볼의 구면 일부로, 각 라운드에 접합니다(G1).",
"ui.fillet_corner_needs_constant": "부드러운 패치 코너(G2)에는 일정한 반지름과 정확한 반지름 맞춤이 필요합니다.",
"ui.fillet_corner_patch": "부드러운 패치",
"ui.fillet_corner_patch_tip": "곡률 연속(G2): 코너를 각 모서리를 따라 물려 패치로 채우므로, 반사가 꺾임 없이 지나갑니다.",
"ui.fillet_fit_needs_constant": "반지름 맞춤에는 일정한 반지름이 필요합니다.",
"ui.fillet_setback": "셋백",
"ui.fillet_setback_hint": "{factor} × 반지름",
"ui.fillet_setback_tip": "부드러운 코너 패치가 시작되는 위치: 코너에서 각 모서리를 따른 거리. 기본값은 반지름의 {factor}배. 최소 셋백(셋백 없이 라운드가 만나는 곳, 면이 서로 직각이면 반지름)보다 커야 합니다.",
"ui.fillet_smooth_radius": "반지름 부드럽게 변화",
"ui.fillet_type_curvature": "곡률 연속",
"ui.fillet_type_tip": "모서리를 가로지르는 단면. 곡률 연속: 평면 사이의 곡률 연속(G2) 단면으로, 반사가 면에서 라운드로 꺾임 없이 이어집니다."
},
"zh": {
"ui.fillet_corner_ball": "球面",
"ui.fillet_corner_ball_tip": "滚球球面的一部分,与每个圆角相切 (G1)。",
"ui.fillet_corner_needs_constant": "平滑曲面片角点 (G2) 需要恒定半径和精确的半径拟合。",
"ui.fillet_corner_patch": "平滑曲面片",
"ui.fillet_corner_patch_tip": "曲率连续 (G2):角点沿每条边后退,并用曲面片填充,反射穿过时没有折痕。",
"ui.fillet_fit_needs_constant": "半径拟合需要恒定半径。",
"ui.fillet_setback": "后退距离",
"ui.fillet_setback_hint": "{factor} × 半径",
"ui.fillet_setback_tip": "平滑角点曲面片开始的位置:从角点沿每条边的距离。默认值为半径的 {factor} 倍。必须大于最小后退距离(不后退时圆角相交之处;面相互垂直时即半径)。",
"ui.fillet_smooth_radius": "半径平滑变化",
"ui.fillet_type_curvature": "曲率连续",
"ui.fillet_type_tip": "横跨边的截面。曲率连续:平面之间的曲率连续 (G2) 截面,反射从面平滑过渡到圆角,没有折痕。"
}
}
@@ -1,100 +0,0 @@
{
"en": {
"ui.copy_details": "Copy Details",
"ui.copy_details_tip": "Copy the full message, to look it up or to report it.",
"ui.fillet_error_corner": "The smooth corner could not be built here. Try another Setback, or Tangent corners.",
"ui.fillet_error_failed": "This fillet could not be built on these edges. Try another radius, or round fewer edges at once.",
"ui.fillet_error_too_large": "The radius is too large for the faces beside these edges. Try a smaller radius, or set Face limits to Largest radius.",
"ui.fillet_fit": "Face limits",
"ui.fillet_fit_exact": "Exact radius",
"ui.fillet_fit_reduce": "Largest radius",
"ui.fillet_fit_taper": "Narrowed radius",
"ui.fillet_fit_tip": "When the radius is larger than the faces beside an edge allow.\nExact radius: the radius as given, or nothing rounded and a message saying why.\nLargest radius: every edge rounded with the largest radius that fits.\nNarrowed radius: the radius kept, the round narrowed only where the faces run out.",
"ui.fillet_options_tip": "Tangent chain: also round the edges that continue smoothly from the picked ones.\nPreview: show the result in the view while you edit.",
"ui.fillet_type_choices_tip": "Constant radius: one radius all along the edge.\nChord length: the width across the round stays the same, whatever angle the faces meet at.\nVariable radius: a radius at each end, and more along the edge if you add them.\nCurvature continuous: a section without a kink in reflections where it meets flat faces (G2).\nSpline: the radius along the edge follows control radii you set."
},
"ar": {
"ui.copy_details": "نسخ التفاصيل",
"ui.copy_details_tip": "انسخ الرسالة كاملة للبحث عنها أو للإبلاغ عنها.",
"ui.fillet_error_corner": "تعذّر بناء الزاوية الناعمة هنا. جرّب مسافة إرجاع أخرى، أو زوايا مماسّة.",
"ui.fillet_error_failed": "تعذّر بناء هذا التقويس على هذه الحواف. جرّب نصف قطر آخر، أو قوّس حوافّ أقل في المرة الواحدة.",
"ui.fillet_error_too_large": "نصف القطر كبير جدًا على الوجوه المجاورة لهذه الحواف. جرّب نصف قطر أصغر، أو اختر في «حدود الوجوه» الخيار «أكبر نصف قطر».",
"ui.fillet_fit": "حدود الوجوه",
"ui.fillet_fit_exact": "نصف قطر دقيق",
"ui.fillet_fit_reduce": "أكبر نصف قطر",
"ui.fillet_fit_taper": "نصف قطر مُضيَّق",
"ui.fillet_fit_tip": "عندما يكون نصف القطر أكبر مما تسمح به الوجوه المجاورة للحافة.\nنصف قطر دقيق: نصف القطر كما هو، أو لا تقويس ورسالة توضّح السبب.\nأكبر نصف قطر: تُقوَّس كل حافة بأكبر نصف قطر يتّسع.\nنصف قطر مُضيَّق: يبقى نصف القطر، ويُضيَّق التقويس فقط حيث تنتهي الوجوه.",
"ui.fillet_options_tip": "سلسلة مماسّة: قوّس أيضًا الحواف التي تتصل بسلاسة بالحواف المختارة.\nمعاينة: اعرض النتيجة في العرض أثناء التحرير.",
"ui.fillet_type_choices_tip": "نصف قطر ثابت: نصف قطر واحد على طول الحافة.\nطول الوتر: يبقى عرض التقويس نفسه مهما كانت الزاوية بين الوجوه.\nنصف قطر متغيّر: نصف قطر عند كل طرف، ومزيد على طول الحافة إن أضفته.\nمتصل الانحناء: مقطع بلا انكسار في الانعكاسات حيث يلتقي بالوجوه المستوية (G2).\nمنحنى: يتبع نصف القطر على طول الحافة أنصاف أقطار تحكّم تحدّدها."
},
"de": {
"ui.copy_details": "Details kopieren",
"ui.copy_details_tip": "Die vollständige Meldung kopieren, um sie nachzuschlagen oder zu melden.",
"ui.fillet_error_corner": "Die glatte Ecke ließ sich hier nicht bauen. Versuchen Sie einen anderen Rücksprung oder tangentiale Ecken.",
"ui.fillet_error_failed": "Diese Rundung ließ sich an diesen Kanten nicht bauen. Versuchen Sie einen anderen Radius oder runden Sie weniger Kanten auf einmal.",
"ui.fillet_error_too_large": "Der Radius ist zu groß für die Flächen neben diesen Kanten. Versuchen Sie einen kleineren Radius oder stellen Sie „Flächengrenzen“ auf „Größter Radius“.",
"ui.fillet_fit": "Flächengrenzen",
"ui.fillet_fit_exact": "Exakter Radius",
"ui.fillet_fit_reduce": "Größter Radius",
"ui.fillet_fit_taper": "Verjüngter Radius",
"ui.fillet_fit_tip": "Wenn der Radius größer ist, als die Flächen neben einer Kante zulassen.\nExakter Radius: der angegebene Radius, oder keine Rundung und eine Meldung mit dem Grund.\nGrößter Radius: jede Kante mit dem größten passenden Radius gerundet.\nVerjüngter Radius: der Radius bleibt, die Rundung wird nur dort verjüngt, wo die Flächen enden.",
"ui.fillet_options_tip": "Tangentenkette: auch die Kanten runden, die glatt an die gewählten anschließen.\nVorschau: das Ergebnis beim Bearbeiten in der Ansicht zeigen.",
"ui.fillet_type_choices_tip": "Konstanter Radius: ein Radius entlang der ganzen Kante.\nSehnenlänge: die Breite der Rundung bleibt gleich, in welchem Winkel die Flächen auch aufeinandertreffen.\nVariabler Radius: ein Radius an jedem Ende und weitere entlang der Kante, wenn Sie sie hinzufügen.\nKrümmungsstetig: ein Querschnitt ohne Knick in den Spiegelungen, wo er auf ebene Flächen trifft (G2).\nSpline: der Radius entlang der Kante folgt Steuerradien, die Sie festlegen."
},
"he": {
"ui.copy_details": "העתקת פרטים",
"ui.copy_details_tip": "העתקת ההודעה המלאה, כדי לחפש אותה או לדווח עליה.",
"ui.fillet_error_corner": "לא ניתן היה לבנות כאן את הפינה החלקה. נסו נסיגה אחרת, או פינות משיקות.",
"ui.fillet_error_failed": "לא ניתן היה לבנות את העיגול הזה על הקצוות האלה. נסו רדיוס אחר, או עגלו פחות קצוות בבת אחת.",
"ui.fillet_error_too_large": "הרדיוס גדול מדי עבור הפאות שליד הקצוות האלה. נסו רדיוס קטן יותר, או בחרו ב„גבולות הפאות” את „הרדיוס הגדול ביותר”.",
"ui.fillet_fit": "גבולות הפאות",
"ui.fillet_fit_exact": "רדיוס מדויק",
"ui.fillet_fit_reduce": "הרדיוס הגדול ביותר",
"ui.fillet_fit_taper": "רדיוס מוצר",
"ui.fillet_fit_tip": "כשהרדיוס גדול ממה שהפאות שליד הקצה מאפשרות.\nרדיוס מדויק: הרדיוס כפי שניתן, או ללא עיגול והודעה שמסבירה למה.\nהרדיוס הגדול ביותר: כל קצה מעוגל ברדיוס הגדול ביותר שנכנס.\nרדיוס מוצר: הרדיוס נשמר, והעיגול מוצר רק היכן שהפאות נגמרות.",
"ui.fillet_options_tip": "שרשרת משיקה: לעגל גם את הקצוות שממשיכים בחלקות מהקצוות שנבחרו.\nתצוגה מקדימה: להציג את התוצאה בתצוגה בזמן העריכה.",
"ui.fillet_type_choices_tip": "רדיוס קבוע: רדיוס אחד לכל אורך הקצה.\nאורך מיתר: רוחב העיגול נשאר זהה, בכל זווית שבה הפאות נפגשות.\nרדיוס משתנה: רדיוס בכל קצה, ועוד לאורך הקצה אם מוסיפים.\nרציף בעקמומיות: חתך בלי שבר בהשתקפויות היכן שהוא פוגש פאות מישוריות (G2).\nספליין: הרדיוס לאורך הקצה עוקב אחרי רדיוסי בקרה שאתם קובעים."
},
"ja": {
"ui.copy_details": "詳細をコピー",
"ui.copy_details_tip": "調べたり報告したりできるよう、メッセージ全文をコピーします。",
"ui.fillet_error_corner": "ここではなめらかなコーナーを作れませんでした。別のセットバックか、接線のコーナーを試してください。",
"ui.fillet_error_failed": "このフィレットをこれらのエッジに作れませんでした。別の半径を試すか、一度に丸めるエッジを減らしてください。",
"ui.fillet_error_too_large": "これらのエッジの隣の面に対して半径が大きすぎます。小さい半径を試すか、「面の境界」を「最大半径」にしてください。",
"ui.fillet_fit": "面の境界",
"ui.fillet_fit_exact": "正確な半径",
"ui.fillet_fit_reduce": "最大半径",
"ui.fillet_fit_taper": "狭めた半径",
"ui.fillet_fit_tip": "半径がエッジの隣の面で収まる大きさを超えるとき。\n正確な半径: 指定どおりの半径。収まらなければ丸めずに理由を知らせます。\n最大半径: 各エッジを収まる最大の半径で丸めます。\n狭めた半径: 半径を保ち、面が足りない所だけフィレットを細くします。",
"ui.fillet_options_tip": "正接チェーン: 選んだエッジからなめらかに続くエッジも丸めます。\nプレビュー: 編集中に結果をビューに表示します。",
"ui.fillet_type_choices_tip": "一定の半径: エッジ全体で一つの半径。\n弦長: 面がどんな角度で交わっても、フィレットの幅が同じ。\n可変半径: 両端の半径と、追加すればエッジ沿いの半径。\n曲率連続: 平面と接する所で映り込みが折れない断面 (G2)。\nスプライン: エッジ沿いの半径が、設定した制御半径に従います。"
},
"ko": {
"ui.copy_details": "세부 정보 복사",
"ui.copy_details_tip": "찾아보거나 보고할 수 있도록 전체 메시지를 복사합니다.",
"ui.fillet_error_corner": "여기에서는 부드러운 코너를 만들 수 없었습니다. 다른 셋백이나 접선 코너를 시도해 보세요.",
"ui.fillet_error_failed": "이 모서리들에 이 필렛을 만들 수 없었습니다. 다른 반지름을 시도하거나 한 번에 둥글게 하는 모서리 수를 줄여 보세요.",
"ui.fillet_error_too_large": "이 모서리 옆의 면에 비해 반지름이 너무 큽니다. 더 작은 반지름을 시도하거나 '면 경계'를 '최대 반지름'으로 설정하세요.",
"ui.fillet_fit": "면 경계",
"ui.fillet_fit_exact": "정확한 반지름",
"ui.fillet_fit_reduce": "최대 반지름",
"ui.fillet_fit_taper": "좁힌 반지름",
"ui.fillet_fit_tip": "반지름이 모서리 옆 면이 허용하는 것보다 클 때.\n정확한 반지름: 지정한 반지름 그대로, 또는 둥글게 하지 않고 이유를 알리는 메시지.\n최대 반지름: 모든 모서리를 들어가는 가장 큰 반지름으로 둥글게 합니다.\n좁힌 반지름: 반지름을 유지하고 면이 모자란 곳에서만 라운드를 좁힙니다.",
"ui.fillet_options_tip": "접선 체인: 선택한 모서리에서 부드럽게 이어지는 모서리도 둥글게 합니다.\n미리 보기: 편집하는 동안 결과를 뷰에 표시합니다.",
"ui.fillet_type_choices_tip": "일정한 반지름: 모서리 전체에 하나의 반지름.\n현 길이: 면이 어떤 각도로 만나든 라운드의 폭이 같습니다.\n가변 반지름: 양 끝의 반지름과, 추가하면 모서리를 따라 더.\n곡률 연속: 평면과 만나는 곳에서 반사가 꺾이지 않는 단면(G2).\n스플라인: 모서리를 따라 반지름이 설정한 제어 반지름을 따릅니다."
},
"zh": {
"ui.copy_details": "复制详细信息",
"ui.copy_details_tip": "复制完整消息,以便查找或报告。",
"ui.fillet_error_corner": "无法在此处构建平滑角点。请尝试其他后退距离,或相切角点。",
"ui.fillet_error_failed": "无法在这些边上构建此圆角。请尝试其他半径,或一次少倒几条边。",
"ui.fillet_error_too_large": "半径对这些边旁边的面来说太大。请尝试更小的半径,或将“面边界”设为“最大半径”。",
"ui.fillet_fit": "面边界",
"ui.fillet_fit_exact": "精确半径",
"ui.fillet_fit_reduce": "最大半径",
"ui.fillet_fit_taper": "收窄半径",
"ui.fillet_fit_tip": "当半径大于边旁边的面所允许的大小时。\n精确半径:按给定的半径倒圆,否则不倒圆并说明原因。\n最大半径:用能容纳的最大半径倒每条边。\n收窄半径:保持半径,只在面不够的地方收窄圆角。",
"ui.fillet_options_tip": "相切链:同时倒圆与所选边平滑相连的边。\n预览:编辑时在视图中显示结果。",
"ui.fillet_type_choices_tip": "恒定半径:整条边一个半径。\n弦长:无论面以什么角度相交,圆角宽度都相同。\n可变半径:两端各一个半径,添加后沿边还有更多。\n曲率连续:与平面相接处反射没有折痕的截面 (G2)。\n样条:沿边的半径跟随您设置的控制半径。"
}
}
@@ -1,29 +0,0 @@
{
"en": {
"ui.fillet_error_setback_short": "The setback is too short for this corner's patch: it builds from {least} on. Try a longer Setback."
},
"ar": {
"ui.fillet_error_setback_short": "مسافة الإرجاع قصيرة جدًا على رقعة هذه الزاوية: تُبنى ابتداءً من {least}. جرّب مسافة إرجاع أطول."
},
"de": {
"ui.fillet_error_setback_short": "Der Rücksprung ist für das Eckstück zu kurz: Es lässt sich ab {least} bauen. Versuchen Sie einen längeren Rücksprung."
},
"he": {
"ui.fillet_error_setback_short": "הנסיגה קצרה מדי עבור הטלאי של פינה זו: הוא נבנה החל מ-{least}. נסו נסיגה ארוכה יותר."
},
"ja": {
"ui.fillet_error_setback_short": "このコーナーのパッチにはセットバックが短すぎます。{least} 以上で作れます。より長いセットバックを試してください。"
},
"ko": {
"ui.fillet_error_setback_short": "이 코너의 패치에 비해 셋백이 너무 짧습니다. {least}부터 만들 수 있습니다. 더 긴 셋백을 시도해 보세요."
},
"vi": {
"ui.fillet_error_setback_short": "Khoảng Lùi quá ngắn cho mảng của góc này: mảng được tạo từ {least} trở lên. Hãy thử khoảng Lùi dài hơn."
},
"zh": {
"ui.fillet_error_setback_short": "对于此角点的面片,后退距离太短:从 {least} 起可以构建。请尝试更长的后退距离。"
},
"vi": {
"ui.fillet_error_setback_short": "Khoảng lùi quá ngắn cho mảng ở góc này: góc dựng được từ {least} trở lên. Hãy thử một khoảng Lùi dài hơn."
}
}
@@ -1,23 +0,0 @@
{
"en": {
"ui.fillet_setback_least": "More than {least}"
},
"ar": {
"ui.fillet_setback_least": "أكثر من {least}"
},
"de": {
"ui.fillet_setback_least": "Mehr als {least}"
},
"he": {
"ui.fillet_setback_least": "יותר מ-{least}"
},
"ja": {
"ui.fillet_setback_least": "{least} より大きく"
},
"ko": {
"ui.fillet_setback_least": "{least}보다 크게"
},
"zh": {
"ui.fillet_setback_least": "须大于 {least}"
}
}
@@ -1,20 +0,0 @@
{
"ar": {
"help.version": "الإصدار {version}"
},
"en": {
"help.version": "Version {version}"
},
"he": {
"help.version": "גרסה {version}"
},
"ja": {
"help.version": "バージョン {version}"
},
"zh": {
"help.version": "版本 {version}"
},
"zh-TW": {
"help.version": "版本 {version}"
}
}
@@ -1,30 +0,0 @@
{
"en": {
"import_report.refused_one": "1 part couldn't be made into a solid and was not imported.",
"import_report.refused_other": "{count} parts couldn't be made into solids and were not imported."
},
"ar": {
"import_report.refused_one": "تعذّر تحويل جزء واحد إلى مجسم، فلم يُستورد.",
"import_report.refused_other": "تعذّر تحويل {count} أجزاء إلى مجسمات، فلم تُستورد."
},
"de": {
"import_report.refused_one": "1 Teil konnte nicht zu einem Volumenkörper werden und wurde nicht importiert.",
"import_report.refused_other": "{count} Teile konnten nicht zu Volumenkörpern werden und wurden nicht importiert."
},
"he": {
"import_report.refused_one": "לא ניתן היה להפוך חלק אחד לגוף מוצק והוא לא יובא.",
"import_report.refused_other": "לא ניתן היה להפוך {count} חלקים לגופים מוצקים והם לא יובאו."
},
"ja": {
"import_report.refused_one": "1 個のパーツをソリッドにできず、読み込みませんでした。",
"import_report.refused_other": "{count} 個のパーツをソリッドにできず、読み込みませんでした。"
},
"ko": {
"import_report.refused_one": "부품 1개를 솔리드로 만들지 못해 가져오지 않았습니다.",
"import_report.refused_other": "부품 {count}개를 솔리드로 만들지 못해 가져오지 않았습니다."
},
"zh": {
"import_report.refused_one": "1 个零件无法生成实体,未导入。",
"import_report.refused_other": "{count} 个零件无法生成实体,未导入。"
}
}
@@ -1,135 +0,0 @@
{
"en": {
"import_report.details": "Details:",
"import_report.file_one": "There was 1 other problem with the file.",
"import_report.file_other": "There were {count} other problems with the file.",
"import_report.hint": "Exporting these parts again from the program that made them may fix this. Copy Warning Message has the details.",
"import_report.left_out_one": "1 face couldn't be repaired and is missing.",
"import_report.left_out_other": "{count} faces couldn't be repaired and are missing.",
"import_report.not_imported_one": "1 part couldn't be imported.",
"import_report.not_imported_other": "{count} parts couldn't be imported.",
"import_report.not_shown_one": "1 face couldn't be drawn and is hidden.",
"import_report.not_shown_other": "{count} faces couldn't be drawn and are hidden.",
"import_report.open_one": "1 part has gaps between its faces and came in as an open body.",
"import_report.open_other": "{count} parts have gaps between their faces and came in as open bodies.",
"import_report.repaired_one": "Small flaws were repaired in 1 part.",
"import_report.repaired_other": "Small flaws were repaired in {count} parts.",
"import_report.solids": "Imported {solids} of {parts} parts as solids.",
"import_report.surfaces_one": "1 part couldn't be made into a solid and came in as surfaces.",
"import_report.surfaces_other": "{count} parts couldn't be made into solids and came in as surfaces."
},
"ar": {
"import_report.details": "التفاصيل:",
"import_report.file_one": "كانت هناك مشكلة أخرى واحدة في الملف.",
"import_report.file_other": "كانت هناك {count} مشكلات أخرى في الملف.",
"import_report.hint": "قد يحل ذلك تصدير هذه الأجزاء مرة أخرى من البرنامج الذي أنشأها. يحتوي «نسخ رسالة التحذير» على التفاصيل.",
"import_report.left_out_one": "تعذّر إصلاح وجه واحد وهو مفقود.",
"import_report.left_out_other": "تعذّر إصلاح {count} أوجه وهي مفقودة.",
"import_report.not_imported_one": "تعذّر استيراد جزء واحد.",
"import_report.not_imported_other": "تعذّر استيراد {count} أجزاء.",
"import_report.not_shown_one": "تعذّر رسم وجه واحد وهو مخفي.",
"import_report.not_shown_other": "تعذّر رسم {count} أوجه وهي مخفية.",
"import_report.open_one": "في جزء واحد فجوات بين أوجهه، فاستُورد كجسم مفتوح.",
"import_report.open_other": "في {count} أجزاء فجوات بين أوجهها، فاستُوردت كأجسام مفتوحة.",
"import_report.repaired_one": "أُصلحت عيوب صغيرة في جزء واحد.",
"import_report.repaired_other": "أُصلحت عيوب صغيرة في {count} أجزاء.",
"import_report.solids": "استُورد {solids} من {parts} أجزاء كمجسمات.",
"import_report.surfaces_one": "تعذّر تحويل جزء واحد إلى مجسم، فاستُورد كأسطح.",
"import_report.surfaces_other": "تعذّر تحويل {count} أجزاء إلى مجسمات، فاستُوردت كأسطح."
},
"de": {
"import_report.details": "Details:",
"import_report.file_one": "Die Datei hatte 1 weiteres Problem.",
"import_report.file_other": "Die Datei hatte {count} weitere Probleme.",
"import_report.hint": "Die Teile erneut aus dem Programm zu exportieren, mit dem sie erstellt wurden, kann das beheben. „Warnmeldung kopieren“ enthält die Details.",
"import_report.left_out_one": "1 Fläche konnte nicht repariert werden und fehlt.",
"import_report.left_out_other": "{count} Flächen konnten nicht repariert werden und fehlen.",
"import_report.not_imported_one": "1 Teil konnte nicht importiert werden.",
"import_report.not_imported_other": "{count} Teile konnten nicht importiert werden.",
"import_report.not_shown_one": "1 Fläche konnte nicht gezeichnet werden und ist ausgeblendet.",
"import_report.not_shown_other": "{count} Flächen konnten nicht gezeichnet werden und sind ausgeblendet.",
"import_report.open_one": "1 Teil hat Lücken zwischen seinen Flächen und kam als offener Körper herein.",
"import_report.open_other": "{count} Teile haben Lücken zwischen ihren Flächen und kamen als offene Körper herein.",
"import_report.repaired_one": "Kleine Fehler wurden an 1 Teil repariert.",
"import_report.repaired_other": "Kleine Fehler wurden an {count} Teilen repariert.",
"import_report.solids": "{solids} von {parts} Teilen als Volumenkörper importiert.",
"import_report.surfaces_one": "1 Teil konnte nicht zu einem Volumenkörper werden und kam als Flächen herein.",
"import_report.surfaces_other": "{count} Teile konnten nicht zu Volumenkörpern werden und kamen als Flächen herein."
},
"he": {
"import_report.details": "פרטים:",
"import_report.file_one": "הייתה בעיה נוספת אחת בקובץ.",
"import_report.file_other": "היו {count} בעיות נוספות בקובץ.",
"import_report.hint": "ייצוא מחדש של החלקים האלה מהתוכנה שיצרה אותם עשוי לפתור זאת. ב„העתקת הודעת האזהרה” יש את הפרטים.",
"import_report.left_out_one": "לא ניתן היה לתקן פאה אחת והיא חסרה.",
"import_report.left_out_other": "לא ניתן היה לתקן {count} פאות והן חסרות.",
"import_report.not_imported_one": "לא ניתן היה לייבא חלק אחד.",
"import_report.not_imported_other": "לא ניתן היה לייבא {count} חלקים.",
"import_report.not_shown_one": "לא ניתן היה לצייר פאה אחת והיא מוסתרת.",
"import_report.not_shown_other": "לא ניתן היה לצייר {count} פאות והן מוסתרות.",
"import_report.open_one": "בחלק אחד יש רווחים בין הפאות והוא יובא כגוף פתוח.",
"import_report.open_other": "ב-{count} חלקים יש רווחים בין הפאות והם יובאו כגופים פתוחים.",
"import_report.repaired_one": "תוקנו פגמים קטנים בחלק אחד.",
"import_report.repaired_other": "תוקנו פגמים קטנים ב-{count} חלקים.",
"import_report.solids": "{solids} מתוך {parts} חלקים יובאו כגופים מוצקים.",
"import_report.surfaces_one": "לא ניתן היה להפוך חלק אחד לגוף מוצק והוא יובא כמשטחים.",
"import_report.surfaces_other": "לא ניתן היה להפוך {count} חלקים לגופים מוצקים והם יובאו כמשטחים."
},
"ja": {
"import_report.details": "詳細:",
"import_report.file_one": "ファイルにほかに 1 件の問題がありました。",
"import_report.file_other": "ファイルにほかに {count} 件の問題がありました。",
"import_report.hint": "作成元のプログラムからこれらのパーツを書き出し直すと直ることがあります。詳細は「警告メッセージをコピー」で確認できます。",
"import_report.left_out_one": "1 個の面を修復できず、欠けています。",
"import_report.left_out_other": "{count} 個の面を修復できず、欠けています。",
"import_report.not_imported_one": "1 個のパーツを読み込めませんでした。",
"import_report.not_imported_other": "{count} 個のパーツを読み込めませんでした。",
"import_report.not_shown_one": "1 個の面を描画できず、非表示です。",
"import_report.not_shown_other": "{count} 個の面を描画できず、非表示です。",
"import_report.open_one": "1 個のパーツは面の間にすき間があり、開いたボディとして読み込まれました。",
"import_report.open_other": "{count} 個のパーツは面の間にすき間があり、開いたボディとして読み込まれました。",
"import_report.repaired_one": "1 個のパーツの小さな不具合を修復しました。",
"import_report.repaired_other": "{count} 個のパーツの小さな不具合を修復しました。",
"import_report.solids": "{parts} 個のパーツのうち {solids} 個をソリッドとして読み込みました。",
"import_report.surfaces_one": "1 個のパーツをソリッドにできず、サーフェスとして読み込みました。",
"import_report.surfaces_other": "{count} 個のパーツをソリッドにできず、サーフェスとして読み込みました。"
},
"ko": {
"import_report.details": "세부 정보:",
"import_report.file_one": "파일에 다른 문제가 1개 있었습니다.",
"import_report.file_other": "파일에 다른 문제가 {count}개 있었습니다.",
"import_report.hint": "이 부품을 만든 프로그램에서 다시 내보내면 해결될 수 있습니다. 세부 정보는 경고 메시지 복사에 있습니다.",
"import_report.left_out_one": "면 1개를 복구하지 못해 빠져 있습니다.",
"import_report.left_out_other": "면 {count}개를 복구하지 못해 빠져 있습니다.",
"import_report.not_imported_one": "부품 1개를 가져오지 못했습니다.",
"import_report.not_imported_other": "부품 {count}개를 가져오지 못했습니다.",
"import_report.not_shown_one": "면 1개를 그리지 못해 숨겨져 있습니다.",
"import_report.not_shown_other": "면 {count}개를 그리지 못해 숨겨져 있습니다.",
"import_report.open_one": "부품 1개는 면 사이에 틈이 있어 열린 바디로 들어왔습니다.",
"import_report.open_other": "부품 {count}개는 면 사이에 틈이 있어 열린 바디로 들어왔습니다.",
"import_report.repaired_one": "부품 1개의 작은 결함을 복구했습니다.",
"import_report.repaired_other": "부품 {count}개의 작은 결함을 복구했습니다.",
"import_report.solids": "부품 {parts}개 중 {solids}개를 솔리드로 가져왔습니다.",
"import_report.surfaces_one": "부품 1개를 솔리드로 만들지 못해 서피스로 들어왔습니다.",
"import_report.surfaces_other": "부품 {count}개를 솔리드로 만들지 못해 서피스로 들어왔습니다."
},
"zh": {
"import_report.details": "详细信息:",
"import_report.file_one": "文件还有 1 个其他问题。",
"import_report.file_other": "文件还有 {count} 个其他问题。",
"import_report.hint": "从创建这些零件的程序重新导出可能会解决此问题。“复制警告消息”中有详细信息。",
"import_report.left_out_one": "1 个面无法修复,已缺失。",
"import_report.left_out_other": "{count} 个面无法修复,已缺失。",
"import_report.not_imported_one": "1 个零件无法导入。",
"import_report.not_imported_other": "{count} 个零件无法导入。",
"import_report.not_shown_one": "1 个面无法绘制,已隐藏。",
"import_report.not_shown_other": "{count} 个面无法绘制,已隐藏。",
"import_report.open_one": "1 个零件的面之间有缝隙,作为开放实体导入。",
"import_report.open_other": "{count} 个零件的面之间有缝隙,作为开放实体导入。",
"import_report.repaired_one": "已修复 1 个零件中的小缺陷。",
"import_report.repaired_other": "已修复 {count} 个零件中的小缺陷。",
"import_report.solids": "{parts} 个零件中有 {solids} 个作为实体导入。",
"import_report.surfaces_one": "1 个零件无法生成实体,作为曲面导入。",
"import_report.surfaces_other": "{count} 个零件无法生成实体,作为曲面导入。"
}
}
@@ -1,72 +0,0 @@
{
"en": {
"file_load.step_build": "Building the model",
"file_load.step_feature": "Feature {done} of {total}",
"file_load.step_part": "Part {done} of {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "Reading the file",
"file_load.step_rebuild": "Rebuilding the features",
"file_load.step_repair": "Checking and repairing the parts",
"file_load.step_show": "Preparing the view"
},
"ar": {
"file_load.step_build": "جارٍ بناء النموذج",
"file_load.step_feature": "الميزة {done} من {total}",
"file_load.step_part": "الجزء {done} من {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "جارٍ قراءة الملف",
"file_load.step_rebuild": "جارٍ إعادة بناء الميزات",
"file_load.step_repair": "جارٍ فحص الأجزاء وإصلاحها",
"file_load.step_show": "جارٍ تجهيز العرض"
},
"de": {
"file_load.step_build": "Modell wird aufgebaut",
"file_load.step_feature": "Merkmal {done} von {total}",
"file_load.step_part": "Teil {done} von {total}",
"file_load.step_percent": "{percent} %",
"file_load.step_read": "Datei wird gelesen",
"file_load.step_rebuild": "Merkmale werden neu aufgebaut",
"file_load.step_repair": "Teile werden geprüft und repariert",
"file_load.step_show": "Ansicht wird vorbereitet"
},
"he": {
"file_load.step_build": "בונה את המודל",
"file_load.step_feature": "תכונה {done} מתוך {total}",
"file_load.step_part": "חלק {done} מתוך {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "קורא את הקובץ",
"file_load.step_rebuild": "בונה מחדש את התכונות",
"file_load.step_repair": "בודק ומתקן את החלקים",
"file_load.step_show": "מכין את התצוגה"
},
"ja": {
"file_load.step_build": "モデルを構築中",
"file_load.step_feature": "フィーチャー {done}/{total}",
"file_load.step_part": "パーツ {done}/{total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "ファイルを読み込み中",
"file_load.step_rebuild": "フィーチャーを再構築中",
"file_load.step_repair": "パーツを確認・修復中",
"file_load.step_show": "ビューを準備中"
},
"ko": {
"file_load.step_build": "모델 만드는 중",
"file_load.step_feature": "피처 {done}/{total}",
"file_load.step_part": "부품 {done}/{total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "파일 읽는 중",
"file_load.step_rebuild": "피처 다시 빌드 중",
"file_load.step_repair": "부품 확인 및 복구 중",
"file_load.step_show": "뷰 준비 중"
},
"zh": {
"file_load.step_build": "正在构建模型",
"file_load.step_feature": "特征 {done}/{total}",
"file_load.step_part": "零件 {done}/{total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "正在读取文件",
"file_load.step_rebuild": "正在重建特征",
"file_load.step_repair": "正在检查和修复零件",
"file_load.step_show": "正在准备视图"
}
}
@@ -1,23 +0,0 @@
{
"en": {
"ui.patch_continuity_corner_tip": "The patch meets the faces round it at the chosen continuity along each side. At a corner where those faces meet each other with different curvatures, it stays tangent (G1) there."
},
"ar": {
"ui.patch_continuity_corner_tip": "تلتقي الرقعة بالأوجه المحيطة بها بالاستمرارية المختارة على طول كل جانب. وعند زاوية تلتقي فيها تلك الأوجه بعضها ببعض بانحناءات مختلفة، تبقى مماسّة (G1) هناك."
},
"de": {
"ui.patch_continuity_corner_tip": "Der Patch schließt entlang jeder Seite mit der gewählten Stetigkeit an die umgebenden Flächen an. An einer Ecke, an der diese Flächen mit unterschiedlicher Krümmung aufeinandertreffen, bleibt er dort tangential (G1)."
},
"he": {
"ui.patch_continuity_corner_tip": "הטלאי פוגש את הפאות שסביבו ברציפות שנבחרה לאורך כל צלע. בפינה שבה הפאות האלה נפגשות זו עם זו בעקמומיות שונה, הוא נשאר משיק (G1) שם."
},
"ja": {
"ui.patch_continuity_corner_tip": "パッチは各辺に沿って、周囲の面と選んだ連続性でつながります。周囲の面どうしが異なる曲率で接するコーナーでは、そこで接線 (G1) にとどまります。"
},
"ko": {
"ui.patch_continuity_corner_tip": "패치는 각 변을 따라 주변 면과 선택한 연속성으로 이어집니다. 주변 면끼리 서로 다른 곡률로 만나는 모서리에서는 그곳에서 접선(G1)으로 유지됩니다."
},
"zh": {
"ui.patch_continuity_corner_tip": "补面沿每条边以所选的连续性与周围的面相接。在周围的面彼此以不同曲率相接的角上,补面在该处保持相切 (G1)。"
}
}
-44
View File
@@ -1,44 +0,0 @@
{
"en": {
"thread.form_bspp": "Pipe G (ISO 228-1)",
"thread.form_bspt": "Pipe taper R, Rc (ISO 7-1)",
"thread.form_npt": "Pipe taper NPT (ASME B1.20.1)",
"thread.form_rp": "Pipe Rp (ISO 7-1)"
},
"ar": {
"thread.form_bspp": "سن أنابيب G (ISO 228-1)",
"thread.form_bspt": "سن أنابيب مخروطي R، Rc (ISO 7-1)",
"thread.form_npt": "سن أنابيب مخروطي NPT (ASME B1.20.1)",
"thread.form_rp": "سن أنابيب داخلي متوازٍ Rp (ISO 7-1)"
},
"he": {
"thread.form_bspp": "תבריג צנרת G (ISO 228-1)",
"thread.form_bspt": "תבריג צנרת קוני R, Rc (ISO 7-1)",
"thread.form_npt": "תבריג צנרת קוני NPT (ASME B1.20.1)",
"thread.form_rp": "תבריג צנרת פנימי מקביל Rp (ISO 7-1)"
},
"ja": {
"thread.form_bspp": "管用平行ねじ G(ISO 228-1)",
"thread.form_bspt": "管用テーパねじ R、Rc(ISO 7-1)",
"thread.form_npt": "管用テーパねじ NPT(ASME B1.20.1)",
"thread.form_rp": "管用平行めねじ Rp(ISO 7-1)"
},
"zh": {
"thread.form_bspp": "管螺纹 G(ISO 228-1)",
"thread.form_bspt": "圆锥管螺纹 R、Rc(ISO 7-1)",
"thread.form_npt": "圆锥管螺纹 NPT(ASME B1.20.1)",
"thread.form_rp": "圆柱内管螺纹 Rp(ISO 7-1)"
},
"de": {
"thread.form_bspp": "Rohrgewinde G (ISO 228-1)",
"thread.form_bspt": "Kegeliges Rohrgewinde R, Rc (ISO 7-1)",
"thread.form_npt": "Kegeliges Rohrgewinde NPT (ASME B1.20.1)",
"thread.form_rp": "Zylindrisches Innenrohrgewinde Rp (ISO 7-1)"
},
"ko": {
"thread.form_bspp": "관용 평행나사 G (ISO 228-1)",
"thread.form_bspt": "관용 테이퍼나사 R, Rc (ISO 7-1)",
"thread.form_npt": "관용 테이퍼나사 NPT (ASME B1.20.1)",
"thread.form_rp": "관용 평행 암나사 Rp (ISO 7-1)"
}
}
-37
View File
@@ -1,37 +0,0 @@
{
"en": {
"cmd.diagnostics_profile": "Profile",
"prefs.profile_operations": "Profile operations",
"prefs.profile_operations_note": "Records how long SMLib calls, kernel operations, features, commands and imports take. Agents read it with diagnostics.profile."
},
"ar": {
"cmd.diagnostics_profile": "التحليل الزمني",
"prefs.profile_operations": "تحليل زمن العمليات",
"prefs.profile_operations_note": "يسجّل المدة التي تستغرقها استدعاءات SMLib وعمليات النواة والميزات والأوامر وعمليات الاستيراد. يقرؤه الوكلاء عبر diagnostics.profile."
},
"de": {
"cmd.diagnostics_profile": "Profil",
"prefs.profile_operations": "Vorgänge profilieren",
"prefs.profile_operations_note": "Zeichnet auf, wie lange SMLib-Aufrufe, Kernel-Vorgänge, Features, Befehle und Importe dauern. Agenten lesen es mit diagnostics.profile."
},
"he": {
"cmd.diagnostics_profile": "פרופיל ביצועים",
"prefs.profile_operations": "מדידת זמני פעולות",
"prefs.profile_operations_note": "מתעד כמה זמן לוקחות קריאות SMLib, פעולות ליבה, תכונות, פקודות וייבוא. סוכנים קוראים זאת עם diagnostics.profile."
},
"ja": {
"cmd.diagnostics_profile": "プロファイル",
"prefs.profile_operations": "処理をプロファイル",
"prefs.profile_operations_note": "SMLib の呼び出し、カーネル処理、フィーチャー、コマンド、インポートにかかる時間を記録します。エージェントは diagnostics.profile で読み取ります。"
},
"ko": {
"cmd.diagnostics_profile": "프로파일",
"prefs.profile_operations": "작업 프로파일링",
"prefs.profile_operations_note": "SMLib 호출, 커널 작업, 피처, 명령, 가져오기에 걸리는 시간을 기록합니다. 에이전트는 diagnostics.profile로 읽습니다."
},
"zh": {
"cmd.diagnostics_profile": "性能分析",
"prefs.profile_operations": "分析操作耗时",
"prefs.profile_operations_note": "记录 SMLib 调用、内核操作、特征、命令和导入所用的时间。智能体通过 diagnostics.profile 读取。"
}
}
@@ -1,23 +0,0 @@
{
"ar": {
"diagnostic.reselect_reference": "{feature}: المرجع `{reference}` لم يعد موجودًا كما اختير؛ أعد اختياره"
},
"de": {
"diagnostic.reselect_reference": "{feature}: Die Referenz `{reference}` existiert nicht mehr so, wie sie ausgewählt wurde; wählen Sie sie erneut aus"
},
"en": {
"diagnostic.reselect_reference": "{feature}: the reference `{reference}` no longer exists as it was picked; reselect it"
},
"he": {
"diagnostic.reselect_reference": "{feature}: ההפניה `{reference}` כבר אינה קיימת כפי שנבחרה; יש לבחור אותה מחדש"
},
"ja": {
"diagnostic.reselect_reference": "{feature}: 参照 `{reference}` は選択したときのままでは存在しません。選択し直してください"
},
"ko": {
"diagnostic.reselect_reference": "{feature}: 참조 `{reference}`이(가) 선택했을 때의 모습으로 더 이상 존재하지 않습니다. 다시 선택하세요"
},
"zh": {
"diagnostic.reselect_reference": "{feature}:引用 `{reference}` 已不再是选择时的样子;请重新选择"
}
}
@@ -1,128 +0,0 @@
{
"en": {
"Repair Part": "Repair Part",
"browser.needs_repair": "{name}: needs repair",
"cmd.body_repair": "Repair Part",
"import_report.needs_repair_one": "1 part needs repair before it can be modelled on.",
"import_report.needs_repair_other": "{count} parts need repair before they can be modelled on.",
"refused.change": "Couldn't change {body}.",
"refused.cut": "Couldn't cut {body}.",
"refused.face_curved": "One of its curved faces can't be used for modelling.",
"refused.face_flat": "One of its flat faces can't be used for modelling.",
"refused.face_freeform": "One of its freeform faces can't be used for modelling.",
"refused.face_rounded": "One of its rounded faces can't be used for modelling.",
"refused.faces_apart": "Its faces don't meet closely enough to be used for modelling.",
"refused.intersect": "Couldn't intersect with {body}.",
"refused.join": "Couldn't join to {body}.",
"refused.repair": "Repair part",
"refused.show_face": "Show face"
},
"ar": {
"Repair Part": "إصلاح الجزء",
"browser.needs_repair": "{name}: يحتاج إلى إصلاح",
"cmd.body_repair": "إصلاح الجزء",
"import_report.needs_repair_one": "يحتاج جزء واحد إلى إصلاح قبل النمذجة عليه.",
"import_report.needs_repair_other": "تحتاج {count} أجزاء إلى إصلاح قبل النمذجة عليها.",
"refused.change": "تعذّر تغيير {body}.",
"refused.cut": "تعذّر قطع {body}.",
"refused.face_curved": "أحد أوجهه المنحنية لا يمكن استخدامه في النمذجة.",
"refused.face_flat": "أحد أوجهه المستوية لا يمكن استخدامه في النمذجة.",
"refused.face_freeform": "أحد أوجهه الحرة لا يمكن استخدامه في النمذجة.",
"refused.face_rounded": "أحد أوجهه المستديرة لا يمكن استخدامه في النمذجة.",
"refused.faces_apart": "أوجهه لا تلتقي بدقة كافية لاستخدامها في النمذجة.",
"refused.intersect": "تعذّر التقاطع مع {body}.",
"refused.join": "تعذّر الضم إلى {body}.",
"refused.repair": "إصلاح الجزء",
"refused.show_face": "إظهار الوجه"
},
"de": {
"Repair Part": "Teil reparieren",
"browser.needs_repair": "{name}: muss repariert werden",
"cmd.body_repair": "Teil reparieren",
"import_report.needs_repair_one": "1 Teil muss repariert werden, bevor daran modelliert werden kann.",
"import_report.needs_repair_other": "{count} Teile müssen repariert werden, bevor daran modelliert werden kann.",
"refused.change": "{body} konnte nicht geändert werden.",
"refused.cut": "{body} konnte nicht geschnitten werden.",
"refused.face_curved": "Eine seiner gekrümmten Flächen kann nicht zum Modellieren verwendet werden.",
"refused.face_flat": "Eine seiner ebenen Flächen kann nicht zum Modellieren verwendet werden.",
"refused.face_freeform": "Eine seiner Freiformflächen kann nicht zum Modellieren verwendet werden.",
"refused.face_rounded": "Eine seiner gerundeten Flächen kann nicht zum Modellieren verwendet werden.",
"refused.faces_apart": "Seine Flächen treffen nicht genau genug aufeinander, um damit zu modellieren.",
"refused.intersect": "Schnittmenge mit {body} nicht möglich.",
"refused.join": "Konnte nicht mit {body} vereinigt werden.",
"refused.repair": "Teil reparieren",
"refused.show_face": "Fläche zeigen"
},
"he": {
"Repair Part": "תיקון חלק",
"browser.needs_repair": "{name}: דרוש תיקון",
"cmd.body_repair": "תיקון חלק",
"import_report.needs_repair_one": "חלק אחד דורש תיקון לפני שאפשר למדל עליו.",
"import_report.needs_repair_other": "{count} חלקים דורשים תיקון לפני שאפשר למדל עליהם.",
"refused.change": "לא ניתן היה לשנות את {body}.",
"refused.cut": "לא ניתן היה לחתוך את {body}.",
"refused.face_curved": "אחת הפאות המעוקלות שלו אינה ניתנת לשימוש במידול.",
"refused.face_flat": "אחת הפאות השטוחות שלו אינה ניתנת לשימוש במידול.",
"refused.face_freeform": "אחת הפאות החופשיות שלו אינה ניתנת לשימוש במידול.",
"refused.face_rounded": "אחת הפאות המעוגלות שלו אינה ניתנת לשימוש במידול.",
"refused.faces_apart": "הפאות שלו אינן נפגשות בצמידות מספקת לשימוש במידול.",
"refused.intersect": "לא ניתן היה לחתוך עם {body}.",
"refused.join": "לא ניתן היה לחבר אל {body}.",
"refused.repair": "תיקון חלק",
"refused.show_face": "הצגת הפאה"
},
"ja": {
"Repair Part": "パーツを修復",
"browser.needs_repair": "{name}: 修復が必要",
"cmd.body_repair": "パーツを修復",
"import_report.needs_repair_one": "1 個のパーツはモデリングの前に修復が必要です。",
"import_report.needs_repair_other": "{count} 個のパーツはモデリングの前に修復が必要です。",
"refused.change": "{body} を変更できませんでした。",
"refused.cut": "{body} をカットできませんでした。",
"refused.face_curved": "曲面の 1 つがモデリングに使えません。",
"refused.face_flat": "平らな面の 1 つがモデリングに使えません。",
"refused.face_freeform": "自由曲面の 1 つがモデリングに使えません。",
"refused.face_rounded": "丸みのある面の 1 つがモデリングに使えません。",
"refused.faces_apart": "面どうしが十分に合っておらず、モデリングに使えません。",
"refused.intersect": "{body} と交差できませんでした。",
"refused.join": "{body} に結合できませんでした。",
"refused.repair": "パーツを修復",
"refused.show_face": "面を表示"
},
"ko": {
"Repair Part": "부품 복구",
"browser.needs_repair": "{name}: 복구 필요",
"cmd.body_repair": "부품 복구",
"import_report.needs_repair_one": "부품 1개는 모델링하기 전에 복구해야 합니다.",
"import_report.needs_repair_other": "부품 {count}개는 모델링하기 전에 복구해야 합니다.",
"refused.change": "{body}을(를) 변경하지 못했습니다.",
"refused.cut": "{body}을(를) 자르지 못했습니다.",
"refused.face_curved": "곡면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.face_flat": "평면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.face_freeform": "자유 곡면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.face_rounded": "둥근 면 중 하나를 모델링에 사용할 수 없습니다.",
"refused.faces_apart": "면들이 충분히 맞물리지 않아 모델링에 사용할 수 없습니다.",
"refused.intersect": "{body}과(와) 교차하지 못했습니다.",
"refused.join": "{body}에 결합하지 못했습니다.",
"refused.repair": "부품 복구",
"refused.show_face": "면 보기"
},
"zh": {
"Repair Part": "修复零件",
"browser.needs_repair": "{name}:需要修复",
"cmd.body_repair": "修复零件",
"import_report.needs_repair_one": "1 个零件需要修复后才能建模。",
"import_report.needs_repair_other": "{count} 个零件需要修复后才能建模。",
"refused.change": "无法更改 {body}。",
"refused.cut": "无法切割 {body}。",
"refused.face_curved": "它的一个曲面无法用于建模。",
"refused.face_flat": "它的一个平面无法用于建模。",
"refused.face_freeform": "它的一个自由曲面无法用于建模。",
"refused.face_rounded": "它的一个圆角面无法用于建模。",
"refused.faces_apart": "它的面贴合得不够紧密,无法用于建模。",
"refused.intersect": "无法与 {body} 求交。",
"refused.join": "无法合并到 {body}。",
"refused.repair": "修复零件",
"refused.show_face": "显示面"
}
}
@@ -1,27 +0,0 @@
{
"ar": {
"prefs.section_hatch": "تهشير المقطع",
"prefs.section_hatch_by_part": "حسب الجزء",
"prefs.section_hatch_one": "نمط واحد"
},
"en": {
"prefs.section_hatch": "Section hatch",
"prefs.section_hatch_by_part": "By part",
"prefs.section_hatch_one": "One style"
},
"he": {
"prefs.section_hatch": "קווקוו חתך",
"prefs.section_hatch_by_part": "לפי חלק",
"prefs.section_hatch_one": "סגנון אחד"
},
"ja": {
"prefs.section_hatch": "断面ハッチング",
"prefs.section_hatch_by_part": "部品ごと",
"prefs.section_hatch_one": "単一スタイル"
},
"zh": {
"prefs.section_hatch": "剖面线",
"prefs.section_hatch_by_part": "按零件",
"prefs.section_hatch_one": "单一样式"
}
}
-37
View File
@@ -1,37 +0,0 @@
{
"en": {
"thread.drill_range": "The tap maker's drill is {drill} mm. The internal thread's standard minor diameter is {minor} mm. A drill from {low} to {high} mm is accepted.",
"thread.drill_range_custom": "The drill is the major diameter less the pitch, {drill} mm. The internal thread's standard minor diameter is {minor} mm. A drill from {low} to {high} mm is accepted.",
"thread.drill_range_taper": "The tap maker's drill is {drill} mm. The standard's minor diameter where the thread ends is {minor} mm. A drill from {low} to {high} mm is accepted."
},
"ar": {
"thread.drill_range": "مثقاب صانع اللقمة {drill} مم. القطر الأصغر القياسي للسن الداخلي {minor} مم. يُقبل مثقاب من {low} إلى {high} مم.",
"thread.drill_range_custom": "المثقاب هو القطر الأكبر ناقص الخطوة، {drill} مم. القطر الأصغر القياسي للسن الداخلي {minor} مم. يُقبل مثقاب من {low} إلى {high} مم.",
"thread.drill_range_taper": "مثقاب صانع اللقمة {drill} مم. القطر الأصغر القياسي عند نهاية السن {minor} مم. يُقبل مثقاب من {low} إلى {high} مم."
},
"he": {
"thread.drill_range": "מקדח יצרן המברז הוא {drill} מ\"מ. הקוטר הקטן התקני של התבריג הפנימי הוא {minor} מ\"מ. מתקבל מקדח מ-{low} עד {high} מ\"מ.",
"thread.drill_range_custom": "המקדח הוא הקוטר הגדול פחות הפסיעה, {drill} מ\"מ. הקוטר הקטן התקני של התבריג הפנימי הוא {minor} מ\"מ. מתקבל מקדח מ-{low} עד {high} מ\"מ.",
"thread.drill_range_taper": "מקדח יצרן המברז הוא {drill} מ\"מ. הקוטר הקטן התקני בסוף התבריג הוא {minor} מ\"מ. מתקבל מקדח מ-{low} עד {high} מ\"מ."
},
"ja": {
"thread.drill_range": "タップメーカーの下穴ドリルは {drill} mm です。めねじの規格の内径は {minor} mm です。{low}~{high} mm のドリルを使用できます。",
"thread.drill_range_custom": "下穴ドリルは外径からピッチを引いた {drill} mm です。めねじの規格の内径は {minor} mm です。{low}~{high} mm のドリルを使用できます。",
"thread.drill_range_taper": "タップメーカーの下穴ドリルは {drill} mm です。ねじ終端での規格の内径は {minor} mm です。{low}~{high} mm のドリルを使用できます。"
},
"zh": {
"thread.drill_range": "丝锥制造商的钻头为 {drill} mm。内螺纹的标准小径为 {minor} mm。可使用 {low} 至 {high} mm 的钻头。",
"thread.drill_range_custom": "钻头为大径减螺距,{drill} mm。内螺纹的标准小径为 {minor} mm。可使用 {low} 至 {high} mm 的钻头。",
"thread.drill_range_taper": "丝锥制造商的钻头为 {drill} mm。螺纹终端处的标准小径为 {minor} mm。可使用 {low} 至 {high} mm 的钻头。"
},
"de": {
"thread.drill_range": "Der Bohrer des Gewindebohrerherstellers ist {drill} mm. Der genormte Kerndurchmesser des Innengewindes ist {minor} mm. Ein Bohrer von {low} bis {high} mm wird angenommen.",
"thread.drill_range_custom": "Der Bohrer ist der Nenndurchmesser minus Steigung, {drill} mm. Der genormte Kerndurchmesser des Innengewindes ist {minor} mm. Ein Bohrer von {low} bis {high} mm wird angenommen.",
"thread.drill_range_taper": "Der Bohrer des Gewindebohrerherstellers ist {drill} mm. Der genormte Kerndurchmesser am Gewindeende ist {minor} mm. Ein Bohrer von {low} bis {high} mm wird angenommen."
},
"ko": {
"thread.drill_range": "탭 제조사의 드릴은 {drill} mm입니다. 암나사의 규격 골지름은 {minor} mm입니다. {low}~{high} mm 드릴을 사용할 수 있습니다.",
"thread.drill_range_custom": "드릴은 바깥지름에서 피치를 뺀 {drill} mm입니다. 암나사의 규격 골지름은 {minor} mm입니다. {low}~{high} mm 드릴을 사용할 수 있습니다.",
"thread.drill_range_taper": "탭 제조사의 드릴은 {drill} mm입니다. 나사 끝에서의 규격 골지름은 {minor} mm입니다. {low}~{high} mm 드릴을 사용할 수 있습니다."
}
}
@@ -1,42 +0,0 @@
{
"en": {
"thread.fits_the_face": "fits the face, e.g. {example}",
"ui.chamfer_angle": "Chamfer Angle",
"ui.chamfer_depth": "Chamfer Depth",
"ui.ends": "Ends",
"ui.extent": "Extent",
"ui.iso_4753": "ISO 4753"
},
"ar": {
"thread.fits_the_face": "يناسب الوجه، مثلاً {example}",
"ui.chamfer_angle": "زاوية الشطف",
"ui.chamfer_depth": "عمق الشطف",
"ui.ends": "الطرفان",
"ui.extent": "الامتداد",
"ui.iso_4753": "ISO 4753"
},
"he": {
"thread.fits_the_face": "מתאים לפאה, למשל {example}",
"ui.chamfer_angle": "זווית פאזה",
"ui.chamfer_depth": "עומק פאזה",
"ui.ends": "קצוות",
"ui.extent": "גבול",
"ui.iso_4753": "ISO 4753"
},
"ja": {
"thread.fits_the_face": "面に合うサイズ。例: {example}",
"ui.chamfer_angle": "面取り角度",
"ui.chamfer_depth": "面取り深さ",
"ui.ends": "端部",
"ui.extent": "範囲",
"ui.iso_4753": "ISO 4753"
},
"zh": {
"thread.fits_the_face": "适合该面,例如 {example}",
"ui.chamfer_angle": "倒角角度",
"ui.chamfer_depth": "倒角深度",
"ui.ends": "端部",
"ui.extent": "范围",
"ui.iso_4753": "ISO 4753"
}
}
-65
View File
@@ -1,65 +0,0 @@
{
"en": {
"thread.chamfer_depth_needed": "required for this form",
"thread.end_square": "Square",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"ui.end": "End",
"ui.fade": "Fade",
"ui.fade_length": "Fade Length"
},
"ar": {
"thread.chamfer_depth_needed": "مطلوب لهذا الشكل",
"thread.end_square": "قائمة",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"ui.end": "النهاية",
"ui.fade": "تلاشٍ",
"ui.fade_length": "طول التلاشي"
},
"he": {
"thread.chamfer_depth_needed": "נדרש לצורה זו",
"thread.end_square": "ישר",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"ui.end": "סוף",
"ui.fade": "דעיכה",
"ui.fade_length": "אורך דעיכה"
},
"ja": {
"thread.chamfer_depth_needed": "この形状では必須",
"thread.end_square": "直角",
"thread.fade_short": "1.25 P(ISO 3508)",
"thread.fade_standard": "2.5 P(ISO 3508)",
"ui.end": "終端",
"ui.fade": "切り上げ",
"ui.fade_length": "切り上げ長さ"
},
"zh": {
"thread.chamfer_depth_needed": "此牙型必填",
"thread.end_square": "直角",
"thread.fade_short": "1.25 P(ISO 3508)",
"thread.fade_standard": "2.5 P(ISO 3508)",
"ui.end": "末端",
"ui.fade": "收尾",
"ui.fade_length": "收尾长度"
},
"de": {
"thread.chamfer_depth_needed": "für diese Form erforderlich",
"thread.end_square": "Rechtwinklig",
"thread.fade_short": "1,25 P (ISO 3508)",
"thread.fade_standard": "2,5 P (ISO 3508)",
"ui.end": "Ende",
"ui.fade": "Auslauf",
"ui.fade_length": "Auslauflänge"
},
"ko": {
"thread.chamfer_depth_needed": "이 형상에 필요",
"thread.end_square": "직각",
"thread.fade_short": "1.25 P (ISO 3508)",
"thread.fade_standard": "2.5 P (ISO 3508)",
"ui.end": "끝",
"ui.fade": "페이드",
"ui.fade_length": "페이드 길이"
}
}
@@ -1,65 +0,0 @@
{
"ar": {
"cmd.diagnostics_validation": "التحقق",
"prefs.validation": "التحقق من الأجسام",
"prefs.validation.each_feature": "مرة لكل ميزة",
"prefs.validation.each_step": "بعد كل خطوة",
"prefs.validation.label": "فحص النواة الكامل",
"prefs.validation.off": "متوقف (تجريبي)",
"prefs.validation_note": "بعد كل خطوة: يفحص كل عملية سحب ودمج وتقويس.\nمرة لكل ميزة: يفحص ناتج كل ميزة مرة واحدة.\nمتوقف (تجريبي): لا فحص."
},
"de": {
"cmd.diagnostics_validation": "Prüfung",
"prefs.validation": "Körperprüfung",
"prefs.validation.each_feature": "Einmal je Feature",
"prefs.validation.each_step": "Nach jedem Schritt",
"prefs.validation.label": "Vollständige Kernel-Prüfung",
"prefs.validation.off": "Aus (experimentell)",
"prefs.validation_note": "Nach jedem Schritt: prüft jeden Sweep, jede Boolesche Operation und jede Rundung.\nEinmal je Feature: prüft das Ergebnis jedes Features einmal.\nAus (experimentell): keine Prüfung."
},
"en": {
"cmd.diagnostics_validation": "Validation",
"prefs.validation": "Body check",
"prefs.validation.each_feature": "Once per feature",
"prefs.validation.each_step": "After every step",
"prefs.validation.label": "Full kernel check",
"prefs.validation.off": "Off (experimental)",
"prefs.validation_note": "After every step: checks each sweep, boolean and blend.\nOnce per feature: checks each feature's result once.\nOff (experimental): no check."
},
"he": {
"cmd.diagnostics_validation": "אימות",
"prefs.validation": "בדיקת גופים",
"prefs.validation.each_feature": "פעם אחת לכל תכונה",
"prefs.validation.each_step": "אחרי כל שלב",
"prefs.validation.label": "הבדיקה המלאה של הקרנל",
"prefs.validation.off": "כבוי (ניסיוני)",
"prefs.validation_note": "אחרי כל שלב: בודק כל סחיפה, פעולה בוליאנית ועיגול.\nפעם אחת לכל תכונה: בודק את התוצאה של כל תכונה פעם אחת.\nכבוי (ניסיוני): אין בדיקה."
},
"ja": {
"cmd.diagnostics_validation": "検証",
"prefs.validation": "ボディのチェック",
"prefs.validation.each_feature": "フィーチャーごとに 1 回",
"prefs.validation.each_step": "各ステップの後",
"prefs.validation.label": "カーネルの完全チェック",
"prefs.validation.off": "オフ (試験的)",
"prefs.validation_note": "各ステップの後: スイープ、ブーリアン、ブレンドのたびにチェックします。\nフィーチャーごとに 1 回: 各フィーチャーの結果を 1 回チェックします。\nオフ (試験的): チェックしません。"
},
"ko": {
"cmd.diagnostics_validation": "검증",
"prefs.validation": "바디 검사",
"prefs.validation.each_feature": "피처마다 한 번",
"prefs.validation.each_step": "모든 단계 후",
"prefs.validation.label": "커널 전체 검사",
"prefs.validation.off": "끄기 (실험적)",
"prefs.validation_note": "모든 단계 후: 스윕, 불리언, 블렌드마다 검사합니다.\n피처마다 한 번: 각 피처의 결과를 한 번 검사합니다.\n끄기 (실험적): 검사하지 않습니다."
},
"zh": {
"cmd.diagnostics_validation": "验证",
"prefs.validation": "实体检查",
"prefs.validation.each_feature": "每个特征一次",
"prefs.validation.each_step": "每一步之后",
"prefs.validation.label": "内核完整检查",
"prefs.validation.off": "关闭(实验性)",
"prefs.validation_note": "每一步之后:检查每次扫掠、布尔运算和倒圆。\n每个特征一次:每个特征的结果检查一次。\n关闭(实验性):不检查。"
}
}
-121
View File
@@ -1,121 +0,0 @@
{
"vi": {
"ui.continuity_smooth_curvature_change": "Thay đổi độ cong trơn",
"ui.continuity_smooth_curvature_change_tip": "Thay đổi độ cong trơn (G4): ngay cả cách độ cong thay đổi cũng liền mạch qua đường nối.",
"ui.fillet_corner_tangent_tip": "Tiếp tuyến (G1): góc bi lăn, một phần mặt cầu của bi lăn tiếp tuyến với từng đường bo.",
"ui.fillet_corner_curvature_tip": "Độ cong (G2): một mảng trơn. Góc được lùi dọc theo mỗi cạnh một khoảng Lùi ({factor} × bán kính nếu bạn không nhập) rồi được lấp bằng một mảng, nên phản chiếu đi qua mà không bị gãy.",
"ui.continuity_curvature_change_tip": "Thay đổi độ cong (G3): độ cong cũng thay đổi trơn qua đường nối.",
"ui.continuity_curvature_tip": "Liên tục độ cong (G2): phản chiếu đi qua mà không bị gãy.",
"ui.continuity_position_tip": "Vị trí (G0): các bề mặt gặp nhau, tạo nếp gấp tại nơi đó.",
"ui.continuity_tangent_tip": "Tiếp tuyến (G1): không có nếp gấp, nhưng độ cong nhảy qua đường nối.",
"ui.comb_length": "Độ dài lược",
"ui.comb_length_tip": "Độ dài của các răng: bội số của độ dài tự động, độ dài này làm răng dài nhất bằng một phần năm kích thước các đường cong được hiển thị.",
"ui.comb_teeth": "Răng",
"ui.comb_teeth_tip": "Số răng của mỗi lược, cách đều dọc theo đường cong. Càng nhiều răng càng thấy rõ độ cong thay đổi thế nào.",
"ui.fillet_corner_ball": "Bi lăn",
"ui.fillet_corner_ball_tip": "Một phần mặt cầu của bi lăn, tiếp tuyến (G1) với từng đường bo.",
"ui.fillet_corner_needs_constant": "Góc mảng trơn (G2) cần Bán kính không đổi và Khớp chính xác.",
"ui.fillet_corner_patch": "Mảng trơn",
"ui.fillet_corner_patch_tip": "Liên tục độ cong (G2): góc được lùi dọc theo mỗi cạnh và được lấp bằng một mảng, nên phản chiếu đi qua mà không bị gãy.",
"ui.fillet_fit_needs_constant": "Khớp bán kính cần Bán kính không đổi.",
"ui.fillet_setback": "Lùi",
"ui.fillet_setback_hint": "{factor} × bán kính",
"ui.fillet_setback_tip": "Nơi mảng góc trơn bắt đầu: khoảng cách dọc theo mỗi cạnh tính từ góc. Mặc định là {factor} × bán kính. Giá trị phải lớn hơn khoảng lùi nhỏ nhất, tại đó các đường bo gặp nhau mà không cần lùi: bằng bán kính khi các mặt vuông góc với nhau.",
"ui.fillet_smooth_radius": "Thay đổi bán kính trơn",
"ui.fillet_type_curvature": "Liên tục độ cong",
"ui.fillet_type_tip": "Mặt cắt ngang qua cạnh. Liên tục độ cong: mặt cắt liên tục độ cong (G2) giữa các mặt phẳng, nên phản chiếu đi từ các mặt vào đường bo mà không bị gãy.",
"ui.copy_details": "Sao chép chi tiết",
"ui.copy_details_tip": "Sao chép toàn bộ thông báo để tra cứu hoặc báo cáo.",
"ui.fillet_error_corner": "Không thể tạo góc trơn tại đây. Hãy thử khoảng Lùi khác hoặc góc Tiếp tuyến.",
"ui.fillet_error_failed": "Không thể tạo đường bo này trên các cạnh này. Hãy thử bán kính khác hoặc bo ít cạnh hơn một lần.",
"ui.fillet_error_too_large": "Bán kính quá lớn so với các mặt bên cạnh những cạnh này. Hãy thử bán kính nhỏ hơn hoặc đặt Giới hạn mặt thành Bán kính lớn nhất.",
"ui.fillet_fit": "Giới hạn mặt",
"ui.fillet_fit_exact": "Bán kính chính xác",
"ui.fillet_fit_reduce": "Bán kính lớn nhất",
"ui.fillet_fit_taper": "Bán kính thu hẹp",
"ui.fillet_fit_tip": "Khi bán kính lớn hơn mức các mặt bên cạnh một cạnh cho phép.\nBán kính chính xác: đúng bán kính đã nhập, hoặc không bo gì và có thông báo lý do.\nBán kính lớn nhất: mọi cạnh được bo với bán kính lớn nhất vừa khớp.\nBán kính thu hẹp: giữ bán kính, đường bo chỉ thu hẹp ở nơi các mặt hết chỗ.",
"ui.fillet_options_tip": "Chuỗi tiếp tuyến: bo cả các cạnh nối tiếp trơn từ những cạnh đã chọn.\nXem trước: hiển thị kết quả trong khung nhìn khi bạn chỉnh sửa.",
"ui.fillet_type_choices_tip": "Bán kính không đổi: một bán kính dọc suốt cạnh.\nĐộ dài dây cung: độ rộng ngang đường bo giữ nguyên, bất kể góc gặp nhau của các mặt.\nBán kính thay đổi: một bán kính ở mỗi đầu, và thêm dọc cạnh nếu bạn thêm vào.\nLiên tục độ cong: mặt cắt không làm gãy phản chiếu tại nơi gặp các mặt phẳng (G2).\nSpline: bán kính dọc cạnh theo các bán kính điều khiển bạn đặt.",
"ui.fillet_setback_least": "Lớn hơn {least}",
"help.version": "Phiên bản {version}",
"import_report.refused_one": "1 chi tiết không thể tạo thành khối đặc và không được nhập.",
"import_report.refused_other": "{count} chi tiết không thể tạo thành khối đặc và không được nhập.",
"import_report.details": "Chi tiết:",
"import_report.file_one": "Có 1 vấn đề khác với tệp.",
"import_report.file_other": "Có {count} vấn đề khác với tệp.",
"import_report.hint": "Xuất lại các chi tiết này từ chương trình đã tạo ra chúng có thể khắc phục được. Sao chép thông báo cảnh báo có đầy đủ chi tiết.",
"import_report.left_out_one": "1 mặt không thể sửa và bị thiếu.",
"import_report.left_out_other": "{count} mặt không thể sửa và bị thiếu.",
"import_report.not_imported_one": "1 chi tiết không thể nhập.",
"import_report.not_imported_other": "{count} chi tiết không thể nhập.",
"import_report.not_shown_one": "1 mặt không thể vẽ và bị ẩn.",
"import_report.not_shown_other": "{count} mặt không thể vẽ và bị ẩn.",
"import_report.open_one": "1 chi tiết có khe hở giữa các mặt và được nhập thành thân hở.",
"import_report.open_other": "{count} chi tiết có khe hở giữa các mặt và được nhập thành thân hở.",
"import_report.repaired_one": "Đã sửa các lỗi nhỏ trong 1 chi tiết.",
"import_report.repaired_other": "Đã sửa các lỗi nhỏ trong {count} chi tiết.",
"import_report.solids": "Đã nhập {solids} trong {parts} chi tiết thành khối đặc.",
"import_report.surfaces_one": "1 chi tiết không thể tạo thành khối đặc và được nhập thành bề mặt.",
"import_report.surfaces_other": "{count} chi tiết không thể tạo thành khối đặc và được nhập thành bề mặt.",
"file_load.step_build": "Đang dựng mô hình",
"file_load.step_feature": "Đặc trưng {done} trong {total}",
"file_load.step_part": "Chi tiết {done} trong {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "Đang đọc tệp",
"file_load.step_rebuild": "Đang dựng lại các đặc trưng",
"file_load.step_repair": "Đang kiểm tra và sửa các chi tiết",
"file_load.step_show": "Đang chuẩn bị khung nhìn",
"ui.patch_continuity_corner_tip": "Mảng gặp các mặt xung quanh với độ liên tục đã chọn dọc theo mỗi cạnh. Tại góc nơi các mặt đó gặp nhau với độ cong khác nhau, mảng giữ tiếp tuyến (G1) ở đó.",
"thread.form_bspp": "Ống G (ISO 228-1)",
"thread.form_bspt": "Ống côn R, Rc (ISO 7-1)",
"thread.form_npt": "Ống côn NPT (ASME B1.20.1)",
"thread.form_rp": "Ống Rp (ISO 7-1)",
"cmd.diagnostics_profile": "Hồ sơ đo",
"prefs.profile_operations": "Đo thời gian thao tác",
"prefs.profile_operations_note": "Ghi lại thời gian các lệnh gọi SMLib, thao tác kernel, đặc trưng, lệnh và lần nhập. Tác tử đọc bằng diagnostics.profile.",
"diagnostic.reselect_reference": "{feature}: tham chiếu `{reference}` không còn tồn tại như khi được chọn; hãy chọn lại",
"Repair Part": "Sửa chi tiết",
"browser.needs_repair": "{name}: cần sửa",
"cmd.body_repair": "Sửa chi tiết",
"import_report.needs_repair_one": "1 chi tiết cần sửa trước khi có thể mô hình hóa tiếp.",
"import_report.needs_repair_other": "{count} chi tiết cần sửa trước khi có thể mô hình hóa tiếp.",
"refused.change": "Không thể thay đổi {body}.",
"refused.cut": "Không thể cắt {body}.",
"refused.face_curved": "Một trong các mặt cong của nó không dùng được để mô hình hóa.",
"refused.face_flat": "Một trong các mặt phẳng của nó không dùng được để mô hình hóa.",
"refused.face_freeform": "Một trong các mặt tự do của nó không dùng được để mô hình hóa.",
"refused.face_rounded": "Một trong các mặt bo tròn của nó không dùng được để mô hình hóa.",
"refused.faces_apart": "Các mặt của nó không gặp nhau đủ khít để dùng cho mô hình hóa.",
"refused.intersect": "Không thể giao với {body}.",
"refused.join": "Không thể nối vào {body}.",
"refused.repair": "Sửa chi tiết",
"refused.show_face": "Hiện mặt",
"prefs.section_hatch": "Gạch mặt cắt",
"prefs.section_hatch_by_part": "Theo chi tiết",
"prefs.section_hatch_one": "Một kiểu",
"thread.drill_range": "Mũi khoan của nhà sản xuất taro là {drill} mm. Đường kính trong tiêu chuẩn của ren trong là {minor} mm. Chấp nhận mũi khoan từ {low} đến {high} mm.",
"thread.drill_range_custom": "Mũi khoan bằng đường kính ngoài trừ bước ren, {drill} mm. Đường kính trong tiêu chuẩn của ren trong là {minor} mm. Chấp nhận mũi khoan từ {low} đến {high} mm.",
"thread.drill_range_taper": "Mũi khoan của nhà sản xuất taro là {drill} mm. Đường kính trong theo tiêu chuẩn tại nơi ren kết thúc là {minor} mm. Chấp nhận mũi khoan từ {low} đến {high} mm.",
"thread.fits_the_face": "vừa với mặt, ví dụ {example}",
"ui.chamfer_angle": "Góc vát",
"ui.chamfer_depth": "Chiều sâu vát",
"ui.ends": "Các đầu",
"ui.extent": "Phạm vi",
"ui.iso_4753": "ISO 4753",
"thread.chamfer_depth_needed": "bắt buộc với dạng này",
"thread.end_square": "Vuông",
"thread.fade_short": "1,25 P (ISO 3508)",
"thread.fade_standard": "2,5 P (ISO 3508)",
"ui.end": "Đầu",
"ui.fade": "Thoát ren",
"ui.fade_length": "Chiều dài thoát ren",
"cmd.diagnostics_validation": "Kiểm tra",
"prefs.validation": "Kiểm tra thân",
"prefs.validation.each_feature": "Một lần mỗi đặc trưng",
"prefs.validation.each_step": "Sau mỗi bước",
"prefs.validation.label": "Kiểm tra kernel đầy đủ",
"prefs.validation.off": "Tắt (thử nghiệm)",
"prefs.validation_note": "Sau mỗi bước: kiểm tra từng lần quét, phép boolean và đường bo.\nMột lần mỗi đặc trưng: kiểm tra kết quả của từng đặc trưng một lần.\nTắt (thử nghiệm): không kiểm tra.",
"cmd.inspect_analysis": "Phân tích khung nhìn"
}
}
@@ -1,17 +0,0 @@
{
"en": {
"cmd.inspect_analysis": "View Analysis"
},
"ar": {
"cmd.inspect_analysis": "تحليل العرض"
},
"he": {
"cmd.inspect_analysis": "ניתוח תצוגה"
},
"ja": {
"cmd.inspect_analysis": "表示解析"
},
"zh": {
"cmd.inspect_analysis": "视图分析"
}
}
+5
View File
@@ -2736,10 +2736,15 @@
"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",
+5
View File
@@ -1885,10 +1885,15 @@
"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",
+5
View File
@@ -4480,10 +4480,15 @@
"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",
+5
View File
@@ -4404,10 +4404,15 @@
"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": "Углы",
+5
View File
@@ -4480,10 +4480,15 @@
"ui.construction.ribbon_label": "Hjälplinjer",
"ui.construction.side_hint": "Konstruktionslinje: klicka på den sida som linjen går mot; högerklicka för att börja om",
"ui.context_menu": "Snabbmeny",
"ui.continuity_crease": "Veck",
"ui.continuity_curvature": "Krökning",
"ui.continuity_curvature_change": "Krökningsändring",
"ui.continuity_g0": "G0-veck",
"ui.continuity_g1": "G1-tangent",
"ui.continuity_g2": "G2-krökning",
"ui.continuity_gap": "Spalt",
"ui.continuity_position": "Läge",
"ui.continuity_tangent": "Tangent",
"ui.copy": "Kopiera",
"ui.corner": "Hörn",
"ui.corners": "Hörn",
+5
View File
@@ -4480,10 +4480,15 @@
"ui.construction.ribbon_label": "Yardımcılar",
"ui.construction.side_hint": "Yardımcı doğru: doğrunun ilerleyeceği tarafa tıklayın; yeniden başlamak için sağ tıklayın",
"ui.context_menu": "Bağlam menüsü",
"ui.continuity_crease": "Kırık",
"ui.continuity_curvature": "Eğrilik",
"ui.continuity_curvature_change": "Eğrilik değişimi",
"ui.continuity_g0": "G0 kırık",
"ui.continuity_g1": "G1 teğet",
"ui.continuity_g2": "G2 eğrilik",
"ui.continuity_gap": "Boşluk",
"ui.continuity_position": "Konum",
"ui.continuity_tangent": "Teğet",
"ui.copy": "Kopyala",
"ui.corner": "Köşe",
"ui.corners": "Köşeler",
+5
View File
@@ -4410,10 +4410,15 @@
"ui.construction.reference_hint": "Допоміжна пряма: виберіть пряму, потім точку; клацніть правою кнопкою, щоб змінити опорний об'єкт",
"ui.construction.ribbon_label": "Доп. лінії",
"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": "Кути",
+123
View File
@@ -496,6 +496,7 @@
"Render Stage": "Giai đoạn kết xuất",
"Reopen designs": "Mở lại thiết kế",
"Reopen the designs that were open when SolidCraft was last closed": "Mở lại các thiết kế đã mở lần trước",
"Repair Part": "Sửa chi tiết",
"Replace existing library file": "Thay thế tệp thư viện hiện có",
"Report a bug — review a screenshot and open a GitHub draft": "Báo cáo sự cố — xem lại ảnh chụp màn hình và mở bản nháp trên GitHub",
"Report copied. Keep this text to submit on GitHub when you are online.": "Đã sao chép báo cáo. Hãy giữ lại nội dung này để gửi lên GitHub khi có kết nối mạng.",
@@ -790,6 +791,7 @@
"browser.edit_canvas_title": "Sửa ảnh nền Canvas: {name}",
"browser.edit_point_cloud_title": "Chỉnh sửa đám mây điểm: {name}",
"browser.move_title": "Di chuyển: {name}",
"browser.needs_repair": "{name}: cần sửa",
"browser.parameters": "Bảng tham số ({count})",
"browser.precision": "Độ chính xác: {precision}",
"browser.sketch_attachment_lost": "{name} (mất liên kết)",
@@ -834,6 +836,7 @@
"cmd.assembly_mass_properties": "Thuộc tính khối lượng",
"cmd.body.print_face": "Mặt in",
"cmd.body_rename": "Đổi tên thân khối",
"cmd.body_repair": "Sửa chi tiết",
"cmd.browser_collapse_all": "Thu gọn tất cả",
"cmd.browser_expand_all": "Mở rộng tất cả",
"cmd.browser_group": "Tạo nhóm mới",
@@ -918,6 +921,8 @@
"cmd.diagnostics_crash_reports": "Danh sách báo cáo sự cố",
"cmd.diagnostics_crash_reports_clear": "Xóa báo cáo sự cố ứng dụng",
"cmd.diagnostics_crash_test": "Kiểm tra cơ chế sập ứng dụng",
"cmd.diagnostics_profile": "Hồ sơ đo",
"cmd.diagnostics_validation": "Kiểm tra",
"cmd.doc_recover": "Khôi phục thiết kế",
"cmd.doc_recovery_discard": "Hủy thiết kế khôi phục",
"cmd.doc_recovery_list": "Danh sách thiết kế có thể khôi phục",
@@ -955,6 +960,7 @@
"cmd.frame_profile_list": "Thư viện tiết diện",
"cmd.frame_profile_properties": "Thuộc tính tiết diện",
"cmd.inspect_accessibility": "Phân tích khả năng gia công tiếp cận",
"cmd.inspect_analysis": "Phân tích khung nhìn",
"cmd.inspect_center_of_mass": "Trọng tâm",
"cmd.inspect_clearance": "Khoảng cách an toàn",
"cmd.inspect_colored_components": "Bật màu cụm chi tiết",
@@ -1360,6 +1366,7 @@
"crash.unclean_explanation": "Được phát hiện ở lần khởi chạy sau; thời điểm thoát chính xác không được ghi lại. Việc tắt máy hoặc buộc dừng cũng có thể gây ra thoát bất thường.",
"delete.and_more": "… và {count} mục khác",
"diagnostic.empty_boolean_component": "không có thân khối nào để cắt hoặc giao trong cụm chi tiết '{component}'; công cụ có thể giao nhau với '{body}' trong cụm chi tiết '{other}' — hãy kích hoạt cụm chi tiết đó hoặc chọn thân khối làm đối tượng đích",
"diagnostic.reselect_reference": "{feature}: tham chiếu `{reference}` không còn tồn tại như khi được chọn; hãy chọn lại",
"dialog.bodies_count": "{count} thân khối",
"dialog.clearance_invalid": "khoảng cách an toàn phải có chiều dài từ 0 trở lên",
"dialog.compute": "Tính toán",
@@ -1425,6 +1432,14 @@
"file_load.reading_percent": "Đang đọc tệp... {percent}%",
"file_load.rebuilding": "Đang dựng lại tính năng {done} trên {total}",
"file_load.recovering": "Đang khôi phục thiết kế",
"file_load.step_build": "Đang dựng mô hình",
"file_load.step_feature": "Đặc trưng {done} trong {total}",
"file_load.step_part": "Chi tiết {done} trong {total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "Đang đọc tệp",
"file_load.step_rebuild": "Đang dựng lại các đặc trưng",
"file_load.step_repair": "Đang kiểm tra và sửa các chi tiết",
"file_load.step_show": "Đang chuẩn bị khung nhìn",
"file_load.stopping": "Đang chờ thao tác trước đó dừng lại...",
"file_load.updating_links": "Đang cập nhật liên kết",
"file_load.waiting": "Đang chờ thao tác tệp",
@@ -1719,6 +1734,7 @@
"help.timeline.delete": "Xóa các tính năng đã chọn khỏi lịch sử; xóa một bản phác thảo cũng xóa các tính năng dựng từ nó. Dùng để bỏ một bước không còn cần.",
"help.timeline.dependents": "Liệt kê các tính năng sẽ bị xóa cùng một tính năng, và những tính năng sẽ lỗi nếu thiếu nó. Dùng trước khi xóa hoặc thay đổi một tính năng.",
"help.timeline.play": "Phát lại lần lượt các tính năng còn lại, tạm dừng nửa giây sau mỗi lần dựng lại. Chạy lại lệnh này hoặc nhấn Escape để dừng; Đến cuối sẽ chuyển ngay đến cuối lịch sử.",
"help.version": "Phiên bản {version}",
"help.view.apply": "Xoay khung nhìn về hướng chuẩn như trước, trên hoặc iso, hoặc về một góc nhìn đã lưu. Dùng để xem mô hình từ một góc cố định.",
"help.view.delete": "Xóa một góc nhìn đã lưu. Mô hình không bị thay đổi.",
"help.view.fit": "Phóng to và dịch khung nhìn để toàn bộ mô hình, hoặc phần đang chọn, lấp đầy khung nhìn. Dùng khi mô hình đã trôi ra khỏi tầm mắt.",
@@ -1806,6 +1822,27 @@
"home.start_hint": "Tạo thiết kế, mở tệp gần đây hoặc khám phá mẫu.",
"home.whats_new": "Có gì mới",
"home.yesterday": "Hôm qua",
"import_report.details": "Chi tiết:",
"import_report.file_one": "Có 1 vấn đề khác với tệp.",
"import_report.file_other": "Có {count} vấn đề khác với tệp.",
"import_report.hint": "Xuất lại các chi tiết này từ chương trình đã tạo ra chúng có thể khắc phục được. Sao chép thông báo cảnh báo có đầy đủ chi tiết.",
"import_report.left_out_one": "1 mặt không thể sửa và bị thiếu.",
"import_report.left_out_other": "{count} mặt không thể sửa và bị thiếu.",
"import_report.needs_repair_one": "1 chi tiết cần sửa trước khi có thể mô hình hóa tiếp.",
"import_report.needs_repair_other": "{count} chi tiết cần sửa trước khi có thể mô hình hóa tiếp.",
"import_report.not_imported_one": "1 chi tiết không thể nhập.",
"import_report.not_imported_other": "{count} chi tiết không thể nhập.",
"import_report.not_shown_one": "1 mặt không thể vẽ và bị ẩn.",
"import_report.not_shown_other": "{count} mặt không thể vẽ và bị ẩn.",
"import_report.open_one": "1 chi tiết có khe hở giữa các mặt và được nhập thành thân hở.",
"import_report.open_other": "{count} chi tiết có khe hở giữa các mặt và được nhập thành thân hở.",
"import_report.refused_one": "1 chi tiết không thể tạo thành khối đặc và không được nhập.",
"import_report.refused_other": "{count} chi tiết không thể tạo thành khối đặc và không được nhập.",
"import_report.repaired_one": "Đã sửa các lỗi nhỏ trong 1 chi tiết.",
"import_report.repaired_other": "Đã sửa các lỗi nhỏ trong {count} chi tiết.",
"import_report.solids": "Đã nhập {solids} trong {parts} chi tiết thành khối đặc.",
"import_report.surfaces_one": "1 chi tiết không thể tạo thành khối đặc và được nhập thành bề mặt.",
"import_report.surfaces_other": "{count} chi tiết không thể tạo thành khối đặc và được nhập thành bề mặt.",
"install.button_tip": "Cài đặt SolidCraft dưới dạng ứng dụng: mở trong cửa sổ riêng và hoạt động ngoại tuyến",
"install.dock_1": "Chọn Tệp › Thêm vào Dock.",
"install.dock_2": "Nhấp vào Thêm.",
@@ -2351,6 +2388,8 @@
"prefs.profile_exported": "Đã xuất hồ sơ.",
"prefs.profile_imported": "Đã nhập hồ sơ.",
"prefs.profile_name_hint": "Tên hồ sơ, ví dụ Laptop",
"prefs.profile_operations": "Đo thời gian thao tác",
"prefs.profile_operations_note": "Ghi lại thời gian các lệnh gọi SMLib, thao tác kernel, đặc trưng, lệnh và lần nhập. Tác tử đọc bằng diagnostics.profile.",
"prefs.profile_rename": "Đổi tên",
"prefs.profile_renamed": "Đã đổi tên hồ sơ.",
"prefs.profile_save": "Lưu",
@@ -2380,6 +2419,9 @@
"prefs.scale_text": "Tỉ lệ và văn bản",
"prefs.search": "Tìm kiếm cài đặt",
"prefs.search_empty": "Không có cài đặt nào khớp",
"prefs.section_hatch": "Gạch mặt cắt",
"prefs.section_hatch_by_part": "Theo chi tiết",
"prefs.section_hatch_one": "Một kiểu",
"prefs.select": "Chọn",
"prefs.select_one_item": "Chọn một mục",
"prefs.select_other_hidden": "Chọn hình học ẩn bằng Chọn đối tượng khác",
@@ -2494,6 +2536,12 @@
"prefs.under_cursor": "Dưới con trỏ chuột",
"prefs.units_precision": "Đơn vị và độ chính xác",
"prefs.updates": "Cập nhật ứng dụng",
"prefs.validation": "Kiểm tra thân",
"prefs.validation.each_feature": "Một lần mỗi đặc trưng",
"prefs.validation.each_step": "Sau mỗi bước",
"prefs.validation.label": "Kiểm tra kernel đầy đủ",
"prefs.validation.off": "Tắt (thử nghiệm)",
"prefs.validation_note": "Sau mỗi bước: kiểm tra từng lần quét, phép boolean và đường bo.\nMột lần mỗi đặc trưng: kiểm tra kết quả của từng đặc trưng một lần.\nTắt (thử nghiệm): không kiểm tra.",
"prefs.value_boxes_in_view": "Hiện giá trị cạnh tay nắm trong khung nhìn",
"prefs.value_boxes_in_view_tip": "Giá trị của lệnh (Khoảng cách, Bán kính…) trong một ô cạnh tay nắm, phía trên mô hình. Tắt: bạn nhập giá trị trong cửa sổ lệnh, cửa sổ này nhận bàn phím sau khi chọn, và không có gì che mô hình.",
"prefs.view": "Hành vi góc nhìn",
@@ -2528,6 +2576,17 @@
"recovery.just_now": "vừa xong",
"recovery.min_ago": "{count} phút trước",
"recovery.never_saved": "chưa từng lưu",
"refused.change": "Không thể thay đổi {body}.",
"refused.cut": "Không thể cắt {body}.",
"refused.face_curved": "Một trong các mặt cong của nó không dùng được để mô hình hóa.",
"refused.face_flat": "Một trong các mặt phẳng của nó không dùng được để mô hình hóa.",
"refused.face_freeform": "Một trong các mặt tự do của nó không dùng được để mô hình hóa.",
"refused.face_rounded": "Một trong các mặt bo tròn của nó không dùng được để mô hình hóa.",
"refused.faces_apart": "Các mặt của nó không gặp nhau đủ khít để dùng cho mô hình hóa.",
"refused.intersect": "Không thể giao với {body}.",
"refused.join": "Không thể nối vào {body}.",
"refused.repair": "Sửa chi tiết",
"refused.show_face": "Hiện mặt",
"render.adaptive_absolute": "Ngưỡng lỗi RGB tuyệt đối",
"render.adaptive_coverage": "Mục tiêu lỗi độ phủ (Coverage error)",
"render.adaptive_enable": "Phân bổ mẫu bằng các mẫu thử độc lập",
@@ -3995,7 +4054,19 @@
"the section's profiles must be in one sketch": "các biên dạng của mặt cắt phải nằm trong cùng một phác thảo",
"the two origins are on the same component": "hai gốc tọa độ nằm trên cùng một thành phần",
"thread.automatic_size": "Kích thước tự động",
"thread.chamfer_depth_needed": "bắt buộc với dạng này",
"thread.designation": "Ký hiệu ren",
"thread.drill_range": "Mũi khoan của nhà sản xuất taro là {drill} mm. Đường kính trong tiêu chuẩn của ren trong là {minor} mm. Chấp nhận mũi khoan từ {low} đến {high} mm.",
"thread.drill_range_custom": "Mũi khoan bằng đường kính ngoài trừ bước ren, {drill} mm. Đường kính trong tiêu chuẩn của ren trong là {minor} mm. Chấp nhận mũi khoan từ {low} đến {high} mm.",
"thread.drill_range_taper": "Mũi khoan của nhà sản xuất taro là {drill} mm. Đường kính trong theo tiêu chuẩn tại nơi ren kết thúc là {minor} mm. Chấp nhận mũi khoan từ {low} đến {high} mm.",
"thread.end_square": "Vuông",
"thread.fade_short": "1,25 P (ISO 3508)",
"thread.fade_standard": "2,5 P (ISO 3508)",
"thread.fits_the_face": "vừa với mặt, ví dụ {example}",
"thread.form_bspp": "Ống G (ISO 228-1)",
"thread.form_bspt": "Ống côn R, Rc (ISO 7-1)",
"thread.form_npt": "Ống côn NPT (ASME B1.20.1)",
"thread.form_rp": "Ống Rp (ISO 7-1)",
"thread.iso_metric": "Hệ mét ISO",
"thread.select_size": "Chọn kích thước",
"timeline.delete_after_marker_one": "Xóa 1 tính năng sau điểm đánh dấu lịch sử",
@@ -4468,6 +4539,8 @@
"ui.centerline": "Đường tâm",
"ui.chain": "Chuỗi",
"ui.chamfer": "Vát mép",
"ui.chamfer_angle": "Góc vát",
"ui.chamfer_depth": "Chiều sâu vát",
"ui.chamfer_type": "Kiểu vát mép",
"ui.change_workspace": "Đổi không gian làm việc",
"ui.circle": "Hình tròn",
@@ -4498,6 +4571,10 @@
"ui.colour_vision_sample": "Mẫu thử",
"ui.colour_vision_tritan": "Mù màu xanh dương (Tritan)",
"ui.colour_vision_tritan_tip": "Dành cho người cảm nhận màu xanh dương yếu hoặc mất hẳn",
"ui.comb_length": "Độ dài lược",
"ui.comb_length_tip": "Độ dài của các răng: bội số của độ dài tự động, độ dài này làm răng dài nhất bằng một phần năm kích thước các đường cong được hiển thị.",
"ui.comb_teeth": "Răng",
"ui.comb_teeth_tip": "Số răng của mỗi lược, cách đều dọc theo đường cong. Càng nhiều răng càng thấy rõ độ cong thay đổi thế nào.",
"ui.combine": "Hợp nhất / Cắt khối",
"ui.coming_later": "sắp ra mắt",
"ui.command_done": "Hoàn tất lệnh {command}",
@@ -4522,11 +4599,24 @@
"ui.construction.ribbon_label": "Đường phụ",
"ui.construction.side_hint": "Đường dựng hình: nhấp phía mà đường kéo dài tới; nhấp chuột phải để bắt đầu lại",
"ui.context_menu": "Menu ngữ cảnh",
"ui.continuity_crease": "Nếp gập",
"ui.continuity_curvature": "Độ cong",
"ui.continuity_curvature_change": "Thay đổi độ cong",
"ui.continuity_curvature_change_tip": "Thay đổi độ cong (G3): độ cong cũng thay đổi trơn qua đường nối.",
"ui.continuity_curvature_tip": "Liên tục độ cong (G2): phản chiếu đi qua mà không bị gãy.",
"ui.continuity_g0": "Nếp gập G0",
"ui.continuity_g1": "G1 tiếp tuyến",
"ui.continuity_g2": "G2 độ cong",
"ui.continuity_gap": "Khe hở",
"ui.continuity_position": "Vị trí liên tục",
"ui.continuity_position_tip": "Vị trí (G0): các bề mặt gặp nhau, tạo nếp gấp tại nơi đó.",
"ui.continuity_smooth_curvature_change": "Thay đổi độ cong trơn",
"ui.continuity_smooth_curvature_change_tip": "Thay đổi độ cong trơn (G4): ngay cả cách độ cong thay đổi cũng liền mạch qua đường nối.",
"ui.continuity_tangent": "Tiếp tuyến",
"ui.continuity_tangent_tip": "Tiếp tuyến (G1): không có nếp gấp, nhưng độ cong nhảy qua đường nối.",
"ui.copy": "Sao chép",
"ui.copy_details": "Sao chép chi tiết",
"ui.copy_details_tip": "Sao chép toàn bộ thông báo để tra cứu hoặc báo cáo.",
"ui.corner": "Góc",
"ui.corners": "Các góc",
"ui.cosmetic_thread_markings": "Ký hiệu ren quy ước",
@@ -4644,8 +4734,10 @@
"ui.edit_sketch_empty": "Không có phác thảo để chỉnh sửa",
"ui.ellipse": "Hình elip",
"ui.emboss_wrap_note": "Các biên dạng đường trực giao tiếp xúc với một hình trụ được hỗ trợ sẽ tự động quấn. Chọn một thành để chọn mục tiêu.",
"ui.end": "Đầu",
"ui.end_radius": "Bán kính kết thúc",
"ui.end_scale": "Tỷ lệ đầu cuối",
"ui.ends": "Các đầu",
"ui.entities": "Các thực thể",
"ui.equal": "Bằng nhau",
"ui.equation_end": "Kết thúc",
@@ -4665,6 +4757,7 @@
"ui.export_ellipsis_keymap": "Xuất tệp…",
"ui.export_keymap_tip": "Xuất phím tắt, danh sách S box yêu thích và thanh công cụ ra tệp",
"ui.extend": "Kéo dài đường",
"ui.extent": "Phạm vi",
"ui.extent_type": "Kiểu giới hạn kéo dài",
"ui.extract_component": "Trích xuất ra tệp riêng…",
"ui.extract_design_changed": "Thiết kế đã thay đổi trong khi đang chọn tệp. Vui lòng thực hiện lại lệnh Trích xuất ra tệp.",
@@ -4673,11 +4766,39 @@
"ui.extrude_auto_to_object": "Đùn khối đến đối tượng được chọn",
"ui.extrude_auto_to_object_tip": "Trong lệnh Đùn, khi đã chọn biên dạng, nhấp chọn một mặt, đỉnh hoặc mặt phẳng song song ngoài mặt phẳng của nó sẽ tự động chuyển phạm vi đùn thành 'Đến đối tượng' (To Object)",
"ui.factor": "Hệ số",
"ui.fade": "Thoát ren",
"ui.fade_length": "Chiều dài thoát ren",
"ui.feature_history": "Lịch sử tính năng",
"ui.feature_options": "Tùy chọn tính năng",
"ui.features": "Các tính năng",
"ui.file": "Tệp",
"ui.fillet": "Bo tròn mép",
"ui.fillet_corner_ball": "Bi lăn",
"ui.fillet_corner_ball_tip": "Một phần mặt cầu của bi lăn, tiếp tuyến (G1) với từng đường bo.",
"ui.fillet_corner_curvature_tip": "Độ cong (G2): một mảng trơn. Góc được lùi dọc theo mỗi cạnh một khoảng Lùi ({factor} × bán kính nếu bạn không nhập) rồi được lấp bằng một mảng, nên phản chiếu đi qua mà không bị gãy.",
"ui.fillet_corner_needs_constant": "Góc mảng trơn (G2) cần Bán kính không đổi và Khớp chính xác.",
"ui.fillet_corner_patch": "Mảng trơn",
"ui.fillet_corner_patch_tip": "Liên tục độ cong (G2): góc được lùi dọc theo mỗi cạnh và được lấp bằng một mảng, nên phản chiếu đi qua mà không bị gãy.",
"ui.fillet_corner_tangent_tip": "Tiếp tuyến (G1): góc bi lăn, một phần mặt cầu của bi lăn tiếp tuyến với từng đường bo.",
"ui.fillet_error_corner": "Không thể tạo góc trơn tại đây. Hãy thử khoảng Lùi khác hoặc góc Tiếp tuyến.",
"ui.fillet_error_failed": "Không thể tạo đường bo này trên các cạnh này. Hãy thử bán kính khác hoặc bo ít cạnh hơn một lần.",
"ui.fillet_error_setback_short": "Khoảng lùi quá ngắn cho mảng ở góc này: góc dựng được từ {least} trở lên. Hãy thử một khoảng Lùi dài hơn.",
"ui.fillet_error_too_large": "Bán kính quá lớn so với các mặt bên cạnh những cạnh này. Hãy thử bán kính nhỏ hơn hoặc đặt Giới hạn mặt thành Bán kính lớn nhất.",
"ui.fillet_fit": "Giới hạn mặt",
"ui.fillet_fit_exact": "Bán kính chính xác",
"ui.fillet_fit_needs_constant": "Khớp bán kính cần Bán kính không đổi.",
"ui.fillet_fit_reduce": "Bán kính lớn nhất",
"ui.fillet_fit_taper": "Bán kính thu hẹp",
"ui.fillet_fit_tip": "Khi bán kính lớn hơn mức các mặt bên cạnh một cạnh cho phép.\nBán kính chính xác: đúng bán kính đã nhập, hoặc không bo gì và có thông báo lý do.\nBán kính lớn nhất: mọi cạnh được bo với bán kính lớn nhất vừa khớp.\nBán kính thu hẹp: giữ bán kính, đường bo chỉ thu hẹp ở nơi các mặt hết chỗ.",
"ui.fillet_options_tip": "Chuỗi tiếp tuyến: bo cả các cạnh nối tiếp trơn từ những cạnh đã chọn.\nXem trước: hiển thị kết quả trong khung nhìn khi bạn chỉnh sửa.",
"ui.fillet_setback": "Lùi",
"ui.fillet_setback_hint": "{factor} × bán kính",
"ui.fillet_setback_least": "Lớn hơn {least}",
"ui.fillet_setback_tip": "Nơi mảng góc trơn bắt đầu: khoảng cách dọc theo mỗi cạnh tính từ góc. Mặc định là {factor} × bán kính. Giá trị phải lớn hơn khoảng lùi nhỏ nhất, tại đó các đường bo gặp nhau mà không cần lùi: bằng bán kính khi các mặt vuông góc với nhau.",
"ui.fillet_smooth_radius": "Thay đổi bán kính trơn",
"ui.fillet_type_choices_tip": "Bán kính không đổi: một bán kính dọc suốt cạnh.\nĐộ dài dây cung: độ rộng ngang đường bo giữ nguyên, bất kể góc gặp nhau của các mặt.\nBán kính thay đổi: một bán kính ở mỗi đầu, và thêm dọc cạnh nếu bạn thêm vào.\nLiên tục độ cong: mặt cắt không làm gãy phản chiếu tại nơi gặp các mặt phẳng (G2).\nSpline: bán kính dọc cạnh theo các bán kính điều khiển bạn đặt.",
"ui.fillet_type_curvature": "Liên tục độ cong",
"ui.fillet_type_tip": "Mặt cắt ngang qua cạnh. Liên tục độ cong: mặt cắt liên tục độ cong (G2) giữa các mặt phẳng, nên phản chiếu đi từ các mặt vào đường bo mà không bị gãy.",
"ui.filter_commands_or_keys": "Lọc lệnh hoặc phím tắt",
"ui.findInTimeline": "Tìm trong lịch sử thiết kế",
"ui.findInWindow": "Tìm trong cửa sổ",
@@ -4827,6 +4948,7 @@
"ui.inspect": "Kiểm tra",
"ui.instances": "Số bản",
"ui.intersect": "Giao nhau",
"ui.iso_4753": "ISO 4753",
"ui.isolate": "Cô lập đối tượng",
"ui.join": "Nối liền",
"ui.joint_play": "▶ Phát",
@@ -4929,6 +5051,7 @@
"ui.part_size_needs_a_part": "Hãy chọn một chi tiết tiêu chuẩn đã chèn (vít, đai ốc, vòng đệm hoặc chốt) để đổi kích thước. Để phóng to hoặc thu nhỏ một thân khối, hãy dùng Thay đổi tỷ lệ.",
"ui.part_size_shared": "Dựng lại chi tiết, thay thế mọi tính năng đã thêm. Tất cả các lần xuất hiện của chi tiết này đều được cập nhật.",
"ui.paste": "Dán",
"ui.patch_continuity_corner_tip": "Mảng gặp các mặt xung quanh với độ liên tục đã chọn dọc theo mỗi cạnh. Tại góc nơi các mặt đó gặp nhau với độ cong khác nhau, mảng giữ tiếp tuyến (G1) ở đó.",
"ui.path": "Đường dẫn",
"ui.pattern_object_type_tip": "Thân khối: các hình đặc, chọn trong khung nhìn hoặc Trình duyệt; mỗi thân được sao chép nguyên vẹn.\nTính năng: các bước trong Lịch sử, như một lần đùn khối hay một lỗ, chọn trong Lịch sử hoặc trên một mặt do chúng tạo ra; bước đó được lặp lại.\nBản phác thảo không phải là cả hai: lặp lại các đường cong của nó bằng Mảng hoặc Lấy đối xứng trong chính bản phác thảo, hoặc đùn khối nó trước.",
"ui.pattern_on_path": "Mảng dọc theo đường dẫn",
+6
View File
@@ -1718,6 +1718,7 @@
"help.timeline.delete": "從時間軸中刪除所選特徵;刪除草圖時,由它建立的特徵也會一併刪除。用於移除不再需要的步驟。",
"help.timeline.dependents": "列出會隨某個特徵一起被刪除的特徵,以及沒有它就會失敗的特徵。用於刪除或變更特徵之前。",
"help.timeline.play": "逐一重播其餘特徵,每次重建後暫停半秒。再次執行此命令或按 Escape 可停止;「移至結尾」會立即跳到結尾。",
"help.version": "版本 {version}",
"help.view.apply": "將檢視轉到標準方向(例如前、上或等角),或轉到已儲存的命名檢視。用於從固定角度觀看模型。",
"help.view.delete": "刪除已儲存的命名檢視。不會更改模型。",
"help.view.fit": "縮放並平移,使整個模型或所選項目填滿檢視。用於模型跑出視野之外時。",
@@ -4482,10 +4483,15 @@
"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": "角點",
+123
View File
@@ -496,6 +496,7 @@
"Render Stage": "渲染阶段",
"Reopen designs": "重新打开设计",
"Reopen the designs that were open when SolidCraft was last closed": "重新打开上次打开的设计",
"Repair Part": "修复零件",
"Replace existing library file": "替换现有库文件",
"Report a bug — review a screenshot and open a GitHub draft": "报告缺陷 — 复核截图并开启 GitHub 草稿",
"Report copied. Keep this text to submit on GitHub when you are online.": "报告已复制。请保留此文本,联网后在 GitHub 上提交。",
@@ -790,6 +791,7 @@
"browser.edit_canvas_title": "编辑画布:{name}",
"browser.edit_point_cloud_title": "编辑点云: {name}",
"browser.move_title": "移动:{name}",
"browser.needs_repair": "{name}:需要修复",
"browser.parameters": "参数 ({count})",
"browser.precision": "精度: {precision}",
"browser.sketch_attachment_lost": "{name} (附着丢失)",
@@ -834,6 +836,7 @@
"cmd.assembly_mass_properties": "质量属性",
"cmd.body.print_face": "打印底面",
"cmd.body_rename": "重命名实体",
"cmd.body_repair": "修复零件",
"cmd.browser_collapse_all": "全部折叠",
"cmd.browser_expand_all": "全部展开",
"cmd.browser_group": "新建组",
@@ -918,6 +921,8 @@
"cmd.diagnostics_crash_reports": "崩溃报告",
"cmd.diagnostics_crash_reports_clear": "删除崩溃报告",
"cmd.diagnostics_crash_test": "崩溃测试",
"cmd.diagnostics_profile": "性能分析",
"cmd.diagnostics_validation": "验证",
"cmd.doc_recover": "恢复设计",
"cmd.doc_recovery_discard": "丢弃已恢复的设计",
"cmd.doc_recovery_list": "可恢复的设计",
@@ -955,6 +960,7 @@
"cmd.frame_profile_list": "型材库",
"cmd.frame_profile_properties": "型材属性",
"cmd.inspect_accessibility": "可达性分析",
"cmd.inspect_analysis": "视图分析",
"cmd.inspect_center_of_mass": "质心",
"cmd.inspect_clearance": "间隙",
"cmd.inspect_colored_components": "启用组件颜色",
@@ -1360,6 +1366,7 @@
"crash.unclean_explanation": "在后续启动时检测到;未记录确切的退出时间。系统关机或强制停止也可能导致会话未正常结束。",
"delete.and_more": "…以及另外 {count} 项",
"diagnostic.empty_boolean_component": "组件 '{component}' 中没有可供切除或求交的实体;工具可能与组件 '{other}' 中的 '{body}' 重叠 — 请激活该组件或选择该实体作为目标",
"diagnostic.reselect_reference": "{feature}:引用 `{reference}` 已不再是选择时的样子;请重新选择",
"dialog.bodies_count": "{count} 个实体",
"dialog.clearance_invalid": "间隙必须是 0 或更大的长度",
"dialog.compute": "计算",
@@ -1425,6 +1432,14 @@
"file_load.reading_percent": "正在读取文件... {percent}%",
"file_load.rebuilding": "正在重建特征 {done}/{total}",
"file_load.recovering": "正在恢复设计",
"file_load.step_build": "正在构建模型",
"file_load.step_feature": "特征 {done}/{total}",
"file_load.step_part": "零件 {done}/{total}",
"file_load.step_percent": "{percent}%",
"file_load.step_read": "正在读取文件",
"file_load.step_rebuild": "正在重建特征",
"file_load.step_repair": "正在检查和修复零件",
"file_load.step_show": "正在准备视图",
"file_load.stopping": "正在等待上一次操作停止...",
"file_load.updating_links": "正在更新链接",
"file_load.waiting": "正在等待文件操作",
@@ -1719,6 +1734,7 @@
"help.timeline.delete": "从时间线中删除所选特征;删除草图时,由它生成的特征也会一起删除。用于去掉不再需要的步骤。",
"help.timeline.dependents": "列出会随某个特征一同被删除的特征,以及缺少它就会失败的特征。用于在删除或更改特征之前。",
"help.timeline.play": "逐个播放剩余特征,每次重建后暂停半秒。再次运行此命令或按Escape停止;转到末尾会立即跳转。",
"help.version": "版本 {version}",
"help.view.apply": "将视图转到前视、俯视、等轴测等标准方向,或转到已保存的命名视图。用于从固定角度观察模型。",
"help.view.delete": "删除已保存的命名视图。模型不会改变。",
"help.view.fit": "缩放并平移,使整个模型或所选对象充满视图。用于模型跑出视野时。",
@@ -1806,6 +1822,27 @@
"home.start_hint": "创建设计、打开最近的文件或浏览示例。",
"home.whats_new": "新功能",
"home.yesterday": "昨天",
"import_report.details": "详细信息:",
"import_report.file_one": "文件还有 1 个其他问题。",
"import_report.file_other": "文件还有 {count} 个其他问题。",
"import_report.hint": "从创建这些零件的程序重新导出可能会解决此问题。“复制警告消息”中有详细信息。",
"import_report.left_out_one": "1 个面无法修复,已缺失。",
"import_report.left_out_other": "{count} 个面无法修复,已缺失。",
"import_report.needs_repair_one": "1 个零件需要修复后才能建模。",
"import_report.needs_repair_other": "{count} 个零件需要修复后才能建模。",
"import_report.not_imported_one": "1 个零件无法导入。",
"import_report.not_imported_other": "{count} 个零件无法导入。",
"import_report.not_shown_one": "1 个面无法绘制,已隐藏。",
"import_report.not_shown_other": "{count} 个面无法绘制,已隐藏。",
"import_report.open_one": "1 个零件的面之间有缝隙,作为开放实体导入。",
"import_report.open_other": "{count} 个零件的面之间有缝隙,作为开放实体导入。",
"import_report.refused_one": "1 个零件无法生成实体,未导入。",
"import_report.refused_other": "{count} 个零件无法生成实体,未导入。",
"import_report.repaired_one": "已修复 1 个零件中的小缺陷。",
"import_report.repaired_other": "已修复 {count} 个零件中的小缺陷。",
"import_report.solids": "{parts} 个零件中有 {solids} 个作为实体导入。",
"import_report.surfaces_one": "1 个零件无法生成实体,作为曲面导入。",
"import_report.surfaces_other": "{count} 个零件无法生成实体,作为曲面导入。",
"install.button_tip": "将 SolidCraft 安装为应用:在独立窗口中打开,离线也能使用",
"install.dock_1": "选择“文件”›“添加到程序坞”。",
"install.dock_2": "点按“添加”。",
@@ -2351,6 +2388,8 @@
"prefs.profile_exported": "已导出配置文件。",
"prefs.profile_imported": "已导入配置文件。",
"prefs.profile_name_hint": "配置文件名称,例如 笔记本",
"prefs.profile_operations": "分析操作耗时",
"prefs.profile_operations_note": "记录 SMLib 调用、内核操作、特征、命令和导入所用的时间。智能体通过 diagnostics.profile 读取。",
"prefs.profile_rename": "重命名",
"prefs.profile_renamed": "已重命名配置文件。",
"prefs.profile_save": "保存",
@@ -2380,6 +2419,9 @@
"prefs.scale_text": "缩放与文字",
"prefs.search": "搜索设置",
"prefs.search_empty": "没有匹配的设置",
"prefs.section_hatch": "剖面线",
"prefs.section_hatch_by_part": "按零件",
"prefs.section_hatch_one": "单一样式",
"prefs.select": "选择",
"prefs.select_one_item": "选择一个项目",
"prefs.select_other_hidden": "使用“选择其他”选择隐藏几何体",
@@ -2494,6 +2536,12 @@
"prefs.under_cursor": "光标下方",
"prefs.units_precision": "单位与精度",
"prefs.updates": "更新",
"prefs.validation": "实体检查",
"prefs.validation.each_feature": "每个特征一次",
"prefs.validation.each_step": "每一步之后",
"prefs.validation.label": "内核完整检查",
"prefs.validation.off": "关闭(实验性)",
"prefs.validation_note": "每一步之后:检查每次扫掠、布尔运算和倒圆。\n每个特征一次:每个特征的结果检查一次。\n关闭(实验性):不检查。",
"prefs.value_boxes_in_view": "在视图中于手柄旁显示数值",
"prefs.value_boxes_in_view_tip": "命令的数值(距离、半径等)显示在模型上方手柄旁的框中。关闭后,在命令窗口中输入数值,选取后键盘输入会进入该窗口,模型不会被遮挡。",
"prefs.view": "视图行为",
@@ -2528,6 +2576,17 @@
"recovery.just_now": "刚刚",
"recovery.min_ago": "{count} 分钟前",
"recovery.never_saved": "从未保存",
"refused.change": "无法更改 {body}。",
"refused.cut": "无法切割 {body}。",
"refused.face_curved": "它的一个曲面无法用于建模。",
"refused.face_flat": "它的一个平面无法用于建模。",
"refused.face_freeform": "它的一个自由曲面无法用于建模。",
"refused.face_rounded": "它的一个圆角面无法用于建模。",
"refused.faces_apart": "它的面贴合得不够紧密,无法用于建模。",
"refused.intersect": "无法与 {body} 求交。",
"refused.join": "无法合并到 {body}。",
"refused.repair": "修复零件",
"refused.show_face": "显示面",
"render.adaptive_absolute": "RGB 绝对误差下限",
"render.adaptive_coverage": "覆盖率误差目标",
"render.adaptive_enable": "使用独立预采样分配样本",
@@ -3995,7 +4054,19 @@
"the section's profiles must be in one sketch": "截面的轮廓必须位于同一个草图中",
"the two origins are on the same component": "这两个原点位于同一个组件上",
"thread.automatic_size": "自动尺寸",
"thread.chamfer_depth_needed": "此牙型必填",
"thread.designation": "螺纹标记",
"thread.drill_range": "丝锥制造商的钻头为 {drill} mm。内螺纹的标准小径为 {minor} mm。可使用 {low} 至 {high} mm 的钻头。",
"thread.drill_range_custom": "钻头为大径减螺距,{drill} mm。内螺纹的标准小径为 {minor} mm。可使用 {low} 至 {high} mm 的钻头。",
"thread.drill_range_taper": "丝锥制造商的钻头为 {drill} mm。螺纹终端处的标准小径为 {minor} mm。可使用 {low} 至 {high} mm 的钻头。",
"thread.end_square": "直角",
"thread.fade_short": "1.25 P(ISO 3508)",
"thread.fade_standard": "2.5 P(ISO 3508)",
"thread.fits_the_face": "适合该面,例如 {example}",
"thread.form_bspp": "管螺纹 G(ISO 228-1)",
"thread.form_bspt": "圆锥管螺纹 R、Rc(ISO 7-1)",
"thread.form_npt": "圆锥管螺纹 NPT(ASME B1.20.1)",
"thread.form_rp": "圆柱内管螺纹 Rp(ISO 7-1)",
"thread.iso_metric": "ISO 公制",
"thread.select_size": "选择尺寸",
"timeline.delete_after_marker_one": "删除历史标记之后的 1 个特征",
@@ -4468,6 +4539,8 @@
"ui.centerline": "中心线",
"ui.chain": "链",
"ui.chamfer": "倒角",
"ui.chamfer_angle": "倒角角度",
"ui.chamfer_depth": "倒角深度",
"ui.chamfer_type": "倒角类型",
"ui.change_workspace": "更改工作区",
"ui.circle": "圆",
@@ -4498,6 +4571,10 @@
"ui.colour_vision_sample": "示例",
"ui.colour_vision_tritan": "蓝色觉异常(Tritan)",
"ui.colour_vision_tritan_tip": "蓝色感知较弱或缺失时使用",
"ui.comb_length": "梳长",
"ui.comb_length_tip": "梳齿的长度:自动长度的倍数。自动长度使最长的梳齿为所示曲线尺寸的五分之一。",
"ui.comb_teeth": "梳齿数",
"ui.comb_teeth_tip": "每个梳的梳齿数,沿曲线均匀分布。梳齿越多,越能看清曲率如何变化。",
"ui.combine": "组合",
"ui.coming_later": "即将推出",
"ui.command_done": "{command} 完成",
@@ -4522,11 +4599,24 @@
"ui.construction.ribbon_label": "辅助线",
"ui.construction.side_hint": "构造直线:单击直线延伸的一侧;右键单击重新开始",
"ui.context_menu": "上下文菜单",
"ui.continuity_crease": "折痕",
"ui.continuity_curvature": "曲率",
"ui.continuity_curvature_change": "曲率变化",
"ui.continuity_curvature_change_tip": "曲率变化 (G3):曲率在接缝处的变化也是平滑的。",
"ui.continuity_curvature_tip": "曲率连续 (G2):反射平滑穿过,没有折痕。",
"ui.continuity_g0": "G0 折痕",
"ui.continuity_g1": "G1 相切",
"ui.continuity_g2": "G2 曲率",
"ui.continuity_gap": "缝隙",
"ui.continuity_position": "位置",
"ui.continuity_position_tip": "位置 (G0):曲面相接,但接缝处有折痕。",
"ui.continuity_smooth_curvature_change": "平滑曲率变化",
"ui.continuity_smooth_curvature_change_tip": "平滑曲率变化 (G4):连曲率的变化方式在接缝处也平滑延续。",
"ui.continuity_tangent": "相切",
"ui.continuity_tangent_tip": "相切 (G1):没有折痕,但曲率在接缝处突变。",
"ui.copy": "复制",
"ui.copy_details": "复制详细信息",
"ui.copy_details_tip": "复制完整消息,以便查找或报告。",
"ui.corner": "角",
"ui.corners": "角点",
"ui.cosmetic_thread_markings": "装饰螺纹标记",
@@ -4644,8 +4734,10 @@
"ui.edit_sketch_empty": "没有可编辑的草图",
"ui.ellipse": "椭圆",
"ui.emboss_wrap_note": "与受支持圆柱相切的正交线轮廓会自动缠绕。选择一个壁以指定目标。",
"ui.end": "末端",
"ui.end_radius": "结束半径",
"ui.end_scale": "末端缩放",
"ui.ends": "端部",
"ui.entities": "实体",
"ui.equal": "相等",
"ui.equation_end": "结束",
@@ -4665,6 +4757,7 @@
"ui.export_ellipsis_keymap": "导出…",
"ui.export_keymap_tip": "将按键、S 框收藏和工具栏导出为文件",
"ui.extend": "延伸",
"ui.extent": "范围",
"ui.extent_type": "延伸类型",
"ui.extract_component": "提取到文件…",
"ui.extract_design_changed": "选择文件时设计已更改。请重新开始提取到文件。",
@@ -4673,11 +4766,39 @@
"ui.extrude_auto_to_object": "拉伸到所选目标",
"ui.extrude_auto_to_object_tip": "在拉伸中选择轮廓后,选取其平面外的面、顶点或平行平面会将延伸类型切换为“到对象”",
"ui.factor": "系数",
"ui.fade": "收尾",
"ui.fade_length": "收尾长度",
"ui.feature_history": "特征历史",
"ui.feature_options": "特征选项",
"ui.features": "特征",
"ui.file": "文件",
"ui.fillet": "圆角",
"ui.fillet_corner_ball": "球面",
"ui.fillet_corner_ball_tip": "滚球球面的一部分,与每个圆角相切 (G1)。",
"ui.fillet_corner_curvature_tip": "曲率 (G2):平滑曲面片。角点沿每条边后退一个后退距离(未输入时为半径的 {factor} 倍),并用曲面片填充,反射穿过时没有折痕。",
"ui.fillet_corner_needs_constant": "平滑曲面片角点 (G2) 需要恒定半径和精确的半径拟合。",
"ui.fillet_corner_patch": "平滑曲面片",
"ui.fillet_corner_patch_tip": "曲率连续 (G2):角点沿每条边后退,并用曲面片填充,反射穿过时没有折痕。",
"ui.fillet_corner_tangent_tip": "相切 (G1):滚球角,滚球球面的一部分,与每个圆角相切。",
"ui.fillet_error_corner": "无法在此处构建平滑角点。请尝试其他后退距离,或相切角点。",
"ui.fillet_error_failed": "无法在这些边上构建此圆角。请尝试其他半径,或一次少倒几条边。",
"ui.fillet_error_setback_short": "对于此角点的面片,后退距离太短:从 {least} 起可以构建。请尝试更长的后退距离。",
"ui.fillet_error_too_large": "半径对这些边旁边的面来说太大。请尝试更小的半径,或将“面边界”设为“最大半径”。",
"ui.fillet_fit": "面边界",
"ui.fillet_fit_exact": "精确半径",
"ui.fillet_fit_needs_constant": "半径拟合需要恒定半径。",
"ui.fillet_fit_reduce": "最大半径",
"ui.fillet_fit_taper": "收窄半径",
"ui.fillet_fit_tip": "当半径大于边旁边的面所允许的大小时。\n精确半径:按给定的半径倒圆,否则不倒圆并说明原因。\n最大半径:用能容纳的最大半径倒每条边。\n收窄半径:保持半径,只在面不够的地方收窄圆角。",
"ui.fillet_options_tip": "相切链:同时倒圆与所选边平滑相连的边。\n预览:编辑时在视图中显示结果。",
"ui.fillet_setback": "后退距离",
"ui.fillet_setback_hint": "{factor} × 半径",
"ui.fillet_setback_least": "须大于 {least}",
"ui.fillet_setback_tip": "平滑角点曲面片开始的位置:从角点沿每条边的距离。默认值为半径的 {factor} 倍。必须大于最小后退距离(不后退时圆角相交之处;面相互垂直时即半径)。",
"ui.fillet_smooth_radius": "半径平滑变化",
"ui.fillet_type_choices_tip": "恒定半径:整条边一个半径。\n弦长:无论面以什么角度相交,圆角宽度都相同。\n可变半径:两端各一个半径,添加后沿边还有更多。\n曲率连续:与平面相接处反射没有折痕的截面 (G2)。\n样条:沿边的半径跟随您设置的控制半径。",
"ui.fillet_type_curvature": "曲率连续",
"ui.fillet_type_tip": "横跨边的截面。曲率连续:平面之间的曲率连续 (G2) 截面,反射从面平滑过渡到圆角,没有折痕。",
"ui.filter_commands_or_keys": "筛选命令或按键",
"ui.findInTimeline": "在时间线中查找",
"ui.findInWindow": "在窗口中查找",
@@ -4827,6 +4948,7 @@
"ui.inspect": "检查",
"ui.instances": "实例数",
"ui.intersect": "相交",
"ui.iso_4753": "ISO 4753",
"ui.isolate": "隔离",
"ui.join": "连接",
"ui.joint_play": "▶ 播放",
@@ -4929,6 +5051,7 @@
"ui.part_size_needs_a_part": "请选择已插入的标准零件(螺钉、螺母、垫圈或销)以更改其尺寸。要放大或缩小实体,请使用缩放。",
"ui.part_size_shared": "重新生成零件并替换额外添加的特征。此零部件的所有实例都会更新。",
"ui.paste": "粘贴",
"ui.patch_continuity_corner_tip": "补面沿每条边以所选的连续性与周围的面相接。在周围的面彼此以不同曲率相接的角上,补面在该处保持相切 (G1)。",
"ui.path": "路径",
"ui.pattern_object_type_tip": "实体:在视图或浏览器中选取的实心形状,每个都会被整体复制。\n特征:历史中的步骤,例如拉伸或孔,在历史中或在其生成的面上选取;该步骤会被重复。\n草图两者都不是:请用草图自身的阵列或镜像重复其曲线,或先将其拉伸。",
"ui.pattern_on_path": "路径阵列",
@@ -1,3 +0,0 @@
| File | Author | Source | Licence |
|---|---|---|---|
| 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 |
+22 -4
View File
@@ -309,7 +309,7 @@ impl ModelBody {
return None;
}
let body = self.clone();
let started = std::thread::Builder::new().name("plan-mesh".into()).spawn(move || {
let started = kernel::kernel_thread("plan-mesh").spawn(move || {
let _ = body.plan_mesh_at(q);
if let Ok(mut warming) = WARMING.lock() {
warming.retain(|k| *k != key);
@@ -444,8 +444,12 @@ fn with_largest_fit(
size: &str,
search: impl FnOnce() -> std::result::Result<Option<(f64, kernel::Body)>, kernel::KernelError>,
) -> kernel::KernelError {
// On solidcore the refusal names a size already, less a margin (34.99 where 35 builds), and
// its edge: the edge stays, the size is the largest the search builds, solidcore's where the
// search finds none.
match search() {
Ok(Some((largest, _))) => kernel::KernelError::TooLarge(format!("{why}; the largest {size} that fits is {} mm", show_mm(largest))),
Ok(Some((largest, _))) if kernel::names_largest_fit(&why) => kernel::KernelError::TooLarge(kernel::with_fit_note(&why, size, largest)),
Ok(Some((largest, _))) => kernel::KernelError::TooLarge(format!("{why}; {}", kernel::largest_fit_note(size, largest))),
Ok(None) => kernel::KernelError::TooLarge(why),
Err(e) => {
log::debug!("the largest {size} that fits: {e}");
@@ -1026,6 +1030,10 @@ pub struct FeatureResult {
pub id: u64,
pub name: String,
pub error: Option<String>,
/// `error` is the kernel's internal error (a panic it caught, [`kernel::KernelError::Internal`]),
/// not the feature's failure: the command that made the feature reports it as one.
#[serde(skip)]
pub internal: bool,
pub warning: Option<String>,
/// An Import feature's warnings by kind and part, with what came in of the file's parts
/// (`warning` is the first of them as the kernel words them).
@@ -2081,6 +2089,7 @@ impl Model {
id: f.id,
name: f.name.clone(),
error: None,
internal: false,
warning: None,
import_report: None,
repair: None,
@@ -2114,6 +2123,7 @@ impl Model {
id: f.id,
name: f.name.clone(),
error: Some(e),
internal: false,
warning: None,
import_report: None,
repair: None,
@@ -2152,6 +2162,7 @@ impl Model {
id: f.id,
name: f.name.clone(),
error: c.error,
internal: false,
warning: c.warning,
import_report: c.import_report,
repair: c.repair,
@@ -2220,7 +2231,11 @@ impl Model {
None => kernel::guard(&f.name, || {
let (r, deferred) =
kernel::validating(validation, || eval_feature(doc, &vals, f, &mut next, &mut warning, &mut import_report, &mut repair));
r.map_err(|e| kernel::KernelError::Failed(e.in_feature(&f.name).to_string()))?;
r.map_err(|e| match e {
// A panic the kernel caught stays one.
crate::DocError::Kernel(kernel::KernelError::Internal(m)) => kernel::KernelError::Internal(m),
e => kernel::KernelError::Failed(e.in_feature(&f.name).to_string()),
})?;
// The checks the feature's steps left to its end: the bodies it keeps.
if deferred { check_kept(&state, &next) } else { Ok(()) }
}),
@@ -2240,6 +2255,7 @@ impl Model {
note_join_apart(&state, &next, f, &mut warning);
}
let ms = t0.elapsed().as_secs_f64() * 1000.0;
let internal = matches!(r, Err(kernel::KernelError::Internal(_)));
let error = match r {
Ok(()) => {
// Copies are named after their sources through the instance transforms.
@@ -2283,7 +2299,8 @@ impl Model {
}
Err(e) => Some(e.to_string().trim_start_matches("the operation failed: ").to_string()),
};
if !self.no_cache && !watched.cancelled() {
// A panic is no result to reuse: the kernel was replaced after it.
if !self.no_cache && !watched.cancelled() && !internal {
let e = CachedEval {
error: error.clone(),
warning: warning.clone(),
@@ -2305,6 +2322,7 @@ impl Model {
id: f.id,
name: f.name.clone(),
error,
internal,
warning,
import_report,
repair,
+1
View File
@@ -786,6 +786,7 @@ impl Model {
id: f.id,
name: f.name.clone(),
error: None,
internal: false,
warning: r.get("warning").map(|w| text(Some(w))).transpose()?,
import_report: r
.get("import_report")
-2
View File
@@ -13,8 +13,6 @@ default = []
# Optional authored texture/HDR bytes; the command registry and metadata remain available.
bundled-render-library = []
raytrace-cpu = ["solidcraft-render/raytrace-cpu"]
# Link SMLib into the kernel (solidcraft-kernel/smlib; needs scripts/fetch-smlib.sh).
smlib = ["solidcraft-kernel/smlib"]
# Turns on the parameter-contract audit recorder (`SOLIDCRAFT_PARAM_AUDIT`, see
# `src/schema/record.rs`), for checking a new contract against the whole test suite.
param-audit = []
+2 -4
View File
@@ -55,7 +55,7 @@ pub static COMMANDS: &[CommandSpec] = &[
trace?: path (write the recorded spans as a Chrome trace-event file, for chrome://tracing or Perfetto). Returns what \
was recorded before enabled and reset apply: {compiled, enabled, wall_ms, spans, dropped, by_category: [{category, \
self_ms, share}], rows: [{category, name, count, total_ms, self_ms, max_ms}], rows_total, trace?}, the rows the most \
self time first. Categories: smlib (SMLib's C API calls, timed by the C API), kernel, feature (one per feature \
self time first. Categories: solidcore (the kernel's calls), kernel, feature (one per feature \
computed, by its type), doc, command, import (STEP/IGES stages), io. Self time is a span's time less the spans \
inside it; total counts its outermost run only. Recording also starts with SOLIDCRAFT_PROFILE=1, the CLI's \
--profile and the app's preference; off, it costs nothing measurable. Read-only",
@@ -131,9 +131,7 @@ fn crash_test(_: &mut Session, p: &Value) -> Result<Value> {
match str_(p, "mode") {
Some("panic") => std::panic::panic_any(String::from("crash test: an internal error in a command")),
Some("kernel") => {
solidcraft_kernel::guard("crash test", || -> solidcraft_kernel::Result<()> {
std::panic::panic_any(String::from("an internal error in the kernel"))
})?;
solidcraft_kernel::crash_test()?;
Err(EngineError::Other("crash test: the kernel error was not caught".into()))
}
Some("abort") => std::process::abort(),
+4 -2
View File
@@ -826,8 +826,10 @@ fn add_feature_in(s: &mut Session, p: &Value, kind: FeatureKind, world: bool) ->
}
}
let r = s.model.result(id).cloned();
if let Some(e) = r.as_ref().and_then(|r| r.error.clone()) {
return Err(EngineError::Other(e));
if let Some(r) = &r
&& let Some(e) = r.error.clone()
{
return Err(EngineError::of_feature(r, e));
}
let st = s.model.state();
let bodies: Vec<&str> = st.bodies.iter().map(|b| b.name.as_str()).collect();
+2 -3
View File
@@ -1124,8 +1124,7 @@ mod tests {
use super::*;
/// While the profiler records, a STEP import's reply carries its own profile: the import's
/// stages and SMLib's calls, as diagnostics.profile reports them.
#[cfg(feature = "smlib")]
/// stages and the kernel's calls, as diagnostics.profile reports them.
#[test]
fn a_step_import_reports_its_profile_while_the_profiler_records() {
let _serial = crate::schema::diagnostics::PROFILE_TESTS.lock().unwrap_or_else(std::sync::PoisonError::into_inner);
@@ -1144,7 +1143,7 @@ mod tests {
let p = &out["profile"];
let rows = p["rows"].as_array().unwrap();
let has = |cat: &str| rows.iter().any(|r| r["category"] == cat);
assert!(has("import") && has("smlib"), "{p}");
assert!(has("import") && has("solidcore"), "{p}");
assert!(p["by_category"].as_array().is_some_and(|c| !c.is_empty()) && p["wall_ms"].as_f64().is_some_and(|w| w > 0.0), "{p}");
}
+1 -1
View File
@@ -324,7 +324,7 @@ fn run_ordered(jobs: Vec<Job>, budget: std::time::Duration) -> (Vec<Option<Done>
let mut threads = 0;
for _ in 0..want {
let (jobs, next, stop, tx) = (jobs.clone(), next.clone(), stop.clone(), tx.clone());
let spawned = std::thread::Builder::new().name("solidcraft-interference".into()).spawn(move || {
let spawned = solidcraft_kernel::kernel_thread("solidcraft-interference").spawn(move || {
while !stop.load(Ordering::Relaxed) {
let k = next.fetch_add(1, Ordering::Relaxed);
let Some(job) = jobs.get(k) else { break };
+1 -1
View File
@@ -34,7 +34,7 @@ mod component_clone;
mod component_clone_assembly;
mod construct;
mod delete;
mod diagnostics;
pub(crate) mod diagnostics;
mod edit;
mod face;
mod features;
+3 -1
View File
@@ -168,8 +168,10 @@ fn child() {
}
assert_eq!(s.doc.features.len(), 1, "the design is unchanged");
}
// A panic inside a solidcore call: caught there, an internal error of the command.
"kernel" => {
assert!(s.execute("diagnostics.crash_test", &json!({"mode": "kernel"})).is_err());
let r = s.execute("diagnostics.crash_test", &json!({"mode": "kernel"}));
assert!(matches!(&r, Err(crate::EngineError::Internal(id, _)) if id == "diagnostics.crash_test"), "{r:?}");
}
// `thread_dies`: the panic ends the app, as one on the window's thread does.
"thread" | "thread_dies" => {
+26 -4
View File
@@ -84,7 +84,10 @@ pub enum EngineError {
impl From<solidcraft_doc::DocError> for EngineError {
fn from(e: solidcraft_doc::DocError) -> Self {
EngineError::Other(e.to_string())
match e {
solidcraft_doc::DocError::Kernel(e) => e.into(),
e => EngineError::Other(e.to_string()),
}
}
}
impl From<solidcraft_sketch::SketchError> for EngineError {
@@ -94,7 +97,19 @@ impl From<solidcraft_sketch::SketchError> for EngineError {
}
impl From<solidcraft_kernel::KernelError> for EngineError {
fn from(e: solidcraft_kernel::KernelError) -> Self {
EngineError::Other(e.to_string())
match e {
// A panic the kernel caught: internal, as one in the command would be. The command's id
// is filled in where the command is run (`Session::execute`).
solidcraft_kernel::KernelError::Internal(m) => EngineError::Internal(String::new(), m),
e => EngineError::Other(e.to_string()),
}
}
}
impl EngineError {
/// The error a failed feature's result reports: internal when the kernel caught a panic.
pub(crate) fn of_feature(r: &solidcraft_doc::FeatureResult, error: String) -> EngineError {
if r.internal { EngineError::Internal(String::new(), error) } else { EngineError::Other(error) }
}
}
impl From<solidcraft_io::IoError> for EngineError {
@@ -1648,6 +1663,11 @@ impl Session {
Err(EngineError::Internal(spec.id.to_string(), msg))
}
};
// The kernel's internal errors come up without the command's id.
let r = r.map_err(|e| match e {
EngineError::Internal(id, msg) if id.is_empty() => EngineError::Internal(spec.id.to_string(), msg),
e => e,
});
// A value typed as `name = expression` defines the user parameter `name` (#4071), in the
// same undo step; a refused definition fails the command, which leaves the design as it was.
let r = match r {
@@ -2174,8 +2194,10 @@ impl Session {
{
self.doc_mut().marker = Some(idx + 1);
self.refresh();
if let Some(e) = self.model.result(fid).and_then(|r| r.error.clone()) {
return Err(EngineError::Other(e));
if let Some(r) = self.model.result(fid)
&& let Some(e) = r.error.clone()
{
return Err(EngineError::of_feature(r, e));
}
}
}
+1 -1
View File
@@ -20,7 +20,7 @@ mod tests {
#[test]
fn the_licences_are_built_in() {
assert!(super::LICENSE_MIT.contains("MIT License") && super::LICENSE_APACHE.contains("Apache License"));
assert!(super::THIRD_PARTY.contains("truck") && super::THIRD_PARTY.contains("egui"));
assert!(super::THIRD_PARTY.contains("wgpu") && super::THIRD_PARTY.contains("egui"));
assert!(super::all().contains("NOTICE"));
}
}
+1 -2
View File
@@ -197,8 +197,7 @@ pub struct ProfileParams {
/// One category's share of the recorded self time.
#[derive(Debug, Serialize, JsonSchema)]
pub struct ProfileCategory {
/// `smlib` (SMLib's own time, measured by its C API), `kernel`, `feature`, `doc`, `command`,
/// `import`, `io`.
/// `solidcore` (the kernel's own calls), `kernel`, `feature`, `doc`, `command`, `import`, `io`.
pub category: String,
pub self_ms: f64,
/// Of all recorded self time, 0–1.
+8 -7
View File
@@ -110,9 +110,10 @@ fn fillet_as_wide_as_a_face_rounds_it_off() {
/// The owner's ruling of 2026-10-30: two edges of a 20 mm box rounded r2 in one fillet (they
/// meet in a mitre at the corner (20, 0, 20), the upright edge there sharp), then the upright edge
/// r3 in a second fillet, whose tangent chain takes the mitre's seam with it. The corner is the
/// body rounding all three at once makes (kernel `fillet_radii` of the box with each edge's
/// radius, `three_rounds_at_a_corner`: SMLib's setback corner, 15 faces, 7928.142563938 mm³); the
/// r2 rounds keep their names, and the r3 round and the corner's patches are the second fillet's.
/// one solidcore 8ddce9016 builds for three rounds of different radii there: one patch, 10
/// faces, 7928.743041456134 mm³ (the fork's setback corner, 15 faces and 7928.142563938, waits
/// for solidcore#2310). The r2 rounds keep their names, and the r3 round and the corner's patch
/// are the second fillet's.
#[test]
fn a_later_round_at_a_mitred_corner_is_blended_with_the_rounds_there() {
let mut s = Session::default();
@@ -134,17 +135,17 @@ fn a_later_round_at_a_mitred_corner_is_blended_with_the_rounds_there() {
let second = run(&mut s, "solid.fillet", json!({"edges": [[20, 0, 10]], "radius": 3}))["feature"].as_u64().unwrap();
assert!(s.model.results.iter().all(|r| r.error.is_none()), "{:?}", s.model.results);
let v = volume(&mut s);
assert!((v - 7928.142563938).abs() < 1e-6, "{v}");
assert!((v - 7928.743041456134).abs() < 1e-6, "{v}");
let faces = run(&mut s, "model.faces", json!({"body": "Box"}))["faces"].as_array().cloned().unwrap_or_default();
assert_eq!(faces.len(), 15);
assert_eq!(faces.len(), 10);
let after: Vec<String> = rounds.iter().map(|p| named(&mut s, *p)).collect();
assert_eq!(after, before);
// The r3 round (halfway up, at 45°) and the corner's patches: the faces the second fillet made.
let k3 = 3.0 - 4.5_f64.sqrt();
assert!(named(&mut s, solidcraft_geom::Vec3::new(20.0 - k3, k3, 10.0)).starts_with(&format!("F{second}:blend:")));
let made = faces.iter().filter(|f| f["name"].as_str().is_some_and(|n| n.starts_with(&format!("F{second}:")))).count();
// the r3 round and the corner's six patches (a setback patch per round, three in the triangle)
assert_eq!(made, 7, "{faces:?}");
// the r3 round and the corner's patch
assert_eq!(made, 2, "{faces:?}");
}
#[test]
+18
View File
@@ -45,6 +45,24 @@ fn chamfer_that_fits_still_builds() {
}
}
/// #199's bar, 14 x 6 x 10, its four upright edges rounded: past a full round of its 6 mm ends
/// the two rounds on each end would cross. Refused, naming 3 mm: the kernel's refusal carries a
/// size and the edge it was found for (`SolidError::FilletRefused`), and the message names the
/// edge.
#[test]
fn a_round_past_a_full_round_is_refused_naming_the_largest_that_fits_and_its_edge() {
let mut s = Session::default();
run(&mut s, "solid.box", json!({"length": 14, "width": 6, "height": 10, "corner": [14, 0, 0]}));
let uprights = json!([[14, 0, 5], [28, 0, 5], [14, 6, 5], [28, 6, 5]]);
for r in [3.001, 3.5] {
let e = s.execute("solid.fillet", &json!({"edges": uprights, "radius": r})).unwrap_err().to_string();
assert!(e.contains("the largest radius that fits is 3 mm"), "{r}: {e}");
assert!(e.contains("allow, at the edge at ("), "{r}: {e}");
assert_eq!(e.matches("that fits is").count(), 1, "{r}: {e}");
}
assert!((volume(&mut s) - 840.0).abs() < 1e-6, "the part stays as it was");
}
/// A rib 4 mm wide: blends of its two top edges meet in its top's middle at 2 mm and past that
/// would cross each other. Refused as too large, naming the largest size that fits.
#[test]
+17 -1
View File
@@ -109,12 +109,25 @@ fn clamped(p: usize, n: usize, k: &[f64]) -> bool {
p >= 1 && k.len() == n + p + 1 && ends(1..=p) && ends(n..=n + p - 1)
}
/// `x` moved by whole periods `b − a` into `[a, b]` when it lies outside.
/// How far past an end of the interval, relative to its size, a parameter is still that end:
/// rounding, not a period away.
const WRAP_SLACK: f64 = 1e-12;
/// `x` moved by whole periods `b − a` into `[a, b]` when it lies outside. A parameter a rounding
/// past an end (a pcurve ending on the seam one ulp beyond it) is that end, not moved a period
/// to the other one: a plan's node there would put its triangles across the whole period.
pub(crate) fn wrap_into(x: f64, (a, b): (f64, f64)) -> f64 {
let period = b - a;
if (a..=b).contains(&x) || !(period > 0.0) {
return x;
}
let slack = WRAP_SLACK * period.max(a.abs()).max(b.abs());
if x > b && x - b <= slack {
return b;
}
if x < a && a - x <= slack {
return a;
}
let w = x - ((x - a) / period).floor() * period;
w.clamp(a, b)
}
@@ -410,6 +423,9 @@ mod tests {
}
assert_eq!(s.wrap([1.0, 0.5]), [1.0, 0.5]);
assert_eq!(s.wrap([1.25, 2.0]), [0.25, 2.0]);
// A rounding past an end is that end, not the other one a period away.
assert_eq!(s.wrap([1.0 + f64::EPSILON, 0.5]), [1.0, 0.5]);
assert_eq!(s.wrap([-1e-17, 0.5]), [0.0, 0.5]);
// Projection finds a point near the seam from either side.
let p = s.derivs(0.02, 0.5).map(|d| d.0).unwrap_or(Vec3::ZERO);
let dom = domain(&s);

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