From 320312e81a5983ae7bb9e24c80f3f2d86eaa7353 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Sat, 25 Apr 2026 20:30:26 +0300 Subject: [PATCH] fix: replace degenerate same-vertex edges with Point in lwpolyline and spline Empty LwPolyline and single-control-point Spline fallbacks were calling builder::line(&v, &v) with the same Rc vertex, triggering the truck-topology panic "Two same vertices cannot construct an edge." Co-Authored-By: Claude Sonnet 4.6 --- src/entities/lwpolyline.rs | 4 +--- src/entities/spline.rs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/entities/lwpolyline.rs b/src/entities/lwpolyline.rs index f1c67da7f..cc741677a 100644 --- a/src/entities/lwpolyline.rs +++ b/src/entities/lwpolyline.rs @@ -14,10 +14,8 @@ const TAU: f64 = std::f64::consts::TAU; fn to_truck(pline: &LwPolyline) -> TruckEntity { let verts = &pline.vertices; if verts.is_empty() { - let v = builder::vertex(Point3::new(0.0, 0.0, 0.0)); - let edge = builder::line(&v, &v); return TruckEntity { - object: TruckObject::Contour(std::iter::once(edge).collect()), + object: TruckObject::Point(builder::vertex(Point3::new(0.0, 0.0, 0.0))), snap_pts: vec![], tangent_geoms: vec![], key_vertices: vec![], diff --git a/src/entities/spline.rs b/src/entities/spline.rs index 9a83f2b08..908085e63 100644 --- a/src/entities/spline.rs +++ b/src/entities/spline.rs @@ -18,10 +18,8 @@ fn to_truck(spl: &Spline) -> TruckEntity { .map(|p| Point3::new(p.x, p.y, p.z)) .collect(); if ctrl_pts.len() < 2 { - let v = builder::vertex(Point3::new(0.0, 0.0, 0.0)); - let edge = builder::line(&v, &v); return TruckEntity { - object: TruckObject::Curve(edge), + object: TruckObject::Point(builder::vertex(Point3::new(0.0, 0.0, 0.0))), snap_pts: vec![], tangent_geoms: vec![], key_vertices: vec![],