mirror of https://github.com/CGAL/cgal
Change tolerance as it becomes pretty slow
This commit is contained in:
parent
f31b7fe4e1
commit
a308ff89bb
|
|
@ -1,5 +1,6 @@
|
|||
#include <CGAL/Simple_cartesian.h>
|
||||
#include <CGAL/Surface_mesh.h>
|
||||
#include <CGAL/Timer.h>
|
||||
|
||||
// Simplification function
|
||||
#include <CGAL/Surface_mesh_simplification/edge_collapse.h>
|
||||
|
|
@ -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<Surface> stop(10);
|
||||
SMS::Count_stop_predicate<Surface> 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<Kernel> 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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue