Selected drawing references now expose action parameter grips outside Test
Block. Point input evaluates immutable definition geometry into an independent
anonymous representation and stores per-INSERT values in native AppDataCache
XRecords, preserving definition graphs and sibling references.
Reuse visibility representation isolation, including shared COPY blocks, and
retain cache metadata. Record geometry, INSERT links, new block records and
parameter values in one undo step. Support transformed uniform references and
Point, Linear, Polar and XY endpoints for the existing Move/Scale actions.
Validate synthetic DWG/DXF persistence, re-edit/resave, COPY isolation,
XY/Polar cache layouts, metadata, cancellation, transformed grips and undo/redo.
327 block regressions pass (6 existing opt-in checks ignored).
A save from the active drawing first redraws the viewport without its
overlays and screenshots it for the file's preview. When the compositor
delivered no frame or never answered the screenshot (an occluded or
throttled Wayland window), the save never started: the input layer stayed
hidden, so the window ignored the mouse and keyboard, and automation
requests waited on the save forever. A timer now stands in for the frame,
and the screenshot races a half-second timeout; whichever answers first
runs the save, without the refreshed preview if it has to.
Closes#1801
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Backslashes and braces in a DGN text stay characters in the MTEXT it
becomes instead of turning into formatting codes.
A 3D V8 text is cut at its stored byte count before it is decoded, so a
multi-byte character no longer shifts where the text ends.
Doc comments that had slipped onto the wrong functions are back on
their own, comments describe the behaviour instead of pointing at
another program, and a few lines added in the previous commits are laid
out the way the rest of the code is.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
STEP assemblies: a link that closes a loop in the assembly is dropped,
so no block inserts itself; the walk is iterative. Each imported block
gets a name the drawing does not use yet instead of silently reusing an
existing definition, inserts are pointed at the names the blocks got,
and an insert of a block that could not be defined is left out with
the error reported.
Names that come from files (STEP products, 3D Studio objects, materials
and cameras, WMF font faces) go through a new shared
scene::sanitized_table_name, which applies the block-name rules
(reserved and control characters, 255 characters).
3D Studio: meshes with more vertices than a polyface mesh can index are
split over several meshes. Single-layer mode uses the current layer.
Materials are only created when the drawing has a material dictionary.
Camera views get the current view's proportions and the perspective
flag.
Messages show paths as given, the file-not-found and read-failure
messages are plain text of our own, and the "Press Esc" line is gone
since the import cannot be cancelled. The true-colour packing is
shared. "Select ACIS File" and "Import WMF" get catalog entries and
keys in all 22 locales.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Plain -DGNIMPORT no longer writes drawings next to referenced files on
its own: references are ignored unless the window (or the kept import
settings) asks to translate them or attach them as underlays.
A referenced file named relative to the host is looked up in the host's
folder rather than the working directory. Its translated drawing takes
a file name made from the model name with path separators and other
reserved characters replaced, so it is always written in the
reference's own folder. A reference placed in sub units is scaled by the
same factor as its origin.
Layer, block, text style and reference names read from the file are
made valid symbol names (reserved characters become underscores).
An instance of a cell that has no block (the point display cell, an
empty or missing definition) is dropped instead of inserting a block
that does not exist.
"Prompt to overwrite" still keeps an existing translated drawing; the
code now says so instead of implying a prompt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New Drawing starts from the default template (Options > Files), so a
template made here or in another program could only be reached through
the NEW command. The button runs NEW, which asks for the .dwt, .dwg or
.dxf to start from.
Closes#1849
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An arc moved only when its centre was in the window, so stretching a
rounded end left the arc where it was or blew it up. Its ends now decide:
both in move it, one in moves that end while the arc keeps its height
(sagitta) over the new chord. Polyline arc segments keep their height the
same way instead of their bulge, spline control and fit points in the
window move, and 3D polylines and points stretch too. Old-style polylines
were tested in X/Z.
The preview moved the tessellated points that happened to be in the
window, which bent arcs out of shape; it now draws the stretched entities
through one shared function the commit also uses, via a new
preview_entities hook, and hides the originals while it shows.
Closes#1851
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A .3ds file opens the 3D Studio Import window: the file's objects with
their kind and material count, filtered by kind or name, checked one by
one or all at once, where to put them on layers and what a mesh with
several materials becomes. Checked meshes come in as polyface meshes on
the chosen layers with materials made from the file's colours, cameras
as named views; a mesh with several materials is split, given its first
material, given none, or asked about on the command line. Automation
drives the window with tds_import_dialog.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Parameters and Move/Scale action markers were drawn as overlays with no selectable authoring objects. Pick their points, labels or graphics in BEDIT to display editable definition, endpoint, reference and label grips using the existing selection overlay and point-input commands. Show the selected object's coordinates in the Properties panel.
Write edits to the native parameter/grip/action records while preserving graph identities and target bindings. Maintain Rotation radii and oriented grip directions, synchronize visibility lookup data, and retain Basepoint attribute relocation with recorded entity history. Escape cancels edits or clears selection; editor undo/redo and save/discard preserve the native changes.
Validate with self-contained viewport-input and native DWG/DXF persistence regressions, all ten parameter types, action bindings, cancellation and Basepoint attribute undo. Checks: 3 focused, 323 block (6 existing opt-in ignored), 39 dock and 23 viewport tests passed; counts overlap.
Ordinary drawing-reference grips and per-instance saved action evaluation follow in the next milestone.
Arcs and pies are cut at whole multiples of 1/99 turn round the
ellipse's whole-unit centre and radii, rounded down, from the start ray
to the end ray. Text sits the font's ascent below its reference point
and is four fifths of it tall; its style is WMF-<face><n> on the
installed file of that face. CHORD records are not read.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add BACTION/BACTIONTOOL workflows for compatible parameter endpoints, selected geometry and native action markers. Persist Move/Scale records, target handles and evaluation graph bindings; reuse shared adjacency editing with Lookup and the existing palette, tooltips and selection UI.
Evaluate endpoint changes in the disposable Test Block document from immutable starting geometry, with geometry/grip undo, source isolation and transformed-reference support. Preserve visibility representations and their native Basepoint anchor. Refuse unsupported options, value constraints and shared test references.
This milestone supports default Move and uniform Scale on basic drawing entities. Other actions, custom options, live preview and ordinary drawing-reference evaluation remain pending.
Validation: self-contained synthetic DWG/DXF roundtrips, graph adjacency, command cancellation/history, Test Block isolation/undo, transformed references, visibility/Basepoint and real-view palette/viewport input checks; broader block and dock suites.
Keep action object selection active across mouse picks/removals and advance only on Enter. Cover empty selection, multiple targets, Shift removal, marker placement and Move/Scale Test Block evaluation using viewport mouse events. Verified 10 focused, 320 block and 39 dock tests (6 existing opt-in block checks ignored).
Add native Basepoint placement and relocation, shared insertion and Test Block anchor behavior, and attribute-safe coordinate reframing. Wire native Lookup parameter placement and the Property Lookup Table editor through the existing palettes and BLOOKUPTABLE.
Stage input columns, rows, reverse lookup and audit across multiple tables; apply all drafts atomically as one undo entry. Persist native Lookup actions and graph dependencies while preserving unrelated objects and IDs. New inputs cover Linear and Polar distances; reference Lookup evaluation and geometry actions remain separate work.
Pin codec c418d92, kernel 0f6f225 and graph dcb9eda for correct R2010 inline constraint-group decoding. The codec regression uses a checked-in synthetic DWG and reproducible generator, with normal self-contained loading and edited DWG/DXF tests. Keep dock control tests independent of scene adapter warning dialogs in software snapshots.
Validation covers native round trips, all 17 research fixtures, graph preservation, insertion and attributes, staged editing, undo/cancel, and real palette/dialog controls.
ACIS text files come in one object per body (3DSOLID, REGION or SURFACE).
STEP B-rep models become a block per product with component inserts at
their placements, scaled to the drawing's units; IGES manifold solids come
in as 3DSOLIDs scaled to the drawing's units with their colours. Splines
that are exactly analytic shapes are kept as those shapes. Windows
metafiles become a WMF<n> block of polylines and text fitted to half the
view, placed at its top-left corner or by WMFIN's insertion prompts. The
Import File window lists the four formats as supported.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Name clashes, DGNIMPORTMODE and prefixing as the reference names them;
V7 cell copies, unshared cells and mirrored placements as blocks;
justified text and text nodes placed at their justification points with
the reference's MTEXT contents; B-spline curves as splines and 3D arcs and
ellipses in their own planes; every V8 level as a layer; design models
only; reference attachments translated, ignored or attached as underlays.
The colour index palette comes from the codec fix it depends on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The page transform is read as 16.16 fixed point held in single precision
and each user-space coordinate as a single-precision value kept to six
decimals, so imported coordinates match the reference to the last digit.
- Paths wholly outside the page (crop box) or the current clip are left out.
- The page's /UserUnit scales the import.
- Unreadable files (no trailer, empty, not a PDF) print the "This file
cannot be opened." block; encrypted files are asked for again silently.
- Page prompt: digits only, "There is no N in <file>." past the last page;
page list prompt keeps asking with "Please enter page number or *.".
- Automation: pdf_import_pick (the path the next PDF picker returns) and
pdf_import_dialog (page / on_screen / scale / rotation / ok / cancel).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Opening a drawing no longer drops entities with its own sanity checks or
rewrites knotless splines; recovery runs the codec's repair and records
its actions and unresolved issues in the drawing's notifications. Xref
merges keep every entity. The dropped-entity counts, their command-line
warnings, recovery report rows and the automation "purged" field go with
the guard.
AUDIT now reports the codec's audit (counts plus the first 50 issues) and
asks whether to fix; Yes applies the codec repair as one undo step.
Cargo: codec 325fa98, kernel dfca391, graph 5d4e713.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Text blocks join side by side or stacked within two heights; oversized
shapes join no group; the group share counts selected objects; Latin-1,
Latin Extended, Greek, Cyrillic and the diameter sign are compared from
the font's own glyphs with look-alikes resolved to the lowest code; a lone
circle reads 0; MTEXT direction is by style. PDFIMPORT keeps drawing order.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The codec now holds wide EntityType variants boxed (MText, Helix,
Dimension, Hatch, Viewport, MultiLeader, Surface, Table, Ole2Frame,
Light, Extended). Constructors box their entity; nested patterns reach
a dimension through entities::dimension::as_dimension(_mut). Also
follows BlockAction::action_ids, LineTypeComplexData::source_flags and
the decimal tab stop with an explicit character.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
EED names its application by APPID handle. Copying between drawings
(paste, COPYTO, block palette insert, REFEDIT) kept the source
drawing's handles, so the saved DWG named APPIDs it did not have and
the reference program refused to open it (xdata.cpp eInvalidInput).
The copy now carries the APPID records its XDATA names, registers the
missing ones, and re-points the EED at them.
COPYTO also skipped every layer the target lacked (the check tested
the source) and filled the target with the whole linetype catalog; it
now copies the missing layers and loads only the linetypes used.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>