Commit Graph
4921 Commits
Author SHA1 Message Date
Hakan SevenandClaude Opus 5.5 f7dd9b403d Cargo: codec 2c2a3fb, kernel 2dc2fca, graph 14275ea
DXF values read into exactly sized strings (codec #114): reading a
DXF in the web worker no longer spends most of its time in malloc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 04:36:38 +03:00
Hakan SevenandClaude Opus 5.5 3893165ac7 #1798 follow-up: wrap lines over 100 columns
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 04:14:30 +03:00
Hakan Seven 87c44cee78 Merge pull request #1798 from Pictus08/feat/autocad-pgp-ucs-follow
Import AutoCAD PGP aliases and support UCSFOLLOW workflows. The UCS
conflict keeps main's click-origin flow (axis preview, Enter accepts
the placed axes) and takes the PR's prompt and option keywords.
2026-10-15 04:09:10 +03:00
Hakan SevenandClaude Opus 5.5 9b518ff912 sysvar: SELECTIONCYCLING
Selection cycling was reachable only from the status bar and Options.
SELECTIONCYCLING / SETVAR now read and set it: 0 off, 1 or 2 on (the
candidate list always shows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 03:57:33 +03:00
Hakan SevenandClaude Opus 5.5 b28a3d0b7b ucs: a click at the option prompt sets the origin, with axis preview
UCS waited for an option keyword before taking any point. A picked or
typed point at the first prompt now starts the origin / X / XY
placement directly. A live L of the new X and Y axes follows the cursor,
and Enter accepts what has been placed so far: the origin alone moves
the UCS, an X point turns it about the current Z.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 03:45:45 +03:00
Hakan SevenandClaude Opus 5.5 889e30019b properties: Ctrl+1 reveals the panel and works over clean screen
PROPERTIES only flipped the visibility flag, so a Properties pallet in
an edge's inactive group or behind auto-hide stayed out of sight. It
now opens through the dock, which brings its group forward. In clean
screen the pallet shows on top without changing its normal state;
leaving clean screen drops that overlay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 03:31:30 +03:00
Hakan SevenandClaude Opus 5.5 1ae118b1bb annotation: annotative dimstyles ignore DIMSCALE; unit-converted scales
An annotative dimension style still stores a DIMSCALE (100 in ACA
templates), but its features are sized by the annotation scale. Using
the stored value drew 3 mm dimension text 300 units tall, burying the
plan under giant digits.

Some templates also store their ratio scales already converted to the
drawing unit (a metre drawing's "1:50" as 1 paper = 0.05 drawing, with
CANNOSCALEVALUE 20). Applying the INSUNITS conversion on top shrank
the annotation multiplier a thousandfold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 03:16:33 +03:00
Pictus08 d19c797685 aliases: import AutoCAD PGP files and support UCS-follow workflows 2026-10-14 20:46:35 -03:00
Hakan SevenandClaude Opus 5.5 2414721c14 layers: LAYCUR moves the selected objects to the current layer
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:53:26 +03:00
Hakan SevenandClaude Opus 5.5 686fb71780 options: fonts and plot styles can live in a chosen folder
Options > Files lets the fonts and plot style folders move elsewhere,
such as a share a whole team uses (Change... / Default). Fonts are then
looked up and downloaded there, and plot style tables listed and saved
there; the choice is kept in the profile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:48:05 +03:00
Hakan SevenandClaude Opus 5.5 e9a2b9d196 startup: /b runs a script, as --script does
Shortcuts written for other CAD programs pass the startup script as
`/b script.scr`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:43:42 +03:00
Hakan SevenandClaude Opus 5.5 636c0917e0 dimensions: a radius turns with its text grip (#1675)
Dragging a radius dimension's text left the point on the arc where it
was and kinked the line to reach the text. The point on the arc now
follows the text round the centre, as the diameter's already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:41:32 +03:00
Hakan SevenandClaude Opus 5.5 601a97b4dd properties: a text given a style takes its height, width and oblique (#503)
Changing a TEXT's style in the Properties panel only swapped the font, so
a style that differs in its fixed height, width factor or oblique angle
seemed to change nothing. The text now takes the style's fixed height
(when it sets one), width factor and oblique angle, and an MTEXT the
fixed height.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:35:34 +03:00
Hakan SevenandClaude Opus 5.5 368dd0d7a5 TRIM / EXTEND: Standard mode and TRIMEXTENDMODE (#1733)
Both commands gain a mOde option [Quick/Standard]. Quick (the default)
starts ready to pick, every object a cutting or boundary edge; Standard
starts by selecting those edges, Enter with none taking every object.
The choice is TRIMEXTENDMODE (1 Quick, 0 Standard), kept in the profile
and settable with SETVAR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:25:35 +03:00
Hakan SevenandClaude Opus 5.5 7f411bc02d layouts: keep every content viewport's wires cached (#1769)
The resident wire sets were capped at 16 and cleared once more were
held. A layout with more content viewports than that (24 in the report)
cleared them all on each redraw and re-tessellated the model for every
viewport, so the layout stayed sluggish even when nothing changed. The
cap now covers the shown layout's viewports: idle redraws build no
wires, and a frame of that layout draws in ~14 ms instead of ~30 ms
plus ~100 ms of rebuilds.

The automation bridge gains a `layout_switch` action, as clicking a
layout tab does, which is how this was measured.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:17:39 +03:00
Hakan SevenandClaude Opus 5.5 cf763dcd49 Cargo: codec fddcbae, kernel 82686d7, graph 49b248d
Rotating a dimension keeps its default text and oblique angles (#1761).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:00:53 +03:00
Hakan SevenandClaude Opus 5.5 7c3ec2666c layer states: restore into the active layout viewport (#1796)
Restoring a layer state while a layout viewport is active now applies it
to that viewport alone, as viewport freezes and viewport overrides for
colour, linetype, lineweight and transparency (where they differ from the
layer, or an override is already there). On/off, lock and plot have no
per-viewport form and still apply to the drawing.

Viewport colour overrides are packed as the format does (0xC3 index,
0xC2 true colour); reading them now honours that type byte, so an index
override from a file no longer shows as a near-black true colour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:46:39 +03:00
Hakan SevenandClaude Opus 5.5 1d5b87d931 README: how to install the release snap (#1787)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:32:40 +03:00
turbuczn 6bd01feafa fix: update performance benchmark for overlay API
(cherry picked from commit 0143daf23a)
2026-10-15 00:22:41 +03:00
turbuczn 3c55e6d7e1 feat(measure): add radius and angle tools with dynamic measurement overlay
(cherry picked from commit aac44906a3)
2026-10-15 00:22:41 +03:00
Hakan SevenandClaude Opus 5.5 843cbcd607 Merge pull request #1795 from MarcelP102/Select-Color-Redesign
[UX] Select Color redesign and feature parity

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:21:10 +03:00
Hakan SevenandClaude Opus 5.5 bcd52be4c7 block definition: locale coverage, tests for the new defaults, wraps
- block-def strings in every locale (English until translated); the
  catalog test requires each locale to carry them.
- A new block's base point starts at 0, and ATTMAN / BATTMAN report a
  drawing without attributed blocks; the tests expect that now.
- Lines over 100 columns wrapped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:16:35 +03:00
Hakan SevenandClaude Opus 5.5 838e397a6c Merge pull request #1793 from ramox81/codex/block-definition-command-line
Block Definition: command-line forms, block record data and dialog defaults

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:14:21 +03:00
Hakan SevenandClaude Opus 5.5 990730721e Cargo: kernel 0c08bbb, graph 90a6d85
Faster ear clipping for hatch fills with many islands (kernel #88).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:05:58 +03:00
Hakan SevenandClaude Opus 5.5 18850e82e4 ribbon: wrap a key-tip label anchor line over 100 columns
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:02:07 +03:00
Hakan SevenandClaude Opus 5.5 abbd8365e0 Merge pull request #1788 from ramox81/codex/keytips-followups
Key tips: reference quick-access numbers, shared codes and placement

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:00:10 +03:00
Hakan SevenandClaude Opus 5.5 06d0ddc393 selection: start the found count afresh for every command
The count was keyed on the gathering command's address, so a command
boxed where the previous one was (MOVE right after MOVE) inherited its
selection and reported its first pick as a duplicate. Drop the report
whenever no command is running.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:59:24 +03:00
Hakan Seven b5fb42e9f8 Merge pull request #1785 from ramox81/codex/selection-found-messages
Selection: report what each pick found while a command gathers objects

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	src/locale_catalog.rs
2026-10-14 23:57:20 +03:00
Hakan SevenandClaude Opus 5.5 98f0c15e3f Merge pull request #1782 from ramox81/codex/refedit-nested-messages
REFEDIT: nested pick messages, window pick and session note

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:57:08 +03:00
Hakan SevenandClaude Opus 5.5 a36e4e77d3 xref: leave the host's layer 0 and Defpoints unflagged on load
Since layer 0 and Defpoints map to the host's own layers, the loop that
marks dependent layers flagged the host's layer 0 as xref-dependent and
owned by the reference. Skip the layers that keep their name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:55:48 +03:00
Hakan SevenandClaude Opus 5.5 e357b02cd4 Merge pull request #1783 from ramox81/codex/xref-layer-zero
XREF: keep layer 0 and Defpoints as the host's own

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:52:09 +03:00
Hakan SevenandClaude Opus 5.5 a5c875f1f3 Merge pull request #1784 from ramox81/codex/refedit-dwf-fade
REFEDIT: keep a DWF underlay's page unfaded outside the working set

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:50:26 +03:00
Hakan SevenandClaude Opus 5.5 4d66a58374 plugin: announce DocumentOpened once per load, not per tab switch
The guard remembered only the last announced (tab, generation), so
switching A -> B -> A announced A's load again. Each tab now carries
its own pending flag, set when a document is installed and cleared by
the boundary dispatch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:49:17 +03:00
Hakan SevenandClaude Opus 5.5 68330ce39e Merge pull request #1747 from schoeller/reference_only_entities
Reference-only entities (plugin API v9): a scene-scoped, in-memory
designation for plugin-owned display geometry, plus HostNotification
dispatch to native plugins so they can re-mark on DocumentOpened.

Resolves the new DeltaSnapshot site in block_editor.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:46:42 +03:00
Claude 6e05c7e2e5 Select Color: one fixed colour book folder instead of a folder list setting
The color_book_dirs setting is gone. Colour books live in color_books in
the config folder (book::folder()), like the other fixed locations;
Options > Files shows it through Folders::color_books. read_all() and
load_from_dialog() use that folder directly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 20:15:53 +00:00
Claude a9d8d4b531 Options: color book folder shown like the other locations
Options > Files lists the color book folder as a read-only row with Open
folder, like Plot styles or Fonts. The Add folder / Remove buttons, their
messages and the explanatory line (in all 22 locales) are gone; the
folder list stays in the settings for a later location option.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 20:09:26 +00:00
Claude a9bbb41671 Select Color: colour book loading and folder reading live in book.rs
book::load_from_dialog (pick, read, copy into the first folder) and
book::read_all (built-in book plus every .acb in the folders) move out of
update/mod.rs, which now just calls them. Same behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 19:53:58 +00:00
Claude c71a874fe0 Select Color: reuse helpers instead of repeated code
- book::add_or_replace adds a colour book or replaces one of the same
  name, for both reading the folders and loading a file.
- style.rs: the Plot Style and View Background colour targets use
  math::color_rgb (and hex_string) instead of their own conversions.
- Ribbon: one layer_color lookup for Ribbon::active_layer_color and the
  ribbon's ByLayer swatch.
- Picker: one swatch() for the Index and Document swatches, fill_of() for
  "colour or gray" and divider() for the 1 px separators.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 19:38:00 +00:00
Claude 345f836e91 Select Color: review cleanups
- Arrow keys only walk the colours on screen: the Document tab's search
  results, and the Color books matches while searching (the whole book,
  page after page, otherwise). One helper per tab now gives the visible
  colours to both the view and the arrow keys.
- show_identity no longer returns an unused bool; ink() absorbs its
  one-use ink_is_dark helper.
- document::layer_identity joins a layer's book and colour name, used by
  the Document scan and the panel's current colour instead of two copies.
- Recently-used sorting looks a colour's rank up once (sort_by_cached_key)
  instead of on every comparison.
- Searching compares case-insensitively without allocating a lower-case
  copy of every name on each redraw (ASCII queries).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 19:27:58 +00:00
Claude 3aa62d5230 Select Color: Phosphor eyedropper icon; load button and page arrows in active-tab colours
- The pipette is Phosphor Icons' "eyedropper" (regular, MIT); its
  licence is in assets/icons/ui/LICENSE-phosphor.txt and the SVG header.
- The load-book button and the page strip's up/down arrows use the active
  tab's colours (background.strong and its text colour), slightly darker
  on hover.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 19:17:18 +00:00
Sebastian 2cdc1df021 feat(app): dispatch HostNotifications to native plugins (API v9)
Close the no-load-callback gap: on_notification was a dead dispatch sink —
a plugin had no way to learn that the active document changed, the selection
changed, or that a document opened, so runtime designations could not be
re-seeded after a load.

Dispatch the existing plain variants at the fingerprint-guarded boundaries
the v4 bridge already uses: DocumentChanged (the active tab's settled
geometry epoch) and SelectionChanged (the selection set) leave through
BuiltinPlugin::on_notification at the post-message boundary — after the
mutation settles and pending history scopes closed, never mid-undo or
mid-pick — and at the automation post-op boundary. Plugin-initiated writes
publish immediately after settling, like the drawing-changed event; the
boundary fingerprint guard deduplicates.

Add the additive HostNotification::DocumentOpened { tab_id } variant
(discriminant 10, the counterpart of DocumentTabClosed): fired exactly once
per whole-document install — file open, template new, system open — keyed on
a new per-tab document generation, so an edit can never repeat it and a
reload fires it once. The API version stays v9 (the bump is unreleased).

Write semantics for handlers, tested and documented: a handler may call
HostApi write methods through the same session (set_reference_only at
minimum); its write bumps the epoch, the next boundary notifies once more,
and because re-marking already-designated geometry is a documented no-op —
no epoch bump, no undo step, no publish — the loop terminates. History
(undo/redo) replay itself emits nothing; the boundary is the only channel.
No Python mapping, like the rest of this increment.
2026-10-14 21:15:42 +02:00
Sebastian 50db12b169 refactor(scene): reference-only designation becomes a scene-scoped set (API v9)
Per the upstream review of the XDATA-based storage: the host no longer writes
its own state into the saved file. The marker record under the host-owned OCS
APPID, the on-first-use APPID registration and the verbatim-EED rewrite
handling are removed; the single source of truth is a scene-scoped in-memory
set of entity handles (Scene::reference_only) that dies with the drawing tab,
so a reopened file starts undesignated and the owning plugin re-marks on the
document-opened notification.

All behaviour sites are unchanged, driven by the set: the wire stamp moves
from an XDATA read to a set lookup threaded through the tessellation
pipelines (tessellate_entity and the dimension text path take the handle set
as a plain parameter), and the pick filters, selection retains and
update/erase refusals read Scene::is_reference_only.

Undo keeps the entity-write contract: set mutations are recorded as explicit
first-touch before/after values on each history delta (the parametric-
constraints channel pattern). A designation inside a plugin push_undo scope
joins it, a scope-less change is one step of its own, an idempotent re-mark
records nothing, erasing a designated entity drops the set entry with the
entity, and undo/redo restores entity and designation together.

The round-trip test is inverted: reference_only_designation_is_not_written_
to_dwg_or_dxf now asserts the marker appears in neither format's bytes, that
no OCS APPID or marker record survives a reload, and that the designation
stays live in memory.
2026-10-14 21:12:17 +02:00
Claude a1cae55955 Select Color: ship only RAL CLASSIC as a built-in colour book
SIKKENS 4041 is no longer built in; it can still be loaded from an .acb
file in a colour book folder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 19:10:33 +00:00
Claude 451b0f5d78 Merge main into Select-Color-Redesign
Keep both sides: main's ViewBackground colour target and PREVIEW icon
next to this branch's Interface target and LIST/SEARCH icons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 19:10:33 +00:00
Claude 666234f69e Select Color: colour book folders, app-style view toggles, load button by the book list
- Colour books now come from folders, like AutoCAD's Color Book
  Locations: Options > Files lists them (add, open, remove); by default
  one color_books folder in the config directory. The Color Books tab
  shows the built-in books plus every .acb in those folders; Load copies
  the chosen file into the first folder. Web: session only, as before.
- Grid/list buttons use the app's toggle style (light accent, its text
  colour for the icon, same corners as inactive).
- Color Books: the load button sits right of the book list; the search
  box keeps its start over the page strip and runs to the end.
- Translations for the two new Options strings in all 22 locales.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 18:51:02 +00:00
Claude 322c1906f9 Select Color: more room between the sort dropdown and the view buttons
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 18:00:37 +00:00
Claude 31e6192729 Select Color: Document search box takes half the width
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 17:57:53 +00:00
Claude 3006aaa04e Select Color: rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 17:51:42 +00:00
Claude e13e93966b Select Color: search boxes, readable icon buttons, cleaner Document and Color books layout
- Info line shows a colour-book colour as "BOOK - NAME".
- Document tab: a search box (by name) replaces the "Colors in this
  drawing" heading; grid swatches no longer carry text; larger grid/list
  icons, dark on the accent colour when active, like the OK button.
- Color books tab: no "Color book"/"Find" labels; the book list is as
  wide as the colour bars, and the search box (magnifier, gray "Search")
  and load button sit over the page strip and RGB values, all 28 px high;
  the load button and page arrows use the button's dark text colour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rGmDUNr1hUf4zo1X3dak8
2026-10-14 17:46:45 +00:00
Hakan SevenandClaude Opus 5.5 fa557f0261 Cargo: kernel 01ba0bf, graph 4ab7dcb
Booleans of cones, tori and cylinders with planar solids (#1762).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:46:19 +03:00