diff --git a/Cargo.lock b/Cargo.lock index f55f120f..99043910 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,7 +41,6 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "acadrust" version = "0.3.4" -source = "git+https://github.com/HakanSeven12/acadrust.git?branch=feat%2Flayout-paper-dimensions#2eaa7aacce3c5de4d6f15a0474fd365db0da9fba" dependencies = [ "ahash", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 642b12ac..de97c7eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,4 +23,4 @@ rayon = "1" windows-sys = { version = "0.59", features = ["Win32_UI_Shell", "Win32_UI_WindowsAndMessaging"] } [patch.crates-io] -acadrust = { git = "https://github.com/HakanSeven12/acadrust.git", branch = "feat/layout-paper-dimensions" } +acadrust = { path = "../acadrust" } diff --git a/src/scene/mod.rs b/src/scene/mod.rs index 3cebc024..685ffc99 100644 --- a/src/scene/mod.rs +++ b/src/scene/mod.rs @@ -1573,7 +1573,8 @@ impl Scene { match &mut m.pattern { hatch_model::HatchPattern::Pattern(_) => { m.angle_offset = dxf.pattern_angle as f32; - m.scale = dxf.pattern_scale as f32; + let anno = if self.current_layout == "Model" { self.annotation_scale } else { 1.0 }; + m.scale = dxf.pattern_scale as f32 * anno; } hatch_model::HatchPattern::Gradient { angle_deg, .. } => { *angle_deg = dxf.pattern_angle.to_degrees() as f32; diff --git a/src/scene/tessellate.rs b/src/scene/tessellate.rs index a7b7f064..945df6f4 100644 --- a/src/scene/tessellate.rs +++ b/src/scene/tessellate.rs @@ -62,6 +62,25 @@ pub fn tessellate( }; let name = handle.value().to_string(); + // Determine effective annotation scale for this entity. + // AutoCAD marks annotative objects with "AcAnnoPO" xdata (R2007+). + // If no xdata at all: old file without annotation system → treat as annotative. + // If xdata present but no "AcAnnoPO": R2007+ file, entity is non-annotative → no scaling. + let anno_scale = { + let xdata = &entity.common().extended_data; + let is_annotative = if xdata.is_empty() { + // Old DXF / no annotation metadata — fall back to group-code-293 flag. + match entity { + EntityType::Text(t) => t.is_annotative, + EntityType::MText(m) => m.is_annotative, + _ => true, + } + } else { + xdata.get_record("AcAnnoPO").is_some() + }; + if is_annotative { anno_scale } else { 1.0 } + }; + // MultiLeader/Leader need anno_scale for arrow/dogleg/text — handle before generic path. if let EntityType::MultiLeader(ml) = entity { return tessellate_multileader_single(