Commit Graph
100 Commits
Author SHA1 Message Date
Hakan SevenandClaude Opus 5.5 859070403c fix(automation): cancel ends a request that never settles
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 <noreply@anthropic.com>
2026-10-15 16:04:18 +03:00
Hakan SevenandClaude Opus 5.5 6f2388796e fix(paste): pasted hatches without an association are drawn
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 <noreply@anthropic.com>
2026-10-15 15:54:07 +03:00
Hakan SevenandClaude Opus 5.5 aa3b667110 Follow-ups to #1803, #1805 and #1806
- 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 <noreply@anthropic.com>
2026-10-15 14:51:47 +03:00
Hakan Seven 7de32c91c2 Merge pull request #1806 from ramox81/codex/block-attribute-manager-window
Block Attribute Manager window (BATTMAN / ATTMAN)
2026-10-15 14:51:47 +03:00
Hakan Seven cf6c50f2c0 Merge pull request #1805 from ramox81/codex/block-dialog-additions
Block Definition dialog: preview, empty-block band, open in block editor
2026-10-15 14:51:26 +03:00
Hakan Seven d358204646 Merge pull request #1804 from ramox81/codex/block-definition-ribbon
Insert ribbon: Block Definition panel split button and labels
2026-10-15 14:51:25 +03:00
Hakan Seven 01e805d4bb Merge pull request #1803 from turbuczn/docs/measurement-tools-cleanup
docs: clean up measurement tools documentation
2026-10-15 14:51:25 +03:00
Hakan SevenandClaude Opus 5.5 423b28c6b1 Cargo: codec 278c49a, kernel 46e5bf8, graph 3b3a03d
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 <noreply@anthropic.com>
2026-10-15 13:55:05 +03:00
Hakan SevenandClaude Opus 5.5 d285fd781e feat(measuregeom): Quick mode measures around the cursor
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 <noreply@anthropic.com>
2026-10-15 13:22:26 +03:00
Hakan SevenandClaude Opus 5.5 de1e49a4c5 feat(plot): PDF output carries drawing layers
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 <noreply@anthropic.com>
2026-10-15 13:04:39 +03:00
Hakan SevenandClaude Opus 5.5 ee2898095e fix(plugins): Python plugins see the host document again
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 <noreply@anthropic.com>
2026-10-15 12:54:03 +03:00
Hakan SevenandClaude Opus 5.5 cccea4008b ucs: dynamic UCS on planar solid faces
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 <noreply@anthropic.com>
2026-10-15 11:40:39 +03:00
Hakan SevenandClaude Opus 5.5 19ecf78bd9 navigation: selectable mouse navigation style
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 <noreply@anthropic.com>
2026-10-15 11:17:13 +03:00
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
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
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
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
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
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
Hakan SevenandClaude Opus 5.5 0a29be07f7 Cargo: codec e83247d, kernel 2c6224b, graph 12063e1
Viewport stacking rank kept apart from its ID in DXF; a layer's method-0
transparency reads as opaque.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:48:57 +03:00
Hakan SevenandClaude Opus 5.5 c70a217e3f SHX: fractional arcs span their octants (#1638)
The end angle subtracted a whole octant less the end offset, so the arc
in the ISOCP 9 stopped about 45 degrees short and the glyph shrank to
0.68 of the cap height; clockwise arcs and n = 0 (a full circle) drew
nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:30:05 +03:00
Hakan SevenandClaude Opus 5.5 ec603f1c8f Command line: hovered history lines stay until the pointer leaves
Lines still showing when the pointer reaches the overlay history no
longer fade under it; leaving restarts their COMMANDLINEFADETIME.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:27:57 +03:00
Hakan SevenandClaude Opus 5.5 2c329b2889 Layouts reopen in the viewport they were saved in (#1670)
A save records the entered model viewport (or the sheet) as the layout's
last active viewport, and opening the layout enters it again with its
UCS. Picks up the codec fix that kept a last-active link from being read
as the sheet viewport (codec d57097c, kernel b40fa59, graph 2360341).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:24:12 +03:00
Hakan SevenandClaude Opus 5.5 072aeb9dbf PDF: cut sub-point dash patterns into their dashes (#1739)
PDF dash entries are whole points in the plot's user space; on an inch
sheet a 0.1 in dash rounded to the 1-unit floor, so every short pattern
plotted as 1 in on, 1 in off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:01:55 +03:00
Hakan SevenandClaude Opus 5.5 720039bfe1 Cargo: codec f48d673, kernel d8f9b7e, graph a9ca185
Picks up the DXF fix for MTEXT without group 41, which wrapped at a
default width of 10 (#1739).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:01:55 +03:00
Hakan SevenandClaude Opus 5.5 2ba2d1c0a7 Plot: thin lineweights keep their true width (#1749)
Every weight under 0.26 mm was clamped to the screen's 1 px floor before
the PDF and SVG exporters saw it, so 0.00, 0.09, 0.13 and 0.25 mm all
plotted alike. The floor now applies on the GPU only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:47:26 +03:00
Hakan SevenandClaude Opus 5.5 2c062daa03 Colour names: show a palette colour by its index (#1748)
Unnamed ACI colours printed their RGB, which read the same as a true
colour of that value.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:42:43 +03:00
Hakan SevenandClaude Opus 5.5 7b4c13c6ca JOIN: separate chains join one by one (#1765)
A selection of several unconnected chains, or one holding a closed
polyline, failed as a whole; each chain now joins on its own and the
rest stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:37:20 +03:00
Hakan SevenandClaude Opus 5.5 a156a63edd Properties: open a dropdown only on the surface that asked (#1766)
The docked panel and Quick Properties render the same rows from one
state, so a picked colour opened both dropdowns and each swallowed the
other's click.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:34:16 +03:00
Hakan SevenandClaude Opus 5.5 1037be2d53 Text: an installed font beats its LFF stand-in (#1764)
ISOCPEUR, ISOCTEUR and the other aliased names are real fonts; with one
installed, its face draws the text instead of the stroke substitute,
which has no Cyrillic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:32:09 +03:00
Hakan SevenandClaude Opus 5.5 93d92b2a51 Snap: a computed tangent point outranks the rim-hover Center (#1768)
With TAN and CEN on, hovering a circle offered its centre everywhere on
the rim, so the tangent point from the base was never reachable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:27:58 +03:00
Hakan SevenandClaude Opus 5.5 d5de798f8a Options: snap marker size (#1770)
The object-snap glyphs were fixed at 5 px; a Drafting slider now scales
them from 1 to 20 px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:24:32 +03:00
Hakan SevenandClaude Opus 5.5 d915489a67 Web: check the autosave deadline from the font-poll tick (#1775)
A ten-minute time::every on wasm piles up long setTimeouts in the shared
wasmtimer driver until it stops waking every timer, which silenced the
automation channel and drop-open about 8 s after load.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:21:11 +03:00
Hakan SevenandClaude Opus 5.5 814dd2e3d6 Key tips: translate the hints, drop a held Alt on focus loss
Alt+Tab away left the lone-Alt flag set, so the release on return
opened the key tips.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:15:51 +03:00
Hakan Seven be6dbfdd78 Merge pull request #1780 from ramox81/codex/ribbon-keytips
Ribbon key tips (Alt): codes on tabs, buttons and menu items

# Conflicts:
#	locales/ar-SA/opencadstudio.ftl
#	locales/bg-BG/opencadstudio.ftl
#	locales/cs-CZ/opencadstudio.ftl
#	locales/de-DE/opencadstudio.ftl
#	locales/el-GR/opencadstudio.ftl
#	locales/en-US/opencadstudio.ftl
#	locales/es-ES/opencadstudio.ftl
#	locales/fi-FI/opencadstudio.ftl
#	locales/fr-FR/opencadstudio.ftl
#	locales/hi-IN/opencadstudio.ftl
#	locales/hu-HU/opencadstudio.ftl
#	locales/it-IT/opencadstudio.ftl
#	locales/ja-JP/opencadstudio.ftl
#	locales/ko-KR/opencadstudio.ftl
#	locales/lo-LA/opencadstudio.ftl
#	locales/nl-NL/opencadstudio.ftl
#	locales/pl-PL/opencadstudio.ftl
#	locales/pt-BR/opencadstudio.ftl
#	locales/ru-RU/opencadstudio.ftl
#	locales/tr-TR/opencadstudio.ftl
#	locales/zh-CN/opencadstudio.ftl
#	locales/zh-TW/opencadstudio.ftl
#	src/app/control/actions.rs
2026-10-14 12:14:23 +03:00
Hakan SevenandClaude Opus 5.5 104218d24e i18n: translate the Reference Edit dialog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:11:14 +03:00
Hakan Seven 21f33e933e Merge pull request #1777 from ramox81/codex/refedit-dialog
REFEDIT: Reference Edit dialog and unique names for xref objects

# Conflicts:
#	locales/ar-SA/opencadstudio.ftl
#	locales/bg-BG/opencadstudio.ftl
#	locales/cs-CZ/opencadstudio.ftl
#	locales/de-DE/opencadstudio.ftl
#	locales/el-GR/opencadstudio.ftl
#	locales/en-US/opencadstudio.ftl
#	locales/es-ES/opencadstudio.ftl
#	locales/fi-FI/opencadstudio.ftl
#	locales/fr-FR/opencadstudio.ftl
#	locales/hi-IN/opencadstudio.ftl
#	locales/hu-HU/opencadstudio.ftl
#	locales/it-IT/opencadstudio.ftl
#	locales/ja-JP/opencadstudio.ftl
#	locales/ko-KR/opencadstudio.ftl
#	locales/lo-LA/opencadstudio.ftl
#	locales/nl-NL/opencadstudio.ftl
#	locales/pl-PL/opencadstudio.ftl
#	locales/pt-BR/opencadstudio.ftl
#	locales/ru-RU/opencadstudio.ftl
#	locales/tr-TR/opencadstudio.ftl
#	locales/zh-CN/opencadstudio.ftl
#	locales/zh-TW/opencadstudio.ftl
#	src/app/control/actions.rs
#	src/app/mod.rs
#	src/app/view/modal.rs
2026-10-14 12:10:40 +03:00
Hakan SevenandClaude Opus 5.5 006d85c362 i18n: translate the REFEDIT working-set buttons
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:06:32 +03:00
Hakan Seven dec3ba2743 Merge pull request #1778 from ramox81/codex/refedit-toolbar
REFEDIT session toolbar: definition name, working set count and REFSET buttons
2026-10-14 12:05:19 +03:00
Hakan SevenandClaude Opus 5.5 06e3a6976c i18n, mcp: translate Image Adjust; pin the schema with image_adjust
#1776 left its dialog in English outside tr-TR and added the
image_adjust automation action without re-pinning the MCP tool schema
digest, which failed tool_schema_digest_is_pinned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:05:00 +03:00
Hakan Seven ff5833c35e Merge pull request #1776 from ramox81/codex/imageadjust-dialog
IMAGEADJUST: Image Adjust dialog for raster images
2026-10-14 12:01:13 +03:00
Hakan SevenandClaude Opus 5.5 da8e976a60 feat(bedit): author visibility states of dynamic blocks
In the Block Editor, BVSTATE makes a new visibility state, makes one
current, renames or deletes one; BVHIDE and BVSHOW hide or show the
picked objects in the current state (BVSHOW shows every object of the
block while they are picked). The first use makes the block dynamic.

The states are stored as the format keeps them: a
BLOCKVISIBILITYPARAMETER in the block's ACAD_ENHANCEDBLOCK evaluation
graph with its visibility grip and the grip's two location expressions,
the round-trip purge preventer, AcDbDynamicBlockTrueName /
AcDbDynamicBlockGUID / AcDbBlockRepETag on the definition and element
tags on each of its objects. The definition shows its first state; a
reference given another state gets its own evaluated *U copy, tagged
AcDbBlockRepBTag and linked back through AcDbBlockRepresentation /
AcDbRepData, so it shows that state and the other references do not
change. Saving the block drops erased objects from the states.

Checked: a block authored this way reads back with its states and
reference link from DWG and DXF, and the ODA converter accepts the DWG.

Closes #1566

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:02:34 +03:00
Hakan SevenandClaude Opus 5.5 353c1b0d0f Cargo: codec 3bdc002, kernel a496394, graph 04ca67c
DXF references find their dynamic block; block classes can be given the
reference's flags.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:02:34 +03:00
Hakan SevenandClaude Opus 5.5 92bbafccd0 Cargo: codec 347c32a, kernel bbd1054, graph 1d2e3b5
Block records keep their own XDATA through DXF and DWG.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:25:31 +03:00
Hakan Seven 592289f4fd Merge pull request #1774 from megabrain-agent/feat/font-register
feat(web): font_register control op for host-supplied font files
2026-10-14 09:11:06 +03:00
Hakan SevenandClaude Opus 5.5 527e38839a style(overlay): describe the MATCHPROP brush without product names
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:10:58 +03:00
Hakan Seven c3cf45d859 Merge pull request #1773 from Ch4rlos/feat/matchprop-brush-cursor
feat(ui): paintbrush cursor while MATCHPROP is armed
2026-10-14 09:10:35 +03:00
Hakan SevenandClaude Opus 5.5 2ba368557c i18n(fr): product name, accents and the usual French command terms
Keep the product name Open CAD Studio, restore the accents of Colinéaire
and Égal, and use the established French terms for the array commands
(Réseau rectangulaire / polaire / trajectoire) and Lissage for loft.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:10:23 +03:00
Hakan Seven fad4643679 Merge pull request #1767 from NJdevPro/main
Improve French localization in opencadstudio.ftl
2026-10-14 09:09:02 +03:00
Hakan SevenandClaude Opus 5.5 39c830d213 fix(layout): a new layout keeps its sheet until it is saved unopened
add_layout took the sheet viewport out, so the first viewport added to
the layout afterwards (by automation, or a plugin) was read as the sheet
and the scale pill and paper camera followed it. The sheet now stays and
is fitted to the page when the layout first opens; a layout saved before
that is still written without viewports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:08:39 +03:00
Hakan SevenandClaude Opus 5.5 0a0d57ed25 fix(layout): first opening fits the sheet, never drops the user's viewports
Opening a layout whose page setup was never filled in took every viewport
out of it, including viewports onto the model a file carries (plenty of
DXF writers leave the paper fields empty). With only the sheet taken out
instead, the next viewport would have been read as the sheet. The sheet
is now fitted to the new page and every other viewport stays.

A layout saved as never opened keeps its state when it already holds a
viewport onto the model (one added by automation), and only its sheet is
taken out otherwise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:04:38 +03:00
Hakan Seven 86df079182 Merge pull request #1744 from ramox81/codex/layout-first-open-followups
Layouts: first opening follows the page setup; viewports picked by their frame
2026-10-14 08:54:19 +03:00
Hakan SevenandClaude Opus 5.5 1eda5cd22d fix(refedit): write the whole definition back to an xref, keep a .bak
REFCLOSE Save on an xref replaced the referenced file's model space with
the working set alone. With the Nested selection method the objects that
were not checked out stay in the definition, but they were deleted from
the file on disk. Write back every object of the saved definition, and
copy the file to .bak first when ISAVEBAK is on, as a drawing save does.

Also translate the new REFEDIT prompts into the other 20 locales; the
catalog test requires every locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:51:23 +03:00
Hakan Seven 7e763080cb Merge pull request #1752 from ramox81/codex/refedit-parity
REFEDIT: reference prompts, -REFEDIT, REFSET, nested references and xref write-back
2026-10-14 08:46:42 +03:00
Hakan SevenandClaude Opus 5.5 46dec40f4d fix(image): adjusted rasters keep their source alive; doc back on resolve_image
The brightness/contrast cache keyed entries by the source buffer's
address without holding it, so a reloaded image whose new buffer landed
at the freed address could be shown with the old file's pixels. Each
entry now holds its source. The new functions had also been inserted
between resolve_image's doc comment and the function, merging that text
into the lookup table's documentation; it is back where it belongs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:45:22 +03:00
Hakan Seven f6fc244430 Merge pull request #1751 from ramox81/codex/adjust-parity
ADJUST: images and underlays, -IMAGEADJUST and PDF/DWF/DGNADJUST
2026-10-14 08:42:35 +03:00
Hakan Seven f8908e151f Merge pull request #1754 from ramox81/codex/attach-command-line
ATTACH: FILEDIA, -ATTACH command line and reference file types

# Conflicts:
#	src/app/settings.rs
#	src/app/update/file.rs
2026-10-14 08:39:34 +03:00
Hakan SevenandClaude Opus 5.5 d0c292aedd i18n: translate the Underlay OSnap vary state in every locale
#1753 added the string to en-US and tr-TR only; the catalog test requires
all 22 locales.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:38:36 +03:00
Hakan Seven 7d306eec5e Merge pull request #1753 from ramox81/codex/insert-reference-ribbon
Insert ribbon: Reference panel order and Snap to Underlays state
2026-10-14 08:35:47 +03:00
Hakan Seven 7f143d5be2 Merge pull request #1755 from ramox81/codex/external-references-close
External References palette: open/close commands, ERSTATE and reference aliases
2026-10-14 08:35:47 +03:00
Hakan Seven d0dddb03cb Merge pull request #1756 from ramox81/codex/xref-fade-setting
XDWGFADECTL: ask again after an invalid value and keep it in the profile
2026-10-14 08:35:34 +03:00
Hakan Seven 3196febb40 Merge pull request #1757 from ramox81/codex/ulayers-empty-drawing
ULAYERS opens without underlays; the ribbon button runs ULAYERS
2026-10-14 08:35:34 +03:00
Hakan Seven 77825c1b15 Merge pull request #1758 from ramox81/codex/clip-enter-silent
CLIP: Enter at the object prompt ends silently

# Conflicts:
#	src/command.rs
2026-10-14 08:35:03 +03:00