/// \defgroup PkgPolygonMeshProcessingRef Reference Manual
/// \defgroup PkgPolygonMeshProcessingConcepts Concepts
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_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 PMP_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_corrected_curvatures_grp Corrected Curvature Computation
/// Functions to compute the corrected curvatures 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 PMP_measure_grp Geometric Measure Functions
/// Functions to compute discrete curvatures, lengths of edges and borders, areas of faces and patches, 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_combinatorial_repair_grp Combinatorial Repair
/// Functions to repair polygon soups and polygon meshes.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_geometric_repair_grp Geometric Repair
/// 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_locate_grp Location Functions
/// Functions to locate points on a mesh, and manipulate such locations.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_predicates_grp Predicates
/// Classes and functions that answer queries about a polygon mesh or its elements.
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMP_IO_grp I/O Functions
/// \ingroup PkgPolygonMeshProcessingRef

/// \defgroup PMPDeprecated Deprecated Functions
/// \ingroup PkgPolygonMeshProcessingRef

/*!
\addtogroup PkgPolygonMeshProcessingRef

\cgalPkgDescriptionBegin{Polygon Mesh Processing, PkgPolygonMeshProcessing}
\cgalPkgPicture{hole_filling_ico.png}

\cgalPkgSummaryBegin
\cgalPkgAuthors{David Coeurjolly, Jaques-Olivier Lachaud,  Konstantinos Katrioplas, Sébastien Loriot, Ivan Pađen, Mael Rouxel-Labbé, Hossam Saeed, Jane Tournois, Sébastien Valette, and 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 such as
Boolean operations, remeshing, repairing, collision and intersection detection, and more.}
\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{CGAL Lab,CGALlab.zip}
\cgalPkgShortInfoEnd

\cgalPkgDescriptionEnd


\cgalClassifedRefPages

\cgalCRPSection{Parameters}

Optional parameters of the functions of this package are implemented as \ref BGLNamedParameters.
The page \ref bgl_namedparameters "Named Parameters" describes their usage.

\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::split()`
- `CGAL::Polygon_mesh_processing::autorefine_triangle_soup()`
- `CGAL::Polygon_mesh_processing::autorefine()`

\cgalCRPSection{Meshing Functions}
- `CGAL::Polygon_mesh_processing::remesh_planar_patches()`
- `CGAL::Polygon_mesh_processing::remesh_almost_planar_patches()`
- `CGAL::Polygon_mesh_processing::refine()`
- `CGAL::Polygon_mesh_processing::fair()`
- `CGAL::Polygon_mesh_processing::triangulate_face()`
- `CGAL::Polygon_mesh_processing::triangulate_faces()`
- `CGAL::Polygon_mesh_processing::triangulate_polygons()`
- \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::isotropic_remeshing()` \endlink
- \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::surface_Delaunay_remeshing()` \endlink
- \link PMP_meshing_grp `CGAL::Polygon_mesh_processing::split_long_edges()` \endlink
- `CGAL::Polygon_mesh_processing::approximated_centroidal_Voronoi_diagram_remeshing()`
- `CGAL::Polygon_mesh_processing::extrude_mesh()`
- `CGAL::Polygon_mesh_processing::smooth_mesh()` (deprecated)
- `CGAL::Polygon_mesh_processing::angle_and_area_smoothing()`
- `CGAL::Polygon_mesh_processing::tangential_relaxation()`
- `CGAL::Polygon_mesh_processing::smooth_shape()`
- `CGAL::Polygon_mesh_processing::random_perturbation()`


\cgalCRPSection{Sizing Fields}
- `CGAL::Polygon_mesh_processing::Uniform_sizing_field`
- `CGAL::Polygon_mesh_processing::Adaptive_sizing_field`

\cgalCRPSection{Orientation Functions}
- `CGAL::Polygon_mesh_processing::orient_polygon_soup()`
- `CGAL::Polygon_mesh_processing::orient()`
- `CGAL::Polygon_mesh_processing::does_bound_a_volume()`
- `CGAL::Polygon_mesh_processing::orient_to_bound_a_volume()`
- `CGAL::Polygon_mesh_processing::volume_connected_components()`
- `CGAL::Polygon_mesh_processing::is_outward_oriented()`
- `CGAL::Polygon_mesh_processing::reverse_face_orientations()`
- `CGAL::Polygon_mesh_processing::duplicate_non_manifold_edges_in_polygon_soup()`
- `CGAL::Polygon_mesh_processing::orient_triangle_soup_with_reference_triangle_mesh()`
- `CGAL::Polygon_mesh_processing::orient_triangle_soup_with_reference_triangle_soup()`
- `CGAL::Polygon_mesh_processing::merge_reversible_connected_components()`
- `CGAL::Polygon_mesh_processing::compatible_orientations()`

\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{Intersection Functions}
- `CGAL::Polygon_mesh_processing::does_self_intersect()`
- `CGAL::Polygon_mesh_processing::self_intersections()`
- `CGAL::Polygon_mesh_processing::does_triangle_soup_self_intersect()`
- `CGAL::Polygon_mesh_processing::triangle_soup_self_intersections()`
- \link PMP_intersection_grp `CGAL::Polygon_mesh_processing::do_intersect()` \endlink
- `CGAL::Polygon_mesh_processing::intersecting_meshes()`

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

\cgalCRPSection{Predicate Functions}
- `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()`
- `CGAL::Polyhedral_envelope`
- `CGAL::Side_of_triangle_mesh`

\cgalCRPSection{Combinatorial Repair 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_boundary_cycle()`
- `CGAL::Polygon_mesh_processing::stitch_boundary_cycles()`
- `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::polygon_mesh_to_polygon_soup()`
- `CGAL::Polygon_mesh_processing::remove_isolated_vertices()`
- `CGAL::Polygon_mesh_processing::is_non_manifold_vertex()`
- `CGAL::Polygon_mesh_processing::non_manifold_vertices()`
- `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{Geometric Repair Functions}
- `CGAL::Polygon_mesh_processing::remove_almost_degenerate_faces()`

\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()`
- `CGAL::Polygon_mesh_processing::split_connected_components()`
- \link PMP_keep_connected_components_grp `CGAL::Polygon_mesh_processing::keep_connected_components()` \endlink
- \link PMP_keep_connected_components_grp `CGAL::Polygon_mesh_processing::remove_connected_components()` \endlink
- `CGAL::Polygon_mesh_processing::remove_connected_components_of_negligible_size()`

\cgalCRPSection{Location Functions}
- \link PMP_locate_grp Point Location \endlink
- \link PMP_locate_grp Location Predicates \endlink
- \link PMP_locate_grp Nearest Face Location Queries \endlink
- \link PMP_locate_grp Random Location Generation \endlink

\cgalCRPSection{Corrected Curvatures}
- `CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()`
- `CGAL::Polygon_mesh_processing::Principal_curvatures_and_directions`

\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{Distance Functions}
- `CGAL::Polygon_mesh_processing::bounded_error_Hausdorff_distance()`
- `CGAL::Polygon_mesh_processing::bounded_error_symmetric_Hausdorff_distance()`
- `CGAL::Polygon_mesh_processing::is_Hausdorff_distance_larger()`
- `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_soup()`
- `CGAL::Polygon_mesh_processing::sample_triangle_mesh()`

\cgalCRPSection{Geometric Measure Functions}
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::angle_sum()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::discrete_Gaussian_curvatures()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::discrete_Gaussian_curvature()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::discrete_mean_curvature()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::discrete_mean_curvatures()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::edge_length()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::squared_edge_length()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::face_area()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::squared_face_area()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::area()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::volume()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::face_border_length()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::longest_border()` \endlink
- \link PMP_measure_grp `CGAL::Polygon_mesh_processing::centroid()` \endlink

\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()`
- `CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces()`
- `CGAL::Polygon_mesh_processing::detect_corners_of_regions()`


\cgalCRPSection{Miscellaneous}
- `CGAL::Polygon_mesh_slicer`
- `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()`
- `CGAL::Polygon_mesh_processing::triangle()`
- `CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces()`
- `CGAL::Polygon_mesh_processing::detect_corners_of_regions()`
- `CGAL::Polygon_mesh_processing::refine_mesh_at_isolevel()`
- `CGAL::Polygon_mesh_processing::refine_with_plane()`

\cgalCRPSection{I/O Functions}
- \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()`\endlink

*/
