bherbruck
6140f89a42
Merge pull request #153 from EmDecay/fix/145-sketch-size-caps
...
fix: hold the sketch caps at design load and bound the solver per component
2026-10-11 12:38:00 -04:00
bherbruck
66f351e93b
Merge pull request #152 from EmDecay/fix/144-import-work-budgets
...
fix: budget the work 3MF and DXF import does, not only its output
2026-10-11 12:37:23 -04:00
bherbruck
5b54275626
Merge pull request #151 from EmDecay/fix/143-construction-plane-recursion
...
fix: continue the plane depth count through model geometry
2026-10-11 12:36:25 -04:00
bherbruck
7abfe69603
Merge pull request #157 from bherbruck/docs/enclosure-demo-refresh
...
docs: restore the enclosure demo with the 0.2.0 UI
2026-10-11 12:27:22 -04:00
bherbruck
1a62c4513f
docs: restore the enclosure demo with the 0.2.0 UI
2026-10-11 12:20:48 -04:00
bherbruck
2f78d3ef81
Merge pull request #149 from jyviko/fix/join-merges-met-bodies
...
Join merges every body the tool meets
2026-10-11 11:36:27 -04:00
Matt
78f80143d5
fix: hold the sketch caps at design load and bound the solver per component
...
Nothing on the load path checked a sketch's size, and every sketch in the
timeline is solved when a design opens. The solver sizes its dense matrices by
the connected component, so a 30 MB file with 200,000 chained points asked the
allocator for terabytes and the process aborted, which no panic guard can
intercept.
Reject an oversized sketch while the design is still raw JSON, so the typed
arrays are never built, and refuse a connected component with more variables
than fits in a bounded matrix: that component now reports a failed solve and
leaves its geometry alone. 10,000 chained points went from 9.6 GB and 25
seconds to a failed solve in well under a second.
Fixes #145
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
(cherry picked from commit 04abbf95c26f68c7d0a126ed9e2827049f593361)
2026-10-11 08:22:11 -07:00
Matt
a03e4b9413
fix: budget the work 3MF and DXF import does, not only its output
...
3MF: flatten budgeted triangles but copied the whole vertex array for every
placement, so an object with 100,000 vertices and one triangle placed by 500
build items reached 6.8 GB resident, and 10,000 items (still a ~200 KB file)
asked for about 140 GB and aborted on the allocation. Copy only the vertices
the triangles reach, keeping their relative order so an ordinary mesh is
numbered as it was in the file.
DXF: every bound in convert was on the geometry that comes out, and a block
that emits none tripped none of them. Six self-inserts in one empty block fan
out to 6^16 visits, and a 176-byte file never returned. Count entities visited
and array cells placed against a work budget, skip the array loop for a block
with no geometry, and bound the array size on its own.
Fixes #144
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
(cherry picked from commit 3bf3b68a1340d9bdef8dcefd6c4fb5a7cae6eec4)
2026-10-11 08:22:07 -07:00
Matt
0b5e15e2b9
fix: continue the plane depth count through model geometry
...
A construction plane built from model geometry resolves each of its sides
through the document again. That hop restarted the recursion depth at 0, so a
plane that is its own side never exceeded depth 1 and the 32-level cap never
fired: a ~600-byte design file recursed until the stack overflowed and the
process aborted, which no panic guard can intercept.
Carry the depth on the construction context so the geometry arms continue the
caller's count instead of restarting it.
Fixes #143
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
(cherry picked from commit 4bca1d49f27dfe9ef0140132746e1c7415daba8e)
2026-10-11 08:22:07 -07:00
bherbruck
5affff307e
Merge pull request #150 from bherbruck/feat/usability-integration
...
Ship 0.2.0 usability, geometry safeguards and updated desktop demo
v0.2.0
2026-10-11 11:16:24 -04:00
bherbruck
ab05b24dee
Prepare 0.2.0 usability release and refresh desktop demo
2026-10-11 10:55:55 -04:00
Iraklis Kourtis and Claude Opus 5.5
8a38a7354c
fix: join merges every body the tool meets
...
A Join unioned its tools into the first target only, leaving other target
bodies the tool overlapped or touched as separate, interpenetrating bodies.
Each tool now merges with every target it meets (shared material or face
contact, tested on the operands' boundaries) into one body under the first
one's name; absorbed bodies are removed and their threads follow. A tool that
meets no target still joins the first target as a separate lump. Sheet metal
and mesh bodies are never absorbed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01J53sR6gEaVt56soFDpTck8
2026-10-11 10:41:48 -04:00
bherbruck
a094fa46b5
Merge pull request #138 from bherbruck/feat/curved-sketch-workflows
...
Preserve curved sketch profiles through edits and complete adaptive modeling workflows
2026-10-11 10:00:43 -04:00
bherbruck
0167c358bb
Merge upstream profile picks and flush-pad fixes with adaptive identities
2026-10-11 09:43:16 -04:00
bherbruck
463441a119
Merge pull request #126 from CypherNaught-0x/fix/flush-pad-over-hole
...
Drain pads whose bore is the drain hole's wall join instead of failing (coincident cylinders)
2026-10-11 09:28:59 -04:00
bherbruck
ce46faa19d
Merge pull request #117 from CypherNaught-0x/feat/profiles-by-curve-ids
...
Profiles can be picked by the curves around them, and point picks are stored that way
2026-10-11 09:28:43 -04:00
CypherNaugh_0x
b93698c42e
Merge remote-tracking branch 'fork/fix/flush-pad-over-hole' into fix/flush-pad-over-hole
...
# Conflicts:
# crates/kernel/src/tests.rs
2026-10-11 15:07:32 +02:00
bherbruck
4e595deff2
feat: preserve adaptive sketch profiles and curved modeling workflows
2026-10-11 09:06:25 -04:00
CypherNaugh_0x
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)
2026-10-11 15:01:29 +02:00
CypherNaugh_0x
5c4785f55c
Merge origin/main into fix/flush-pad-over-hole
2026-10-11 14:58:38 +02:00
CypherNaugh_0x
4c466466a2
Merge origin/main into feat/profiles-by-curve-ids
2026-10-11 14:53:08 +02:00
bherbruck
4c4a0449a4
Merge pull request #134 from bherbruck/feat/axis-view-navigation
...
feat: add smooth interactive axis view and diagonal snapping
2026-10-11 08:51:58 -04:00
bherbruck
43a02625a2
feat: add smooth interactive axis view and diagonal snapping
2026-10-11 08:51:24 -04:00
bherbruck
6cbcf5c823
Merge pull request #125 from CypherNaught-0x/fix/model-render-section
...
Model renders show an active section with capped cut faces
2026-10-11 08:34:20 -04:00
bherbruck
b02c5c01f9
Merge pull request #123 from CypherNaught-0x/feat/sketch-tools-return-ids
...
Sketch commands return the ids of the geometry they create
2026-10-11 08:17:05 -04:00
bherbruck
180c655ded
Merge pull request #129 from 0xlillith/fix/sketch-point-alignment
...
fix: allow horizontal and vertical alignment of sketch points
2026-10-11 08:16:27 -04:00
bherbruck
93ca39c68e
Merge pull request #131 from 0xlillith/fix/sketch-constraint-preselection
...
fix: apply curve-pair constraints to sketch preselection
2026-10-11 08:14:40 -04:00
bherbruck
442c1f134b
Merge pull request #112 from Mithril-3d/feat/i18n-support
...
feat: add extensible offline localization with Japanese UI
2026-10-11 08:01:30 -04:00
bherbruck
d47b5d3a29
Merge pull request #128 from 0xlillith/fix/fuzz-seed-range
...
fix: validate fuzz seed ranges without overflow
2026-10-11 07:58:04 -04:00
bherbruck
736730c398
Merge pull request #122 from CypherNaught-0x/fix/loft-section-order
...
A loft gives the same body whatever the order of its sections
2026-10-11 07:57:49 -04:00
bherbruck
32900813c5
Merge pull request #118 from CypherNaught-0x/fix/boolean-fallback-message
...
Boolean errors say what actually stopped them instead of blaming coincident faces on curved bodies
2026-10-11 07:57:31 -04:00
bherbruck
839966c108
merge: integrate current upstream contribution guidance
2026-10-11 07:57:27 -04:00
CypherNaugh_0x
4667c3a600
Fix sketch re-export ordering for rustfmt
2026-10-11 13:57:06 +02:00
bherbruck
6d4c031090
refactor: make UI localization extensible and integrate upstream
2026-10-11 07:52:08 -04:00
CypherNaugh_0x
680c82365e
Merge remote-tracking branch 'origin/main' into feat/sketch-tools-return-ids
...
# Conflicts:
# crates/engine/src/cmd/sketch_modify.rs
2026-10-11 13:30:48 +02:00
CypherNaugh_0x
79753040d5
Merge upstream and update curved-cut regression for fallback diagnostics
2026-10-11 13:25:06 +02:00
bherbruck
413a1fb727
docs: guide agents to show concrete visual context and track integration
2026-10-11 07:16:45 -04:00
bherbruck
420ee723ee
Merge pull request #124 from CypherNaught-0x/fix/shell-four-face-corner
...
Shell works where four or more flat faces meet at a corner
2026-10-11 07:13:42 -04:00
bherbruck
7e4dd4fd66
Merge pull request #121 from CypherNaught-0x/fix/fillet-keeps-dimensions
...
Fillet and chamfer keep the dimensions of the corner they replace on a virtual sharp corner
2026-10-11 07:12:48 -04:00
CypherNaugh_0x
5a2174899f
Merge remote-tracking branch 'origin/main' into fix/model-render-section
...
# Conflicts:
# crates/ui-egui/src/viewport.rs
2026-10-11 13:12:20 +02:00
bherbruck
f9d61590f3
Merge pull request #120 from CypherNaught-0x/feat/timeline-inspect
...
timeline.inspect shows a feature's editable fields; the timeline.edit format is documented
2026-10-11 07:11:49 -04:00
bherbruck
c11fc79288
Merge pull request #119 from CypherNaught-0x/fix/boolean-shallow-slope
...
Booleans across a floor that falls a degree or two no longer reject correct results
2026-10-11 07:11:35 -04:00
bherbruck
d9f7473ceb
Merge pull request #115 from astrojhgu/main
...
build: NixOS flake for the dev shell and the app package
2026-10-11 07:11:04 -04:00
bherbruck
4b35484052
Merge pull request #127 from 0xlillith/docs/testing-ci-profile
...
docs: align testing guide with the CI profile
2026-10-11 07:10:15 -04:00
CypherNaugh_0x
b93d4905ac
Merge remote-tracking branch 'origin/main' into feat/sketch-tools-return-ids
...
# Conflicts:
# crates/engine/src/cmd/mod.rs
# crates/engine/src/cmd/sketch.rs
# crates/engine/src/cmd/sketch_create.rs
# crates/engine/src/cmd/sketch_modify.rs
# crates/engine/src/lib.rs
# docs/book/src/guide/sketching.md
2026-10-11 13:07:50 +02:00
CypherNaugh_0x
184e301c46
Merge remote-tracking branch 'origin/main' into feat/profiles-by-curve-ids
...
# Conflicts:
# crates/doc/src/lib.rs
# crates/sketch/src/lib.rs
2026-10-11 13:07:46 +02:00
CypherNaugh_0x
3dc0a6024e
Merge remote-tracking branch 'origin/main' into fix/loft-section-order
...
# Conflicts:
# crates/engine/src/cmd/features_more_tests.rs
2026-10-11 13:03:56 +02:00
CypherNaugh_0x
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)
2026-10-11 13:01:54 +02:00
CypherNaugh_0x
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
2026-10-11 12:23:57 +02:00
CypherNaugh_0x
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
2026-10-11 12:23:57 +02:00