\( \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 - Planar Parameterization of Triangulated Surface Meshes
CGAL::Surface_mesh_parameterization::Circular_border_parameterizer_3< TriangleMesh_ > Class Template Referenceabstract

#include <CGAL/Surface_mesh_parameterization/Circular_border_parameterizer_3.h>

Inherited by CGAL::Surface_mesh_parameterization::Circular_border_arc_length_parameterizer_3< TriangleMesh_ >, and CGAL::Surface_mesh_parameterization::Circular_border_uniform_parameterizer_3< TriangleMesh_ >.

Definition

This is the base class of strategies that parameterize the border of a 3D surface onto a circle.

The class Circular_border_parameterizer_3 is a pure virtual class, thus cannot be instantiated.

It implements most of the algorithm. Subclasses only have to implement the function compute_edge_length() to compute a segment's length.

Implementation note: To simplify the implementation, the border parameterizer knows only the TriangleMesh class and does not know the parameterization algorithm requirements or the kind of sparse linear system used.

Is Model Of:
Parameterizer_3
Template Parameters
TriangleMesh_must be a model of FaceGraph.
See also
CGAL::Surface_mesh_parameterization::Circular_border_uniform_parameterizer_3<TriangleMesh>
CGAL::Surface_mesh_parameterization::Circular_border_arc_length_parameterizer_3<TriangleMesh>

Public Types

typedef TriangleMesh_ TriangleMesh
 
typedef boost::graph_traits< TriangleMesh >::vertex_descriptor vertex_descriptor
 
typedef boost::graph_traits< TriangleMesh >::halfedge_descriptor halfedge_descriptor
 

Public Member Functions

template<typename VertexUVmap , typename VertexIndexMap , typename VertexParameterizedMap >
Error_code parameterize (const TriangleMesh &mesh, halfedge_descriptor bhd, VertexUVmap uvmap, VertexIndexMap, VertexParameterizedMap vpmap)
 Assign to the mesh's border vertices a 2D position (i.e. a (u,v) pair) on the circle. More...
 
bool is_border_convex () const
 Indicate if border's shape is convex.
 

Protected Types

typedef internal::Kernel_traits< TriangleMesh_ >::PPM PPM
 
typedef internal::Kernel_traits< TriangleMesh_ >::Kernel Kernel
 
typedef Kernel::FT NT
 
typedef Kernel::Point_2 Point_2
 
typedef Kernel::Vector_3 Vector_3
 

Protected Member Functions

virtual NT compute_edge_length (const TriangleMesh &mesh, vertex_descriptor source, vertex_descriptor target) const =0
 

Member Function Documentation

◆ parameterize()

template<typename TriangleMesh_ >
template<typename VertexUVmap , typename VertexIndexMap , typename VertexParameterizedMap >
Error_code CGAL::Surface_mesh_parameterization::Circular_border_parameterizer_3< TriangleMesh_ >::parameterize ( const TriangleMesh &  mesh,
halfedge_descriptor  bhd,
VertexUVmap  uvmap,
VertexIndexMap  ,
VertexParameterizedMap  vpmap 
)

Assign to the mesh's border vertices a 2D position (i.e. a (u,v) pair) on the circle.

Mark them as parameterized.

The distribution of vertices over the circle depends on the function compute_edge_length().

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.
vpmapan instanciation of the class VertexParameterizedMap.
Precondition
mesh must be a triangular mesh.
The vertices must be indexed (vimap must be initialized).