use brep_ransac::{
recognize_surfaces_with_unresolved, synthetic, RecognitionOptions, SamplingMode, SurfaceType,
};
use std::time::Instant;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let segments: usize = std::env::args().nth(1).as_deref().unwrap_or("24").parse()?;
let options = RecognitionOptions {
distance_tolerance: 0.15,
normal_tolerance: 0.35,
sampling: SamplingMode::TriangleCentroids,
..Default::default()
};
println!("truth,recognized,triangles,support,rms,max,unresolved,time_seconds");
for kind in [
SurfaceType::Plane,
SurfaceType::Sphere,
SurfaceType::Cylinder,
SurfaceType::Cone,
SurfaceType::Torus,
] {
let (_, mesh) = synthetic::canonical(kind, segments);
let start = Instant::now();
let result = recognize_surfaces_with_unresolved(&mesh, &options)?;
let elapsed = start.elapsed().as_secs_f64();
if let Some(region) = result.regions.first() {
println!(
"{},{},{},{},{:.17},{:.17},{},{:.9}",
kind.name(),
region.surface.surface_type().name(),
mesh.triangles.len(),
region.metrics.support_triangles,
region.metrics.rms_error,
region.metrics.max_error,
result.unresolved_triangles.len(),
elapsed
);
} else {
println!(
"{},none,{},0,nan,nan,{},{}",
kind.name(),
mesh.triangles.len(),
result.unresolved_triangles.len(),
elapsed
);
}
}
Ok(())
}