feat: XREF management — auto-resolve, XATTACH, XREF, XRELOAD

- src/io/xref.rs: resolve_xrefs() scans block_records for is_xref flags,
  resolves paths relative to the opened file's directory, loads the
  referenced DWG/DXF and merges model-space entities into the xref block
- src/modules/insert/xattach.rs: XATTACH command with file-picker flow
  (XAttachPick/XAttachPickResult messages), prepare_xref_block() creates
  BlockRecord + Block entities and immediately resolves content
- XREF command: lists all external references in the drawing
- XRELOAD command: re-resolves all xref paths and rebuilds scene caches
- Auto-resolve on FileOpened: reports Loaded/NotFound per xref block
- CadCommand trait: added optional xattach_path() method
- ROADMAP.md: 1.9 XREF management marked ✅

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hakan SevenandClaude Sonnet 4.6 committed 2026-04-08 00:02:38 +03:00
1 parent 4c1c13cab6
commit 64837e9aed
10 files changed
+487 -3

No files matched your search

+6 -1
View File
@@ -7,6 +7,7 @@ mod cylinder;
pub(crate) mod insert_block;
mod open_obj;
mod sphere;
pub(crate) mod xattach;
use crate::modules::{CadModule, RibbonGroup};
@@ -36,7 +37,11 @@ impl CadModule for InsertModule {
},
RibbonGroup {
title: "Block",
tools: vec![create_block::tool().into(), insert_block::tool().into()],
tools: vec![
create_block::tool().into(),
insert_block::tool().into(),
xattach::tool().into(),
],
},
]
}