49ca7ef878
Merge origin/main into fix/flush-pad-over-hole (keeps both round_pads_crossing_a_shallow_fall from #119 and drain_pads_flush_under_a_floor_with_a_hole, which now also checks a boss ring standing on the 1° top around the hole)
CypherNaugh_0x2026-10-11 15:01:29 +02:00
5c4785f55c
Merge origin/main into fix/flush-pad-over-hole
CypherNaugh_0x2026-10-11 14:58:38 +02:00
4c466466a2
Merge origin/main into feat/profiles-by-curve-ids
CypherNaugh_0x2026-10-11 14:53:08 +02:00
4c4a0449a4
Merge pull request #134 from bherbruck/feat/axis-view-navigation
bherbruck2026-10-11 08:51:58 -04:00
6d4c031090
refactor: make UI localization extensible and integrate upstream
bherbruck2026-10-11 07:52:08 -04:00
680c82365e
Merge remote-tracking branch 'origin/main' into feat/sketch-tools-return-ids
CypherNaugh_0x2026-10-11 13:30:48 +02:00
79753040d5
Merge upstream and update curved-cut regression for fallback diagnostics
CypherNaugh_0x2026-10-11 13:25:06 +02:00
5a2174899f
Merge remote-tracking branch 'origin/main' into fix/model-render-section
CypherNaugh_0x2026-10-11 13:12:20 +02:00
b93d4905ac
Merge remote-tracking branch 'origin/main' into feat/sketch-tools-return-ids
CypherNaugh_0x2026-10-11 13:07:50 +02:00
184e301c46
Merge remote-tracking branch 'origin/main' into feat/profiles-by-curve-ids
CypherNaugh_0x2026-10-11 13:07:46 +02:00
3dc0a6024e
Merge remote-tracking branch 'origin/main' into fix/loft-section-order
CypherNaugh_0x2026-10-11 13:03:56 +02:00
8970254672
A drain pad whose bore is the drain hole's wall (a ring joined flush under a floor, or overlapping it) now joins instead of failing with "coincident faces on curved bodies": the mesh intersection can't take two walls on one cylinder, and the coincident-face push only knew planes. Such unions now narrow one body's bore (its walls pushed toward the axis, clear of the other's), join, and cut the original bore's cylinder out again over that body's length, which is exact when the cylinder holds no material of either body (checked on samples). Inside that step a face is pushed into the other body only as deep as there is material behind it all over, so a narrowed rim over the other's bore can't fill it; then the other body's bore is narrowed instead. Test: drain_pads_flush_under_a_floor_with_a_hole (ring flush and 2 mm into a 1° floor, and a disc across the hole, against hand-calculated volumes)
CypherNaugh_0x2026-10-11 13:01:54 +02:00
21e0e99c86
Model renders (screenshot with source model, ui.render) show the section the window shows: the CPU renderer drew the cut face on the far walls at their own depth in a plain grey hatch, so the inside of the body, its edges and the grid showed through it and the cut barely read as a section, it had no outline, perspective views cut along a curve, and an open Section Analysis dialog's preview (or a sketch's Slice) was ignored. The cut face now writes the section plane's depth where it is the visible surface (the CPU counterpart of the viewport's stencil cap), takes the viewport's cap tint and hatch, the cut outline is drawn (section_segments moved from the UI to engine::view and shared), world positions and lines are clipped perspective-correctly, and ui.render in the app uses the viewport's section plane
CypherNaugh_0x2026-10-11 10:16:49 +02:00
cc22672041
Sketch commands return the ids of the points, curves, constraints and dimensions they create as created: {points, curves, constraints, dimensions}, worked out in Session::execute from the sketch before and after, so a script can dimension and constrain new geometry right away; ids stay stable and are not reused after a delete (undo rewinds the counters with the design). The MCP execute tool describes the field
CypherNaugh_0x2026-10-11 05:25:40 +02:00
2406957039
A loft gives the same body whatever the order of its sections: the ruled side faces were parameterised from the first section to the last, and a loft cut that touches the body along an edge (a fall lofted from a shelled basin's whole outline down to a drain pad) worked for one order and failed for the other, with an Option::unwrap() panic inside the kernel's intersection or "shell not oriented and closed" from the planar fallback. The loft now builds its sections in one canonical order (first-to-last step with a positive largest component), so either order gives the same, working body. Tests: the basin fall cut, joined and as a new body in both orders and with the pad in every corner (engine), and the kernel loft's volume and cut in both orders, including large-below and planes facing down
CypherNaugh_0x2026-10-11 05:09:53 +02:00
5073f5dd72
A failed boolean no longer blames "coincident faces on curved bodies" whatever the cause: the exact polygon fallback runs after any failed B-rep boolean (faces that touch, or cross at a shallow angle) and takes planar faces only, but its refusal named coincident faces and curved bodies regardless. It now says which operand is in the way and why: "the tool has 2 curved faces (cylinder)" (kinds: cylinder, cone, sphere, torus, freeform), a face that could not be meshed, a planar face whose mesh is not flat, or a mesh too detailed. Test: planar_fallback_names_the_curved_faces
CypherNaugh_0x2026-10-11 05:25:30 +02:00
848e7aec0e
feat: pick sketch profiles by their bounding curve ids so features keep the same region when parameters move the geometry, matching curves cut into pieces, refusing ambiguous or missing picks instead of taking another region, and storing point picks by curves
CypherNaugh_0x2026-10-11 10:17:25 +02:00
3afd6ae447
feat: add multi-language (i18n) support with Japanese UI
Mithril-3d2026-10-11 12:41:41 +09:00
7c667eda53
test: verify constrained line geometry after preselection and redo
lillith2026-10-11 01:24:42 +02:00
4b35484052
Merge pull request #127 from 0xlillith/docs/testing-ci-profile
bherbruck2026-10-11 07:10:15 -04:00
adb1e5fec5
timeline.inspect returns a feature's definition in the shape timeline.edit's set takes, so agents no longer guess field names: timeline.edit had no documented format ({"extent": {"distance": …}} worked, but only by trying). The new read-only command (feature: id or name) returns type, definition (the editable fields and their current values; bookkeeping and large payloads such as sketch geometry and imported STEP text are left out and listed under omitted), inputs (label, parameter name, expression, unit) and the feature's error and warning. timeline.edit's params doc points to it, and the book's Solid features chapter documents the edit format with the fields of the common features. Tests: inspect, edit by the field names it shows, inspect again (extrude, fillet, sketch); no undo step; hostile feature arguments are refused
CypherNaugh_0x2026-10-11 05:01:44 +02:00
3573b96c7a
fix: shell bodies where four or more planar faces meet at a corner (a floor falling to a drain from the trough edges) by splitting such corners into several joined by short edges instead of refusing because the moved planes miss a common point
CypherNaugh_0x2026-10-11 10:01:46 +02:00
c67ad22129
A sketch fillet keeps the dimensions of the corner it rounds: filleting the corner of a spout (a vertical riser and a horizontal top, the top's length dimensioned to the corner and the corner's height from the origin) dropped the height dimension with the corner point and left the length on the shortened straight part, so the top came out a fillet radius too long. Like Fusion, a corner that dimensions or constraints measure to now stays as a virtual sharp corner, a free point held on both curves' extensions (two point-on-curve constraints), with those dimensions kept and a line length to the corner turned into a distance from the line's far end to it; chamfers do the same. sketch.fillet and the chamfers report virtual_corners and moved_to_virtual_corner, and the viewport draws a virtual corner as an open square with dashed extension lines from the curves. Tests: the spout keeps its 80 x 100 size and both dimensions still drive it, the virtual corner survives save/load and undo/redo, a fillet with nothing on its corner leaves no point behind, and nearly straight or folded corners with dimensions never panic
CypherNaugh_0x2026-10-11 05:01:40 +02:00
75e9472a47
modified: CONTRIBUTING.md new file: flake.lock new file: flake.nix
GU Junhua2026-10-11 16:07:46 +08:00
8c1b1478ce
Joins and cuts of round pads, bosses and holes across a floor that falls a degree or two no longer fail: the B-rep results were right, but the plausibility check meshed them without refinement, and where the shallow cut trims a round side to a thin band the plain mesh spans it with triangles cutting through the cylinder, so the check saw missing material (0.8 to 1.6 % of samples misclassified), rejected the result, and the planar fallback then refused the round tool. The check now meshes the operands and the result with refinement on curved faces (as measure does). Test: round_pads_crossing_a_shallow_fall (a 1° fall and a 2° four-face fall toward a drain)
CypherNaugh_0x2026-10-11 05:33:50 +02:00
6b46915507
docs: align testing guide with the CI profile
lillith2026-10-11 00:32:48 +02:00
a6bb8fc924
feat: stabilize face attachments and closed spline workflows
bherbruck2026-10-11 05:32:46 -04:00
c1d819f235
feat: preserve body history and placed modelling workflows
bherbruck2026-10-11 03:59:12 -04:00
13dd4566ce
Merge pull request #102 from CypherNaught-0x/fix/chamfer-sloped-rims
bherbruck2026-10-10 19:28:48 -04:00
e575bded0e
Fix construction-plane references in mirror, section, and sketches (#99)
CypherNaugh_0x2026-10-11 01:20:51 +02:00
1a1838c114
Merge pull request #106 from N3MI-DG/view_cube_label_size
bherbruck2026-10-10 19:15:10 -04:00
ff1453f868
View cube face labels are larger: one font size for all six, the widest (BOTTOM) spanning 90% of its face, instead of a fixed 9.5 px that left the names small on the cube. Tests: BOTTOM spans 90% of the face seen straight on, and every label stays within its face from any direction
N3MI-DGandClaude Opus 5.52026-10-11 10:06:05 +11:00
e3ee1b359e
Fix cubic input-name repair when loading large designs
bherbruck2026-10-10 19:04:19 -04:00
feaed2e3f6
Merge pull request #97 from CypherNaught-0x/fix/dimension-measured-after-solve
bherbruck2026-10-10 18:49:25 -04:00
f33efa2b6e
The timeline scrolls sideways when its features don't fit the window: with more features than the window is wide, the features past the right edge were clipped and could not be reached
CypherNaugh_0xandClaude Haiku 5.52026-10-11 00:13:53 +02:00
c61b77613a
solid.cylinder, box, sphere, torus and coil place by expressions: base, corner and center take numbers or length expressions per coordinate ("basin_width/2", "10 mm") and follow parameter changes, renames and component frames; before, a point that was not three plain numbers (or an unreadable axis) was silently replaced by the origin (or Z). The features now store the point as expressions (plain numbers still saved as numbers, so existing designs read and write the same) and evaluate it on every recompute; an unreadable or out-of-range point or axis is refused with an error. Tests: primitive points take expressions, follow parameters, renames and a moved component, and bad points are refused
CypherNaugh_0x2026-10-11 00:01:16 +02:00
9c6f9410d2
Fix equal-distance chamfers on sloped end faces
CypherNaugh_0x2026-10-11 00:30:27 +02:00
ade30e9c4e
Merge origin/main (with #86): sketch.dimension reports the solved value in the dimension's unit; the spout test expects the solved 30 and 60 degrees
CypherNaugh_0x2026-10-11 00:13:51 +02:00
9c09e82cff
sketch.dimension reports measured on the solved sketch: it reported the value the geometry had before the new dimension was solved, so dimensioning a 99.84 mm trough line to 100 answered measured: 99.84 and looked like the dimension had not taken. The command now measures the new dimension again once the sketch is solved (driven dimensions too), through a new solvecraft_sketch::measure_dimension that shares the solver's own measuring. Tests: lengths, a driven distance and a diameter report their solved values
CypherNaugh_0x2026-10-11 00:01:19 +02:00
71a4f3061b
Fix document and toolbar tab styling
bherbruck2026-10-10 18:00:36 -04:00
1227fab860
Extrude's start_offset says which way it goes: along the sketch normal, also with direction: negative (where a positive offset starts on the far side of the sketch from the extrusion)
CypherNaugh_0xandClaude Opus 5.52026-10-10 23:33:27 +02:00
9a2a3cef8b
A sweep along a path with sharp corners follows the corners: sweeping a rim profile along three lines (an open rectangle) gave a body of volume -0.0006 mm3 with its centre of mass at x = -3.5e9, and no error
CypherNaugh_0xandClaude Opus 5.52026-10-10 23:33:27 +02:00