From 9dcb5ad718f79ce615e5834af408324fb0a07435 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sat, 2 May 2026 20:06:22 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20apply=20OCS=E2=86=92WCS=20to=20Text=20a?= =?UTF-8?q?nd=20Attribute=20insertion=20snap=20points?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/entities/attribute.rs | 18 ++++++++++-------- src/entities/text.rs | 9 +++++---- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/entities/attribute.rs b/src/entities/attribute.rs index 612893910..e7894a841 100644 --- a/src/entities/attribute.rs +++ b/src/entities/attribute.rs @@ -14,11 +14,12 @@ use crate::scene::{cxf, transform}; impl TruckConvertible for AttributeDefinition { fn to_truck(&self, document: &acadrust::CadDocument) -> Option { - let snap_pt = Vec3::new( - self.insertion_point.x as f32, - self.insertion_point.y as f32, - self.insertion_point.z as f32, + let normal = (self.normal.x, self.normal.y, self.normal.z); + let (wsx, wsy, wsz) = transform::ocs_point_to_wcs( + (self.insertion_point.x, self.insertion_point.y, self.insertion_point.z), + normal, ); + let snap_pt = Vec3::new(wsx as f32, wsy as f32, wsz as f32); let resolved = resolve_text_style(&self.text_style, document); let display = if self.default_value.is_empty() { format!("[{}]", self.tag) @@ -122,11 +123,12 @@ impl Transformable for AttributeDefinition { impl TruckConvertible for AttributeEntity { fn to_truck(&self, document: &acadrust::CadDocument) -> Option { - let snap_pt = Vec3::new( - self.insertion_point.x as f32, - self.insertion_point.y as f32, - self.insertion_point.z as f32, + let normal = (self.normal.x, self.normal.y, self.normal.z); + let (wsx, wsy, wsz) = transform::ocs_point_to_wcs( + (self.insertion_point.x, self.insertion_point.y, self.insertion_point.z), + normal, ); + let snap_pt = Vec3::new(wsx as f32, wsy as f32, wsz as f32); let resolved = resolve_text_style(&self.text_style, document); let wf = (self.width_factor as f32).max(0.01); let origin = [self.insertion_point.x, self.insertion_point.y]; diff --git a/src/entities/text.rs b/src/entities/text.rs index 918c7fb0f..ccd8973b3 100644 --- a/src/entities/text.rs +++ b/src/entities/text.rs @@ -47,11 +47,12 @@ fn sync_text_alignment_point(t: &mut Text) { } fn to_truck(t: &Text, document: &acadrust::CadDocument) -> TruckEntity { - let snap_pt = Vec3::new( - t.insertion_point.x as f32, - t.insertion_point.y as f32, - t.insertion_point.z as f32, + let normal = (t.normal.x, t.normal.y, t.normal.z); + let (wsx, wsy, wsz) = crate::scene::transform::ocs_point_to_wcs( + (t.insertion_point.x, t.insertion_point.y, t.insertion_point.z), + normal, ); + let snap_pt = Vec3::new(wsx as f32, wsy as f32, wsz as f32); let resolved_style = resolve_text_style(&t.style, document); let font_name = resolved_style.font_name; let base_wf = (if t.width_factor > 0.0 { t.width_factor as f32 } else { 1.0 }