diff --git a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_FastEnvelope.cpp b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_FastEnvelope.cpp index 53962630458..4499cf6c1a5 100644 --- a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_FastEnvelope.cpp +++ b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_FastEnvelope.cpp @@ -1,5 +1,6 @@ #include #include +#include // Simplification function #include @@ -34,9 +35,9 @@ int main(int argc, char** argv) std::ifstream is(argc > 1 ? argv[1] : "data/helmet.off"); is >> ref_mesh; - SMS::Count_stop_predicate stop(10); + SMS::Count_stop_predicate stop(num_halfedges(ref_mesh)/10); - std::cout << "input has " << num_vertices(ref_mesh) << " vertices." << std::endl; + std::cout << "Input has " << num_vertices(ref_mesh) << " vertices and " << num_edges(ref_mesh) << " edges" << std::endl; CGAL::Iso_cuboid_3 bbox(CGAL::Polygon_mesh_processing::bbox(ref_mesh)); Point_3 cmin = (bbox.min)(); @@ -46,26 +47,47 @@ int main(int argc, char** argv) Surface mesh_cpy = ref_mesh; // need a copy to keep the AABB tree valid Surface small_mesh = ref_mesh; Surface big_mesh = ref_mesh; + Surface huge_mesh = ref_mesh; + CGAL::Timer t; + t.start(); Placement placement_ref; SMS::edge_collapse(ref_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_ref)); + std::cout << "Output has " << vertices(ref_mesh).size() << " vertices and " << edges(ref_mesh).size() << " edges" << std::endl; + std::cout << t.time() << "sec\n"; + t.reset(); + std::cout << "eps = " << 0.00005*diag << std::endl; Filtered_placement placement_small(0.00005*diag, placement_ref); SMS::edge_collapse(small_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_small)); + std::cout << "Output has " << vertices(small_mesh).size() << " vertices and " << edges(small_mesh).size() << " edges" << std::endl; + std::cout << t.time() << "sec\n"; + t.reset(); - Filtered_placement placement_big(0.1, placement_ref); // lazily builds the AABB tree + std::cout << "eps = " << 0.0001*diag << std::endl; + Filtered_placement placement_big(0.0001, placement_ref); SMS::edge_collapse(big_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_big)); + std::cout << "Output has " << vertices(big_mesh).size() << " vertices and " << edges(big_mesh).size() << " edges" << std::endl; + std::cout << t.time() << "sec\n"; - std::ofstream out("out.off"); + std::cout << "eps = " << 0.0002*diag << std::endl; + Filtered_placement placement_huge(0.0002, placement_ref); + SMS::edge_collapse(huge_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_huge)); + std::cout << "Output has " << vertices(huge_mesh).size() << " vertices and " << edges(huge_mesh).size() << " edges" << std::endl; + std::cout << t.time() << "sec\n"; + + std::ofstream out("big.off"); out << big_mesh << std::endl; out.close(); std::cout << "no filtering: " << vertices(ref_mesh).size() << " vertices left" << std::endl; + std::cout << "huge filtering distance: " << vertices(huge_mesh).size() << " vertices left" << std::endl; std::cout << "large filtering distance: " << vertices(big_mesh).size() << " vertices left" << std::endl; std::cout << "small filtering distance: " << vertices(small_mesh).size() << " vertices left" << std::endl; + assert(vertices(ref_mesh).size() < vertices(small_mesh).size()); - assert(vertices(big_mesh).size() < vertices(small_mesh).size()); + assert(vertices(huge_mesh).size() < vertices(small_mesh).size()); assert(vertices(ref_mesh).size() < vertices(big_mesh).size()); return EXIT_SUCCESS;