/*!
\defgroup psp_namedparameters Named Parameters for Point Set Processing
\ingroup PkgPointSetProcessing3Ref

In this package, all functions optional parameters are implemented as BGL optional named parameters (see \ref BGLNamedParameters for more information on how to use them).

Since the parameters of the various point set processing functions defined in this
package are redundant, their long descriptions are centralized below. 

In the following, we assume that the following types are provided as template parameters of point set processing functions and classes. Note that, for some of these functions, the type is more specific.

<ul>
<li>`PointRange` is a model of `Range`. The value type of its iterator is the key type of the related property maps (see below).</li>
<li>`GeomTraits` a geometric traits class in which constructions are performed and predicates evaluated. Everywhere in this package, a \cgal `Kernel` fulfills the requirements.</li>
</ul>

`CGAL::parameters::all_default()` can be used to indicate
that default values of optional named parameters must be used.

Here is the list of the named parameters available in this package:


\cgalNPTableBegin
\cgalNPBegin{geom_traits} \anchor PSP_geom_traits
 the geometric traits instance in which the point set processing operation should be performed.\n
\b Type: a Geometric traits class.\n
\b Default \b type: is
\code
typename CGAL::Kernel_traits<point_map::value_type>::Kernel
\endcode
\cgalNPEnd

\cgalNPBegin{point_map} \anchor PSP_point_map
 is the property map containing the points associated to the elements of the point range `points`.\n
\b Type: a class model of `ReadablePropertyMap` with
`PointRange::iterator::value_type` as key type and
`geom_traits::Point_3` as value type. \n
<b>Default value</b>: \code CGAL::Identity_property_map<geom_traits::Point_3>\endcode
\cgalNPEnd

\cgalNPBegin{normal_map} \anchor PSP_normal_map
 is the property map containing the normal vectors associated to the elements of the point range `points`.\n
\b Type: a class model of `ReadablePropertyMap` with
`PointRange::iterator::value_type` as key type and
`geom_traits::Vector_3` as value type. \n
No default value.
\cgalNPEnd

\cgalNPBegin{diagonalize_traits} \anchor PSP_diagonalize_traits
 is the solver used for diagonalizing covariance matrices.\n
\b Type: a class model of `DiagonalizeTraits`.\n
\b Default: `CGAL::Eigen_diagonalize_traits` if \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined.\n
\cgalNPEnd

\cgalNPBegin{svd_traits} \anchor PSP_svd_traits
 is the linear algebra algorithm required by the jet fitting method. For more information, please refer to the documentation of `CGAL::Monge_via_jet_fitting`.\n
\b Type: a class fitting the requirements of `CGAL::Monge_via_jet_fitting`.\n
\b Default: if \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined, then `CGAL::Eigen_svd` is used.\n
\cgalNPEnd

\cgalNPBegin{callback} \anchor PSP_callback
is a mechanism to get feedback on the advancement of the algorithm while it's running and to interrupt it if needed. It is called regularly when the algorithm is running: the current advancement (between 0. and 1.) is passed as parameter. If it returns `true`, then the algorithm continues its execution normally; if it returns `false`, the algorithm is stopped.\n
The callback will be copied and therefore needs to be lightweight.\n
Note that when a callback is run on a parallelized algorithm with `CGAL::Parallel_tag`, it is called asynchronously on a separate thread and shouldn't access or modify the variables that are parameters of the algorithm.\n
\b Type: `CGAL::cpp11::function<bool(double)>`.\n
\b Default: empty function.\n
\cgalNPEnd

\cgalNPBegin{query_point_map} \anchor PSP_query_point_map
 is the property map containing the points associated to the elements of the point range `queries`.\n
\b Type: a class model of `ReadablePropertyMap` with
`PointRange::iterator::value_type` as key type and
`geom_traits::Point_3` as value type. \n
<b>Default value</b>: \code CGAL::Identity_property_map<geom_traits::Point_3>\endcode
\cgalNPEnd


\cgalNPBegin{sharpness_angle} \anchor PSP_sharpness_angle
 controls the sharpness of the result. The larger the value is, the smoother the result will be.
The range of possible value is [0, 90].\n
\b Type: floating scalar value\n
<b>Default value</b>: `30.`
\cgalNPEnd

\cgalNPBegin{edge_sensitivity} \anchor PSP_edge_sensitivity
controls the priority of points inserted along sharp features. Larger
values of edge-sensitivity give higher priority to inserting points
along sharp features. The range of possible values is `[0, 1]`.  \n
\b Type: floating scalar value\n
<b>Default value</b>: `1`.
\cgalNPEnd

\cgalNPBegin{neighbor_radius} \anchor PSP_neighbor_radius
is the spherical neighborhood radius.\n
\b Type: floating scalar value\n
<b>Default value</b>: `-1`, in which case the functions that use it will compute an adapted value automatically.
\cgalNPEnd

\cgalNPBegin{number_of_output_points} \anchor PSP_number_of_output_points
is the number of output points to generate.\n
\b Type: \c unsigned \c int \n
<b>Default value</b>: `1000`
\cgalNPEnd

\cgalNPBegin{size} \anchor PSP_size
maximum cluster size for hierarchical clustering. Must be strictly greather than 0.\n
\b Type: \c unsigned \c int \n
<b>Default value</b>: `10`
\cgalNPEnd

\cgalNPBegin{maximum_variation} \anchor PSP_maximum_variation
maximum cluster size for hierarchical clustering. Must be strictly greather than 0.\n
\b Type: \c unsigned \c int \n
<b>Default value</b>: `10`
\cgalNPEnd

\cgalNPBegin{degree_fitting} \anchor PSP_degree_fitting
 is the degree of fitting (see `CGAL::Monge_via_jet_fitting`).\n
\b Type: \c unsigned \c int \n
<b>Default value</b>: `2`
\cgalNPEnd

\cgalNPBegin{degree_monge} \anchor PSP_degree_monge
 is the Monge degree (see `CGAL::Monge_via_jet_fitting`).\n
\b Type: \c unsigned \c int \n
<b>Default value</b>: `2`
\cgalNPEnd

\cgalNPBegin{threshold_distance} \anchor PSP_threshold_distance
is the minimum distance for a point to be considered as outlier
(distance here is the square root of the average squared distance to K nearest neighbors).\n
\b Type: floating scalar value\n
<b>Default value</b>: `0`
\cgalNPEnd

\cgalNPBegin{threshold_percent} \anchor PSP_threshold_percent
 is the maximum percentage (between 0 and 100) of points to remove in `remove_outliers()`.\n
\b Type: floating scalar value\n
<b>Default value</b>: `10`
\cgalNPEnd

\cgalNPBegin{attraction_factor} \anchor PSP_attraction_factor
multiple of a tolerance `epsilon` used to connect simplices.
\b Type: floating scalar value\n
<b>Default value</b>: `3`
\cgalNPEnd

\cgalNPBegin{plane_map} \anchor PSP_plane_map
 is the property map containing the planes associated to the elements of the plane range `planes`.\n
\b Type: a class model of `ReadablePropertyMap` with
`PlaneRange::iterator::value_type` as key type and
`geom_traits::Plane_3` as value type. \n
<b>Default value</b>: \code CGAL::Identity_property_map<geom_traits::Plane_3>\endcode
\cgalNPEnd

\cgalNPBegin{plane_index_map} \anchor PSP_plane_index_map
is the property map that associates the index of a point in the input range to the index of plane (-1 if
point is not assigned to a plane).\n
\b Type: a class model of `ReadablePropertyMap` with
`std::size_t` as key type and
`int` as value type. \n
No default value.
\cgalNPEnd

\cgalNPBegin{select_percentage} \anchor PSP_select_percentage
percentage of points to retain (between 0 and 100) in `wlop_simplify_and_regularize_point_set()`.\n
\b Type: floating scalar value\n
<b>Default value</b>: 5.
\cgalNPEnd


\cgalNPBegin{number_of_iterations} \anchor PSP_number_of_iterations
number of iterations to solve the optimsation problem in `wlop_simplify_and_regularize_point_set()`.\n
\b Type: \c unsigned \c int \n
<b>Default value</b>: 35.
\cgalNPEnd

\cgalNPBegin{require_uniform_sampling} \anchor PSP_require_uniform_sampling
turn on or off an optional preprocessing of `wlop_simplify_and_regularize_point_set()`, which will
give better result if the distribution of the input points is highly non-uniform.\n
\b Type: `bool`\n
<b>Default value</b>: `false`
\cgalNPEnd

\cgalNPBegin{point_is_constrained_map} \anchor PSP_point_is_constrained_map
is the property map containing information about points being constrained or not.
Constrained points are left unaltered and are used as seeds in `mst_orient_normals()`.\n
\b Type: a class model of `ReadablePropertyMap` with
`PointRange::iterator::value_type` as key type and
`bool` as value type. \n
<b>Default value</b>: a property map with only the highest point constrained.
\cgalNPEnd

\cgalNPTableEnd

*/
