CGAL 5.6 - Polygon Mesh Processing
Feature Detection Functions

Functions to detect sharp edges and surface patches of polygon meshes.

Functions

template<typename PolygonMesh , typename FT , typename EdgeIsFeatureMap , typename NamedParameters >
void CGAL::Polygon_mesh_processing::detect_sharp_edges (const PolygonMesh &pmesh, FT angle_in_deg, EdgeIsFeatureMap edge_is_feature_map, const NamedParameters &np=parameters::default_values())
 detects and marks the edges that are considered to be sharp with respect to the given angle bound. More...
 
template<typename PolygonMesh , typename PatchIdMap , typename VertexIncidentPatchesMap , typename EdgeIsFeatureMap >
void CGAL::Polygon_mesh_processing::detect_vertex_incident_patches (const PolygonMesh &pmesh, const PatchIdMap patch_id_map, VertexIncidentPatchesMap vertex_incident_patches_map, const EdgeIsFeatureMap edge_is_feature_map)
 collects the surface patches of the faces incident to each vertex of the input polygon mesh. More...
 
template<typename PolygonMesh , typename FT , typename EdgeIsFeatureMap , typename PatchIdMap , typename NamedParameters >
boost::graph_traits< PolygonMesh >::faces_size_type CGAL::Polygon_mesh_processing::sharp_edges_segmentation (const PolygonMesh &pmesh, FT angle_in_deg, EdgeIsFeatureMap edge_is_feature_map, PatchIdMap patch_id_map, const NamedParameters &np=parameters::default_values())
 This function calls successively CGAL::Polygon_mesh_processing::detect_sharp_edges(), CGAL::Polygon_mesh_processing::connected_components(), and CGAL::Polygon_mesh_processing::detect_vertex_incident_patches() More...
 

Function Documentation

◆ detect_sharp_edges()

template<typename PolygonMesh , typename FT , typename EdgeIsFeatureMap , typename NamedParameters >
void CGAL::Polygon_mesh_processing::detect_sharp_edges ( const PolygonMesh &  pmesh,
FT  angle_in_deg,
EdgeIsFeatureMap  edge_is_feature_map,
const NamedParameters &  np = parameters::default_values() 
)

#include <CGAL/Polygon_mesh_processing/detect_features.h>

detects and marks the edges that are considered to be sharp with respect to the given angle bound.

angle_in_deg gives the maximum angle (in degrees) between the two normal vectors of adjacent triangles. For an edge of the input polygon mesh, if the angle between the two normal vectors of its incident facets is bigger than the given bound, then the edge is marked as being a feature edge.

Also computes the number of sharp edges incident to each vertex, if vertex_feature_degree_map is provided.

Template Parameters
PolygonMesha model of HalfedgeListGraph
FTa number type. It is either deduced from the geom_traits Named Parameters if provided, or from the geometric traits class deduced from the point property map of PolygonMesh.
EdgeIsFeatureMapa model of ReadWritePropertyMap with boost::graph_traits<PolygonMesh>::edge_descriptor as key type and bool as value type. It must be default constructible.
NamedParametersa sequence of Named Parameters
Parameters
pmeshthe polygon mesh
angle_in_degthe dihedral angle bound
edge_is_feature_mapthe property map that will contain the sharp-or-not status of each edge of pmesh
npan optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
  • a property map that will associate to each vertex of pmesh the number of incident feature edges
  • Type: a class model of ReadWritePropertyMap with boost::graph_traits<PolygonMesh>::vertex_descriptor as key type and int as value type
  • Default: boost::get(CGAL::vertex_feature_degree_t(), pmesh)

  • an instance of a geometric traits class
  • Type: a class model of Kernel
  • Default: a CGAL Kernel deduced from the point type, using CGAL::Kernel_traits
  • Extra: The geometric traits class must be compatible with the vertex point type.
See also
sharp_edges_segmentation()
Examples:
Polygon_mesh_processing/delaunay_remeshing_example.cpp, Polygon_mesh_processing/mesh_smoothing_example.cpp, and Polygon_mesh_processing/remesh_planar_patches.cpp.

◆ detect_vertex_incident_patches()

template<typename PolygonMesh , typename PatchIdMap , typename VertexIncidentPatchesMap , typename EdgeIsFeatureMap >
void CGAL::Polygon_mesh_processing::detect_vertex_incident_patches ( const PolygonMesh &  pmesh,
const PatchIdMap  patch_id_map,
VertexIncidentPatchesMap  vertex_incident_patches_map,
const EdgeIsFeatureMap  edge_is_feature_map 
)

#include <CGAL/Polygon_mesh_processing/detect_features.h>

collects the surface patches of the faces incident to each vertex of the input polygon mesh.

Template Parameters
PolygonMesha model of HalfedgeListGraph
PatchIdMapa model of ReadablePropertyMap with boost::graph_traits<PolygonMesh>::face_descriptor as key type and the desired patch id, model of CopyConstructible as value type.
VertexIncidentPatchesMapa model of mutable LvaluePropertyMap with boost::graph_traits<PolygonMesh>::vertex_descriptor as key type. Its value type must be a container of boost::property_traits<PatchIdMap>::value_type and have a function insert(). A std::set or a boost::unordered_set are recommended, as a patch index may be inserted several times.
EdgeIsFeatureMapa model of ReadablePropertyMap with boost::graph_traits<PolygonMesh>::edge_descriptor as key type and bool as value type.
Parameters
pmeshthe polygon mesh
patch_id_mapthe property map containing the surface patch ids for the faces of pmesh. It must be already filled.
vertex_incident_patches_mapa property map that will contain the patch ids of all the faces incident to each vertex of pmesh.
edge_is_feature_mapa filled property map that will contain the sharp-or-not status of each edge of pmesh
See also
sharp_edges_segmentation()

◆ sharp_edges_segmentation()

template<typename PolygonMesh , typename FT , typename EdgeIsFeatureMap , typename PatchIdMap , typename NamedParameters >
boost::graph_traits<PolygonMesh>::faces_size_type CGAL::Polygon_mesh_processing::sharp_edges_segmentation ( const PolygonMesh &  pmesh,
FT  angle_in_deg,
EdgeIsFeatureMap  edge_is_feature_map,
PatchIdMap  patch_id_map,
const NamedParameters &  np = parameters::default_values() 
)

#include <CGAL/Polygon_mesh_processing/detect_features.h>

This function calls successively CGAL::Polygon_mesh_processing::detect_sharp_edges(), CGAL::Polygon_mesh_processing::connected_components(), and CGAL::Polygon_mesh_processing::detect_vertex_incident_patches()

It detects and marks the sharp edges of pmesh according to angle_in_deg. The sharp edges define a segmentation of pmesh, that is done by computing a surface patch id for each face.

Template Parameters
PolygonMesha model of FaceGraph
FTa number type. It is either deduced from the geom_traits Named Parameters if provided, or from the geometric traits class deduced from the point property map of PolygonMesh.
EdgeIsFeatureMapa model of ReadWritePropertyMap with boost::graph_traits<PolygonMesh>::edge_descriptor
PatchIdMapa model of ReadWritePropertyMap with boost::graph_traits<PolygonMesh>::face_descriptor as key type and the desired patch id, model of CopyConstructible as value type.
NamedParametersa sequence of Named Parameters
Parameters
pmeshthe polygon mesh
angle_in_degthe dihedral angle bound
edge_is_feature_mapthe property map that will contain the sharp-or-not status of each edge of pmesh
patch_id_mapthe property map that will contain the surface patch ids for the faces of pmesh.
npan optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
  • a property map that will associate to each vertex of pmesh the number of incident feature edges
  • Type: a class model of ReadWritePropertyMap with boost::graph_traits<PolygonMesh>::vertex_descriptor as key type and int as value type
  • Default: boost::get(CGAL::vertex_feature_degree_t(), pmesh)

  • the index of the first surface patch of pmesh
  • Type: std::size_t
  • Extra: The patches will be numbered on [first_index; first_index + num_patches], where num_patches is the number of surface patches.

  • a property map associating to each face of pmesh a unique index between 0 and num_faces(pmesh) - 1
  • Type: a class model of ReadablePropertyMap with boost::graph_traits<PolygonMesh>::face_descriptor as key type and std::size_t as value type
  • Default: an automatically indexed internal map

  • a property map that will contain the patch ids of all the faces incident to each vertex of pmesh
  • Type: a model of mutable LvaluePropertyMap with boost::graph_traits<PolygonMesh>::vertex_descriptor as key type. Its value type must be a container of boost::property_traits<PatchIdMap>::value_type and have a function insert().
  • Extra: A std::set or a boost::unordered_set are recommended, as a patch index may be inserted several times.

  • an instance of a geometric traits class
  • Type: a class model of Kernel
  • Default: a CGAL Kernel deduced from the point type, using CGAL::Kernel_traits
  • Extra: The geometric traits class must be compatible with the vertex point type.
Returns
the number of surface patches.
See also
CGAL::Polygon_mesh_processing::detect_sharp_edges()
CGAL::Polygon_mesh_processing::connected_components()
CGAL::Polygon_mesh_processing::detect_vertex_incident_patches()
Examples:
Polygon_mesh_processing/detect_features_example.cpp.