CGAL 6.1.1 - Polygon Mesh Processing

Loading...
Searching...
No Matches
Functions
Feature Detection Functions
Reference Manual

##

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.
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.
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()`

## 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

  PolygonMesh | a model of `HalfedgeListGraph`
  FT | a 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`.
  EdgeIsFeatureMap | a model of `ReadWritePropertyMap` with `boost::graph_traits<PolygonMesh>::edge_descriptor` as key type and `bool` as value type. It must be default constructible.
  NamedParameters | a sequence of Named Parameters

Parameters

  pmesh | the polygon mesh
  angle_in_deg | the dihedral angle bound
  edge_is_feature_map | the property map that will contain the sharp-or-not status of each edge of `pmesh`
  np | an 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()`

## ◆ 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

  PolygonMesh | a model of `HalfedgeListGraph`
  PatchIdMap | a model of `ReadablePropertyMap` with `boost::graph_traits<PolygonMesh>::face_descriptor` as key type and the desired patch id, model of `CopyConstructible` as value type.
  VertexIncidentPatchesMap | 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()`. A `std::set` or a `boost::unordered_set` are recommended, as a patch index may be inserted several times.
  EdgeIsFeatureMap | a model of `ReadablePropertyMap` with `boost::graph_traits<PolygonMesh>::edge_descriptor` as key type and `bool` as value type.

Parameters

  pmesh | the polygon mesh
  patch_id_map | the property map containing the surface patch ids for the faces of `pmesh`. It must be already filled.
  vertex_incident_patches_map | a property map that will contain the patch ids of all the faces incident to each vertex of `pmesh`.
  edge_is_feature_map | a 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

  PolygonMesh | a model of `FaceGraph`
  FT | a 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`.
  EdgeIsFeatureMap | a model of `ReadWritePropertyMap` with `boost::graph_traits<PolygonMesh>::edge_descriptor`
  PatchIdMap | a model of `ReadWritePropertyMap` with `boost::graph_traits<PolygonMesh>::face_descriptor` as key type and the desired patch id, model of `CopyConstructible` as value type.
  NamedParameters | a sequence of Named Parameters

Parameters

  pmesh | the polygon mesh
  angle_in_deg | the dihedral angle bound
  edge_is_feature_map | the property map that will contain the sharp-or-not status of each edge of `pmesh`
  patch_id_map | the property map that will contain the surface patch ids for the faces of `pmesh`.
  np | an 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()`