From e50dcb76bf45639e8a27f78d98b5053c284bb9d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 6 Feb 2023 19:25:10 +0100 Subject: [PATCH] doc improvements --- .../Shape_detection/PackageDescription.txt | 54 ++++++++++++++++--- .../doc/Shape_detection/Shape_detection.txt | 11 ++-- .../Point_set/K_neighbor_query.h | 4 +- .../Least_squares_circle_fit_region.h | 6 +-- .../Least_squares_circle_fit_sorting.h | 4 +- .../Least_squares_cylinder_fit_region.h | 4 +- .../Least_squares_cylinder_fit_sorting.h | 4 +- .../Point_set/Least_squares_line_fit_region.h | 4 +- .../Least_squares_line_fit_sorting.h | 4 +- .../Least_squares_plane_fit_region.h | 4 +- .../Least_squares_plane_fit_sorting.h | 4 +- .../Least_squares_sphere_fit_region.h | 4 +- .../Least_squares_sphere_fit_sorting.h | 4 +- .../Point_set/Sphere_neighbor_query.h | 4 +- 14 files changed, 78 insertions(+), 37 deletions(-) diff --git a/Shape_detection/doc/Shape_detection/PackageDescription.txt b/Shape_detection/doc/Shape_detection/PackageDescription.txt index e1f39927836..202431b01b9 100644 --- a/Shape_detection/doc/Shape_detection/PackageDescription.txt +++ b/Shape_detection/doc/Shape_detection/PackageDescription.txt @@ -14,6 +14,9 @@ Concepts used for the parameters of the `CGAL::Shape_detection::Region_growing`. \defgroup PkgShapeDetectionRGOnPoints Point Set \ingroup PkgShapeDetectionRG +\defgroup PkgShapeDetectionRGOnPointSet3 Convenience Aliases and Functions for Point_Set_3 +\ingroup PkgShapeDetectionRG + Models that can be used with the `CGAL::Shape_detection::Region_growing` for shape detection in a point set. @@ -78,7 +81,7 @@ and the Region Growing approach for detecting shapes in a set of arbitrary items \cgalClassifedRefPages -## Efficient RANSAC ## +## (I) Efficient RANSAC ## ### Concepts ### - `EfficientRANSACTraits` @@ -101,7 +104,7 @@ and the Region Growing approach for detecting shapes in a set of arbitrary items - `CGAL::Shape_detection::Plane_map` - `CGAL::Shape_detection::Point_to_shape_index_map` -## Region Growing ## +## (II) Region Growing ## ### Concepts ### - `NeighborQuery` @@ -111,21 +114,58 @@ and the Region Growing approach for detecting shapes in a set of arbitrary items - `CGAL::Shape_detection::Region_growing<%NeighborQuery, %RegionType>` ### Point Set ### +#### Neighbord Query Classes #### - `CGAL::Shape_detection::Point_set::K_neighbor_query` - `CGAL::Shape_detection::Point_set::Sphere_neighbor_query` +#### Sorting and Fitting Classes #### - `CGAL::Shape_detection::Point_set::Least_squares_line_fit_region` -- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_region` -- `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_region` -- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_region` -- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_region` - - `CGAL::Shape_detection::Point_set::Least_squares_line_fit_sorting` + +- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_region` - `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_sorting` + +- `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_region` - `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_sorting` + +- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_region` - `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_sorting` + +- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_region` - `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_sorting` +#### Convenience Aliases and Functions for `CGAL::Point_set_3` #### + +- `CGAL::Shape_detection::Point_set::K_neighbor_query_for_point_set` +- `CGAL::Shape_detection::Point_set::make_k_neighbor_query()` +- `CGAL::Shape_detection::Point_set::Sphere_neighbor_query_for_point_set` +- `CGAL::Shape_detection::Point_set::make_sphere_neighbor_query()` + +- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_region_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_circle_fit_region()` +- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_sorting_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_circle_fit_sorting()` + +- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_region_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_cylinder_fit_region()` +- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_sorting_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_cylinder_fit_sorting()` + +- `CGAL::Shape_detection::Point_set::Least_squares_line_fit_region_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_line_fit_region()` +- `CGAL::Shape_detection::Point_set::Least_squares_line_fit_sorting_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_line_fit_sorting()` + +- `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_region_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_plane_fit_region()` +- `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_sorting_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_plane_fit_sorting()` + +- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_region_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_sphere_fit_region()` +- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_sorting_for_point_set` +- `CGAL::Shape_detection::Point_set::make_least_squares_sphere_fit_sorting()` + ### Segment Set ### - `CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region` - `CGAL::Shape_detection::Segment_set::Least_squares_line_fit_sorting` diff --git a/Shape_detection/doc/Shape_detection/Shape_detection.txt b/Shape_detection/doc/Shape_detection/Shape_detection.txt index 382ac23e4c2..80396a76be1 100644 --- a/Shape_detection/doc/Shape_detection/Shape_detection.txt +++ b/Shape_detection/doc/Shape_detection/Shape_detection.txt @@ -229,7 +229,7 @@ The running time increases significantly as many more candidates are generated d This shape detection component is based on the region growing algorithm applied to a set of user-specified items. Shapes are detected by growing regions from seed items, where each region is created as follows: --# Pick the next available seed item; +-# Pick the next available item; -# Find its neighbors in the data set; -# Include those neighbors, which satisfy the region requirements; -# Repeat the procedure for all included neighbors; @@ -244,10 +244,11 @@ Together with the generic algorithm's implementation `CGAL::Shape_detection::Reg Other instances can be easily added by the user, as explained below. - \subsection Shape_detection_RegionGrowingFramework Framework -A `CGAL::Shape_detection::Region_growing` algorithm is defined by several classes that are models of the following concepts: +The class `CGAL::Shape_detection::Region_growing` provides an implementation of the region growing algorithm. This algorithm can detect geometric primitives among a set of input geometric objects. Each such geometric object is identified using an item. The item is, in general but not necessarily, a lightweight class that uniquely identify a geometric object like an iterator over a container of geometric object, an integer pointing to the cell of a vector, a `face_descriptor` representing a face in a model of `FaceGraph`,... The geometric object is retrieved using a property map with the item as key type and the geometric object as value type. The class `CGAL::Shape_detection::Region_growing` is constructed by providing an input range with each element being converted to an item thanks to another property map passed to the constructor. For most cases default are fine and conveniences alias and functions are provided for the `CGAL::Point_set_3` class (see \ref PkgShapeDetectionRGOnPointSet3). + +The algorithm provided by `CGAL::Shape_detection::Region_growing` works using two classes that are respectively models of the following concepts: - `NeighborQuery`: responsible for providing the neighbors of an item; - `RegionType`: responsible for the definition of a region from a list of items as well as for validating the addition of an item to an already defined region; @@ -271,7 +272,7 @@ The `Region_type` class defines the necessary types and functions: - `Region_type::Primitive` This type represents the parameters of the primitive, e.g., in case of a sphere it could be a struct containing a `Point_3` for the center and a floating point number for the radius. - `Region_type::Item` - a `const_iterator` of `std::vector` -- `Region_type::Region_index_map` - an unordered map from `Region_type::Item` to `std::size_t` encapsulated in a `boost::associative_property_map`. +- `Region_type::Region_index_map` - an unordered map from `Region_type::Item` to `std::size_t` encapsuled in a `boost::associative_property_map`. - `Region_type::Primitive` - a `std::size_t` - `Region_type::is_part_of_region()` - `true` if the first and second objects are neighbors, - `Region_type::is_valid_region()` - always `true` after the first call to the function `update()`, @@ -409,7 +410,7 @@ A point set with normals is stored in `std::vector`. \paragraph Shape_detection_RegionGrowingPoints_example_2D_circles Detecting 2D Circles -The following example shows a similar example, this time detecting circles instead of lines. In that case, we also preprocess points so that they are sorted according to their likelihood of belonging to a circle: +The following example shows a similar example, this time detecting circles instead of lines. In that case, we also preprocess points so that they are sorted according to their likelyhood of belonging to a circle: \cgalExample{Shape_detection/region_growing_circles_on_point_set_2.cpp} diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/K_neighbor_query.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/K_neighbor_query.h index 668dbceea2b..11f4dfbac68 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/K_neighbor_query.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/K_neighbor_query.h @@ -214,7 +214,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_k_neighbor_query()`. */ @@ -225,7 +225,7 @@ namespace Point_set { typename PointSet3::Point_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_region.h index 9da28152879..b17e56dc85d 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_region.h @@ -380,9 +380,9 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. - To be used together with `make_least_squares_sphere_fit_sorting_for_point_set()`. + To be used together with `make_least_squares_sphere_fit_sorting()`. */ template using Least_squares_circle_fit_region_for_point_set = @@ -392,7 +392,7 @@ namespace Point_set { typename PointSet3::Vector_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_sorting.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_sorting.h index 7f10a12ec03..974619b7e98 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_sorting.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_circle_fit_sorting.h @@ -211,7 +211,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_circle_fit_sorting()`. */ @@ -223,7 +223,7 @@ namespace Point_set { typename PointSet3::Point_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_region.h index 79cd8ec8c37..06d02229631 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_region.h @@ -387,7 +387,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_cylinder_fit_region()`. */ @@ -399,7 +399,7 @@ namespace Point_set { typename PointSet3::Vector_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_sorting.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_sorting.h index 21f7cb08b5c..59ff5433d90 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_sorting.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_cylinder_fit_sorting.h @@ -220,7 +220,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_cylinder_fit_sorting()`. */ @@ -233,7 +233,7 @@ namespace Point_set { typename PointSet3::Vector_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_region.h index 060761b8737..dcbd54c09c3 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_region.h @@ -362,7 +362,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_line_fit_region()`. */ @@ -374,7 +374,7 @@ namespace Point_set { typename PointSet3::Vector_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_sorting.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_sorting.h index d551f778cce..77ac1b55d31 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_sorting.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_line_fit_sorting.h @@ -199,7 +199,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_line_fit_sorting()`. */ @@ -211,7 +211,7 @@ namespace Point_set { typename PointSet3::Point_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_region.h index 1de58745ae0..92278eb99b7 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_region.h @@ -363,7 +363,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_plane_fit_region()`. */ @@ -375,7 +375,7 @@ using Least_squares_plane_fit_region_for_point_set = typename PointSet3::Vector_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_sorting.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_sorting.h index 0971f8def2f..ae7727d028e 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_sorting.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_plane_fit_sorting.h @@ -200,7 +200,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_plane_fit_sorting()`. */ @@ -212,7 +212,7 @@ using Least_squares_plane_fit_sorting_for_point_set = typename PointSet3::Point_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_region.h index af7bc2eb368..d2e9196275e 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_region.h @@ -369,7 +369,7 @@ namespace Point_set { /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_sphere_fit_region()`. */ @@ -381,7 +381,7 @@ using Least_squares_sphere_fit_region_for_point_set = typename PointSet3::Vector_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_sorting.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_sorting.h index 503e76ccc38..9b9afbaea55 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_sorting.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Least_squares_sphere_fit_sorting.h @@ -210,7 +210,7 @@ namespace Point_set { }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_least_squares_sphere_fit_sorting()`. */ @@ -222,7 +222,7 @@ using Least_squares_sphere_fit_sorting_for_point_set = typename PointSet3::Point_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Sphere_neighbor_query.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Sphere_neighbor_query.h index d4c9fa36af6..6a8dbe0362c 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Sphere_neighbor_query.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Point_set/Sphere_neighbor_query.h @@ -212,7 +212,7 @@ private: }; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 shortcut to ease the definition of the class when using `CGAL::Point_set_3`. To be used together with `make_sphere_neighbor_query()`. */ @@ -223,7 +223,7 @@ using Sphere_neighbor_query_for_point_set = typename PointSet3::Point_map>; /*! - \ingroup PkgShapeDetectionRGOnPoints + \ingroup PkgShapeDetectionRGOnPointSet3 returns a instance of the sorting class to be used with `CGAL::Point_set_3`, with point and normal maps added to `np`. */ template