fix(blocks): one base point convention for creation, redefine, insert, explode, XCLIP and REFEDIT

world = insert_point + Rot * Scale * (P - base_point). Attribute placement, EXPLODE, XCLIP storage, REFEDIT's working copy, the UCS reframe of attributes and the dynamic-block visibility grip ignored the base point and were offset by Rot*Scale*base. They now share insert_transform_with_base. Creation stores a ZERO base and redefine resets it; a no-op redefine moves nothing; the Block Definition dialog prefills the base from the definition. XCLIP filters stored by older builds keep their old displacement.
This commit is contained in:
Karim Jerbi committed 2026-10-12 04:35:19 +01:00
1 parent a456367b26
commit 5dfa41c032
17 files changed
+1447 -19

No files matched your search

+9
View File
@@ -1049,6 +1049,15 @@ impl OpenCADStudio {
}
}
} else {
// Attributes are placed through the same base-point convention as
// the render path, so hand the command the definition's base point.
let block_base = crate::scene::render_graph::block_base_point(
&self.tabs[i].scene.document,
&block_name,
);
if let Some(cmd) = self.tabs[i].active_cmd.as_mut() {
cmd.attreq_set_block_base(block_base);
}
let completed = self.tabs[i]
.active_cmd
.as_mut()