Commit Graph
4936 Commits
Author SHA1 Message Date
Hakan SevenandClaude Opus 5.5 74df9ff84a plot styles: the CTB/STB model and codec come from the codec crate
Cargo: codec d36331d, kernel 60f086b, graph 74aac56.

The table model and its file codec now live in `codec::plot_style`
(opencadcodec#53) and are re-exported here. What stays is where tables
come from: the plot styles folder, the session registry, the shipped
tables, and saving to disk, as the `PlotStyleTableExt` trait.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:58:26 +03:00
Hakan SevenandClaude Opus 5.5 1070361c0a Cargo: codec eaa6d79, kernel bb355ca, graph 9c17779
- Gradient stops keep their DWG color book name and book; RGB wins over
  ACI in a DXF gradient block in either tag order.
- MTEXT decimal tab stops keep their alignment character.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:22:44 +03:00
Hakan SevenandClaude Opus 5.5 d1a14bef91 web: point a failed open of a very large drawing to the desktop app
A browser tab gets a few GB of memory at most, so a drawing of a few
hundred MB can fail to open there while the desktop app opens it
(#918). When an open over 150 MB fails in the browser, the command line
now says so and recommends the desktop app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 09:32:20 +03:00
Hakan SevenandClaude Opus 5.5 c8aa179ec0 input: typing behind an open dialog stays out of the command line
With Quick Select or another dialog open, letters typed while one of
its lists was open went to the command line behind it (#922). Typed
glyphs are now dropped while a dialog is up; its own text fields keep
receiving them as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 09:23:21 +03:00
Hakan SevenandClaude Opus 5.5 cc78899363 navigation: pan and orbit keep going past the viewport edge
A middle-button drag stopped when the pointer left the viewport: the
mouse area reports moves only inside, and leaving reset the drag, so
the release outside never arrived (#1400). The viewport and each model
pane now carry an input layer that keeps reporting a drag they started,
with the pointer anywhere in the window, and the release outside ends
it; leaving no longer cancels a middle-button drag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 09:17:06 +03:00
Hakan SevenandClaude Opus 5.5 39c3e9af58 annotation: TEXT/MTEXT store the model height of their default scale
Annotative text in DWG/DXF holds the model height of its default
(native) scale representation; other scales draw it at the ratio of the
two. OCS read the stored value as paper height and multiplied it by the
annotation scale again, so text from AutoCAD came out far too small
(#1734), and annotative text OCS wrote came out too small in AutoCAD.

- Rendering uses the active/native context ratio (1 when the object has
  no representation for the displayed scale).
- TEXT with an annotative style asks for the paper height, stores the
  model height of the creation scale and gets that context; MTEXT
  starts from the model height; ANNOUPDATE converts a fixed style
  height the same way.
- Properties: the Height row of annotative TEXT and MTEXT is the paper
  height at the displayed scale, with the model height beside it, and
  an edit converts back. MTEXT shows Annotative when it has contexts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 08:53:31 +03:00
Karim Jerbi b221ce5e33 fix(bedit): refuse entities_create and redefine while a session is open 2026-10-15 06:10:51 +01:00
Hakan SevenandClaude Opus 5.5 f7bd0ca5ee wipeout: circles and arc polylines as boundaries
WIPEOUT's Polyline option took only straight closed polylines. It now
also takes a circle or a closed polyline with arc segments, sampled
every 5° into the polygon a wipeout stores, so the result stays a
standard polygonal wipeout (#641).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 06:32:15 +03:00
Hakan SevenandClaude Opus 5.5 53b93dc98a constraints: hide dynamic dimensions whose constraint did not load
A dynamic dimension is drawn by its constraint at screen size; without
the constraint it is a bare dimension with stretched extension lines.
Those orphans now stay undrawn and unplotted, as in a viewer (#992).

- First-release drawings keep dynamic dimensions on
  *LayerNameForDynamicConstraint; it counts as the dynamic layer.
- The hidden set is refreshed when constraints load, and the loader's
  prepared wires (built before that) are not installed while it holds
  anything.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 06:12:42 +03:00
Karim Jerbi 6025d8be44 style: rustfmt the tree so the CI lint check passes 2026-10-15 04:10:06 +01:00
Karim Jerbi 1317a7b4fd fix(scene): keep xdict tree ownership with the root's own entity
The union precompute assigned each shared object to whichever copied
tree reached it last while descending only from the first reacher, so
a root ref'd by a later-sorted sibling lost its owner and the true
owner's clone pass skipped its own root. Seed every root's ownership
up front and make the walk first-wins with a claimed set, so ownership
stays consistent with the per-entity clone passes in any selection
order. Also wrap the new tests to rustfmt and drop product names from
added comments.
2026-10-15 03:44:00 +01:00
Karim Jerbi 71cc9a5a95 feat(scene): remap extension-dictionary cross-refs across copied entities
A multi-entity COPY cloned each entity's extension-dictionary tree
independently, so refs crossing between the copied trees (root to
sibling root, nested sibling objects, entity handles inside XRecords)
stayed pointed at the sources. Precompute the union closure of every
copied tree, preallocate authoritative clone handles, skip re-cloning
sibling-owned objects during each per-entity pass, and rewrite
entity-valued refs through the completed copy map afterwards. Trees
outside the copy set are deep-cloned inline, matching the reference
product, which clones an out-of-set dictionary target rather than
keeping it verbatim.
2026-10-15 03:44:00 +01:00
Hakan SevenandClaude Opus 5.5 6996505d70 orbit: turn about the surface under the pointer
With nothing selected, Shift+MMB orbit pivoted on the surface at the
view centre, so grabbing a small part off-centre flung the model away.
It now pivots on the solid or mesh surface under the pointer where the
drag began, falling back to the view centre and then the camera target
(#1389).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 05:06:07 +03:00
Hakan SevenandClaude Opus 5.5 bfc9ead28d arc: Arc length is editable in Properties
Typing a length keeps the start angle and moves the end along the
circle; a length outside (0, 2πr) is ignored (#1408).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 04:55:51 +03:00
Hakan SevenandClaude Opus 5.5 6f14b53aff dimstyle: New starts from the selected style
New created a bare dimension style, whose defaults are inch-sized
(0.18 arrows and text). In a metric drawing its arrows came out too
small to see (#1675). It now starts from the selected style.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 04:46:13 +03:00
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