use lib3mf_core::model::{Mesh, MeshRepair, RepairOptions};
fn main() {
println!("--- Geometry Repair Example ---");
let mut mesh = Mesh::new();
mesh.add_vertex(0.0, 0.0, 0.0);
mesh.add_vertex(1.0, 0.0, 0.0);
mesh.add_vertex(0.0, 1.0, 0.0);
mesh.add_triangle(0, 1, 2);
mesh.add_vertex(1.00001, 0.0, 0.0); mesh.add_vertex(0.0, 1.00001, 0.0); mesh.add_vertex(1.0, 1.0, 0.0);
mesh.add_triangle(3, 5, 4);
mesh.add_vertex(2.0, 0.0, 0.0);
mesh.add_triangle(0, 1, 6);
println!("Original Stats:");
println!(" Vertices: {}", mesh.vertices.len());
println!(" Triangles: {}", mesh.triangles.len());
println!("\nRepairing...");
let options = RepairOptions {
stitch_epsilon: 0.0001, remove_degenerate: true,
remove_duplicate_faces: true,
harmonize_orientations: true,
remove_islands: false,
fill_holes: false,
};
let stats = mesh.repair(options);
println!("Repair Report:");
println!(" Vertices Removed: {}", stats.vertices_removed);
println!(" Triangles Removed: {}", stats.triangles_removed);
println!(" Triangles Flipped: {}", stats.triangles_flipped);
println!(" Triangles Added: {}", stats.triangles_added);
println!("\nFinal Stats:");
println!(" Vertices: {}", mesh.vertices.len());
println!(" Triangles: {}", mesh.triangles.len());
if mesh.vertices.len() == 4 && mesh.triangles.len() == 2 {
println!("\nSUCCESS: Mesh repaired correctly.");
} else {
println!("\nFAILURE: Unexpected repair results.");
}
}