Commit Graph
4443 Commits
Author SHA1 Message Date
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
Hakan SevenandClaude Opus 5.5 1e4c10bc6b feat(cursor): a command asking for objects shows the pickbox alone
Idle and object selection drew the same cursor, crosshair arms with the
pickbox, so the cursor did not tell a pick from a free move. While a
command gathers a selection or waits for an object pick the arms now go
and the pickbox stays: idle keeps arms and box, point input arms and dot.

Fixes #1661

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:41:52 +03:00
Hakan SevenandClaude Opus 5.5 340104bf1b feat(options): interface scale for the whole window
On a non-Retina screen macOS draws the interface at 1x, which reads small
on a Full HD monitor, and there was no way to enlarge it. Options >
Display now offers an interface scale of 75–200 % in 25 % steps, applied
through the window's scale factor on top of the display's own and kept
with the user settings. It is a list rather than a slider because the
dialog rescales under the pointer as the value changes.

Fixes #1655

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:41:46 +03:00
Hakan SevenandClaude Opus 5.5 ff5bfc8c47 fix(purge): PURGE ALL no longer hangs on unnamed shape styles
PURGE repeats until a pass removes nothing. A drawing whose complex
linetypes use shape files carries unnamed STYLE records for them; the
table holds those under keys the empty name does not reach, so every pass
listed them again and removed nothing, and the loop never ended.

- Unnamed and shape-file styles, and styles a complex linetype reaches by
  handle, are never listed for purging.
- In-use checks compare names case-insensitively, as the tables do, so a
  layer, style or linetype referenced as WALL is not purged as Wall.
- Counts are what the tables actually removed, and a pass that removes
  nothing ends the loop.

Fixes #1662

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 14:41:38 +03:00
Karim Jerbi 7d008c4914 bench(navigation): add viewport navigation and spatial candidate benchmarks
- Add Section 19 benchmarks covering camera pan viewport uniform updates,
  spatial hover candidate search, and viewport data assembly scaling
- Add navigation telemetry probes in src/perf.rs (active only when
  PERF=1) to track frame interval, batched input moves, and layout-draw gap
