CGAL 4.14 - Planar Parameterization of Triangulated Surface Meshes
CGAL::Surface_mesh_parameterization::ARAP_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ > Class Template Reference

#include <CGAL/Surface_mesh_parameterization/ARAP_parameterizer_3.h>

## Definition

### template<class TriangleMesh_, class BorderParameterizer_ = Default, class SolverTraits_ = Default> class CGAL::Surface_mesh_parameterization::ARAP_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >

The class ARAP_parameterizer_3 implements the Local/Global Approach to Mesh Parameterization [8].

This parameterization allows the user to prioritize angle preservation, shape preservation, or a balance of both. A parameter $$\lambda$$ controls whether the priority is given to angle or to shape preservation: when $$\lambda=0$$, the parameterization is as-similar-as-possible (ASAP) and is equivalent to the (conforming) LSCM parameterization. As $$\lambda$$ grows, the shape preservation becomes more and more important, yielding, when $$\lambda$$ goes to infinity, a parameterization that is as-rigid-as-possible (ARAP).

This is a free border parameterization. There is no need to map the border of the surface onto a convex polygon. When $$\lambda=0$$, only two pinned vertices are needed to ensure a unique solution. When $$\lambda$$ is non-null, the border does not need to be parameterized and a random vertex is pinned.

If flips are present in the initial parameterization, a post-processing step is applied using CGAL::Surface_mesh_parameterization::MVC_post_processor_3<TriangleMesh, SolverTraits_> to attempt to obtain a valid final embedding.

A one-to-one mapping is not guaranteed.

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: Two_vertices_parameterizer_3 SolverTraits_ must be a model of SparseLinearAlgebraTraits_d. Note that the system is not symmetric. 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::Surface_mesh_parameterization::Fixed_border_parameterizer_3<TriangleMesh, BorderParameterizer, SolverTraits>

## Public Types

typedef Border_parameterizer_ Border_parameterizer

typedef SolverTraits_ Solver_traits

typedef TriangleMesh_ TriangleMesh

## Public Member Functions

template<typename VertexUVMap >
bool is_one_to_one_mapping (const TriangleMesh &mesh, const Faces_vector &faces, const VertexUVMap uvmap) const
Check if the 3D -> 2D mapping is one-to-one.

template<typename VertexUVMap , typename VertexIndexMap , typename VertexParameterizedMap >
Error_code parameterize (TriangleMesh &mesh, halfedge_descriptor bhd, VertexUVMap uvmap, VertexIndexMap vimap, VertexParameterizedMap vpmap)
Compute a mapping from a triangular 3D surface mesh to a piece of the 2D space. More...

ARAP_parameterizer_3 (NT lambda)
Constructor taking only the parameter $$\lambda$$.

ARAP_parameterizer_3 (Border_parameterizer border_param=Border_parameterizer(), Solver_traits sparse_la=Solver_traits(), NT lambda=1000., unsigned int iterations=50, NT tolerance=1e-6)
Default Constructor. More...

## ◆ ARAP_parameterizer_3()

template<class TriangleMesh_ , class BorderParameterizer_ = Default, class SolverTraits_ = Default>
 CGAL::Surface_mesh_parameterization::ARAP_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::ARAP_parameterizer_3 ( Border_parameterizer border_param = Border_parameterizer(), Solver_traits sparse_la = Solver_traits(), NT lambda = 1000., unsigned int iterations = 50, NT tolerance = 1e-6 )

Default Constructor.

Parameters
 border_param Object that maps the surface's border to the 2D space. sparse_la Traits object to access a sparse linear system. lambda Parameter to give importance to shape or angle preservation. iterations Maximal number of iterations in the energy minimization process. tolerance Minimal energy difference between two iterations for the minimization process to continue.

## ◆ parameterize()

template<class TriangleMesh_ , class BorderParameterizer_ = Default, class SolverTraits_ = Default>
template<typename VertexUVMap , typename VertexIndexMap , typename VertexParameterizedMap >
 Error_code CGAL::Surface_mesh_parameterization::ARAP_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::parameterize ( TriangleMesh & mesh, halfedge_descriptor bhd, VertexUVMap uvmap, VertexIndexMap vimap, VertexParameterizedMap vpmap )

Compute a mapping from a triangular 3D surface mesh to a piece of the 2D space.

The mapping is piecewise linear (linear in each triangle). The result is the (u,v) pair image of each vertex of the 3D surface.

Template Parameters
 VertexUVmap must be a model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_2 (type deduced from TriangleMesh using Kernel_traits) as value type. VertexIndexMap must be a model of ReadablePropertyMap with boost::graph_traits::vertex_descriptor as key type and a unique integer as value type. VertexParameterizedMap must be a model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and a Boolean as value type.
Parameters
 mesh a triangulated surface. bhd a halfedge descriptor on the boundary of mesh. uvmap an instanciation of the class VertexUVmap. vimap an instanciation of the class VertexIndexMap. vpmap an instanciation of the class VertexParameterizedMap.
Precondition
mesh must be a triangular mesh.
The vertices must be indexed (vimap must be initialized).