Commit Graph
277 Commits
Author SHA1 Message Date
Hakan Seven 3ab8dc3ca5 fix(ui): make modal layouts intrinsic
Pin Iced 0.15 so dialogs can measure content before distributing the resolved frame across child panels. Keep the web plugin notice compact and non-resizable.\n\nCloses #582
2026-07-30 14:47:28 +03:00
Hakan Seven d495e31d37 fix(offset): handle curved self-intersections
Closes #544
2026-07-30 00:06:02 +03:00
Hakan Seven 7b708372a8 chore(release): v0.9.0 2026-07-29 21:43:26 +03:00
Hakan Seven 6ecd67ff6e feat(layer-state): add saved-state editor 2026-07-29 18:39:55 +03:00
Hakan Seven 1e624cc6b7 feat(layers): add native state manager
Replace session-only layer snapshots with drawing-backed DWG and DXF states, exposed through the ribbon and LAYERSTATE commands.\n\nCloses #562
2026-07-29 18:00:41 +03:00
Hakan Seven ad736e20ea fix(grid): remove implicit drawing limits 2026-07-29 17:21:57 +03:00
Hakan Seven a717572d65 fix(plugins): trust platform certificates
Use the operating system trust store and Windows proxy settings while keeping TLS verification enabled. Add retryable registry errors with copyable diagnostics.\n\nRefs #563
2026-07-29 15:00:07 +03:00
Hakan Seven 4e25e88c31 feat(plugins): redesign plugin manager 2026-07-29 14:27:32 +03:00
Hakan Seven 93b9a840ff refactor(renderer): select paths by GPU limits
Keep storage fast paths on capable adapters and use packed or texture fallbacks only when device limits require them.\n\nCompact mesh-edge varyings to avoid WebGL shader rejection.
2026-07-29 12:49:41 +03:00
Hakan Seven 8a5bca8aa0 chore(release): v0.8.9 2026-07-28 12:51:38 +03:00
Hakan Seven b9de8940bc refactor(statusbar): unify popup menus 2026-07-28 01:02:00 +03:00
Hakan Seven 3d90450b3f build(deps): update AcadIfc revision
Pull the default multileader and table style initialization from AcadIfc.

Refs #523
2026-07-27 18:19:56 +03:00
Hakan Seven b1a52d9229 chore(release): v0.8.8 2026-07-27 01:20:56 +03:00
Hakan Seven 731df4a725 feat(cad): integrate standard codec coverage
Render, edit, query, select, and explode newly decoded standard entity variants. Pin acadifc de8d6b5 and preserve None color semantics.
2026-07-26 19:30:43 +03:00
Hakan Seven 34d0c377e2 fix(3d): complete ACIS solid rendering
- track per-face coverage and retain safe display fallbacks
- tessellate shared NURBS, pcurve trims and periodic surfaces
- pin the matching acadifc decoder revision
2026-07-26 01:35:16 +03:00
Hakan Seven a16914a22a build: pin CAD round-trip fixes 2026-07-25 23:54:02 +03:00
Hakan Seven a22681e751 fix(io): prevent lossy Save As
Use the verified acadifc round-trip fixes and warn for every unsupported object or entity the selected format would drop.
2026-07-25 23:02:05 +03:00
Hakan Seven bca65600cd fix: stabilize web loading and paper rendering 2026-07-25 21:34:29 +03:00
Hakan Seven fe49cc8eb5 revert(web): drop vendored iced renderer
Keep iced_wgpu external and leave the WebGPU storage-buffer optimization out of scope.
2026-07-25 19:24:32 +03:00
Hakan Seven deec48ad99 perf: keep heavy work off UI thread 2026-07-25 18:49:18 +03:00
Hakan Seven 12bf126646 perf: remove large drawing stalls
Keep resident geometry and GPU resources stable across edits, MSPACE zoom, and Model/Paper switches. Add unified PERF output for tracing remaining costs.
2026-07-25 13:34:48 +03:00
Hakan Seven 47423eae18 build: pin DBCOLOR round-trip fix 2026-07-25 09:22:35 +03:00
Hakan Seven 39449ec684 perf: speed large drawing workflows 2026-07-25 09:05:52 +03:00
Hakan Seven 97be4fefaa build: update acadrust DWG pipeline 2026-07-25 03:32:31 +03:00
Hakan Seven 71e0b88839 perf: optimize large drawing workflows 2026-07-25 02:58:46 +03:00
Hakan Seven ea93e169ea perf: make edit history incremental
Replace full-document snapshots with Arc first-touch deltas and batch cache invalidation. Reuse interaction and GPU category caches across unrelated edits.
2026-07-24 23:25:33 +03:00
Hakan Seven 77ea43fb96 fix(dwg): pull AC15 locator fix 2026-07-24 17:44:02 +03:00
Hakan SevenandClaude Opus 4.8 8c36d3aca8 chore(deps): bump acadrust for down-saved gradient false-positive fix
Solid hatches carrying stale GradientColor1/2ACI EED (no ACAD_XREC_ROUNDTRIP
XRecord) no longer resurrect as a two-colour gradient — red / ACI-253 solids
now render solid instead of blue→yellow.

