Kernel: pole-free six-patch spheres; vendored truck-shapeops with robust meshing and nearest-parameter loop projection (sphere and box booleans work); least-squares sphere classification

Oracle: 25/29 (14 and 15 now match Fusion).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
This commit is contained in:
bherbruckandClaude Opus 5.5 committed 2026-10-07 21:30:18 +00:00
1 parent 7ef3426cb3
commit 043a542e29
34 files changed
+6228 -43

No files matched your search

@@ -0,0 +1,113 @@
use super::*;
#[test]
fn construct_polylines_positive0() {
let lines = vec![
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
(Point3::new(1.0, 0.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0)),
(Point3::new(0.0, 1.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
(Point3::new(0.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
(Point3::new(1.0, 1.0, 1.0), Point3::new(0.0, 0.0, 0.0)),
(Point3::new(1.0, 0.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
];
let polyline = construct_polylines(&lines);
assert_eq!(polyline.len(), 1);
assert_eq!(polyline[0].len(), 9);
let mut sign = None;
for line in polyline[0].windows(2) {
let a = line[0][0] + line[0][1] * 2.0 + line[0][2] * 4.0;
let b = line[1][0] + line[1][1] * 2.0 + line[1][2] * 4.0;
let x = b - a;
assert!(f64::abs(x) == 1.0 || f64::abs(x) == 7.0);
let s = f64::signum(x * (x - 2.0) * (x + 2.0));
if let Some(sign) = sign {
assert!(s == sign);
} else {
sign = Some(s);
}
}
}
#[test]
fn construct_polylines_positive1() {
let lines = vec![
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
(Point3::new(1.0, 0.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
(Point3::new(1.0, 0.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
(Point3::new(1.0, 1.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
(Point3::new(0.0, 1.0, 0.0), Point3::new(0.0, 0.0, 0.0)),
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
(Point3::new(0.0, 1.0, 1.0), Point3::new(0.0, 0.0, 1.0)),
];
let polyline = construct_polylines(&lines);
assert_eq!(polyline.len(), 2);
assert_eq!(polyline[0].len(), 5);
assert_eq!(polyline[1].len(), 5);
}
#[test]
fn construct_polylines_positive2() {
let lines = vec![
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
(Point3::new(1.0, 0.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0)),
(Point3::new(0.0, 1.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
(Point3::new(1.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
(Point3::new(0.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
(Point3::new(1.0, 1.0, 1.0), Point3::new(0.0, 0.0, 0.0)),
(Point3::new(1.0, 0.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
];
let polyline = construct_polylines(&lines);
assert_eq!(polyline.len(), 1);
assert_eq!(polyline[0].len(), 9);
let mut sign = None;
for line in polyline[0].windows(2) {
let a = line[0][0] + line[0][1] * 2.0 + line[0][2] * 4.0;
let b = line[1][0] + line[1][1] * 2.0 + line[1][2] * 4.0;
let x = b - a;
assert!(f64::abs(x) == 1.0 || f64::abs(x) == 7.0);
let s = f64::signum(x * (x - 2.0) * (x + 2.0));
if let Some(sign) = sign {
assert!(s == sign);
} else {
sign = Some(s);
}
}
}
#[test]
fn construct_polylines_positive3() {
let lines = vec![
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
(Point3::new(1.0, 0.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0)),
(Point3::new(0.0, 1.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
(Point3::new(1.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
(Point3::new(0.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
(Point3::new(1.0, 0.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
];
let polyline = construct_polylines(&lines);
assert_eq!(polyline.len(), 1);
assert_eq!(polyline[0].len(), 8);
let mut sign = None;
for line in polyline[0].windows(2) {
let a = line[0][0] + line[0][1] * 2.0 + line[0][2] * 4.0;
let b = line[1][0] + line[1][1] * 2.0 + line[1][2] * 4.0;
let x = b - a;
assert!(f64::abs(x) == 1.0);
let s = f64::signum(x * (x - 2.0) * (x + 2.0));
if let Some(sign) = sign {
assert!(s == sign);
} else {
sign = Some(s);
}
}
}