/// \defgroup PkgPolygonMeshProcessingRef Polygon Mesh Processing Reference
/// \defgroup PkgPolygonMeshProcessingConcepts Concepts
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup keep_connected_components_grp Connected Components
///
/// Two faces are in the same <em>connected component</em> if there is a path 
/// of adjacent faces such that all edges between two consecutive faces of the 
/// path are not marked as constrained.
///
/// \ingroup PkgPolygonMeshProcessingRef


/// \defgroup hole_filling_grp Hole Filling
/// Functions to fill holes given as a range of halfedges or as range of points.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_meshing_grp Meshing
/// Functions to triangulate faces, and to refine and fair regions of a polygon mesh.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_normal_grp Normal Computation
/// Functions to compute unit normals for individual/all vertices or faces.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup measure_grp Geometric Measure Functions
/// Functions to compute lengths of edges and borders, areas of faces and patches, as well as volumes of closed meshes.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_orientation_grp Orientation Functions
///  Functions to compute or change the orientation of faces and surfaces.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_intersection_grp Intersection Functions
/// Functions to test if there are self intersections, and to report faces that do intersect.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_repairing_grp Combinatorial Repairing
/// Functions to repair polygon soups and polygon meshes.
/// \ingroup PkgPolygonMeshProcessingRef


