Commit Graph
5064 Commits
Author SHA1 Message Date
Hakan Seven c3baff7ea2 Merge pull request #1844 from ramox81/codex/import-formats
IMPORT: read SAT, STEP, IGES and WMF files; ACISIN and WMFIN

# Conflicts:
#	Cargo.lock
2026-10-16 22:41:32 +03:00
Hakan SevenandClaude Opus 5.5 3cbdce6137 Cargo: codec d4ac66e, kernel 85eb912, graph 8b315ab; MCP schema digest
Codec: the colour index palette at its standard intensities (#115), ACIS
colour attributes kept in binary data and multi-body split (#116, #118).
Kernel: spline curves and surfaces recognised as analytic shapes (#89).
The MCP tool schema digest follows the two PDF import automation actions
#1841 added.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 22:40:02 +03:00
Hakan SevenandClaude Opus 5.5 907fa8d760 STRETCH: arcs keep their height; splines stretch; real preview
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 <[email protected]>
2026-10-16 22:40:02 +03:00
Hakan SevenandClaude Opus 5.5 519d6605f9 MCP: create the automation folder before claiming the startup lock
On a profile that never ran the editor the folder did not exist, the lock
write failed, and ocs_sessions(launch_if_none) took that as another caller
starting the GUI: it never spawned one and kept answering "still starting".

Closes #1846

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 22:40:02 +03:00
Hakan Seven ecdcc5d2b6 Merge pull request #1838 from ramox81/codex/pdf-shx-text-followups
PDFSHXTEXT: reference text grouping, object share and wider character set
2026-10-16 22:40:02 +03:00
Hakan Seven fa7bb9de12 Merge pull request #1841 from ramox81/codex/pdfimport-followups
PDFIMPORT: reference coordinate precision, unreadable file and page messages, picker automation
2026-10-16 22:39:59 +03:00
Hakan Seven 28f51ce270 Merge pull request #1839 from MarcelP102/Graphic-Attributes-fix
FIX: Hide pallet title bar menu button until the bar is hovered
2026-10-16 22:39:56 +03:00
gianlucafiore 590ca17f94 Merge pull request #1853 from gianlucafiore/fix/extension-guide-visual-anchor
fix(osnap): keep Extension guides anchored when moving the cursor
2026-10-16 16:16:29 -03:00
ramox81andClaude Opus 5.5 0158ea533f Merge upstream main; codec and kernel patches on branches merged with it
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 22:12:01 +03:00
Hakan SevenandClaude Opus 5.5 e5c307c8ae Cargo: codec 0dc8585, kernel d530a52, graph 7dd8cf6
Large DWG sections (over 100 MB) read back instead of opening empty, and
DXF files with very large DGN stroke patterns no longer hang the reader.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 21:54:09 +03:00
ramox81andClaude Opus 5.5 78e429732e IMPORT: 3D Studio files
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 <[email protected]>
2026-10-16 20:12:16 +03:00
gianlucafiore 002cdd0685 chore(visual): remove temporary Extension guide markers 2026-10-16 14:07:22 -03:00
gianlucafiore de990b5a1a chore(visual): remove temporary Extension anchor logging 2026-10-16 14:07:10 -03:00
gianlucafiore 363534bb5c fix(visual): exclude Extension and intersection guides from SNAPMARKERSIZE transform 2026-10-16 13:57:47 -03:00
Karim Jerbi 677ff0e08c feat(block-editor): select and edit native parameter and action grips
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.
2026-10-16 17:44:09 +01:00
gianlucafiore 903501d7b6 diagnostic: show Extension base and solid guide on demand 2026-10-16 13:35:02 -03:00
gianlucafiore d96476187f diagnostic: trace Extension anchor coordinates on demand 2026-10-16 13:34:50 -03:00
gianlucafiore 6792c7265c fix(visual): anchor Extension at the acquired world endpoint projection 2026-10-16 13:16:45 -03:00
gianlucafiore 3f056ecd9d fix(osnap): offset Extension guide origins into canvas coordinates 2026-10-16 13:13:14 -03:00
ramox81andClaude Opus 5.5 9ddc103bcc WMF: arcs on whole units, text by its font's ascent, no chords
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 <[email protected]>
2026-10-16 19:12:47 +03:00
ramox81andClaude Opus 5.5 8e9bd7db69 IMPORT: STEP colours and IGES trimmed and bounded surfaces
STEP presentation styles colour what they style: a solid in the standard
index colour its RGB is close to, else in the true colour, and a face
with a style of its own (with the edges round it) through the face and
edge colour attributes. IGES trimmed (144) and bounded (143) surfaces
come in as one SURFACE each in the entry's colour, after the solids,
which now come in last first. Faces show a true colour attribute in
that colour.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 19:12:46 +03:00
Karim Jerbi f69aefc3df feat(block-editor): author Move and Scale actions with Test Block evaluation
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).
2026-10-16 17:05:18 +01:00
gianlucafiore 93abccc6ed fix(visual): anchor Extension marker to captured ray even without OTRACK 2026-10-16 11:46:29 -03:00
gianlucafiore e5e08a5a12 fix(visual): project acquired Extension rays with a stable screen baseline 2026-10-16 11:45:40 -03:00
Karim Jerbi 10c5a9d382 feat(block-editor): author Lookup tables and wire Basepoint insertion
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.
2026-10-16 15:29:08 +01:00
gianlucafiore 4ad00fad33 fix(visual): keep Extension snap guide on acquired OTRACK ray 2026-10-16 11:24:28 -03:00
gianlucafiore 54fb20d343 fix(visual): anchor Extension and OTRACK guides to acquired ray direction 2026-10-16 11:13:03 -03:00
ramox81 d8959a4635 Merge remote-tracking branch 'origin/main' into codex/import-formats
# Conflicts:
#	Cargo.lock
2026-10-16 16:58:41 +03:00
ramox81andClaude Opus 5.5 50b2851381 Drawing extents include solids placed through inserts
Zoom Extents skips an insert's marker wire and counts solids through
their meshes, but only model-space meshes were read: a drawing whose
solids all sit in blocks had no extents and the view did not move.
The instanced block meshes now count with their placed bounds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 16:21:59 +03:00
ramox81andClaude Opus 5.5 2019964591 Block definitions tessellate their solids
A block defined from objects (imported STEP products, pasted blocks,
recreated or redefined definitions) left its solids, surfaces and meshes
without the instanced block meshes they draw through, so their inserts
showed nothing until the drawing was reopened.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 16:13:29 +03:00
ramox81andClaude Opus 5.5 659bb06cd6 IMPORT: read SAT, STEP, IGES and WMF files; ACISIN and WMFIN
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 <[email protected]>
2026-10-16 15:06:16 +03:00
ramox81andClaude Opus 5.5 416ec43c38 fix(pdfshxtext): .shx-only font resolution, oversized-object rule, mean text height
A listed font is compared only from its .shx file or the embedded stroke
font of that name; no TrueType or alias stand-in. Objects with a diagonal
over five times the selection's mean diagonal join no group. The created
MTEXT height is the mean of the character sizes. Text styles look a bare
font name up as .shx first, and a missing .shx name never draws with a
TrueType face. TXT2MTXT measures TEXT to its last inked stroke.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 13:53:36 +03:00
ramox81andClaude Opus 5.5 dae01bdb14 fix(pdfimport): reference geometry precision, file and page messages, picker automation
- 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 <[email protected]>
2026-10-16 12:37:20 +03:00
Hakan SevenandClaude Opus 5.5 04b2c07a38 Use the codec audit and repair in place of OCS's corruption guard
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 <[email protected]>
2026-10-16 12:02:39 +03:00
Claude 0acf039161 Hide pallet title bar menu button until the bar is hovered
The Graphic Attributes hamburger now shows and hides with the pin and
close buttons, staying up while its menu is open.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GMeyMxW5iedqAKWfY7MeJB
2026-10-16 08:44:44 +00:00
ramox81andClaude Opus 5.5 2eb60f333f fix(pdfshxtext): reference grouping, object share, wider glyph set, drawing-order import
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 <[email protected]>
2026-10-16 11:03:48 +03:00
Hakan SevenandClaude Opus 5.5 3c9404510f Cargo: codec cb3ce6a (acadrust through 3a3098a), kernel 40f59ca, graph a4bd351
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:06:14 +03:00
Hakan SevenandClaude Opus 5.5 e4d04ef132 Cargo: codec e023bc3 (acadrust sync), kernel abca4e8, graph c63556f
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 <[email protected]>
2026-10-16 09:17:01 +03:00
Hakan SevenandClaude Opus 5.5 218150c76a fix(clipboard): copied XDATA keeps its application in another drawing
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 <[email protected]>
2026-10-16 06:37:19 +03:00
Hakan SevenandClaude Opus 5.5 d909bd0787 Cargo: codec 102f04c, kernel 5811296, graph 88cdae0
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 06:37:19 +03:00
gianlucafiore 88ffe21636 Merge pull request #1832 from gianlucafiore/fix/extension-otrack-polar-intersection
Fix Extension–OTRACK crossing picks and reduce accidental lasso drags
2026-10-15 23:19:24 -03:00
gianlucafiore ec44bcdd71 cleanup: remove unused generic drag threshold import 2026-10-15 20:31:16 -03:00
gianlucafiore 8ebe3fc89f fix(selection): prevent incidental mouse motion from starting lasso 2026-10-15 20:31:04 -03:00
Karim Jerbi abb84751a2 chore: pin the plugin template to the host's codec 85bb5a2
codec 85bb5a2 fixes the BLOCKVISIBILITYPARAMETER DXF defect: AcDbEvalExpr
ends after 90/98/99 when the eval has no value instead of emitting a stray
70 -9999. Readers rejected that group 70 ('Unexpected DXF group code: 70')
and discarded every visibility-bearing drawing on open.
2026-10-16 00:22:43 +01:00
gianlucafiore 0004113e0a refine(selection): allow 250ms before a small pointer drag starts 2026-10-15 20:22:09 -03:00
Karim Jerbi 1b5f7a19d8 Cargo: codec 85bb5a2, kernel c038693, graph d518926 2026-10-16 00:20:49 +01:00
Hakan SevenandClaude Opus 5.5 09ec41a5e9 packaging(homebrew): cask on v2026.41, install through a local tap (#1825)
Homebrew dropped --no-quarantine and installs casks only from a tap, so
the README's direct-URL install no longer worked, and the cask still
pointed at v0.4.8.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 02:12:26 +03:00
Hakan SevenandClaude Opus 5.5 f6455b22eb fix(view): Zoom Extents and All frame a drawing placed at survey coordinates (#1829)
A block whose content is only 3D solids leaves a marker wire carrying
its insertion snap, and that point counted as drawing extent: a
georeferenced block inserted at the origin made ZOOM E frame the
origin and the model together, 860 km wide. Extents now skip those
markers; the solids count through their meshes. The marker's snap also
took the insertion point straight from the OCS, so a mirrored insert's
snap sat on the far side of the origin.

ZOOM All fitted the limits alone. In a 3D view it is now Zoom
Extents, and in plan it frames the limits together with the extents.

Instanced solids summed their rotated point and translation in f32
before meeting the eye, which cost up to half a metre at survey
coordinates; the large terms now cancel first.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 02:11:16 +03:00
gianlucafiore 52e8cd1002 fix(otrack): commit Extension intersection at tracked crossing on click 2026-10-15 20:10:08 -03:00
gianlucafiore dd3b18e550 docs: clarify extension exception in OTRACK priority guards 2026-10-15 20:02:39 -03:00