Enable Point in Authoring Palettes and BPARAMETER. Pick parameter and label
positions, then create the native Point, XY grip and position expressions in
one undo transaction. Draw editor-only markers and clear placement previews.
Share graph append construction with Visibility so both types coexist in
either order. Allocate node, expression and edge IDs independently; preserve
existing objects, nodes and relationships and reject malformed/opaque graphs.
Reframe parameter, label and grip with the edited definition. Include authoring
positions in editor framing while keeping reference geometry extents unchanged.
Retain save/discard and parent saved-edit undo. Action association/evaluation
and parameter property editing remain separate milestones.
Validation: 10 targeted, 286 block and 60 dock checks passed (overlapping
filters). Appending a Point to an existing native graph passed DWG/DXF
roundtrips in all 17 local fixtures; old objects and original checksums stayed
unchanged. Real-view palette interaction and rendered marker/label verified.
Add the current-state selector, Visibility States dialog and mode/show/hide
controls to the contextual ribbon, using shared icons, tooltips, modal UI
and adaptive flyouts. Disable the controls until a Visibility parameter exists.
Stage state creation, rename, deletion, current-state changes and reordering
until OK. Support copied, show-all and hide-all new states in one undo step,
preserve native graph metadata, and restore current-state identity on undo/redo.
Implement nonsaved BVMODE and display-only reveal during BVSHOW selection.
Cancelling selection leaves saved visibility flags and history unchanged.
Keep the existing command-line state workflows available.
Validation: 6 targeted tests; 277 block, 31 app dock, 35 ribbon and 12 history
checks passed (overlapping filters). All 17 local DWG fixtures passed in-memory
DWG/DXF preservation checks with unchanged original checksums.
Milestone 1: enable Parameters > Visibility and add interactive
BPARAMETER VISIBILITY placement using the existing native visibility
parameter, grip and state engine. Bare BPARAMETER currently offers only
Visibility; other parameter, action and set entries remain unavailable.
Show the placed parameter in the editor and support cancel, local undo/
redo, save/discard and saved-edit undo. Bind placement to its document
and definition, reject duplicates and invalid points, and protect existing
authoring graphs from replacement.
Keep visibility parameters and their grips aligned with geometry when a
BEDIT UCS change reframes the definition, including parameter-only blocks.
Validation: 9 targeted tests, 272 block checks and 58 dock checks passed
(overlapping groups). All 17 local DWG fixtures passed in-memory DWG/DXF
placement roundtrips and graph-preservation checks; originals unchanged.
#1811 and #1812 add the `txt2mtxt_settings`, `import_file_dialog` and
`dgn_import_dialog` automation actions.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The viewport hides the system cursor for its crosshair, and the progress
card's backdrop claimed no cursor of its own, so while a drawing opened
the pointer vanished over the viewport and Cancel could not be aimed at.
The backdrop now shows the arrow. (#1727)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A radius placed its text where it was clicked, on the line through the
centre and the arc point, whatever DIMTAD said; outside the circle the
line stopped at the text's near edge, so the text sat on the end of the
line. DIMTAD now lifts aligned radius text off that line as it already
does on a diameter, and an outside line runs on under the text to its far
end. A text point already off the line (a file saved elsewhere) is kept
as the text's middle. (#1675)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A left drag only became a lasso/window after the button had been held
150 ms, however far the cursor had moved. A fast flick released inside
that delay read as a click and armed a click-click box instead. A press
that has moved more than 12 px is now a drag at once; the delay still
keeps small movements of a click from becoming one. (#1808)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The DGN V7/V8 readers expose each element (level, symbology, geometry,
complex chains, text nodes, shared cells). DGNIMPORT / -DGNIMPORT convert a
model with the Standard mapping into a new drawing; IMPORT opens the
Import File window and routes PDF and DGN files to their importers.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A request settles once the work it started reports back, and waits for
any open or save in progress. When that never happens the bridge stayed
busy: every later request, `cancel` included, was refused until the app
was killed. `cancel` now ends the active command and closes any pending
request as cancelled, not only interactive picks. (#1801)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The paste adds entities to the document directly, so the fill and raster
models `add_entity` seeds were never built. An associative hatch got its
model back when its pasted boundary rebuilt it; a non-associative one
stayed in the drawing but was never drawn. Seed the fill, image and
underlay models of the pasted entities. (#1807)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
TEXT and MTEXT objects are merged into one MTEXT (top-down or in
selection order, word-wrapped or one paragraph per object, with the
original pitch kept as line spacing) or each TEXT and MTEXT line becomes
an MTEXT of its own. The SEttings option opens the Combine Text settings
dialog; the settings persist as profile values and are exposed as the
TXT2MTXT* variables and the txt2mtxt_settings automation action.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Import File split button (PDF Import / DGN Import / Import), Recognize
SHX Text, Recognition Settings and Combine Text; Land XML moves to the
panel slide-out and Open leaves the panel. Ribbon commands may be menu
macros (`;` answers the running command's prompt). KeyTips IF, PI, DI,
OI, PS, PT, TM; labels in every locale.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Block Attribute Manager: the error band's dismiss button is the close
icon, not a "×" glyph the web build may not have.
- Two signatures wrapped to the 100-column limit.
- MCP tool schema digest updated for the new `block_def_dialog` and
`attman_dialog` actions.
- Measurement docs: MEASUREGEOM's Quick mode.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
PDFIMPORT follows FILEDIA and -PDFIMPORT asks for the file, page,
insertion point, scale and rotation on the command line. A page with a
viewport measure is imported in its measured units. Straight polylines
that trace arcs, circles and ellipses, and runs of circular Bezier arcs
on one circle, become those objects; other Bezier curves become one
SPLINE each.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Add a dockable Block Editor palette with selectable Parameters, Actions,
Parameter Sets and Constraints pages, reusing shared dock controls, icons
and ribbon-style hover bubbles.
Parameters, Actions, Parameter Sets and Block Properties Table are UI
catalogs only. Their entries remain disabled; this commit does not add
parameter placement, dynamic action behavior, parameter-set authoring or
block properties table functionality.
The Constraints page connects its geometric and dimensional entries to
existing ribbon commands. It reuses their implementations and adds no new
constraint behavior.
Keep the palette specific to BEDIT and retain its placement and selected
page across closing/reopening and Test Block. Opening, closing, switching
pages and clicking disabled entries preserve the document, undo history
and any running command.
Validation: 7 palette tests, 57 dock checks and 46 ribbon checks passed
(overlapping groups); rendered pages inspected and native debug build passed.
The codec now decodes version-0 (2010 release) constraint groups, so the
parametric constraints of such drawings load and their dynamic
dimensions show (#992). Constraint groups also keep their next node id.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
MEASUREGEOM gains a Quick option. As the cursor moves, the nearest
drawn geometry along the working plane's X and Y lines through it is
measured live: cyan measurement lines and a Horizontal/Vertical readout
by the cursor. A click prints the current readout and keeps measuring;
Enter ends the command. The rays go through the scene's interaction
index, so large drawings stay responsive.
A structure-pick command whose miss message is empty now gets the click
as a plain point instead of an error.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Every plotted wire and hatch resolves to its entity's layer, and the PDF
wraps each run of same-layer items in an optional-content group, so a
viewer's layer panel lists the drawing's layers and can hide them. Draw
order is unchanged; images stay outside any group. Expanded block
geometry goes with its INSERT's layer.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Plugins read the host's document through a shared reference across the
dynamic-library boundary, and the entity index hashed with foldhash's
per-process seed, so every handle lookup from the plugin missed. The
codec now uses a fixed hasher (opencadcodec f385f75; kernel 9841749,
graph e9c23ad).
The Python IPC suite also caught up with intended changes: ATTDEF
renders its tag, DXF now keeps the lock-position flag, and the modify
audit turns associative arrays off since it checks loose copies.
The rate-limiter test waits for the host's check instead of a fixed
sleep that raced on macOS, and ENV_LOCK no longer cascades a poisoned
lock into every later test.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Add the no-selection Block section with annotation, orientation, scaling, exploding, units, description and hyperlink controls. Integrate definition edits with editor history, save checkpoints and discard, and keep staged text tied to its definition.
Persist annotation and hyperlink metadata on the block record, migrate legacy marker values on edit, and honor orientation and hyperlink descriptions during block creation. Cover native DWG/DXF roundtrips and replacement after reopening.
Avoid rebuilding derived caches and clearing tessellation memos when closing the block editor on clean exit or discard. Scope entity delta computation to block record members instead of scanning and cloning the entire drawing, and add a fast path to the dirty check when no local commands were executed.
With dynamic UCS on (UCSDETECT 1, toggled with F6), a command's first
point picked on a planar face of a solid sets the UCS to that face for
the rest of the command, so 2D commands draw on the face (#1711). An
unsnapped first point lands on the face itself; a snapped point off the
face's plane belongs to other geometry and leaves the UCS alone. The
previous UCS comes back when the command ends. UCS commands themselves
are left out.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Options → User Preferences → Navigation style picks which mouse
gestures pan and orbit the model view (#1480):
- CAD (default): middle button pans, Shift + middle button orbits.
- Blender: middle button orbits, Shift + middle button pans.
- CATIA: middle button pans; pressing the left button during it orbits,
so 3D navigation needs only the mouse.
An armed orbit tool always orbits. The choice is saved with the user
settings.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
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 <[email protected]>
A selected block reference is previewed from its definition placed by
the reference's transform; the no-objects band is amber.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Live changes are taken back quietly before Apply, OK or Sync write the
list again, so each leaves exactly one undo step even when something
closed the open live step in between; Cancel takes them back without a
command-line notice. References keep their values through renames made
live.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- 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 <[email protected]>
BATTMAN and ATTMAN open a manager for the attribute definitions of one
attributed block: block chips with reference counts and a pick button,
a table whose columns are chosen with chips, move up/down, remove, and
an edit card (Attribute / Text / Properties) for the selected row. Apply,
OK and Sync write the list back to the block definition and, when asked,
rebuild the existing references keeping values through tag renames;
each is one undo step. Live changes are taken back on Cancel. Automation
gains attman_dialog.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The name card draws the selected objects, or the existing definition the
name picks. OK with no objects shows an in-window band offering to select
objects or to define an empty block. A switch opens the new block in the
block editor once it is defined; it is remembered with the other dialog
choices. Automation gains block_def_dialog.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The Block Definition panel's Create Block is a split button listing
Create Block and Write Block; its face runs the last one chosen. The
slide-out lists Set Base Point and Synchronize with their labels, and
the large buttons read Manage Attributes and Block Editor.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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.