CGAL 6.2 - Planar Parameterization of Triangulated Surface Meshes

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

`#include <CGAL/Surface_mesh_parameterization/Mean_value_coordinates_parameterizer_3.h>`

## Inherits from

CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >.

## Definition

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

The class `Mean_value_coordinates_parameterizer_3` implements Floater Mean Value Coordinates parameterization.

This method is sometimes called simply Floater parameterization [4].

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

One-to-one mapping is guaranteed if the surface's border is mapped to a convex polygon.

This class is used by the main parameterization algorithm `Fixed_border_parameterizer_3::parameterize()`.

- It provides default `BorderParameterizer_` and `SolverTraits_` template parameters.
- It implements `compute_w_ij()` to compute `w_ij`, the `(i,j)` coefficient of matrix `A` for `j` neighbor vertex of `i` based on Floater Mean Value Coordinates parameterization.
- It implements an optimized version of `is_one_to_one_mapping()`.

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: Circular_border_arc_length_parameterizer_3<TriangleMesh_> CGAL::Surface_mesh_parameterization::Circular_border_arc_length_parameterizer_3 This class parameterizes the border of a 3D surface onto a circle, with an arc-length parameterizatio... Definition: Circular_border_parameterizer_3.h:244
  SolverTraits_ | must be a model of `SparseLinearAlgebraTraits_d`. Note that the system is not symmetric because `Fixed_border_parameterizer_3` does not remove border vertices from the system. 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::BiCGSTAB<Eigen_sparse_matrix<double>::EigenType, Eigen::IncompleteLUT< double > > > CGAL::Eigen_solver_traits

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

## Public Types
typedef Border_parameterizer_ | Border_parameterizer
| The border parameterizer.
typedef SolverTraits_ | Solver_traits
| Solver traits type.
typedef TriangleMesh_ | Triangle_mesh
| Triangle mesh type.
typedef boost::graph_traits< Triangle_mesh >::vertex_descriptor | vertex_descriptor
| Mesh vertex type.
typedef boost::graph_traits< Triangle_mesh >::halfedge_descriptor | halfedge_descriptor
| Mesh halfedge type.
Public Types inherited from CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >
typedef Border_parameterizer_ | Border_parameterizer
| Border parameterizer type.
typedef SolverTraits_ | Solver_traits
| Solver traits type.
typedef TriangleMesh_ | Triangle_mesh
| Triangle mesh type.
typedef boost::graph_traits< Triangle_mesh >::vertex_descriptor | vertex_descriptor
| Mesh vertex type.
typedef boost::graph_traits< Triangle_mesh >::halfedge_descriptor | halfedge_descriptor
| Mesh halfedge type.
typedef Solver_traits::Vector | Vector
| Solver vector type.
typedef Solver_traits::Matrix | Matrix
| Solver matrix type.

## Public Member Functions
| Mean_value_coordinates_parameterizer_3 (Border_parameterizer border_param=Border_parameterizer(), Solver_traits sparse_la=Solver_traits())
| Constructor.
template<typename VertexUVMap >
bool | is_one_to_one_mapping (const Triangle_mesh &mesh, halfedge_descriptor bhd, const VertexUVMap uvmap) const
| returns whether the 3D -> 2D mapping is one-to-one.
Public Member Functions inherited from CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >
| Fixed_border_parameterizer_3 (Border_parameterizer border_param=Border_parameterizer(), Solver_traits sparse_la=Solver_traits())
| Constructor.
virtual | ~Fixed_border_parameterizer_3 ()
| Destructor of base class should be virtual.
template<typename VertexUVmap , typename VertexIndexMap , typename VertexParameterizedMap >
Error_code | parameterize (Triangle_mesh &mesh, halfedge_descriptor bhd, VertexUVmap uvmap, VertexIndexMap vimap, VertexParameterizedMap vpmap)
| computes a one-to-one mapping from a triangular 3D surface mesh to a piece of the 2D space.

## Protected Member Functions
virtual NT | compute_w_ij (const Triangle_mesh &mesh, vertex_descriptor main_vertex_v_i, Vertex_around_target_circulator< Triangle_mesh > neighbor_vertex_v_j) const
| computes `w_ij`, the `(i, j)`-coefficient of matrix A for j neighbor vertex of i.
Protected Member Functions inherited from CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >
template<typename VertexUVmap , typename VertexIndexMap >
void | initialize_system_from_mesh_border (Matrix &A, Vector &Bu, Vector &Bv, const Triangle_mesh &mesh, halfedge_descriptor bhd, VertexUVmap uvmap, VertexIndexMap vimap) const
| initializes `A`, `Bu` and `Bv` after border parameterization.
virtual NT | compute_w_ij (const Triangle_mesh &mesh, vertex_descriptor main_vertex_v_i, Vertex_around_target_circulator< Triangle_mesh > neighbor_vertex_v_j) const =0
| computes `w_ij`, coefficient of matrix `A` for `j` neighbor vertex of `i`.
template<typename VertexIndexMap >
Error_code | setup_inner_vertex_relations (Matrix &A, Vector &, Vector &, const Triangle_mesh &mesh, vertex_descriptor vertex, VertexIndexMap vimap) const
| Compute the line i of matrix A for i inner vertex:
Border_parameterizer & | get_border_parameterizer ()
| Get the object that maps the surface's border onto a 2D space.
Solver_traits & | get_linear_algebra_traits ()
| Get the sparse linear algebra (traits object to access the linear system).

## Constructor & Destructor Documentation

## ◆ Mean_value_coordinates_parameterizer_3()

template<class TriangleMesh_ , class BorderParameterizer_ = Default, class SolverTraits_ = Default>

CGAL::Surface_mesh_parameterization::Mean_value_coordinates_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::Mean_value_coordinates_parameterizer_3 | ( | Border_parameterizer | border_param = `Border_parameterizer()`,
|  | Solver_traits | sparse_la = `Solver_traits()`
| ) |  |

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

## ◆ compute_w_ij()

template<class TriangleMesh_ , class BorderParameterizer_ = Default, class SolverTraits_ = Default>

virtual NT CGAL::Surface_mesh_parameterization::Mean_value_coordinates_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::compute_w_ij | ( | const Triangle_mesh & | mesh,
|  | vertex_descriptor | main_vertex_v_i,
|  | Vertex_around_target_circulator< Triangle_mesh > | neighbor_vertex_v_j
| ) |  | const
| protected virtual

computes `w_ij`, the `(i, j)`-coefficient of matrix A for j neighbor vertex of i.

Parameters

  mesh | a triangulated surface.
  main_vertex_v_i | the vertex of `mesh` with index `i`
  neighbor_vertex_v_j | the vertex of `mesh` with index `j`

Implements CGAL::Surface_mesh_parameterization::Fixed_border_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >.

## ◆ is_one_to_one_mapping()

template<class TriangleMesh_ , class BorderParameterizer_ = Default, class SolverTraits_ = Default>
template<typename VertexUVMap >

bool CGAL::Surface_mesh_parameterization::Mean_value_coordinates_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::is_one_to_one_mapping | ( | const Triangle_mesh & | mesh,
|  | halfedge_descriptor | bhd,
|  | const VertexUVMap | uvmap
| ) |  | const

returns whether the 3D -> 2D mapping is one-to-one.

Theorem: A one-to-one mapping is guaranteed if all w_ij coefficients are > 0 (for j vertex neighbor of i) and if the surface border is mapped onto a 2D convex polygon. Here, all w_ij coefficients are positive (for j vertex neighbor of i), thus a valid embedding is guaranteed if the surface border is mapped onto a 2D convex polygon.