From a2d4caf2f0e448d9e98d3837613c6b4a32910162 Mon Sep 17 00:00:00 2001 From: gianlucafiore Date: Thu, 27 Aug 2026 13:51:05 -0300 Subject: [PATCH] fix(render): improve dashed linetype rendering --- src/scene/convert/tessellate.rs | 2 ++ src/scene/project.rs | 2 +- src/scene/view/render.rs | 11 +++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/scene/convert/tessellate.rs b/src/scene/convert/tessellate.rs index 108c25155..98c28613f 100644 --- a/src/scene/convert/tessellate.rs +++ b/src/scene/convert/tessellate.rs @@ -1535,6 +1535,8 @@ pub fn tessellate( | EntityType::Circle(_) | EntityType::Arc(_) | EntityType::Ellipse(_) + | EntityType::Spline(_) + | EntityType::LwPolyline(_) ) { (pattern_length, pattern) } else { diff --git a/src/scene/project.rs b/src/scene/project.rs index 786b11639..29ef0735d 100644 --- a/src/scene/project.rs +++ b/src/scene/project.rs @@ -250,7 +250,7 @@ impl Scene { let source_length = stationed.then(|| wire.pattern_stations[wire.points.len()]); let (clipped, mut clipped_stations) = clip_polyline_to_rect( &projected_pts, - stationed.then_some(&wire.pattern_stations[..wire.points.len()]), + stationed.then(|| &wire.pattern_stations[..wire.points.len()]), vp_x0, vp_y0, vp_x1, diff --git a/src/scene/view/render.rs b/src/scene/view/render.rs index daaa3f5a6..feeff457d 100644 --- a/src/scene/view/render.rs +++ b/src/scene/view/render.rs @@ -3795,14 +3795,21 @@ impl Scene { full_bounds, self.document.header.lineweight_display || display_plot_lineweights, ); - if self.document.header.paper_space_linetype_scaling + + // Model space: scale linetypes using the current annotation scale so their + // appearance can match a paper-space viewport at the same drawing scale. + if self.current_layout == "Model" { + if self.annotation_scale.is_finite() && self.annotation_scale > 1e-9 { + uniforms.linetype_scale = self.annotation_scale; + } + } else if self.document.header.paper_space_linetype_scaling && !inst.paper_sheet - && inst.tile_idx.is_none() && inst.handle != Handle::NULL { if let Some(EntityType::Viewport(vp)) = self.document.get_entity(inst.handle) { let viewport_scale = vp_effective_scale(vp.custom_scale, vp.view_height, vp.height); + if viewport_scale.is_finite() && viewport_scale > 1e-9 { uniforms.linetype_scale = (1.0 / viewport_scale) as f32; }