Closes #471

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 14:45:04 +03:00
Hakan SevenandClaude Opus 4.8 d59f90992c fix(dxf): tapered R12 polyline widths via acadrust c209306
Heavy 2D POLYLINE vertices with absent width codes now inherit the
polyline default while explicit-zero segments stay zero, so tapered
polylines (e.g. sample_AC1009 handle 0x35B) render variable-width
instead of constant — matching the DWG/LWPOLYLINE form.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 13:52:32 +03:00
Hakan SevenandClaude Opus 4.8 6ba8bb15bc chore(deps): bump acadrust for R12 paper-space entity placement
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 13:11:50 +03:00
Hakan SevenandClaude Opus 4.8 106fbbec71 chore(deps): bump acadrust for R12 block-content owner fix
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 12:54:24 +03:00
Hakan SevenandClaude Opus 4.8 4d898aeead chore(deps): bump acadrust for pre-R2004 MTEXT bg fill recovery
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 12:41:39 +03:00
Hakan SevenandClaude Opus 4.8 95bc47e084 chore(deps): bump acadrust for MTEXT background fill colour fix
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 11:55:36 +03:00
Hakan SevenandClaude Opus 4.8 36bc1a911a chore(deps): bump acadrust for pre-R2004 gradient hatch recovery
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 11:45:19 +03:00
Hakan SevenandClaude Opus 4.8 ce49f4da0a fix(render): DXF leader hookline width + SHAPE name fallback; bump acadrust
Companion to the acadrust DXF-fidelity sweep (bump to 379ce12):
- Legacy LEADER hookline: underline the annotation using the leader's own
  stored text width (DXF code 41) when the MTEXT has no computed extents,
  so the landing spans the text instead of a short stub.
- SHAPE: resolve the glyph by name when the shape number is 0 (DXF SHAPE
  carries only the name), and search shape-file text styles when the entity
  has no direct style reference.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 11:30:03 +03:00
Hakan SevenandClaude Opus 4.8 0e61836e91 fix(properties): name AEC / proxy objects instead of "Unknown"
Selecting a proxy object we render from its cached graphics (an AEC
Wall/Door/Window and the like) showed "Unknown" as its type. The entity
now carries its real DXF class name from the CLASSES section (acadrust
bump), so surface it: ui_name_or_class title-cases the class ("AEC_WALL"
→ "Aec Wall") for the properties Type row and the status-bar label, and
still says "Unknown" only when the class truly can't be named.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 23:59:27 +03:00
Hakan SevenandClaude Opus 4.8 8fd03e56ff chore: bump acadrust — resolve pre-R2018 MLINESTYLE element linetypes
Multilines read from an R13–R2017 DWG (e.g. an AutoCAD 2013 save) lost
their per-element linetypes and drew every element solid instead of
dashed / with embedded text; R2018 saves were fine. The crate now decodes
the pre-R2018 bit_short linetype index.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 23:45:30 +03:00
Hakan SevenandClaude Opus 4.8 de5c35d44a fix(wipeout): mask block-internal wipeouts once inserted
A wipeout defined inside a block never masked the geometry once the block
was inserted — wipeout_models only scanned top-level entities, so the
wipeout was invisible unless you entered block-edit (where it is
top-level). It also drew a stray mask at its raw block-local coordinates
because the top-level scan lacked the block-defn reject the hatch path
uses.

