feat(polyline): apply the full width to each side of the centreline

Draw the polyline width bands with the stored width offset to each side
of the centreline rather than half of it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hakan Seven 2026-07-08 15:56:56 +03:00
commit 9b45f0588d
2 changed files with 9 additions and 6 deletions

View file

@ -635,7 +635,9 @@ impl crate::entities::traits::Transformable for LwPolyline {
/// UTM-scale coordinates — building them in absolute f32 collapsed the band into
/// a string of squares far from the origin.
pub(crate) fn wide_fills(pl: &acadrust::entities::LwPolyline) -> ([f64; 2], Vec<Vec<[f32; 2]>>) {
let hw_const = (pl.constant_width / 2.0) as f32;
// The stored width is applied to EACH side of the centreline (not halved),
// so `polyline_segment_fill`'s ±offset spans the full width on either side.
let hw_const = pl.constant_width as f32;
let verts = &pl.vertices;
let n = verts.len();
if n < 2 {
@ -648,12 +650,12 @@ pub(crate) fn wide_fills(pl: &acadrust::entities::LwPolyline) -> ([f64; 2], Vec<
let v0 = &verts[i];
let v1 = &verts[(i + 1) % n];
let hw0 = if v0.start_width > 1e-9 {
v0.start_width as f32 / 2.0
v0.start_width as f32
} else {
hw_const
};
let hw1 = if v0.end_width > 1e-9 {
v0.end_width as f32 / 2.0
v0.end_width as f32
} else {
hw_const
};

View file

@ -746,7 +746,8 @@ impl Transformable for Polyline3D {
/// relative to (the first vertex). See `lwpolyline::wide_fills` — offsets are
/// f32 from `origin` so the band stays precise at UTM-scale coordinates.
pub(crate) fn wide_fills(pl: &acadrust::entities::Polyline2D) -> ([f64; 2], Vec<Vec<[f32; 2]>>) {
let hw_default = (pl.start_width.max(pl.end_width) / 2.0) as f32;
// Width is applied full to each side of the centreline (not halved).
let hw_default = pl.start_width.max(pl.end_width) as f32;
let verts = &pl.vertices;
let n = verts.len();
if n < 2 {
@ -759,12 +760,12 @@ pub(crate) fn wide_fills(pl: &acadrust::entities::Polyline2D) -> ([f64; 2], Vec<
let v0 = &verts[i];
let v1 = &verts[(i + 1) % n];
let hw0 = if v0.start_width > 1e-9 {
v0.start_width as f32 / 2.0
v0.start_width as f32
} else {
hw_default
};
let hw1 = if v0.end_width > 1e-9 {
v0.end_width as f32 / 2.0
v0.end_width as f32
} else {
hw_default
};