/// \defgroup PMP_distance_grp Distance Functions
/// Functions to compute the distance between meshes, between a mesh and a point set and between a point set and a mesh.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_corefinement_grp Corefinement and Boolean Operations
/// Functions to corefine triangulated surface meshes and compute triangulated
/// surface meshes of the union, difference and intersection
/// of the bounded volumes.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_detect_features_grp Feature Detection Functions
/// Functions to detect sharp edges and surface patches of polygon meshes.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_predicates_grp Intersection Detection Functions
/// Functions to detect intersections.
/// Note that those functions will be exact as long as the underlying do-intersect predicates used are exact.
/// In practice, it means that the 3D point type used must come from a \cgal kernel with exact predicates.
/// \ingroup PkgPolygonMeshProcessingRef
/*!
\addtogroup PkgPolygonMeshProcessingRef
 
\cgalPkgDescriptionBegin{Polygon Mesh Processing, PkgPolygonMeshProcessing}
\cgalPkgPicture{hole_filling_ico.png}
 
\cgalPkgSummaryBegin
\cgalPkgAuthor{Sébastien Loriot, Jane Tournois, Ilker %O. Yaz}
\cgalPkgDesc{This package provides
a collection of methods and classes for polygon mesh processing,
ranging from basic operations on simplices, to complex geometry processing algorithms.}
\cgalPkgManuals{Chapter_PolygonMeshProcessing,PkgPolygonMeshProcessingRef}
\cgalPkgSummaryEnd
 
\cgalPkgShortInfoBegin
\cgalPkgSince{4.7}
\cgalPkgDependsOn{documented for each function; \ref PkgSolverInterface}
\cgalPkgBib{cgal:lty-pmp}
\cgalPkgLicense{\ref licensesGPL "GPL"}
\cgalPkgDemo{Polyhedron demo,polyhedron_3.zip}
\cgalPkgShortInfoEnd
 
\cgalPkgDescriptionEnd


\cgalClassifedRefPages

\cgalCRPSection{Parameters}

Optional parameters of the functions of this package
are implemented as \ref BGLNamedParameters.
The page \ref pmp_namedparameters "Named Parameters" describes their usage
and provides a list of the parameters that are used in this package.

\cgalCRPSection{Meshing Functions}
- `CGAL::Polygon_mesh_processing::fair()`
- `CGAL::Polygon_mesh_processing::refine()`
- `CGAL::Polygon_mesh_processing::triangulate_face()`
- `CGAL::Polygon_mesh_processing::triangulate_faces()`
- \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::isotropic_remeshing()` \endlink
- \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::split_long_edges()` \endlink
- `CGAL::Polygon_mesh_processing::random_perturbation()`
- `CGAL::Polygon_mesh_processing::extrude_mesh()`

\cgalCRPSection{Hole Filling Functions}
- `CGAL::Polygon_mesh_processing::triangulate_hole()`
- `CGAL::Polygon_mesh_processing::triangulate_and_refine_hole()`
- `CGAL::Polygon_mesh_processing::triangulate_refine_and_fair_hole()`
- `CGAL::Polygon_mesh_processing::triangulate_hole_polyline()`

\cgalCRPSection{Predicate Functions}
- `CGAL::Polygon_mesh_processing::does_self_intersect()`
- `CGAL::Polygon_mesh_processing::self_intersections()`
- \link PMP_predicates_grp `CGAL::Polygon_mesh_processing::do_intersect()` \endlink
- `CGAL::Polygon_mesh_processing::intersecting_meshes()`
- `CGAL::Polygon_mesh_processing::is_degenerate_edge()`
- `CGAL::Polygon_mesh_processing::degenerate_edges()`
- `CGAL::Polygon_mesh_processing::is_degenerate_triangle_face()`
- `CGAL::Polygon_mesh_processing::degenerate_faces()`
- `CGAL::Polygon_mesh_processing::is_needle_triangle_face()`
- `CGAL::Polygon_mesh_processing::is_cap_triangle_face()`

\cgalCRPSection{Orientation Functions}
- `CGAL::Polygon_mesh_processing::orient_polygon_soup()`
- `CGAL::Polygon_mesh_processing::orient()`
- `CGAL::Polygon_mesh_processing::orient_to_bound_a_volume()`
- `CGAL::Polygon_mesh_processing::is_outward_oriented()`
- `CGAL::Polygon_mesh_processing::reverse_face_orientations()`

\cgalCRPSection{Combinatorial Repairing Functions}
- `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()`
- `CGAL::Polygon_mesh_processing::merge_duplicate_polygons_in_polygon_soup()`
- `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`
- `CGAL::Polygon_mesh_processing::repair_polygon_soup()`
- `CGAL::Polygon_mesh_processing::stitch_borders()`
- `CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh()`
- `CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh()`
- `CGAL::Polygon_mesh_processing::remove_isolated_vertices()`
- `CGAL::Polygon_mesh_processing::is_non_manifold_vertex()`
- `CGAL::Polygon_mesh_processing::duplicate_non_manifold_vertices()`
- `CGAL::Polygon_mesh_processing::merge_duplicated_vertices_in_boundary_cycle()`
- `CGAL::Polygon_mesh_processing::merge_duplicated_vertices_in_boundary_cycles()`

\cgalCRPSection{Normal Computation Functions}
- `CGAL::Polygon_mesh_processing::compute_face_normal()`
- `CGAL::Polygon_mesh_processing::compute_face_normals()`
- `CGAL::Polygon_mesh_processing::compute_vertex_normal()`
- `CGAL::Polygon_mesh_processing::compute_vertex_normals()`
- `CGAL::Polygon_mesh_processing::compute_normals()`

\cgalCRPSection{Connected Components}
- `CGAL::Polygon_mesh_processing::connected_component()`
- `CGAL::Polygon_mesh_processing::connected_components()`
- `CGAL::Polygon_mesh_processing::keep_large_connected_components()`
- `CGAL::Polygon_mesh_processing::keep_largest_connected_components()`
- \link keep_connected_components_grp `CGAL::Polygon_mesh_processing::keep_connected_components()` \endlink
- \link keep_connected_components_grp `CGAL::Polygon_mesh_processing::remove_connected_components()` \endlink

\cgalCRPSection{Corefinement and Boolean Operation Functions}
- `CGAL::Polygon_mesh_processing::corefine_and_compute_union()`
- `CGAL::Polygon_mesh_processing::corefine_and_compute_difference()`
- `CGAL::Polygon_mesh_processing::corefine_and_compute_intersection()`
- `CGAL::Polygon_mesh_processing::corefine_and_compute_boolean_operations()`
- `CGAL::Polygon_mesh_processing::corefine()`
- `CGAL::Polygon_mesh_processing::surface_intersection()`
- `CGAL::Polygon_mesh_processing::clip()`
- `CGAL::Polygon_mesh_processing::does_bound_a_volume()`

\cgalCRPSection{Geometric Measure Functions}
- \link measure_grp `CGAL::Polygon_mesh_processing::face_area()` \endlink
- \link measure_grp `CGAL::Polygon_mesh_processing::area()` \endlink
- \link measure_grp `CGAL::Polygon_mesh_processing::volume()` \endlink
- \link measure_grp `CGAL::Polygon_mesh_processing::edge_length()` \endlink
- \link measure_grp `CGAL::Polygon_mesh_processing::face_border_length()` \endlink

\cgalCRPSection{Distance Functions}
- `CGAL::Polygon_mesh_processing::approximate_Hausdorff_distance()`
- `CGAL::Polygon_mesh_processing::approximate_symmetric_Hausdorff_distance()`
- `CGAL::Polygon_mesh_processing::approximate_max_distance_to_point_set()`
- `CGAL::Polygon_mesh_processing::max_distance_to_triangle_mesh()`
- `CGAL::Polygon_mesh_processing::sample_triangle_mesh()`

\cgalCRPSection{Feature Detection Functions}
- `CGAL::Polygon_mesh_processing::sharp_edges_segmentation()`
- `CGAL::Polygon_mesh_processing::detect_sharp_edges()`
- `CGAL::Polygon_mesh_processing::detect_vertex_incident_patches()`

\cgalCRPSection{Collision Detection}
- `CGAL::Rigid_triangle_mesh_collision_detection`

\cgalCRPSection{Miscellaneous}
- `CGAL::Polygon_mesh_slicer`
- `CGAL::Side_of_triangle_mesh`
- `CGAL::Polygon_mesh_processing::bbox()`
- `CGAL::Polygon_mesh_processing::vertex_bbox()`
- `CGAL::Polygon_mesh_processing::edge_bbox()`
- `CGAL::Polygon_mesh_processing::face_bbox()`
- `CGAL::Polygon_mesh_processing::border_halfedges()`
- `CGAL::Polygon_mesh_processing::extract_boundary_cycles()`
- `CGAL::Polygon_mesh_processing::transform()`

*/
