\( \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.4 - Planar Parameterization of Triangulated Surface Meshes
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
CGAL::Barycentric_mapping_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d > Class Template Reference

#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 = OpenNL::DefaultLinearSolverTraits<typename ParameterizationMesh_3::NT>>
class CGAL::Barycentric_mapping_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >

The class Barycentric_mapping_parameterizer_3 implements Tutte Barycentric Mapping algorithm

[10]. 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().

Is Model Of:
ParameterizerTraits_3
Template Parameters
ParameterizationMesh_33D surface mesh.
BorderParameterizer_3Strategy to parameterize the surface border.
SparseLinearAlgebraTraits_dTraits 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, SparseLinearAlgebraTraits_d>
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_paramget_border_parameterizer ()
 Get the object that maps the surface's border onto a 2D space.
 
Sparse_LAget_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 = OpenNL::DefaultLinearSolverTraits<typename ParameterizationMesh_3::NT>>
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_paramobject that maps the surface's border to 2D space.
sparse_laTraits 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 = OpenNL::DefaultLinearSolverTraits<typename ParameterizationMesh_3::NT>>
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   
)
protectedvirtual

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 = OpenNL::DefaultLinearSolverTraits<typename ParameterizationMesh_3::NT>>
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  
)
protectedvirtual

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 >.