\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)

CGAL 4.8 - Planar Parameterization of Triangulated Surface Meshes

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
List of all members | Public Member Functions | Protected Member Functions
CGAL::Barycentric_mapping_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d > Class Template Reference
Surface Parameterization Methods

`#include <CGAL/Barycentric_mapping_parameterizer_3.h>`

## Inherits from

CGAL::Fixed_border_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >.

## Definition

### template<class ParameterizationMesh_3, class BorderParameterizer_3 = Circular_border_arc_length_parameterizer_3<ParameterizationMesh_3>, class SparseLinearAlgebraTraits_d = Eigen_solver_traits<Eigen::BiCGSTAB<Eigen_sparse_matrix<double>::EigenType, Eigen::IncompleteLUT< double > > >>
class CGAL::Barycentric_mapping_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >

The class Barycentric_mapping_parameterizer_3 implements Tutte Barycentric Mapping algorithm

[9]. This algorithm is also called Tutte Uniform Weights by other authors.

One-to-one mapping is guaranteed if the surface's border is mapped to a convex polygon.

This class is used by the main parameterization algorithm Fixed_border_parameterizer_3::parameterize().

- It provides default BorderParameterizer_3 and SparseLinearAlgebraTraits_d template parameters that make sense.
- It implements compute_w_ij() to compute `w_ij = (i,j)` coefficient of matrix A for `j` neighbor vertex of `i` based on Tutte Barycentric Mapping method.
- It implements an optimized version of is_one_to_one_mapping().

Is Model Of:
  `ParameterizerTraits_3`

Template Parameters

  ParameterizationMesh_3 | 3D surface mesh.
  BorderParameterizer_3 | Strategy to parameterize the surface border.
  SparseLinearAlgebraTraits_d | Traits class to solve a sparse linear system. Note: the system is not symmetric because `Fixed_border_parameterizer_3` does not remove (yet) border vertices from the system.

See Also
  `CGAL::Parameterizer_traits_3<ParameterizationMesh_3>`
  `CGAL::Fixed_border_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>`
  `CGAL::Discrete_authalic_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>`
  `CGAL::Discrete_conformal_map_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>`
  `CGAL::LSCM_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3>`
  `CGAL::Mean_value_coordinates_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>`

Examples:
  Surface_mesh_parameterization/polyhedron_ex_parameterization.cpp.

## Public Member Functions
| Barycentric_mapping_parameterizer_3 (Border_param border_param=Border_param(), Sparse_LA sparse_la=Sparse_LA())
| Constructor. More...
Public Member Functions inherited from CGAL::Fixed_border_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >
| Fixed_border_parameterizer_3 (Border_param border_param=Border_param(), Sparse_LA sparse_la=Sparse_LA())
| Constructor. More...
virtual Error_code | parameterize (Adaptor &mesh)
| Compute a one-to-one mapping from a triangular 3D surface mesh to a piece of the 2D space. More...
Public Member Functions inherited from CGAL::Parameterizer_traits_3< ParameterizationMesh_3 >
virtual | ~Parameterizer_traits_3 ()
| Destructor of base class should be virtual.

## Protected Member Functions
virtual NT | compute_w_ij (const Adaptor &, Vertex_const_handle, Vertex_around_vertex_const_circulator)
| Compute w_ij = (i,j) coefficient of matrix A for j neighbor vertex of i. More...
virtual bool | is_one_to_one_mapping (const Adaptor &, const Matrix &, const Vector &, const Vector &)
| Check if 3D -> 2D mapping is one-to-one. More...
Protected Member Functions inherited from CGAL::Fixed_border_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >
virtual Error_code | check_parameterize_preconditions (Adaptor &mesh)
| Check parameterize() preconditions: More...
void | initialize_system_from_mesh_border (Matrix &A, Vector &Bu, Vector &Bv, const Adaptor &mesh)
| Initialize A, Bu and Bv after border parameterization. More...
virtual Error_code | setup_inner_vertex_relations (Matrix &A, Vector &Bu, Vector &Bv, const Adaptor &mesh, Vertex_const_handle vertex)
| Compute the line i of matrix A for i inner vertex: More...
void | set_mesh_uv_from_system (Adaptor &mesh, const Vector &Xu, const Vector &Xv)
| Copy Xu and Xv coordinates into the (u,v) pair of each surface vertex.
virtual Error_code | check_parameterize_postconditions (const Adaptor &mesh, const Matrix &A, const Vector &Bu, const Vector &Bv)
| Check parameterize() postconditions: More...
Border_param & | get_border_parameterizer ()
| Get the object that maps the surface's border onto a 2D space.
Sparse_LA & | get_linear_algebra_traits ()
| Get the sparse linear algebra (traits object to access the linear system).

