Planar Parameterization of Triangulated Surface Meshes
Reference Manual

Laurent Saboret, Pierre Alliez and Bruno Lévy

Parameterizing a surface amounts to finding a one-to-one mapping from a suitable domain to the surface. A good mapping is the one which minimizes either angle or area distortions in some sense. In this package, we focus on triangulated surfaces that are homeomorphic to a disk and on piecewise linear mappings into a planar domain.

52.10   Classified Reference Pages

Main Function

CGAL::parameterize

Concepts

ParameterizerTraits_3
BorderParameterizer_3
ParameterizationMesh_3
ParameterizationPatchableMesh_3
SparseLinearAlgebraTraits_d

Surface Parameterization Methods

This Cgal package implements some of the state-of-the-art parameterization methods:

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::LSCM_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
CGAL::Mean_value_coordinates_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>

Border Parameterization Methods

Border parameterization methods define a set of constraints (a constraint specifies two (u,v) coordinates for each instance of a vertex along the border).

This package implements all common border parameterization methods:

CGAL::Circular_border_arc_length_parameterizer_3<ParameterizationMesh_3>
CGAL::Circular_border_uniform_parameterizer_3<ParameterizationMesh_3>
CGAL::Square_border_arc_length_parameterizer_3<ParameterizationMesh_3>
CGAL::Square_border_uniform_parameterizer_3<ParameterizationMesh_3>
CGAL::Two_vertices_parameterizer_3<ParameterizationMesh_3>

Mesh

The general definition of input meshes handled directly by CGAL::parameterize() is:

This package provides a model of the ParameterizationMesh_3 concept to access CGAL::Polyhedron_3<Traits>:
CGAL::Parameterization_polyhedron_adaptor_3<Polyhedron_3_>

Fortunately, the meshes supported indirectly by the package can be of any genus and have any number of connected components. If it is not a topological disc, the input mesh has to come with a description of a cutting path (an oriented list of vertices) which is the border of a topological disc. If no cutting path is given as input, we assume that the surface border is the longest border already in the input mesh (the other borders will be considered as holes).

The CGAL::Parameterization_mesh_patch_3<ParameterizationPatchableMesh_3> class is responsible for virtually cutting a patch in a ParameterizationPatchableMesh_3 mesh. The resulting patch is a topological disk (if the input cutting path is correct) and provides a ParameterizationMesh_3 interface. It can be used as parameter of CGAL::parameterize().

Note that this way the user is responsible for cutting a closed mesh of arbitrary genus (even a topological disc with an intricate seam cut), as long as this condition is fulfilled.

The package provides an interface with CGAL::Polyhedron_3<Traits>:
CGAL::Parameterization_polyhedron_adaptor_3<Polyhedron_3_>

Output

A (u,v) pair is computed for each inner vertex (i.e. its halfedges share the same (u,v) pair), while a (u,v) pair is computed for each border halfedge. The user has to iterate over the mesh halfedges to get the result.

Sparse Linear Algebra

Since parameterizing meshes requires efficient representation of sparse matrices and efficient iterative or direct linear solvers, we provide an interface to several sparse linear solvers:

OpenNL::DefaultLinearSolverTraits<COEFFTYPE, MATRIX, VECTOR, SOLVER> in OpenNL package
OpenNL::SymmetricLinearSolverTraits<COEFFTYPE, MATRIX, VECTOR, SOLVER> in OpenNL package
CGAL::Taucs_solver_traits<T>
CGAL::Taucs_symmetric_solver_traits<T>

Helper Classes

CGAL::Parameterization_mesh_feature_extractor<ParameterizationMesh_3>

Checks and Assertions

The package performs the next checks:

For fixed border parameterizations:

For free border parameterizations:

Assertions are optional checks. The assertion flags for the package use SURFACE_MESH_PARAMETERIZATION in their names (e.g., CGAL_SURFACE_MESH_PARAMETERIZATION_NO_ASSERTIONS).

52.11   Alphabetical List of Reference Pages

Barycentric_mapping_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
BorderParameterizer_3
Circular_border_arc_length_parameterizer_3<ParameterizationMesh_3>
Circular_border_parameterizer_3<ParameterizationMesh_3>
Circular_border_uniform_parameterizer_3<ParameterizationMesh_3>
Discrete_authalic_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
Discrete_conformal_map_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
Fixed_border_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
LSCM_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
Mean_value_coordinates_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
ParameterizationMesh_3
ParameterizationPatchableMesh_3
Parameterization_mesh_feature_extractor<ParameterizationMesh_3>
Parameterization_mesh_patch_3<ParameterizationPatchableMesh_3>
Parameterization_polyhedron_adaptor_3<Polyhedron_3_>
ParameterizerTraits_3
Parameterizer_traits_3<ParameterizationMesh_3>
parameterize
SparseLinearAlgebraTraits_d::Matrix
SparseLinearAlgebraTraits_d::Vector
SparseLinearAlgebraTraits_d
Square_border_arc_length_parameterizer_3<ParameterizationMesh_3>
Square_border_parameterizer_3<ParameterizationMesh_3>
Square_border_uniform_parameterizer_3<ParameterizationMesh_3>
Taucs_matrix<T>
Taucs_solver_traits<T>
Taucs_symmetric_matrix<T>
Taucs_symmetric_solver_traits<T>
Taucs_vector<T>
Two_vertices_parameterizer_3<ParameterizationMesh_3>