CGAL 5.0 - Planar Parameterization of Triangulated Surface Meshes
|
#include <CGAL/Surface_mesh_parameterization/LSCM_parameterizer_3.h>
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.
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> |
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... | |
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.
border_param | Object that maps the surface's border to 2D space |
sparse_la | Traits object to access a sparse linear system |
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.
VertexUVmap | must 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. |
VertexIndexMap | must be a model of ReadablePropertyMap with boost::graph_traits<TriangleMesh>::vertex_descriptor as key type and a unique integer as value type. |
VertexParameterizedMap | must be a model of ReadWritePropertyMap with boost::graph_traits<TriangleMesh>::vertex_descriptor as key type and a Boolean as value type. |
mesh | a triangulated surface. |
bhd | a halfedge descriptor on the boundary of mesh . |
uvmap | an instanciation of the class VertexUVmap . |
vimap | an instanciation of the class VertexIndexMap . |
vpmap | an instanciation of the class VertexParameterizedMap . |
mesh
must be a triangular mesh. vimap
must be initialized).