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/Simple_cartesian.h>
|
||||||
#include <CGAL/Surface_mesh.h>
|
#include <CGAL/Surface_mesh.h>
|
||||||
|
#include <CGAL/Timer.h>
|
||||||
|
|
||||||
// Simplification function
|
// Simplification function
|
||||||
#include <CGAL/Surface_mesh_simplification/edge_collapse.h>
|
#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");
|
std::ifstream is(argc > 1 ? argv[1] : "data/helmet.off");
|
||||||
is >> ref_mesh;
|
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));
|
CGAL::Iso_cuboid_3<Kernel> bbox(CGAL::Polygon_mesh_processing::bbox(ref_mesh));
|
||||||
|
|
||||||
Point_3 cmin = (bbox.min)();
|
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 mesh_cpy = ref_mesh; // need a copy to keep the AABB tree valid
|
||||||
Surface small_mesh = ref_mesh;
|
Surface small_mesh = ref_mesh;
|
||||||
Surface big_mesh = ref_mesh;
|
Surface big_mesh = ref_mesh;
|
||||||
|
Surface huge_mesh = ref_mesh;
|
||||||
|
|
||||||
|
CGAL::Timer t;
|
||||||
|
t.start();
|
||||||
Placement placement_ref;
|
Placement placement_ref;
|
||||||
SMS::edge_collapse(ref_mesh, stop, CGAL::parameters::get_cost(Cost()).get_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);
|
Filtered_placement placement_small(0.00005*diag, placement_ref);
|
||||||
SMS::edge_collapse(small_mesh, stop, CGAL::parameters::get_cost(Cost()).get_placement(placement_small));
|
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));
|
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 << big_mesh << std::endl;
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
std::cout << "no filtering: " << vertices(ref_mesh).size() << " vertices left" << std::endl;
|
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 << "large filtering distance: " << vertices(big_mesh).size() << " vertices left" << std::endl;
|
||||||
std::cout << "small filtering distance: " << vertices(small_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(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());
|
assert(vertices(ref_mesh).size() < vertices(big_mesh).size());
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue