Test triangulate_polygons()

This commit is contained in:
Mael Rouxel-Labbé 2023-03-28 15:16:52 +02:00
parent 7b375129fb
commit 6a0a0267bf
1 changed files with 58 additions and 10 deletions

View File

@ -1,13 +1,14 @@
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/Polygon_mesh_processing/triangulate_faces.h>
#include <CGAL/boost/graph/copy_face_graph.h>
#include <CGAL/boost/graph/Dual.h>
#include <CGAL/boost/graph/named_params_helper.h>
#include <CGAL/centroid.h>
#include <CGAL/Polygon_mesh_processing/triangulate_faces.h>
#include <CGAL/Polygon_mesh_processing/polygon_mesh_to_polygon_soup.h>
#include <boost/graph/filtered_graph.hpp>
@ -117,21 +118,17 @@ test_triangulate_face()
return false;
}
unsigned int nb = 0;
for(typename boost::graph_traits<Surface_mesh>::face_descriptor fit : faces(mesh))
{
if (nb > 4)
break;
else if (next(next(halfedge(fit, mesh), mesh), mesh)
!= prev(halfedge(fit, mesh), mesh))
if (next(next(halfedge(fit, mesh), mesh), mesh) != prev(halfedge(fit, mesh), mesh))
{
if(CGAL::Polygon_mesh_processing::triangulate_face(fit, mesh))
++nb;
else
if(!CGAL::Polygon_mesh_processing::triangulate_face(fit, mesh))
assert(false);
}
}
assert(CGAL::is_triangle_mesh(mesh));
return true;
}
@ -156,6 +153,9 @@ test_triangulate_triangle_face()
if(!CGAL::Polygon_mesh_processing::triangulate_face(fit, mesh, CGAL::parameters::geom_traits(K())))
assert(false);
}
assert(CGAL::is_triangle_mesh(mesh));
return true;
}
@ -238,9 +238,54 @@ test_dual_with_various_faces()
if(!CGAL::Polygon_mesh_processing::triangulate_face(fit, sm_dual))
assert(false);
}
assert(CGAL::is_triangle_mesh(sm_dual));
return true;
}
template <typename K>
bool
test_triangulate_soup()
{
typedef typename K::Point_3 Point;
typedef CGAL::Surface_mesh<Point> Surface_mesh;
Surface_mesh mesh;
std::ifstream input(CGAL::data_file_path("meshes/elephant.off"));
if (!input || !(input >> mesh) || mesh.is_empty())
{
std::cerr << "Not a valid off file." << std::endl;
return false;
}
typedef typename boost::property_map<Surface_mesh, boost::vertex_point_t>::type Pmap;
Pmap vpmap = get_property_map(boost::vertex_point, mesh);
CGAL::Dual<Surface_mesh> dual(mesh);
// copy dual to a sm
Surface_mesh sm_dual;
CGAL::copy_face_graph(dual, sm_dual,
CGAL::parameters::vertex_point_map(
Dual_vpm<Surface_mesh, Point, Pmap>(mesh, vpmap)));
std::vector<Point> points;
std::vector<std::vector<std::size_t> > polygons;
CGAL::Polygon_mesh_processing::polygon_mesh_to_polygon_soup(sm_dual, points, polygons);
bool success = CGAL::Polygon_mesh_processing::triangulate_polygons(points, polygons);
for(std::size_t i = 0; i < polygons.size(); ++i)
{
assert(polygons[i].size() == 3);
}
// For compilation
success = CGAL::Polygon_mesh_processing::triangulate_polygons(points, polygons, CGAL::parameters::geom_traits(K()));
return success;
}
int main()
{
assert(test_triangulate_faces<Epic>());
@ -249,6 +294,7 @@ int main()
assert(test_triangulate_face<Epic>());
assert(test_triangulate_triangle_face<Epic>());
assert(test_dual_with_various_faces<Epic>());
assert(test_triangulate_soup<Epic>());
assert(test_triangulate_faces<Epec>());
assert(test_triangulate_faces_with_named_parameters<Epec>());
@ -256,6 +302,8 @@ int main()
assert(test_triangulate_face<Epec>());
assert(test_triangulate_triangle_face<Epec>());
assert(test_dual_with_various_faces<Epec>());
assert(test_triangulate_soup<Epec>());
std::cout << "Done" << std::endl;
return EXIT_SUCCESS;
}