## Additional Inherited Members
Public Types inherited from CGAL::Fixed_border_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >
typedef BorderParameterizer_3 | Border_param
| Export BorderParameterizer_3 template parameter.
typedef SparseLinearAlgebraTraits_d | Sparse_LA
| Export SparseLinearAlgebraTraits_d template parameter.
Static Public Member Functions inherited from CGAL::Parameterizer_traits_3< ParameterizationMesh_3 >
static const char * | get_error_message (int error_code)
| Get message corresponding to an error code. More...
Protected Types inherited from CGAL::Parameterizer_traits_3< ParameterizationMesh_3 >
typedef Adaptor::NT | NT
typedef Adaptor::Point_2 | Point_2
typedef Adaptor::Point_3 | Point_3
typedef Adaptor::Vector_2 | Vector_2
typedef Adaptor::Vector_3 | Vector_3
typedef Adaptor::Facet | Facet
typedef Adaptor::Facet_handle | Facet_handle
typedef Adaptor::Facet_const_handle | Facet_const_handle
typedef Adaptor::Facet_iterator | Facet_iterator
typedef Adaptor::Facet_const_iterator | Facet_const_iterator
typedef Adaptor::Vertex | Vertex
typedef Adaptor::Vertex_handle | Vertex_handle
typedef Adaptor::Vertex_const_handle | Vertex_const_handle
typedef Adaptor::Vertex_iterator | Vertex_iterator
typedef Adaptor::Vertex_const_iterator | Vertex_const_iterator
typedef Adaptor::Border_vertex_iterator | Border_vertex_iterator
typedef Adaptor::Border_vertex_const_iterator | Border_vertex_const_iterator
typedef Adaptor::Vertex_around_facet_circulator | Vertex_around_facet_circulator
typedef Adaptor::Vertex_around_facet_const_circulator | Vertex_around_facet_const_circulator
typedef Adaptor::Vertex_around_vertex_circulator | Vertex_around_vertex_circulator
typedef Adaptor::Vertex_around_vertex_const_circulator | Vertex_around_vertex_const_circulator

## Constructor & Destructor Documentation

template<class ParameterizationMesh_3 , class BorderParameterizer_3 = Circular_border_arc_length_parameterizer_3<ParameterizationMesh_3>, class SparseLinearAlgebraTraits_d = Eigen_solver_traits<Eigen::BiCGSTAB<Eigen_sparse_matrix<double>::EigenType, Eigen::IncompleteLUT< double > > >>

CGAL::Barycentric_mapping_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >::Barycentric_mapping_parameterizer_3 | ( | Border_param | border_param = `Border_param()`,
|  | Sparse_LA | sparse_la = `Sparse_LA()`
| ) |  |

Constructor.

Parameters

  border_param | object that maps the surface's border to 2D space.
  sparse_la | Traits object to access a sparse linear system.

## Member Function Documentation

template<class ParameterizationMesh_3 , class BorderParameterizer_3 = Circular_border_arc_length_parameterizer_3<ParameterizationMesh_3>, class SparseLinearAlgebraTraits_d = Eigen_solver_traits<Eigen::BiCGSTAB<Eigen_sparse_matrix<double>::EigenType, Eigen::IncompleteLUT< double > > >>

virtual NT CGAL::Barycentric_mapping_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >::compute_w_ij | ( | const Adaptor & | ,
|  | Vertex_const_handle | ,
|  | Vertex_around_vertex_const_circulator |
| ) |  |
| protected virtual

Compute w_ij = (i,j) coefficient of matrix A for j neighbor vertex of i.

Tutte Barycentric Mapping algorithm is the most simple one: w_ij = 1 for j neighbor vertex of i.

Implements CGAL::Fixed_border_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >.

template<class ParameterizationMesh_3 , class BorderParameterizer_3 = Circular_border_arc_length_parameterizer_3<ParameterizationMesh_3>, class SparseLinearAlgebraTraits_d = Eigen_solver_traits<Eigen::BiCGSTAB<Eigen_sparse_matrix<double>::EigenType, Eigen::IncompleteLUT< double > > >>

virtual bool CGAL::Barycentric_mapping_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >::is_one_to_one_mapping | ( | const Adaptor & | ,
|  | const Matrix & | ,
|  | const Vector & | ,
|  | const Vector & |
| ) |  |
| protected virtual

Check if 3D -> 2D mapping is one-to-one.

Theorem: one-to-one mapping is guaranteed if all w_ij coefficients are > 0 (for j vertex neighbor of i) and if the surface border is mapped onto a 2D convex polygon. All w_ij coefficients = 1 (for j vertex neighbor of i), thus mapping is guaranteed if the surface border is mapped onto a 2D convex polygon.

Reimplemented from CGAL::Fixed_border_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >.