benchmark on new Poisson_mesh_domain_3 (also with parallel make_mesh_3) work on documentation

This commit is contained in:
Sven Oesau 2025-03-18 16:18:17 +01:00
parent 5f196bf3d0
commit 21f3456968
7 changed files with 254 additions and 88 deletions

View File

@ -13,7 +13,7 @@ This \cgal component implements a surface reconstruction method which
takes as input point sets with oriented normals and computes an takes as input point sets with oriented normals and computes an
implicit function. We assume that the input points contain no outliers implicit function. We assume that the input points contain no outliers
and little noise. The output surface mesh is generated by extracting and little noise. The output surface mesh is generated by extracting
an isosurface of this function with the \cgal Surface Mesh Generator an isosurface of this function with the \ref Chapter_3D_Mesh_Generation or \cgal Surface Mesh Generator
\cgalCite{cgal:ry-gsddrm-06} or potentially with any other surface \cgalCite{cgal:ry-gsddrm-06} or potentially with any other surface
contouring algorithm. contouring algorithm.
@ -120,10 +120,12 @@ The following example reads a point set, creates a Poisson implicit function and
The computed implicit functions can be iso-contoured to reconstruct a The computed implicit functions can be iso-contoured to reconstruct a
surface by using the \cgal surface mesh generator surface by using the \ref Chapter_3D_Mesh_Generation or the \cgal surface mesh generator
\cgalCite{cgal:ry-gsddrm-06} \cgalCite{cgal:bo-pgsms-05} : \cgalCite{cgal:ry-gsddrm-06} \cgalCite{cgal:bo-pgsms-05} :
`make_surface_mesh()` `make_mesh_3()` for using parallel Mesh_3
`make_surface_mesh()` of using the deprecated 3D Surface Mesh Generation
The parameter `Tag` affects the behavior of `make_surface_mesh()`: The parameter `Tag` affects the behavior of `make_surface_mesh()`:
- `Manifold_tag`: the output mesh is guaranteed to be a manifold surface without boundary. - `Manifold_tag`: the output mesh is guaranteed to be a manifold surface without boundary.
@ -132,7 +134,10 @@ The parameter `Tag` affects the behavior of `make_surface_mesh()`:
\subsection Poisson_surface_reconstruction_3Output Output \subsection Poisson_surface_reconstruction_3Output Output
The surface reconstructed by `make_surface_mesh()` is required to be a The surface reconstructed by `make_mesh_3()` is required to be a model of the concept
`MeshComplex_3InTriangulation_3`, a data structure devised to represent a three dimensional complex embedded into a three dimensional triangulation. The surface facets can then be extracted into a face graph by `facets_in_complex_3_to_triangle_mesh()`.
The surface reconstructed by `make_surface_mesh()` instead is required to be a
model of the concept `SurfaceMeshComplex_2InTriangulation_3`, a data model of the concept `SurfaceMeshComplex_2InTriangulation_3`, a data
structure devised to represent a two dimensional complex embedded into structure devised to represent a two dimensional complex embedded into
a three dimensional triangulation. a three dimensional triangulation.
@ -339,15 +344,15 @@ Left: 5K points sampled on a mechanical piece with sharp features (creases, dart
We provide some performance numbers for scanning data. We measure the Poisson implicit function computation time, We provide some performance numbers for scanning data. We measure the Poisson implicit function computation time,
the contouring time for a range of approximation distances, the memory occupancy as well as the influence of the contouring time for a range of approximation distances, the memory occupancy as well as the influence of
the point set simplification. The machine used is a PC running Windows 7 64 bits with an Intel CPU Core 2 Duo the point set simplification. The machine used is a PC running Windows 10 64 bits with an Intel CPU Core i7-11850H
processor clocked at 2.81 GHz and with 8 GB of RAM. The software is compiled with Visual \CC 2010 (VC9) compiler processor with 8 cores and 32 GB of RAM. The software is compiled with Visual \CC 2022 compiler
with the 03 option which maximizes speed. All measurements were done using the \ref thirdpartyEigen "Eigen" library. with the 03 option which maximizes speed. All measurements were done using the \ref thirdpartyEigen "Eigen" library.
\subsection SurfReconstPerfPIF Poisson Implicit Function \subsection SurfReconstPerfPIF Poisson Implicit Function
The point set chosen for benchmarking the Poisson implicit function is the Bimba con Nastrino point set The point set chosen for benchmarking the Poisson implicit function is the Lucy statue point set from the
(1.6 million points) depicted by \cgalFigureRef{Poisson_surface_reconstruction_3-fig-contouring_bench}. <a href="https://graphics.stanford.edu/data/3Dscanrep/">The Stanford 3D Scanning Repository</a>
(originally 14 million points, here downscaled to 2.9 million points) depicted by \cgalFigureRef{Poisson_surface_reconstruction_3-fig-contouring_bench}.
We measure the Poisson implicit function computation (i.e., the call to We measure the Poisson implicit function computation (i.e., the call to
`Poisson_reconstruction_function::compute_implicit_function()` denoted by Poisson solve hereafter) `Poisson_reconstruction_function::compute_implicit_function()` denoted by Poisson solve hereafter)
for this point set as well as for simplified versions obtained through random simplification. for this point set as well as for simplified versions obtained through random simplification.
@ -357,115 +362,213 @@ The following table provides Poisson solve computation times in seconds for an i
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
Number of points (x1000) Number of points (x1000)
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
Poisson solve duration (in s) Poisson solve duration (in s)
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
30
<TD class="math" ALIGN=CENTER NOWRAP>
3.3
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
60 60
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
15 7.7
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
100
<TD class="math" ALIGN=CENTER NOWRAP>
25
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
250 120
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
96 18.1
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
500 237.5
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
150 35.1
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1,000 375
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
249 64
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1,800 750
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
478 129
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
1,500
<TD class="math" ALIGN=CENTER NOWRAP>
303
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
2,900
<TD class="math" ALIGN=CENTER NOWRAP>
486
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
</TABLE> </TABLE>
\subsection SurfReconstPerfCont Contouring \subsection SurfReconstPerfCont Contouring
The point set chosen for benchmarking the contouring stage is the Bimba con Nastrino point The point set chosen for benchmarking the contouring stage is the Lucy point
set simplified to 100k points. We measure the contouring (i.e.\ the call to `make_surface_mesh()`) set simplified to 2.9M points. We measure the contouring (i.e.\ the calls to `make_mesh_3()` and `facets_in_complex_3_to_triangle_mesh()`)
duration and the reconstruction error for a range of approximation distances. duration and the reconstruction error for a range of approximation distances.
The reconstruction error is expressed as the average distance from input points to the reconstructed surface The reconstruction error is expressed as the average distance from input points to the reconstructed surface in mm (the Lucy statue is 1597 mm tall).
in mm (the Bimba con Nastrino statue is 324 mm tall).
<TABLE CELLSPACING=5 > <TABLE CELLSPACING=5 >
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=3><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=4><HR>
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
Approx. distance (*average spacing) Approx. distance (*average spacing)
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
Contouring duration (in s) Contouring duration single-thread (in s)
<TD class="math" ALIGN=CENTER NOWRAP>
Contouring duration parallel (in s)
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
Reconstruction error (mm) Reconstruction error (mm)
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=3><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=4><HR>
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
0.05
<TD class="math" ALIGN=CENTER NOWRAP>
582
<TD class="math" ALIGN=CENTER NOWRAP>
112
<TD class="math" ALIGN=CENTER NOWRAP>
0.114
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.1 0.1
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
19.2 221
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.055 26
<TD class="math" ALIGN=CENTER NOWRAP>
0.119
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP>
0.15
<TD class="math" ALIGN=CENTER NOWRAP>
104
<TD class="math" ALIGN=CENTER NOWRAP>
25
<TD class="math" ALIGN=CENTER NOWRAP>
0.129
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
0.2
<TD class="math" ALIGN=CENTER NOWRAP>
69.4
<TD class="math" ALIGN=CENTER NOWRAP>
9.2
<TD class="math" ALIGN=CENTER NOWRAP>
0.14
<TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.25 0.25
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
6.9 53.6
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.106 7.0
<TD class="math" ALIGN=CENTER NOWRAP>
0.151
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.5 0.5
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
3.2 25.2
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.18 3.6
<TD class="math" ALIGN=CENTER NOWRAP>
0.209
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP>
0.75
<TD class="math" ALIGN=CENTER NOWRAP>
16.4
<TD class="math" ALIGN=CENTER NOWRAP>
4.9
<TD class="math" ALIGN=CENTER NOWRAP>
0.209
<TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1 1
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1.65 12.4
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.36 2.3
<TD class="math" ALIGN=CENTER NOWRAP>
0.33
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP>
1.5
<TD class="math" ALIGN=CENTER NOWRAP>
8.2
<TD class="math" ALIGN=CENTER NOWRAP>
1.4
<TD class="math" ALIGN=CENTER NOWRAP>
0.455
<TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
2 2
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
6.1
<TD class="math" ALIGN=CENTER NOWRAP>
1.1
<TD class="math" ALIGN=CENTER NOWRAP>
0.59
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
3
<TD class="math" ALIGN=CENTER NOWRAP>
4.0
<TD class="math" ALIGN=CENTER NOWRAP>
0.8 0.8
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.76 0.87
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=3><HR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP>
5
<TD class="math" ALIGN=CENTER NOWRAP>
2.3
<TD class="math" ALIGN=CENTER NOWRAP>
0.7
<TD class="math" ALIGN=CENTER NOWRAP>
1.50
<TR>
<TD ALIGN=LEFT NOWRAP COLSPAN=3><HR>
</TABLE> </TABLE>
\cgalFigureAnchor{Poisson_surface_reconstruction_3-fig-contouring_bench}
\cgalFigureBegin{Poisson_surface_reconstruction_3-fig-contouring_bench,contouring_bench.jpg} <center>
<img src="contouring_bench_4.jpg" style="max-width:80%;"/>
</center>
\cgalFigureCaptionBegin{Poisson_surface_reconstruction_3-fig-contouring_bench}
Contouring duration (in s) and reconstruction error (mm) Contouring duration (in s) and reconstruction error (mm)
against several approximation distance parameters against several approximation distance parameters
for the Bimba con Nastrino point set simplified to 100k points. for the Lucy point set simplified to 100k points.
\cgalFigureEnd \cgalFigureCaptionEnd
\subsection SurfReconstPerfMem Memory \subsection SurfReconstPerfMem Memory
We measure the memory occupancy for the reconstruction of the full Bimba con Nastrino point We measure the memory occupancy for the reconstruction of the Lucy point
set (1.8 millions points) as well as for simplified versions.\n set (2.9 millions points) as well as for further simplified versions.\n
The Poisson implicit function computation has a memory peak when solving the Poisson linear The Poisson implicit function computation has a memory peak when solving the Poisson linear
system using the sparse linear solver. system using the sparse linear solver.
@ -479,34 +582,44 @@ Memory occupancy (MBytes)
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
30
<TD class="math" ALIGN=CENTER NOWRAP>
128
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
60 60
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
180 226
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
100 120
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
270 431
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
250 237.5
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
790 813
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
500 375
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1300 1,232
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1,000 750
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
2200 2,283
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1,800 1,500
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
3800 4,042
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
2,900
<TD class="math" ALIGN=CENTER NOWRAP>
6,868
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
</TABLE> </TABLE>
@ -514,11 +627,11 @@ Memory occupancy (MBytes)
\subsection SurfReconstPerfPSS Point Set Simplification \subsection SurfReconstPerfPSS Point Set Simplification
Due to the memory limitations described above, we recommend to simplify the point sets captured by laser scanners.\n Due to the memory limitations described above, we recommend to simplify the point sets captured by laser scanners.\n
We measure the reconstruction error for the Bimba con Nastrino point set (1.6M points) as well as for We measure the reconstruction error for the Lucy point set (2.9M points) as well as for
simplified versions. All reconstructions use the recommended contouring parameter simplified versions. All reconstructions use the recommended contouring parameter
`approximation distance = 0.25 * the input point` set's average spacing. `approximation distance = 0.25 * the input point` set's average spacing.
The reconstruction error is expressed as the average distance from input points to the reconstructed surface in mm The reconstruction error is expressed as the average distance from input points to the reconstructed surface in mm
(the Bimba con Nastrino statue is 324 mm tall). (the Lucy statue is 1597 mm tall).
<TABLE CELLSPACING=5 > <TABLE CELLSPACING=5 >
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
@ -530,46 +643,66 @@ Reconstruction error (mm)
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
3.75
<TD class="math" ALIGN=CENTER NOWRAP>
9.88395
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
7.5
<TD class="math" ALIGN=CENTER NOWRAP>
5.81843
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
15
<TD class="math" ALIGN=CENTER NOWRAP>
3.13479
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
30
<TD class="math" ALIGN=CENTER NOWRAP>
2.25391
<TR>
<TD class="math" ALIGN=CENTER NOWRAP>
60 60
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.27 1.42965
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
120 120
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.15 1.17589
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
250 237.5
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.11 0.99509
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
500 375
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.079 0.75215
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1,000 750
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.066 0.344654
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1,500 1,500
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.061 0.225341
<TR> <TR>
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
1,600 2,900
<TD class="math" ALIGN=CENTER NOWRAP> <TD class="math" ALIGN=CENTER NOWRAP>
0.06 0.150947
<TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR> <TR><TD ALIGN=LEFT NOWRAP COLSPAN=2><HR>
</TABLE> </TABLE>
\cgalFigureBegin{Poisson_surface_reconstruction_3-fig-simplification_bench,simplification_bench.jpg} \cgalFigureBegin{Poisson_surface_reconstruction_3-fig-simplification_bench,simplification_bench_2.jpg}
Reconstruction error (mm) against number of points Reconstruction error (mm) against number of points
for the Bimba con Nastrino point set with 1.6M points for the Lucy point set with 2.9M points
as well as for simplified versions. as well as for simplified versions.
\cgalFigureEnd \cgalFigureEnd

View File

@ -1,8 +1,11 @@
Manual Manual
Kernel_23 Kernel_23
BGL
STL_Extension STL_Extension
Mesh_3
Algebraic_foundations Algebraic_foundations
Circulator Circulator
Stream_support Stream_support
Point_set_processing_3 Point_set_processing_3
Solver_interface Solver_interface
SMDS_3

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -18,7 +18,7 @@
#ifndef CGAL_POISSON_MESH_DOMAIN_3_H #ifndef CGAL_POISSON_MESH_DOMAIN_3_H
#define CGAL_POISSON_MESH_DOMAIN_3_H #define CGAL_POISSON_MESH_DOMAIN_3_H
#include <CGAL/license/Mesh_3.h> #include <CGAL/license/Poisson_surface_reconstruction_3.h>
#include <CGAL/Labeled_mesh_domain_3.h> #include <CGAL/Labeled_mesh_domain_3.h>
#include <CGAL/Poisson_reconstruction_function.h> #include <CGAL/Poisson_reconstruction_function.h>
@ -26,13 +26,13 @@
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup PkgMesh3Domains \ingroup PkgPoissonSurfaceReconstruction3Ref
\brief The class `Poisson_mesh_domain_3` derives from `Labeled_mesh_domain_3` for the handling of `Poisson_reconstruction_function`. \brief The class `Poisson_mesh_domain_3` derives from `Labeled_mesh_domain_3` for the handling of `Poisson_reconstruction_function`.
This class has a constructor taking a labeling function. It has also a static template member This class has a constructor taking a labeling function. It has also a static template member
function that acts as named constructor: function that acts as named constructor:
<ul><li>`create_Poisson_mesh_domain()`, to create a domain from a `Poisson_reconstruction_function`</ ul> <ul><li>`create_Poisson_mesh_domain()`</li>, to create a domain from a `Poisson_reconstruction_function`</ul>
\tparam BGT is a geometric traits class that provides \tparam BGT is a geometric traits class that provides
the basic operations to implement intersection tests and intersection computations through a bisection the basic operations to implement intersection tests and intersection computations through a bisection
@ -117,9 +117,10 @@ public:
/// @{ /// @{
/*! \brief Construction from a function, a bounding object and a relative error bound. /*! \brief Construction from a function, a bounding object and a relative error bound.
* *
* \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters"
* \tparam Bounding_object either a bounding sphere (of type `Sphere_3`), a bounding box (type `Bbox_3`), * \tparam Bounding_object either a bounding sphere (of type `Sphere_3`), a bounding box (type `Bbox_3`),
* or a bounding `Iso_cuboid_3` * or a bounding `Iso_cuboid_3`
* \tparam NamedParameters
* a sequence of \ref bgl_namedparameters "Named Parameters"
* *
* \param function the Poisson reconstruction function * \param function the Poisson reconstruction function
* \param bounding_object the bounding object bounding the meshable space. * \param bounding_object the bounding object bounding the meshable space.
@ -136,14 +137,41 @@ public:
*/ */
template<typename Bounding_object, typename CGAL_NP_TEMPLATE_PARAMETERS> template<typename Bounding_object, typename CGAL_NP_TEMPLATE_PARAMETERS>
Poisson_mesh_domain_3(const Function& function, Poisson_mesh_domain_3(const Function& function,
const Bounding_object& bounding_object, const Bounding_object& bounding_object,
const CGAL_NP_CLASS& np = parameters::default_values() const CGAL_NP_CLASS& np = parameters::default_values()
#ifndef DOXYGEN_RUNNING #ifndef DOXYGEN_RUNNING
, typename std::enable_if<!is_named_function_parameter<Function>>::type* = nullptr , typename std::enable_if<!is_named_function_parameter<Function>>::type* = nullptr
#endif // DOXYGEN_RUNNING #endif // DOXYGEN_RUNNING
) )
: Base(make_implicit_to_labeling_function_wrapper<BGT>(function), bounding_object, np), : Base(make_implicit_to_labeling_function_wrapper<BGT>(function), bounding_object, np),
poisson_function(function) poisson_function(function)
{}
/*! \brief Construction from a function, a bounding object and a relative error bound.
*
* \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters"
*
* \param function the Poisson reconstruction function
* \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below:
*
* \cgalNamedParamsBegin
* \cgalParamNBegin{relative_error_bound}
* \cgalParamDescription{the relative error bound used to compute intersection points between the implicit surface and query segments.
* The bisection is stopped when the length of the intersected segment is less than the product
* of `relative_error_bound` by the diameter of the bounding object.}
* \cgalParamDefault{FT(1e-3)}
* \cgalParamNEnd
* \cgalNamedParamsEnd
*/
template<typename CGAL_NP_TEMPLATE_PARAMETERS>
Poisson_mesh_domain_3(const Function & function,
const CGAL_NP_CLASS& np = parameters::default_values()
#ifndef DOXYGEN_RUNNING
, typename std::enable_if<!is_named_function_parameter<Function>>::type * = nullptr
#endif // DOXYGEN_RUNNING
)
: Base(make_implicit_to_labeling_function_wrapper<BGT>(function), function.bounding_sphere(), np),
poisson_function(function)
{} {}
///@} ///@}
@ -185,7 +213,7 @@ public:
* or a bounding `Iso_cuboid_3` * or a bounding `Iso_cuboid_3`
* *
* \param function the Poisson reconstruction function * \param function the Poisson reconstruction function
* \param bounding_object object boundint the meshable domain and its center is inside the domain. * \param bounding_object object bounding the meshable domain and its center is inside the domain.
* \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below: * \param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below:
* *
* \cgalNamedParamsBegin * \cgalNamedParamsBegin

View File

@ -460,7 +460,7 @@ public:
// Add a pass of Delaunay refinement. // Add a pass of Delaunay refinement.
// //
// In that pass, the sizing field, of the refinement process of the // In that pass, the sizing field, of the refinement process of the
// triangulation, is based on the result of a poisson function with a // triangulation, is based on the result of a Poisson function with a
// sample of the input points. The ratio is 'approximation_ratio'. // sample of the input points. The ratio is 'approximation_ratio'.
// //
// For optimization reasons, the cell criteria of the refinement // For optimization reasons, the cell criteria of the refinement

View File

@ -5,6 +5,8 @@ project(Poisson_surface_reconstruction_3_Tests)
# Find CGAL # Find CGAL
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(TBB REQUIRED)
include(CGAL_TBB_support)
# VisualC++ optimization for applications dealing with large data # VisualC++ optimization for applications dealing with large data
if(MSVC) if(MSVC)
@ -23,13 +25,13 @@ include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen 3.1 # Executables that require Eigen 3.1
create_single_source_cgal_program("poisson_reconstruction_test_surface_mesher.cpp") create_single_source_cgal_program("poisson_reconstruction_test_surface_mesher.cpp")
target_link_libraries(poisson_reconstruction_test_surface_mesher PRIVATE CGAL::Eigen3_support) target_link_libraries(poisson_reconstruction_test_surface_mesher PRIVATE CGAL::Eigen3_support CGAL::TBB_support)
create_single_source_cgal_program("poisson_reconstruction_test_mesh_3.cpp") create_single_source_cgal_program("poisson_reconstruction_test_mesh_3.cpp")
target_link_libraries(poisson_reconstruction_test_mesh_3 PRIVATE CGAL::Eigen3_support) target_link_libraries(poisson_reconstruction_test_mesh_3 PRIVATE CGAL::Eigen3_support CGAL::TBB_support)
create_single_source_cgal_program("compare_mesh_3_vs_Poisson_implicit_surface_3.cpp") create_single_source_cgal_program("compare_mesh_3_vs_Poisson_implicit_surface_3.cpp")
target_link_libraries(compare_mesh_3_vs_Poisson_implicit_surface_3 PRIVATE CGAL::Eigen3_support) target_link_libraries(compare_mesh_3_vs_Poisson_implicit_surface_3 PRIVATE CGAL::Eigen3_support CGAL::TBB_support)
else() else()
message("NOTICE: Tests in this directory require Eigen 3.1 (or greater), and will not be compiled.") message("NOTICE: Tests in this directory require Eigen 3.1 (or greater), and will not be compiled.")