\( \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 Types | Public Member Functions
CGAL::LSCM_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d > Class Template Reference
Surface Parameterization Methods

`#include <CGAL/LSCM_parameterizer_3.h>`

## Inherits from

CGAL::Parameterizer_traits_3< ParameterizationMesh_3 >.

## Definition

### template<class ParameterizationMesh_3, class BorderParameterizer_3 = Two_vertices_parameterizer_3<ParameterizationMesh_3>, class SparseLinearAlgebraTraits_d = Eigen_solver_traits<Eigen::SimplicialLDLT<Eigen_sparse_symmetric_matrix<double>::EigenType> >>
class CGAL::LSCM_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >

The class `LSCM_parameterizer_3` implements the Least Squares Conformal Maps (LSCM) parameterization.

[7].

This is a conformal parameterization, i.e. it attempts to preserve angles.

This is a free border parameterization. No need to map the border of the surface onto a convex polygon (only two pinned vertices are needed to ensure a unique solution), but one-to-one mapping is not guaranteed.

Note that his parametrization method has no template parameter for changing the sparse solver.

Is Model Of:
  `ParameterizerTraits_3`

See Also
  `CGAL::Parameterizer_traits_3<ParameterizationMesh_3>`
  `CGAL::Fixed_border_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>`
  `CGAL::Barycentric_mapping_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::Mean_value_coordinates_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>`

Examples:
  Surface_mesh_parameterization/polyhedron_ex_parameterization.cpp.

## Public Types
typedef BorderParameterizer_3 | Border_param
| Export BorderParameterizer_3 template parameter.
Public Types inherited from CGAL::Parameterizer_traits_3< ParameterizationMesh_3 >
enum | Error_code { OK, ERROR_EMPTY_MESH, ERROR_NON_TRIANGULAR_MESH, ERROR_NO_TOPOLOGICAL_DISC, ERROR_BORDER_TOO_SHORT, ERROR_NON_CONVEX_BORDER, ERROR_CANNOT_SOLVE_LINEAR_SYSTEM, ERROR_NO_1_TO_1_MAPPING, ERROR_OUT_OF_MEMORY, ERROR_WRONG_PARAMETER }
| List of errors detected by this package. More...
typedef ParameterizationMesh_3 | Adaptor
| Export ParameterizationMesh_3 template parameter.

## Public Member Functions
| LSCM_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.

## Additional Inherited Members
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 = Two_vertices_parameterizer_3<ParameterizationMesh_3>, class SparseLinearAlgebraTraits_d = Eigen_solver_traits<Eigen::SimplicialLDLT<Eigen_sparse_symmetric_matrix<double>::EigenType> >>

CGAL::LSCM_parameterizer_3< ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d >::LSCM_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 Adaptor , class Border_param , class Sparse_LA >

LSCM_parameterizer_3< Adaptor, Border_param, Sparse_LA >::Error_code CGAL::LSCM_parameterizer_3< Adaptor, Border_param, Sparse_LA >::parameterize | ( | Adaptor & | mesh) |  |
| virtual

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

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

Precondition
  `mesh` must be a surface with one connected component.
  `mesh` must be a triangular mesh.

Implements CGAL::Parameterizer_traits_3< ParameterizationMesh_3 >.