Descend visible inserts and place each block-internal wipeout in world
space, applying the accumulated insert transform via apply /
apply_rotation. Add the belongs_to_visible_block filter so block-defn
wipeouts only appear through the descent, in world space.

Bumps acadrust for the matching transform_wipeout fix: its u/v basis was
double-scaled (apply_rotation then another scale-factor multiply), so a
scaled insert grew the mask; the descent sidesteps that path but the
explode/copy commands need the crate fix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 23:18:48 +03:00
Hakan SevenandClaude Opus 4.8 ec92a0cdc6 chore(release): v0.8.7
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 15:22:42 +03:00
Hakan SevenandClaude Fable 5 fc72827428 deps: bump acadrust — don't resurrect disabled gradients on R2004+
Pulls acadrust 022290a: recover_roundtrip_gradients is now gated to
pre-R2004. A native R2018 file whose hatch has its gradient turned off
(is_gradient=0, solid fill) but still carries stale GradientColor1/2ACI
round-trip EED no longer gets a spurious two-colour gradient painted over
it — the arrowhead / "Aluminium shading" hatches render solid as ODA and
libredwg decode them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 11:39:23 +03:00
Hakan SevenandClaude Fable 5 9d6034c0a1 chore: bump acadrust — R14 (AC1014) solid + xclip decode
Brings the pre-2.0 SAT parse (single-line header, numeric edge/coedge
sense) so R14's ACIS 1.6 solids mesh into a full box, and the R13/R14
dictionary-key trim so an XCLIPped block resolves its spatial filter and
clips instead of drawing whole.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 10:14:45 +03:00
Hakan SevenandClaude Fable 5 e7c4616ed4 chore: bump acadrust — R14 gradient recovery + R13/14 dimstyle read
Brings two R14 (AC1014) decode fixes: down-saved gradient hatches now
recover through the case-insensitive EED / garbage-suffixed dictionary
key, and the R13/R14 DimStyle field block is finally read (DIMASZ /
DIMTAD / DIMGAP were stuck at defaults). The latter lets a leader hook
its annotation text — leader 1298's underline now spans the MTEXT
extents, matching the AC1032 render.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:59:59 +03:00
Hakan SevenandClaude Fable 5 d4b4add662 chore: bump acadrust — recover down-saved gradient hatches
Solid hatches carrying GradientColor1ACI/GradientColor2ACI EED plus an
ACAD_XREC_ROUNDTRIP gradient XRecord now decode back into a real
gradient, so R2000-down-saved gradient fills render blue→yellow instead
of a flat solid. Color::rgb() already resolves the ACI stops, so the
existing gradient path picks them up with no render change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:48:22 +03:00
Hakan SevenandClaude Fable 5 d89343292c chore: bump acadrust — v400 SAT edge param fix
Brings the pre-v700 (R2000) SAT edge decode fix: v400 edges omit the
start_param/end_param doubles, so reversed coedges were reading the
curve pointer as a vertex and every face with a reversed coedge loop
dropped out of the mesh. AC1015 solids/regions now tessellate to the
same triangle counts as the AC1018/AC1032 SAB decode (full box instead
of an open shell).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:35:10 +03:00
Hakan SevenandClaude Fable 5 faa135a7a1 fix(mleader): read the attachment anchor from the annotation context
The horizontal attachment point was read from the entity-level field,
which only exists from R2010 on; older records (R2007 and earlier) left
it at the default and centre/right-attached leaders shifted. The
annotation context carries the same value in every version, so anchor
from there for both the render and the width-grip geometry.

