CGAL 6.2 - Planar Parameterization of Triangulated Surface Meshes

Loading...
Searching...
No Matches
List of all members | Public Types | Public Member Functions | Protected Member Functions
CGAL::Surface_mesh_parameterization::Barycentric_mapping_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ > Class Template Reference
Reference Manual » Surface Parameterization Methods

`#include <CGAL/Surface_mesh_parameterization/Barycentric_mapping_parameterizer_3.h>`

## Inherits from

CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >.

## Definition

template<typename TriangleMesh_, typename BorderParameterizer_ = Default, typename SolverTraits_ = Default>
class CGAL::Surface_mesh_parameterization::Barycentric_mapping_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >

The class `Barycentric_mapping_parameterizer_3` implements Tutte Barycentric Mapping algorithm.

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

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

This class is a strategy called by the main parameterization algorithm `Fixed_border_parameterizer_3::parameterize()` and it:

- provides the template parameters `BorderParameterizer_` and `SolverTraits_`.
- implements compute_w_ij() to compute `w_ij`, the `(i,j)`-coefficient of the matrix `A` for `j` neighbor vertex of `i`, based on Tutte Barycentric Mapping method.

Is model of
  `Parameterizer_3`

Template Parameters

  TriangleMesh_ | must be a model of `FaceGraph`.
  BorderParameterizer_ | is a strategy to parameterize the surface border and must be a model of `Parameterizer_3`. Default: Circular_border_arc_length_parameterizer_3<TriangleMesh_> CGAL::Surface_mesh_parameterization::Circular_border_arc_length_parameterizer_3 This class parameterizes the border of a 3D surface onto a circle, with an arc-length parameterizatio... Definition: Circular_border_parameterizer_3.h:244
  SolverTraits_ | must be a model of `SparseLinearAlgebraTraits_d`. Note that the system is not symmetric because `Fixed_border_parameterizer_3` does not remove border vertices from the system. Default: If Eigen 3.1 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined, then an overload of `Eigen_solver_traits` is provided as default parameter: CGAL::Eigen_solver_traits< Eigen::BiCGSTAB<Eigen_sparse_matrix<double>::EigenType, Eigen::IncompleteLUT< double > > > CGAL::Eigen_solver_traits

See also
  `CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3<TriangleMesh, BorderParameterizer, SolverTraits>`

## Public Types
typedef Border_parameterizer_ | Border_parameterizer
| Border parameterizer type.
typedef SolverTraits_ | Solver_traits
| Solver traits type.
typedef TriangleMesh_ | Triangle_mesh
| Triangle mesh type.
typedef boost::graph_traits< Triangle_mesh >::vertex_descriptor | vertex_descriptor
| Mesh vertex type.
typedef boost::graph_traits< Triangle_mesh >::halfedge_descriptor | halfedge_descriptor
| Mesh halfedge type.
Public Types inherited from CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >
typedef Border_parameterizer_ | Border_parameterizer
| Border parameterizer type.
typedef SolverTraits_ | Solver_traits
| Solver traits type.
typedef TriangleMesh_ | Triangle_mesh
| Triangle mesh type.
typedef boost::graph_traits< Triangle_mesh >::vertex_descriptor | vertex_descriptor
| Mesh vertex type.
typedef boost::graph_traits< Triangle_mesh >::halfedge_descriptor | halfedge_descriptor
| Mesh halfedge type.
typedef Solver_traits::Vector | Vector
| Solver vector type.
typedef Solver_traits::Matrix | Matrix
| Solver matrix type.

## Public Member Functions
| Barycentric_mapping_parameterizer_3 (Border_parameterizer border_param=Border_parameterizer(), Solver_traits sparse_la=Solver_traits())
| Constructor.
template<typename VertexUVMap >
bool | is_one_to_one_mapping (const Triangle_mesh &mesh, halfedge_descriptor bhd, const VertexUVMap uvmap) const
| returns whether the 3D -> 2D mapping is one-to-one.
Public Member Functions inherited from CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >
| Fixed_border_parameterizer_3 (Border_parameterizer border_param=Border_parameterizer(), Solver_traits sparse_la=Solver_traits())
| Constructor.
virtual | ~Fixed_border_parameterizer_3 ()
| Destructor of base class should be virtual.
template<typename VertexUVmap , typename VertexIndexMap , typename VertexParameterizedMap >
Error_code | parameterize (Triangle_mesh &mesh, halfedge_descriptor bhd, VertexUVmap uvmap, VertexIndexMap vimap, VertexParameterizedMap vpmap)
| computes a one-to-one mapping from a triangular 3D surface mesh to a piece of the 2D space.

## Protected Member Functions
virtual NT | compute_w_ij (const Triangle_mesh &, vertex_descriptor, Vertex_around_target_circulator< Triangle_mesh >) const
| computes `w_ij`, the coefficient of matrix `A` for `j` neighbor vertex of `i`.
Protected Member Functions inherited from CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >
template<typename VertexUVmap , typename VertexIndexMap >
void | initialize_system_from_mesh_border (Matrix &A, Vector &Bu, Vector &Bv, const Triangle_mesh &mesh, halfedge_descriptor bhd, VertexUVmap uvmap, VertexIndexMap vimap) const
| initializes `A`, `Bu` and `Bv` after border parameterization.
virtual NT | compute_w_ij (const Triangle_mesh &mesh, vertex_descriptor main_vertex_v_i, Vertex_around_target_circulator< Triangle_mesh > neighbor_vertex_v_j) const =0
| computes `w_ij`, coefficient of matrix `A` for `j` neighbor vertex of `i`.
template<typename VertexIndexMap >
Error_code | setup_inner_vertex_relations (Matrix &A, Vector &, Vector &, const Triangle_mesh &mesh, vertex_descriptor vertex, VertexIndexMap vimap) const
| Compute the line i of matrix A for i inner vertex:
Border_parameterizer & | get_border_parameterizer ()
| Get the object that maps the surface's border onto a 2D space.
Solver_traits & | get_linear_algebra_traits ()
| Get the sparse linear algebra (traits object to access the linear system).

## Constructor & Destructor Documentation

## ◆ Barycentric_mapping_parameterizer_3()

template<typename TriangleMesh_ , typename BorderParameterizer_ = Default, typename SolverTraits_ = Default>

CGAL::Surface_mesh_parameterization::Barycentric_mapping_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::Barycentric_mapping_parameterizer_3 | ( | Border_parameterizer | border_param = `Border_parameterizer()`,
|  | Solver_traits | sparse_la = `Solver_traits()`
| ) |  |

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

## ◆ compute_w_ij()

template<typename TriangleMesh_ , typename BorderParameterizer_ = Default, typename SolverTraits_ = Default>

virtual NT CGAL::Surface_mesh_parameterization::Barycentric_mapping_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::compute_w_ij | ( | const Triangle_mesh & | ,
|  | vertex_descriptor | ,
|  | Vertex_around_target_circulator< Triangle_mesh > |
| ) |  | const
| protected virtual

computes `w_ij`, the coefficient of matrix `A` for `j` neighbor vertex of `i`.

In the Tutte Barycentric Mapping algorithm, we have `w_ij = 1`, for `j` neighbor vertex of `i`.

Implements CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >.

## ◆ is_one_to_one_mapping()

template<typename TriangleMesh_ , typename BorderParameterizer_ = Default, typename SolverTraits_ = Default>
template<typename VertexUVMap >

bool CGAL::Surface_mesh_parameterization::Barycentric_mapping_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::is_one_to_one_mapping | ( | const Triangle_mesh & | mesh,
|  | halfedge_descriptor | bhd,
|  | const VertexUVMap | uvmap
| ) |  | const

returns whether the 3D -> 2D mapping is one-to-one.

Theorem: A 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. Here, all `w_ij` coefficients are equal to `1` (for `j` vertex neighbor of `i`), thus a valid embedding is guaranteed if the surface border is mapped onto a 2D convex polygon.