Commit Graph
4544 Commits
Author SHA1 Message Date
Karim Jerbi b66f890546 fix(statusbar): scale pill number, label and badge follow one viewport
The pill number used the first-content fallback while the label and sync badge used explicit-only resolution, showing e.g. a 1:50 number beside a 1:1 label with no badge. Label and badge now resolve through target_viewport_handle like the number; render-path handle fn, set-paths and Model branches untouched. Tests: scale_pill_sources_agree_without_targeted_viewport (RED: live probe Some(0.02)/1:1/None) plus Model-unchanged pin. Full suite: 2027 passed / 0 failed / 25 ignored.
2026-10-10 16:14:22 +01:00
Karim Jerbi d1da26feb6 fix(properties): scope asym-scale opt-out per tab
props_asym_scale was app-global keyed by raw handle values, but fresh documents restart numbering at seed 1, leaking one tab's unchecked Uniform box into another tab reusing the value. The set moves to DocumentTab; all uses tab-scoped. Also removes a dead destructure left in overlay.rs. Test: asym_scale_opt_out_does_not_leak_across_tabs with handle-reuse premise assert (RED first). Full suite: 2025 passed / 0 failed / 25 ignored, zero warnings.
2026-10-10 16:14:22 +01:00
Hakan SevenandClaude Opus 5.5 6ad3183b3d Cargo: kernel 0e87fac, graph 5c02e2b
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 16:49:24 +03:00
Hakan SevenandClaude Opus 5.5 48ecaa0ee2 Cargo: kernel b6f85b4, graph e008a24
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 16:37:02 +03:00
Hakan SevenandClaude Opus 5.5 bdc3d8d7c7 Cargo: kernel 71f46ff, graph ffbf3ca
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 15:19:15 +03:00
Hakan SevenandClaude Opus 5.5 4708283382 Cargo: kernel 7ae9c6c, graph 8296ebf
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 09:55:58 +03:00
Karim Jerbi 0c9cc839fe fix(overlay): guard draw_axes against behind-eye projection
draw_axes projected with raw project_point3, so a behind-camera axis endpoint wrapped to a finite mirrored point (proven: clip.w=-100 projected to screen centre). Extracted shared project_point with the eye-plane guard (grid_segments delegates verbatim) and axes now skip when an end is unprojectable plus clip_seg. Legacy canvas offset preserved pixel-identically; remaining raw project_point3 sites elsewhere are out of scope. Tests: project_point_rejects_behind_eye plus axes_segments geometry pins. Full suite: 2024 passed / 0 failed / 25 ignored.
2026-10-10 07:23:35 +01:00
Hakan SevenandClaude Opus 5.5 4ae2722aad Cargo: kernel 749ed0b, graph 33637fc
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 08:24:58 +03:00
Hakan SevenandClaude Opus 5.5 3d488c1dcd Cargo: kernel 01562a8, graph 4b7cde5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 04:18:29 +03:00
ysdirector 2eb0905784 fix(control): track zero-unit tasks 2026-10-10 08:26:15 +08:00
ysdirector 11bc1745a6 feat(control): expose external-change actions 2026-10-10 08:26:11 +08:00
ysdirector f3274f754a fix(save): refresh verified-save fingerprints 2026-10-10 08:01:11 +08:00
ysdirector 607e6f4c1b feat(control): publish selection changes to automation clients 2026-10-10 07:51:18 +08:00
ysdirector 6137c62f85 fix(automation): validate entity creation fields strictly 2026-10-10 07:41:20 +08:00
ysdirector 785e05d805 feat(automation): create and serialize splines 2026-10-10 07:39:41 +08:00
ysdirector 3129e17602 feat(chamfer): preserve sources in no-trim mode 2026-10-10 07:38:47 +08:00
ysdirector 5016a4f300 fix(fillet): preserve sources in no-trim mode 2026-10-10 07:24:16 +08:00
ysdirector 41db8d676b fix(dimensions): honor DIMTMOVE=2 2026-10-10 07:18:34 +08:00
Hakan SevenandClaude Opus 5.5 fbf2694d56 Cargo: kernel 8dbcaa7, graph 65880eb
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 01:12:34 +03:00
ysdirector 7b210eac09 fix(control): capture after the next rendered frame 2026-10-10 05:52:36 +08:00
ysdirector 9f600de52a fix(control): apply sysvar layer changes atomically 2026-10-10 04:52:34 +08:00
Karim Jerbi 6d6a8b1439 fix(layers): key rename and picker state by name, not row
LayerPanel.editing and color_picker_row were positional indices, so a sort/sync/filter between start and commit retargeted renames and swatches. Both are Option<String> now; commit resolves fresh with graceful no-op on deleted layers. Existing rename tests migrated. Tests: layer_rename_commit_follows_name_across_resort (RED first) plus deleted/empty no-op and picker-resort pins. Full suite: 2019 passed / 0 failed / 25 ignored.
2026-10-09 21:22:47 +01:00
ysdirector f5a741fd4e fix(control): reject request id payload reuse 2026-10-10 04:19:59 +08:00
Hakan SevenandClaude Opus 5.5 2d3077e29d Cargo: kernel 305a89e, graph 46ce9cc
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 23:12:38 +03:00
Karim Jerbi a3742e5668 fix(styles): follow text rename into dimstyle dimtxsty
rename_style_storage and rename_symbol rewrote entities and table rows but left dimtxsty stale, so the next Apply resolved a NULL handle. The follow now lives in both shared functions; the plugin workaround is removed as redundant. Tests: text_rename_follows_dimtxsty drives the manager path (RED first); pre-existing plugin rename test stays green via the shared path. Full suite: 2015 passed / 0 failed / 25 ignored.
2026-10-09 20:44:53 +01:00
Hakan SevenandClaude Opus 5.5 713930de82 Cargo: kernel 65d5b8d, graph 64ad77b
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 22:13:14 +03:00
Karim Jerbi 2187fe0d34 fix(tablestyle): ribbon pick writes header so inserts follow it
StyleKey::TableStyle only updated the ribbon mirror, so inserts kept using the header value and resync re-seeded from the mirror. The arm now writes current_table_style_name plus dirty when the style exists, and sync_ribbon_styles seeds from the document like Text/Dim. Tests: tablestyle_ribbon_pick_writes_header_and_dirties plus pick_flows_into_table_insert covering pick-to-dialog (both RED first). Full suite: 1996 passed / 0 failed / 25 ignored.
2026-10-09 19:50:17 +01:00
Karim Jerbi d3274543b7 fix(mcp): omit image payloads for unchanged diff captures
Return metadata only when a diff capture detects no visual change,
avoiding repeated image payloads across all delivery modes
2026-10-09 18:08:34 +01:00
Karim Jerbi 44ffb1ca5a fix(macos): forward launcher CLI arguments and preserve MCP stdio 2026-10-09 14:53:12 +01:00
gianlucafiore 0b98021bb4 Merge pull request #1676 from gianlucafiore/feature/quick-layer-search
feat: add quick searchable layer command
2026-10-09 10:25:35 -03:00
Karim Jerbi d361d4f40e bench: add QuadTree spatial index construction benchmark 2026-10-09 14:20:13 +01:00
Karim Jerbi 237d3afd2f fix(scene): normalize inverted AABBs in spatial index and add warm cache timers 2026-10-09 14:20:13 +01:00
ramox81andClaude Opus 5 eefbcc4860 Dimensions: place the picture block where the dimension says
A dimension carries its graphics in a block of its own, drawn in that
block's frame, and the entity records where the frame sits. The renderer
inserted it at the origin instead, so every dimension whose file carries a
non-zero insertion point drew far from the geometry it measures — the whole
picture offset by that point. Dimensions inside block definitions are where
this shows: a drawing of plan blocks scattered their dimension graphics
thousands of units away, over empty sheet.

The picture now follows the dimension's insertion point, rotation, scale and
extrusion, the way any block reference is placed.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-09 13:32:04 +03:00
ramox81andClaude Opus 5.5 4069d70863 Merge origin/main into codex/extrude-taper-history; kernel patch ef96a46
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 10:36:03 +03:00
Hakan SevenandClaude Opus 5.5 2a2d9b55d9 Cargo: kernel 0764f79, graph 75c30c2
Island cuts stay inside the face; MASSPROP falls back to a coarser mesh
when the finest leaves a face untriangulated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 10:22:08 +03:00
Hakan SevenandClaude Opus 5.5 aa0b87108c feat(model): kernel a82f17d — MASSPROP from B-rep, curved OFFSET/FILLET
- Pins: codec 8189f83, kernel a82f17d, graph d3558bb (all manifests and
  the python plugin lock).
- MASSPROP reports volume, centroid, inertia, products, radii of
  gyration and principal moments of 3D solids and bodies from their
  B-rep (exact where analytic, else from a fine mesh).
- OFFSET of ellipses and splines through the kernel's curve offset.
- FILLET between circles, ellipses and splines through the kernel's
  curve-curve fillet, trimming arcs and open splines to the tangents.

The kernel bump brings the DWG ACIS audit fixes: slices, booleans and
press/pull on cones, slanted cylinder sections, survey coordinates,
spline walls and touching parts.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 08:25:09 +03:00
gianlucafiore a6307b3666 feat: add quick searchable layer command 2026-10-08 23:17:03 -03:00
gianlucafiore d0e4f4097d Merge pull request #1673 from gianlucafiore/fix/ctb-expanded-block-aci
Fix CTB block colors and preserve layout plot settings
2026-10-08 18:56:43 -03:00
gianlucafiore ec9f91ec75 fix test failed 2026-10-08 18:47:54 -03:00
gianlucafiore af3118b826 fix: preserve layout plot settings and CTB block colors 2026-10-08 18:29:14 -03:00
Claude 7aa456407b Context menu: trailing check mark, faded icons on disabled rows
Checked rows (Properties, grip Stretch/Copy) drew a leading "✓ " that
pushed their label out of line with the other rows. The check mark now
sits in the trailing column where submenu headers draw their caret.

Disabled Undo/Redo rows had grey text but full-strength icons:
themed_disabled faded the icon through the SVG tint colour's alpha, which
iced ignores (the tint only replaces RGB). Fade via the widget's opacity
instead, which fixes every themed_disabled icon.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01KeV3kCDBWCrpYaJEs8CRQU
2026-10-08 18:39:00 +00:00
gianlucafiore 06c83f491f Merge pull request #1668 from gianlucafiore/fix/patterned-circle-arc-linetypes
Fix patterned linetypes on circles and arcs
2026-10-08 14:07:09 -03:00
gianlucafiore 4161262e51 fix: preserve linetypes on circles and arcs 2026-10-08 11:43:13 -03:00
ramox81andClaude Opus 5.5 40235de218 build: kernel with extrusion records rebuilt where they are stored
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 15:19:02 +03:00
ramox81 5e6452f1b5 Merge remote-tracking branch 'origin/main' into codex/extrude-taper-history 2026-10-08 15:01:55 +03:00
Hakan SevenandClaude Opus 5.5 ff6e2a6613 review(#1660, #1663): associative sweep scan, arc angles, viewport off bit
- refresh_associative_sweeps runs on every edit and scanned the xdata of
  every entity; it now returns at once when no associative swept surface
  exists (its application is not registered) and looks at surfaces only.
- An arc's end angle was raised by TAU in a loop, which never ends on a
  huge angle from a damaged file; the sweep is taken with rem_euclid.
- The sweep DELOBJ test expected surface sweeps to delete their sources,
  which #1663 changed on purpose: an associative surface keeps them.
- codec c9ffcac (opencadcodec #103) adds an explicit viewport-off bit: the
  viewport on state is read with is_on() and set with turn_on()/turn_off()
  everywhere, so a viewport the file marks off shows off and can be turned
  back on from Properties.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:56:30 +03:00
ramox81andClaude Opus 5.5 5862fe7824 fix(extrude): history records give the profile frame (group 295)
The reference cannot open a drawing whose extrusion history has a taper
and leaves the profile frame to be computed (ErrorStatus 53). Extrusion
and press-pull records now set group 295, as the reference writes them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:49:43 +03:00
Hakan Seven 9519614e91 Merge pull request #1663 from ramox81/codex/sweep-surface-associativity
Associative swept surfaces in the drawing's network
2026-10-08 14:44:25 +03:00
Hakan Seven 435038d364 Merge pull request #1660 from ramox81/codex/sweep-solid-validity
SWEEP: base point from the path; kernel sweep validity fixes

The fork pin the PR carried ([patch] to ramox81/cadkernel 30b3810) is
resolved to upstream instead: kernel 99b6b48 (opencadkernel #78-#83),
codec c9ffcac (opencadcodec #102, #103), graph 7f6aae7, in every manifest.
2026-10-08 14:44:23 +03:00
Hakan SevenandClaude Opus 5.5 e82e97b0d9 fix(properties): renamed, added and removed layers reach the layer list
The Properties palette reads the layer names when it is built, and a
layer rename only refreshed the layer panel and the ribbon, so the
palette's layer list kept the old name beside the new one. The layer
panel refresh now rebuilds the palette whenever the set of layer names
changed: rename, new, delete and purge all pass through it. A layer
toggle that leaves the names alone does not rebuild it, as the rebuild is
costly for a large selection.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:41:52 +03:00