\( \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.12.1 - Planar Parameterization of Triangulated Surface Meshes
CGAL::Surface_mesh_parameterization::LSCM_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ > Class Template Reference

#include <CGAL/Surface_mesh_parameterization/LSCM_parameterizer_3.h>

Definition

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

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. There is 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 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_>
SolverTraits_must be a model of SparseLinearAlgebraTraits_d.
Note: We may use a symmetric definite positive solver because LSCM solves the system in the least squares sense.
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: Otherwise, it uses CGAL's wrapping function to the OpenNL library:
OpenNL::SymmetricLinearSolverTraits<typename TriangleMesh::NT>
See also
CGAL::Surface_mesh_parameterization::Two_vertices_parameterizer_3<TriangleMesh, BorderParameterizer, SolverTraits>

Public Types

typedef Border_parameterizer_ Border_parameterizer
 
typedef SolverTraits_ Solver_traits
 
typedef TriangleMesh_ TriangleMesh
 

Public Member Functions

 LSCM_parameterizer_3 (Border_parameterizer border_param=Border_parameterizer(), Solver_traits sparse_la=Solver_traits())
 Constructor. More...
 
template<typename VertexUVMap >
bool is_one_to_one_mapping (const TriangleMesh &mesh, halfedge_descriptor bhd, 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 one-to-one mapping from a triangular 3D surface mesh to a piece of the 2D space. More...
 

Constructor & Destructor Documentation

◆ LSCM_parameterizer_3()

template<class TriangleMesh_ , class BorderParameterizer_ = Default, class SolverTraits_ = Default>
CGAL::Surface_mesh_parameterization::LSCM_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::LSCM_parameterizer_3 ( Border_parameterizer  border_param = Border_parameterizer(),
Solver_traits  sparse_la = Solver_traits() 
)

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

◆ parameterize()

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

Compute a one-to-one 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
VertexUVmapmust be a model of ReadWritePropertyMap with boost::graph_traits<TriangleMesh>::vertex_descriptor as key type and Point_2 (type deduced from TriangleMesh using Kernel_traits) as value type.
VertexIndexMapmust be a model of ReadablePropertyMap with boost::graph_traits<TriangleMesh>::vertex_descriptor as key type and a unique integer as value type.
VertexParameterizedMapmust be a model of ReadWritePropertyMap with boost::graph_traits<TriangleMesh>::vertex_descriptor as key type and a Boolean as value type.
Parameters
mesha triangulated surface.
bhda halfedge descriptor on the boundary of mesh.
uvmapan instanciation of the class VertexUVmap.
vimapan instanciation of the class VertexIndexMap.
vpmapan instanciation of the class VertexParameterizedMap.
Precondition
mesh must be a triangular mesh.
The vertices must be indexed (vimap must be initialized).