acadrust bump also brings: the R2007 MULTILEADER tail gating (leaders no
longer render upside-down), the R2004-R2006 inline SAB payload read, the
v1-SAT wireframe point_present decode (3D solids/regions land in place
on R2000/R2004), and the XCLIPFRAME default of 2 so clip-frame borders
draw on files whose header omits the variable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:15:51 +03:00
Hakan SevenandClaude Fable 5 ac0a6ac150 fix(mleader): honour the baked context — anchors, rotation, dogleg, frames
The annotation context is AutoCAD's baked display state; the renderer
now trusts it instead of re-deriving:

- text_attachment_point (L/C/R) is the stored horizontal anchor — the
  leader-side guess shifted centre/right-attached texts by their width.
- ctx.text_direction/text_rotation apply as stored; forcing the
  Horizontal angle type to 0 un-rotated angled leaders. The conn.y
  baseline snap now applies only to unrotated text.
- The dogleg runs along the leader root's stored direction (angled
  leaders drew it world-horizontal), and vertically-attached leaders
  draw no dogleg at all.
- Underline attachments (BottomLine / BottomOfTopLineUnderline…) draw
  the leader-coloured rule under the attached line(s), full text width.
- Vertical text flow (ctx.text_flow_direction) feeds the shared
  vertical layout; frame/background boxes wrap the laid-out glyph
  bounds padded by ctx.landing_gap, and run-less decoration strokes +
  inline \C colours reach the output instead of being dropped.
- The wrap-width grip rides the shared flow_grip_axis() (rotation, flow
  and attachment side), and its drag projects on the same axis.

acadrust bump: every MULTILEADER decodes (has_ds peek), MTEXT
top-to-bottom direction reads correctly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 02:58:17 +03:00
Hakan SevenandClaude Fable 5 f1c494b81e fix(solid): skip display-cache wires when ACIS parses; real centres
The embedded solid display-cache wires are body-local (unplaced), and
R2013+ AcDs-backed solids used to misparse them into garbage points near
the origin — a clipped region rendered a stray fragment at (0,0,0). When
the ACIS payload parses, the mesh pipeline (fill + feature edges +
isolines, all body-placed) is the authoritative render, so the wires now
only serve as a last resort for unreadable ACIS data.

acadrust bump brings the decoded wireframe section and real reference
points: solids/regions report the file's stored bounding-box centre (or
a geometry-derived one) instead of (0,0,0), which feeds OCS grips,
Position properties and insertion snaps.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 01:13:43 +03:00
Hakan SevenandClaude Fable 5 bf06a8e330 fix(leader): derive hookline for DWG leaders; size it from the dim style
DWG stores no "hookline exists" flag (only the direction bit), so every
DWG-loaded leader kept hookline_enabled=false and drew no hook. Derive
it: a text-annotated leader hooks when its final segment leaves the
horizontal by more than 15°, shared by the render and snap/grip paths.

Hook length comes from the dim style like the arrowhead (DIMASZ ×
DIMSCALE), and with DIMTAD "text above" it extends under the annotation
to the far edge of the MTEXT's laid-out extents — newly exposed by
acadrust (lock bumped); the old text-height heuristic stays as the
no-style fallback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 23:36:25 +03:00
Hakan SevenandClaude Fable 5 c879b4294a fix(dxf): building axis lines still hidden — LAYER off misread (#314)
Bump acadrust to a87435f: DXF encodes an off layer as a negative
code-62 colour index; the reader took 70 bit 2 ("frozen by default in
new viewports") as off instead. The AEC sample's GRIDLINES layer —
carrying that bit while fully visible in the DWG — imported hidden, so
every building axis line on it disappeared; genuinely off layers
imported visible. Second and final cause of #314, after the LTYPE
74/75 swap.

Closes #314

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 16:20:11 +03:00
Hakan SevenandClaude Fable 5 a7558eb75f fix(dxf): grid lines missing when loading DXF (#314)
Bump acadrust to 6455610: the DXF LTYPE reader treated element code 74
as the shape number instead of the element-type flags and materialized
complex data on every plain dash — dashed linetypes like the AEC
sample's GRIDLINE turned "complex" with a null Shape{0} on each
element and rendered nothing. The DXF writer's swapped 74/75 emission
is fixed with it.

Closes #314

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 16:08:38 +03:00