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 <[email protected]>
This commit is contained in:
Hakan SevenandClaude Opus 4.8 committed 2026-07-08 15:56:56 +03:00
1 parent 910caa6f67
commit 9b45f0588d
2 files changed
+9 -6

No files matched your search

+5 -3
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
};
+4 -3
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
};