2026-10-08 10:24:06 +01:00
Karim Jerbi af41825a33 fix(scene): avoid idle redraw loop when document lacks underlay entities
underlay_resolution_stale() was requesting continuous redraw frames at
display refresh rate even when no raster underlays were present in the
drawing. Cache has_underlays conservatively on Scene and early-return
false when no underlays exist, eliminating the idle tick leak.
2026-10-08 10:24:06 +01:00
Hakan SevenandClaude Opus 5.5 e130ad15c4 docs(readme): add the Lao README and list Lao in every translation
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 11:34:34 +03:00
Hakan SevenandClaude Opus 5.5 1882773418 review(#1657): Lao is selectable and renders on the web
- Language gains lo-LA, labelled ລາວ in every catalog, so the new
  translation can be chosen.
- Two Lao keys under stale names now use the catalog's names, and the
  touchpad option added since gets its Lao label.
- The web build gets a Lao font (Noto Sans Lao, generated like Thai) and
  routes Lao and Thai drawing text to their fonts; Thai had a font but
  was never routed to it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 11:19:59 +03:00
Hakan Seven ca84ff9cdb Merge pull request #1657 from bounkirdni-2025/main 2026-10-08 11:09:57 +03:00
Hakan SevenandClaude Opus 5.5 69057c55da feat(viewport): optional touchpad pan for wheel-scrolling touchpads
Outside macOS a touchpad's two-finger drag arrives as wheel scrolls that
nothing tells from a wheel. A new option (Options, off by default) makes
every scroll pan and Ctrl+scroll — what a pinch sends there — zoom.

Fixes #1560

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 11:07:37 +03:00
Hakan SevenandClaude Opus 5.5 17d2954098 Cargo: codec ab2eecd, kernel bf44e68, graph 194e619
DWG layout owners and the overall paper-space viewport read back as
written (opencadcodec#78, opencadcodec#80).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 11:07:37 +03:00
Hakan SevenandClaude Opus 5.5 018ac455cb feat(mcp): select by window or crossing box
select takes window [x1, y1, x2, y2] in world XY, with crossing to also
take what the box crosses. It runs the viewport's own box test, now one
helper (box_selection_handles) that the drag and click-move-click
gestures share; the drag gesture applies the selection filter as the
click one already did.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 08:41:54 +03:00
Hakan SevenandClaude Opus 5.5 6256ad3bd5 feat(ribbon): the layer combo shows typical layer names in full
The closed combo is at least 250 px wide (about 25 characters of name)
and its dropdown 300 px.

Fixes #1648

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 08:34:49 +03:00
Hakan SevenandClaude Opus 5.5 da2704bb45 fix(mleader): text left of its landing attaches by its right edge
The text was placed by its alignment rather than its attachment point,
so text on the left of the landing ran over the leader. It now attaches
by the attachment point, and putting the text on a side (on creation or
by a grip) turns left- or right-justified text to read away from the
leader.

Fixes #1646

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 08:34:49 +03:00
Hakan SevenandClaude Opus 5.5 f4c0dc451d fix(linetype): arcs scale their dash elements with the pattern
Circle and ellipse shaders scaled the pattern length by the linetype
scale (PSLTSCALE in a viewport, annotation scale in model) but not the
dash and gap elements, so a dashed arc broke into dots.

Fixes #1644

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 08:34:49 +03:00
Hakan SevenandClaude Opus 5.5 9adb6f59c8 fix(copy): a copy reacts only to what was copied with it
COPY and PASTE kept the source's reactors on each copy, so a copied
dimension still pointed at the source's dimension association (and
boundary or group members at the source hatch or group). Another
application reports such a drawing as damaged and, after recovery,
moves the dimensions. A copy's reactors now follow only targets copied
with it; group copies give their members the new group's reactor; and a
drawing opened with such stray dimension reactors has them dropped.

Fixes #1645
Fixes #1649

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 08:34:49 +03:00
Hakan SevenandClaude Opus 5.5 e2f558ae4f fix(paste): pasted entities land in the current space
The paste kernel added every entity to model space. It now takes the
space a new entity goes to: the block being edited, a layout's paper
space when no viewport is active, or model space.

Fixes #1652

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 08:34:49 +03:00
Bone NI c64502b0de Add Lao (lo-LA) translation 2026-10-08 07:01:52 +07:00
gianlucafiore 5318609db0 Merge pull request #1656 from gianlucafiore/fix/layer-hidden-interaction
Fix small drafting UX regressions affecting workflow speed
2026-10-07 20:29:26 -03:00
gianlucafiore 3ecf1951c0 fix: render command previews above wipeouts 2026-10-07 20:14:08 -03:00
gianlucafiore 99fff30c53 fix: preserve perpendicular tracking after typed distance 2026-10-07 20:02:09 -03:00
gianlucafiore 6df70538ea fix: paste entities into active block editor 2026-10-07 19:50:47 -03:00
Karim Jerbi 4471260c00 fix(layers): push undo for transparency edits
LayerTransparencyEdit applied without begin/commit_layer_undo, so the edit was permanent while every sibling arm is undoable. Mirrors the color arm inside the non-empty guard. Test: layer_transparency_edit_pushes_undo asserts the entry plus undo-restores (RED first). Full suite: 1991 passed / 0 failed / 25 ignored.
2026-10-07 23:43:32 +01:00
gianlucafiore 7b7aa0d429 fix: prevent interaction with hidden layers 2026-10-07 19:22:44 -03:00
Hakan SevenandClaude Opus 5.5 1bf584a1c1 Cargo: codec 937745d, kernel 86497ae, graph 81bf45f
DXF drawing properties (opencadcodec#98) and spline parameterization
flags (opencadcodec#99).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 21:57:57 +03:00
Hakan SevenandClaude Opus 5.5 ac086def56 review(#1653): upstream pins, registered expression xdata, table apply refreshes sweeps
- Cargo: drop the fork patches; codec 8e93175, kernel 0665fc9, graph
  3b91e67 in every manifest and lock.
- A swept surface's expression link is written through set_entity_xdata,
  so OCS_SWEEP_EXPRESSION has its APPID record and the record its handle.
- Applying the whole named-parameter table also rebuilds the swept
  surfaces linked to expressions, not only a single-row edit.
- swept_surface_entity keeps its doc comment.
- The native-constraint tests find a scope's network through its own
  dictionary, where it is now stored.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 21:38:17 +03:00
Hakan Seven 2d1f45eeb3 Merge pull request #1653 from ramox81/codex/sweep-surface-expressions 2026-10-07 21:31:16 +03:00
ramox81andClaude Opus 5.5 07499968d8 Sweep spatial profiles as surfaces, keep swept surfaces linked to expressions
A closed 3D polyline profile that does not lie in one plane sweeps a
surface with the reference's refusals. Swept surfaces made with an
Expression scale or twist follow the named parameters, and reference
surfaces linked through their associative action are picked up on open.
Saving keeps the associative actions the constraint graph does not
rebuild and stores each scope network through its own dictionary.
Kernel 23138fc, codec 64fe2a6.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 16:47:30 +03:00
ramox81andClaude Opus 5.5 0c3ca96822 SWEEP: sweep from the picked path end; kernel run faces and placed ends
- An open path is swept from its end nearest the pick point (in plan), as
  the reference does; the record keeps the original path and the placed
  frame marks the start.
- Kernel from ramox81/cadkernel 1df75f5: one face per path run for
  twisted, scaled and spline sweeps, placed records swept from the placed
  end, end caps without pcurves.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 16:34:34 +03:00
Hakan SevenandClaude Opus 5.5 41d93b6f54 review(#1642, #1643, #1647): one escaped newline, no dead SWEEP prompts, wrapped long lines
The refused-path message split its format string across a raw line
break; it uses \n. The reference-length and new-length prompts SWEEP no
longer shows leave the catalog and all 21 locales. Lines past the width
limit in the UPDATEFIELD and automation select changes are wrapped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 12:58:21 +03:00
Hakan Seven 737981791b Merge pull request #1642 from ramox81/codex/sweep-corner-followups 2026-10-07 12:55:08 +03:00
Hakan Seven 5a1788775b Merge pull request #1647 from ramox81/codex/automation-select-layout 2026-10-07 12:55:08 +03:00
Hakan Seven 534b432b8c Merge pull request #1643 from ramox81/codex/updatefield-count 2026-10-07 12:55:08 +03:00
Hakan SevenandClaude Opus 5.5 34dbc13db0 fix(i18n): named-argument messages no longer print a stray placeholder
Eight messages with %{name} arguments went through the positional
formatter, which printed "%3" for a count, and their catalog entries
held %__ocs_fmt_N__ where the named form is expected. They take named
arguments now, and the entries — and those of the selection and HATCHEDIT
prompts with the same fault — use __ocs_arg_<name>__.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 12:51:33 +03:00
Hakan SevenandClaude Opus 5.5 33640e050d feat(solid history): Ctrl+click picks a composite's solid; show history draws them
Ctrl+click on a composite selects it with the solid under the cursor as
the one its palette and grips edit: the solid whose own surface passes
through the picked point. With its history shown, a composite draws the
edges of the solids its booleans joined, each where it sits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 12:51:32 +03:00
Hakan SevenandClaude Opus 5.5 43bd5aa427 feat(mcp): grips, grip_drag and click
grips lists the selection's grips; grip_drag moves one to a world point
through the viewport's own grip gesture with snaps, ortho and polar off;
click presses the left button where a world point shows, optionally with
Ctrl and/or Shift held.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 12:51:32 +03:00
ramox81andClaude Opus 5.5 a98e600f09 Command line: the bare-word probe keeps no empty undo step
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:40:37 +03:00
ramox81 4ef92c3ef1 Merge branch 'codex/updatefield-count' into codex/automation-select-layout 2026-10-07 11:28:27 +03:00
ramox81andClaude Opus 5.5 a1d59e5b17 Automation select: refuse handles inside block definitions
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:28:26 +03:00
Hakan SevenandClaude Opus 5.5 d3033caf24 feat(solid history): booleans keep the solids they joined editable
With SOLIDHIST on, UNION, SUBTRACT and INTERSECT no longer reduce the
result's history to a frozen body: each solid's history joins the
result's under a boolean step, in the order the result applied them.
The Properties palette lists a composite's solids under Operand; the one
chosen shows its own geometry rows and grips, placed where it sits in
the composite, and editing it replays the whole tree. A composite read
from a file keeps its saved body; the tree is replayed only on edits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:14:13 +03:00
Hakan SevenandClaude Opus 5.5 d1f3bf3013 Cargo: codec 063c106, kernel 3f3781a, graph ca3e6a2
Solid histories with boolean steps: merged graphs, tree reads, tree
rebuilds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:14:13 +03:00
ramox81andClaude Opus 5.5 d425a1d921 Automation select: only entities of the current space
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:04:04 +03:00
ramox81andClaude Opus 5.5 ac186d3967 UPDATEFIELD: an undo step on every run
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:03:57 +03:00
ramox81andClaude Opus 5.5 6da3fea563 UPDATEFIELD: count fields as the reference does
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 10:24:35 +03:00
ramox81andClaude Opus 5.5 56f3f68de9 SWEEP: Expression option, reference prompts and localized messages
- Scale and Twist take an Expression evaluated with the drawing's
  parameters; invalid input prints the reference message and asks again.
- The scale and twist prompts use the reference wording and defaults.
- The SWEEP prompts and refusal messages are in the locale catalog with
  translations in every locale.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 10:15:32 +03:00
ramox81andClaude Opus 5.5 1a18fdd0cf SWEEP: reference messages, 3D polyline profiles and Scale Reference
- 3D polyline profiles are recorded as wire bodies, like 3D polyline paths.
- Refused sweeps print the modeling error code and "Unable to sweep N
  selected objects."; a scaled sweep rejects closed and cornered spatial
  paths with the reference messages and asks for the path again.
- Scale > Reference asks for start and end reference lengths (start / end).
- Bank stays on for later sweeps until a twist angle is entered.
- Refused twist/scale edits in Properties print the modeling error code.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 09:26:29 +03:00
Hakan SevenandClaude Opus 5.5 7a8ec02003 feat(options): command line text colour and a fonts folder
Display gets a command line text colour (blank keeps the theme's); it
covers history, prompts and the input, while errors stay red. Files
lists the fonts folder that text resolution searches, so .shx files can
be added by hand; opening it creates it first.

Discussions #1493, #1372

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 08:50:12 +03:00
Hakan SevenandClaude Opus 5.5 1c37c90c75 feat(grips): the crosshair locks onto a hovered grip
Before a grip is picked, the crosshair now jumps to the grip under it, so
the click lands where the marker shows.

Discussion #1557

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 08:50:11 +03:00
Hakan SevenandClaude Opus 5.5 7f59d8f679 feat(properties): the drawing's format version names its release years
The no-selection panel showed only the AC code. It now reads e.g.
"AC1032 (2018+)", from the version the file was opened as.

Discussion #1442

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 08:50:06 +03:00
Hakan SevenandClaude Opus 5.5 a4ebf8f58a i18n(it): Pan is Panoramica; release notes line reads right
Discussion #1591

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 08:50:06 +03:00