CGAL 6.1 - Planar Parameterization of Triangulated Surface Meshes

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

`#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 [9].

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 postprocessing 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<TriangleMesh_> CGAL::Surface_mesh_parameterization::Two_vertices_parameterizer_3 The class Two_vertices_parameterizer_3 parameterizes two extreme vertices of a 3D surface. Definition: Two_vertices_parameterizer_3.h:56
  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::Eigen_solver_traits< Eigen::SparseLU<Eigen_sparse_matrix<double>::EigenType> > CGAL::Eigen_solver_traits Moreover, if SuiteSparse solvers are available, which is greatly preferable for speed, then the default parameter is: CGAL::Eigen_solver_traits< Eigen::UmfPackLU<Eigen_sparse_matrix<double>::EigenType> >

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

## Public Types
typedef Border_parameterizer_ | Border_parameterizer
| Border parameterizer type.
typedef SolverTraits_ | Solver_traits
| Solver traits type.
typedef unspecified_type | NT
| Number type, deduced from the internal vertex point map of `Triangle_mesh`
typedef TriangleMesh_ | Triangle_mesh
| Triangle mesh type.
typedef boost::graph_traits< Triangle_mesh >::halfedge_descriptor | halfedge_descriptor
| Mesh halfedge type.

## Public Member Functions
template<typename FaceRange , typename VertexUVMap >
bool | is_one_to_one_mapping (const Triangle_mesh &mesh, const FaceRange &faces, const VertexUVMap uvmap) const
| returns whether the 3D -> 2D mapping is one-to-one.
template<typename VertexUVMap , typename VertexIndexMap , typename VertexParameterizedMap >
Error_code | parameterize (Triangle_mesh &mesh, halfedge_descriptor bhd, VertexUVMap uvmap, VertexIndexMap vimap, VertexParameterizedMap vpmap)
| computes a mapping from a triangular 3D surface mesh to a piece of the 2D space.
| 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.

## Constructor & Destructor Documentation

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

## Member Function Documentation

## ◆ 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 | ( | Triangle_mesh & | mesh,
|  | halfedge_descriptor | bhd,
|  | VertexUVMap | uvmap,
|  | VertexIndexMap | vimap,
|  | VertexParameterizedMap | vpmap
| ) |  |

computes 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<Triangle_mesh>::vertex_descriptor` as key type and Point_2 (type deduced from `Triangle_mesh` using `Kernel_traits`) as value type.
  VertexIndexMap | must be a model of `ReadablePropertyMap` with `boost::graph_traits<Triangle_mesh>::vertex_descriptor` as key type and a unique integer as value type.
  VertexParameterizedMap | must be a model of `ReadWritePropertyMap` with `boost::graph_traits<Triangle_mesh>::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 instantiation of the class `VertexUVmap`.
  vimap | an instantiation of the class `VertexIndexMap`.
  vpmap | an instantiation of the class `VertexParameterizedMap`.

Precondition
  `mesh` must be a triangular mesh.
  The vertices must be indexed (vimap must be initialized).