use euclid::{
default::{Rect, Transform3D},
rect, vec3, Angle,
}; use plane_split::PlaneCut; use plane_split::{make_grid, BspSplitter, Polygon}; use std::f64::consts::FRAC_PI_4;
fn sort_trivial(splitter: &mut BspSplitter<usize>) { let anchors: Vec<_> = (0usize..10).collect(); let rect: Rect<f64> = rect(-10.0, -10.0, 20.0, 20.0); let polys: Vec<_> = anchors
.iter()
.map(|&anchor| { let transform: Transform3D<f64> = Transform3D::translation(0.0, 0.0, anchor as f64); let poly = Polygon::from_transformed_rect(rect, transform, anchor);
assert!(poly.is_some(), "Cannot construct transformed polygons");
poly.unwrap()
})
.collect();
let result = splitter.solve(&polys, vec3(0.0, 0.0, -1.0)); let anchors1: Vec<_> = result.iter().map(|p| p.anchor).collect(); letmut anchors2 = anchors1.clone();
anchors2.sort_by_key(|&a| -(a as i32)); //make sure Z is sorted backwards
assert_eq!(anchors1, anchors2);
}
fn sort_external(splitter: &mut BspSplitter<usize>) { let rect0: Rect<f64> = rect(-10.0, -10.0, 20.0, 20.0); let poly0 = Polygon::from_rect(rect0, 0); let poly1 = { let transform0: Transform3D<f64> =
Transform3D::rotation(1.0, 0.0, 0.0, Angle::radians(2.0 * FRAC_PI_4)); let transform1: Transform3D<f64> = Transform3D::translation(0.0, 100.0, 0.0);
Polygon::from_transformed_rect(rect0, transform0.then(&transform1), 1).unwrap()
};
let result = splitter.solve(&[poly0, poly1], vec3(1.0, 1.0, 0.0).normalize()); let anchors: Vec<_> = result.iter().map(|p| p.anchor).collect(); // make sure the second polygon is split in half around the plane of the first one, // even if geometrically their polygons don't intersect.
assert_eq!(anchors, vec![1, 0, 1]);
}
#[test] fn test_cut() { use smallvec::SmallVec; let rect: Rect<f64> = rect(-10.0, -10.0, 20.0, 20.0); let poly = Polygon::from_rect(rect, 0); letmut poly2 = Polygon::from_rect(rect, 0); // test robustness for positions for p in &mut poly2.points {
p.z += 0.00000001;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.