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
@@ -139,6 +139,15 @@ impl BlockDefinitionState {
glam::DVec3::new(x, y, z)
}
/// Prefill the base point fields from an existing definition, so
/// redefining a block starts from the base it already has (0.0000 for a
/// new block). Formatted the same way the pick point button writes them.
pub fn set_base_point(&mut self, base: glam::DVec3) {
self.base_point_x = format!("{:.4}", base.x);
self.base_point_y = format!("{:.4}", base.y);
self.base_point_z = format!("{:.4}", base.z);
}
pub fn is_existing_name(&self) -> bool {
let trimmed = self.name.trim();
!trimmed.is_empty()