CGAL 4.6.1 - Surface Reconstruction from Point Sets
|
#include <CGAL/Poisson_reconstruction_function.h>
Implementation of the Poisson Surface Reconstruction method.
Given a set of 3D points with oriented normals sampled on the boundary of a 3D solid, the Poisson Surface Reconstruction method [2] solves for an approximate indicator function of the inferred solid, whose gradient best matches the input normals. The output scalar function, represented in an adaptive octree, is then iso-contoured using an adaptive marching cubes.
Poisson_reconstruction_function
implements a variant of this algorithm which solves for a piecewise linear function on a 3D Delaunay triangulation instead of an adaptive octree.
Gt | Geometric traits class. |
Types | |
typedef Gt | Geom_traits |
Geometric traits class. | |
typedef Triangulation::Cell_handle | Cell_handle |
typedef Geom_traits::FT | FT |
number type. | |
typedef Geom_traits::Point_3 | Point |
point type. | |
typedef Geom_traits::Vector_3 | Vector |
vector type. | |
typedef Geom_traits::Sphere_3 | Sphere |
Creation | |
template<typename InputIterator , typename PointPMap , typename NormalPMap > | |
Poisson_reconstruction_function (InputIterator first, InputIterator beyond, PointPMap point_pmap, NormalPMap normal_pmap) | |
Creates a Poisson implicit function from the range of points [first, beyond) . More... | |
Operations | |
Sphere | bounding_sphere () const |
Returns a sphere bounding the inferred surface. | |
template<class SparseLinearAlgebraTraits_d > | |
bool | compute_implicit_function (SparseLinearAlgebraTraits_d solver, bool smoother_hole_filling=false) |
This function must be called after the insertion of oriented points. More... | |
FT | operator() (const Point &p) const |
ImplicitFunction interface: evaluates the implicit function at a given 3D query point. More... | |
Point | get_inner_point () const |
Returns a point located inside the inferred surface. | |
CGAL::Poisson_reconstruction_function< Gt >::Poisson_reconstruction_function | ( | InputIterator | first, |
InputIterator | beyond, | ||
PointPMap | point_pmap, | ||
NormalPMap | normal_pmap | ||
) |
Creates a Poisson implicit function from the range of points [first, beyond)
.
InputIterator | iterator over input points. |
PointPMap | is a model of ReadablePropertyMap with a value_type = Point . It can be omitted if InputIterator value_type is convertible to Point . |
NormalPMap | is a model of ReadablePropertyMap with a value_type = Vector . |
first | iterator over the first input point. |
beyond | past-the-end iterator over the input points. |
point_pmap | property map: value_type of InputIterator -> Point (the position of an input point). |
normal_pmap | property map: value_type of InputIterator -> Vector (the oriented normal of an input point). |
bool CGAL::Poisson_reconstruction_function< Gt >::compute_implicit_function | ( | SparseLinearAlgebraTraits_d | solver, |
bool | smoother_hole_filling = false |
||
) |
This function must be called after the insertion of oriented points.
It computes the piecewise linear scalar function operator() by: applying Delaunay refinement, solving for operator() at each vertex of the triangulation with a sparse linear solver, and shifting and orienting operator() such that it is 0 at all input points and negative inside the inferred surface.
SparseLinearAlgebraTraits_d | Symmetric definite positive sparse linear solver. If Eigen 3.1 (or greater) is available and CGAL_EIGEN3_ENABLED is defined, an overload with Eigen_solver_traits<Eigen::ConjugateGradient<Eigen_sparse_symmetric_matrix<double>::EigenType> > as default solver is provided. |
solver | sparse linear solver. |
smoother_hole_filling | controls if the Delaunay refinement is done for the input points, or for an approximation of the surface obtained from a first pass of the algorithm on a sample of the points. |
false
if the linear solver fails. FT CGAL::Poisson_reconstruction_function< Gt >::operator() | ( | const Point & | p) | const |
ImplicitFunction
interface: evaluates the implicit function at a given 3D query point.
The function compute_implicit_function()
must be called before the first call to operator()
.