- 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>
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>
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>
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>
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>
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>
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>
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.
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.
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>
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>
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>
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>
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.
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
- 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>
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>
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
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>
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>
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>
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