\( \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.8 - Polygon Mesh Processing

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Functions
Combinatorial Repairing
Polygon Mesh Processing Reference

##

Functions to orient polygon soups and to stitch geometrically identical boundaries.

## Functions
template<class PolygonMesh , class Point , class Polygon >
void | CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh (const std::vector< Point > &points, const std::vector< Polygon > &polygons, PolygonMesh &out)
| builds a polygon mesh from a soup of polygons. More...
template<typename PolygonMesh , typename HalfedgePairsRange , typename NamedParameters >
void | CGAL::Polygon_mesh_processing::stitch_borders (PolygonMesh &pmesh, const HalfedgePairsRange &hedge_pairs_to_stitch, const NamedParameters &np)
| Stitches together border halfedges in a polygon mesh. More...
template<typename PolygonMesh , class NamedParameters >
void | CGAL::Polygon_mesh_processing::stitch_borders (PolygonMesh &pmesh, const NamedParameters &np)
| Same as the other overload but the pairs of halfedges to be stitched are automatically found amongst all border halfedges. More...
template<class Point , class Polygon >
bool | CGAL::Polygon_mesh_processing::orient_polygon_soup (std::vector< Point > &points, std::vector< Polygon > &polygons)
| tries to consistently orient a soup of polygons in 3D space. More...

## Function Documentation

template<class Point , class Polygon >

bool CGAL::Polygon_mesh_processing::orient_polygon_soup | ( | std::vector< Point > & | points,
|  | std::vector< Polygon > & | polygons
| ) |  |

tries to consistently orient a soup of polygons in 3D space.

When it is not possible to produce a combinatorial manifold surface, some points are duplicated. Because a polygon soup does not have any connectivity (each point has as many occurences as the number of polygons it belongs to), duplicating one point (or a pair of points) amounts to duplicate the polygon to which it belongs.

These points are either an endpoint of an edge incident to more than two polygons, an endpoint of an edge between two polygons with incompatible orientations (during the re-orientation process), or more generally a point p at which the intersection of an infinitesimally small ball centered at p with the polygons incident to it is not a topological disk.

The algorithm is described in [1].

Template Parameters

  Point | the point type
  Polygon | a `std::vector<std::size_t>` containing the indices of the points of the face

Parameters

  points | points of the soup of polygons. Some points might be pushed back to resolve non-manifold or non-orientability issues.
  polygons | each element in the vector describes a polygon using the index of the points in `points`. If needed the order of the indices of a polygon might be reversed.

Returns
  `true` if the orientation operation succeded.
  `false` if some points were duplicated, thus producing a self-intersecting polyhedron.

`#include <CGAL/Polygon_mesh_processing/orient_polygon_soup.h>`

Examples:
  Polygon_mesh_processing/polygon_soup_example.cpp.

template<class PolygonMesh , class Point , class Polygon >

void CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh | ( | const std::vector< Point > & | points,
|  | const std::vector< Polygon > & | polygons,
|  | PolygonMesh & | out
| ) |  |

builds a polygon mesh from a soup of polygons.

Precondition
  the input polygon soup describes consistently oriented polygon mesh.

Template Parameters

  PolygonMesh | a model of `MutableFaceGraph` with an internal point property map
  Point | a point type that has an operator `[]` to access coordinates
  Polygon | a `std::vector<std::size_t>` containing the indices of the points of the face

Parameters

  points | points of the soup of polygons
  polygons | each element in the vector describes a polygon using the index of the points in `points`
  out | the polygon mesh to be built

See Also
  `CGAL::Polygon_mesh_processing::orient_polygon_soup()`

`#include <CGAL/Polygon_mesh_processing/polygon_soup_to_polygon_mesh.h>`

Examples:
  Polygon_mesh_processing/polygon_soup_example.cpp.

template<typename PolygonMesh , typename HalfedgePairsRange , typename NamedParameters >

void CGAL::Polygon_mesh_processing::stitch_borders | ( | PolygonMesh & | pmesh,
|  | const HalfedgePairsRange & | hedge_pairs_to_stitch,
|  | const NamedParameters & | np
| ) |  |

Stitches together border halfedges in a polygon mesh.

The halfedges to be stitched are provided in `hedge_pairs_to_stitch`. For each pair `p` in this vector, `p.second` and its opposite will be removed from `pmesh`.

The vertices that get removed from `pmesh` are selected as follows: The pair of halfedges in `hedge_pairs_to_stitch` are processed linearly. Let `p` be such a pair. If the target of `p.first` has not been marked for deletion, then the source of `p.second` is. If the target of `p.second` has not been marked for deletion, then the source of `p.first` is. A vertex is marked for deletion if its corresponding point has already be seen with a vertex previously handled.

Precondition
  For each halfedge in a pair of `hedge_pairs_to_stitch`, the corresponding edge is neither degenerated nor incident to a degenerate edge.

Template Parameters

  PolygonMesh | a model of `FaceListGraph` and `MutableFaceGraph` that has a property map for `boost::vertex_point_t`
  HalfedgePairsRange | a range of `std::pair<boost::graph_traits<PolygonMesh>::halfedge_descriptor, boost::graph_traits<PolygonMesh>::halfedge_descriptor>`, model of `Range`. Its iterator type is `InputIterator`.
  NamedParameters | a sequence of Named Parameters

Parameters

  pmesh | the polygon mesh to be modified by stitching
  hedge_pairs_to_stitch | a range of `std::pair` of halfedges to be stitched together
  np | optional Named Parameters described below

Named Parameters

  vertex_point_map | the property map with the points associated to the vertices of `pmesh`

`#include <CGAL/Polygon_mesh_processing/stitch_borders.h>`

Examples:
  Polygon_mesh_processing/stitch_borders_example.cpp.

template<typename PolygonMesh , class NamedParameters >

void CGAL::Polygon_mesh_processing::stitch_borders | ( | PolygonMesh & | pmesh,
|  | const NamedParameters & | np
| ) |  |

Same as the other overload but the pairs of halfedges to be stitched are automatically found amongst all border halfedges.

Two border halfedges `h1` and `h2` are set to be stitched if the points associated to the source and target vertices of `h1` are the same as those of the target and source vertices of `h2` respectively.

Precondition
  `pmesh` does not contains any degenerate border edge.

Template Parameters

  PolygonMesh | a model of `FaceListGraph` and `MutableFaceGraph` that has a property map for `boost::vertex_point_t`
  NamedParameters | a sequence of Named Parameters

Parameters

  pmesh | the polygon mesh to be modified by stitching
  np | optional sequence of Named Parameters among the ones listed below

Named Parameters

  vertex_point_map | the property map with the points associated to the vertices of `pmesh`

`#include <CGAL/Polygon_mesh_processing/stitch_borders.h>`