CGAL 6.1 - 3D Mesh Generation

Loading...
Searching...
No Matches
List of all members | Public Member Functions
CGAL::Polyhedral_complex_mesh_domain_3< IGT, Polyhedron > Class Template Reference
Reference Manual » Domain Classes

`#include <CGAL/Polyhedral_complex_mesh_domain_3.h>`

## Inherits from

CGAL::Mesh_domain_with_polyline_features_3< MD >.

## Definition

template<class IGT, class Polyhedron = typename Mesh_polyhedron_3<IGT>::type>
class CGAL::Polyhedral_complex_mesh_domain_3< IGT, Polyhedron >

The class `Polyhedral_complex_mesh_domain_3` implements a domain defined by a collection of polyhedral surfaces, forming a complex.

The constraints on the complex are:

- a polyhedral surface of the complex cannot self-intersect,
- two polyhedral surfaces of the complex are either disjoint, or share a subset of their border edges.

It is a model of the concept `MeshDomainWithFeatures_3`. It also provides a member function to automatically detect sharp features and boundaries from the input polyhedral surface(s).

The union of the polyhedral surfaces is a non-manifold surface, called the 2D surface of the domain. It is locally manifold, with or without borders, but at the intersections of polyhedral surfaces.

The complement of the 2D surface is decomposed into:

- zero, one, or many sub-domains of the mesh domain,
- plus the exterior of the mesh domain.

If the domain has sub-domains, each one must be the union of one or many connected components of the complement of the 2D surface. The sub-domains have indices, of integral type `Subdomain_index`, and the exterior of the mesh domain is associated with the subdomain index `0`, like for any mesh domain in CGAL.

Each polyhedral surface is oriented, and has two sides. The positive side is union of the positive side of all of its facets, usually named the "exterior" of the surface. The negative side is the other side. The use of `Polyhedral_complex_mesh_domain_3` assumes that for each polyhedral surface, the sub-domain indices on both sides are known.

Template Parameters

  Polyhedron | stands for the type of the input polyhedral surface(s), model of `FaceListGraph`.
  IGT | stands for a geometric traits class providing the types and functors required to implement the intersection tests and intersection computations for polyhedral boundary surfaces. This parameter has to be instantiated with a model of the concept `IntersectionGeometricTraits_3`.

Is model of
  `MeshDomainWithFeatures_3`

See also
  `CGAL::make_mesh_3()`
  `CGAL::Mesh_domain_with_polyline_features_3<MD>`
  `CGAL::Polyhedral_mesh_domain_3<Polyhedron,IGT>`
  `CGAL::Mesh_polyhedron_3<IGT>`

Examples
  Mesh_3/mesh_polyhedral_complex.cpp, and Mesh_3/mesh_polyhedral_complex_sm.cpp.

## Public Member Functions
void | detect_features (FT angle_bound=FT(60))
| detects sharp features and boundaries of the polyhedral components of the complex (including potential internal polyhedra), and inserts them as features of the domain.
void | detect_borders ()
| detects border edges of the polyhedral components of the complex, and inserts them as features of the domain.
Public Member Functions inherited from CGAL::Mesh_domain_with_polyline_features_3< MD >
template<typename ... T>
| Mesh_domain_with_polyline_features_3 (const T &...o)
| Mesh_domain_with_polyline_features_3 (const Mesh_domain_with_polyline_features_3 &)=default
template<typename InputIterator >
void | add_features (InputIterator first, InputIterator end)
| adds 1-dimensional features in the domain.
template<typename InputIterator , typename PolylinePMap , typename IncidentPatchesIndicesPMap >
void | add_features_and_incidences (InputIterator first, InputIterator end, PolylinePMap polyline_pmap, IncidentPatchesIndicesPMap incident_patches_indices_pmap)
| adds 1-dimensional features (curves) from the range `[first, end)` in the domain with their incidences with 2-dimensional features (patches) of the domain.
template<typename OutputIterator >
OutputIterator | get_corners (OutputIterator out) const
| implements `MeshDomainWithFeatures_3::get_corners()`.
template<typename OutputIterator >
OutputIterator | get_curves (OutputIterator out) const
| implements `MeshDomainWithFeatures_3::get_curves()`.
FT | curve_segment_length (const Point_3 &p, const Point_3 q, const Curve_index &curve_index, CGAL::Orientation orientation) const
| implements `MeshDomainWithFeatures_3::curve_segment_length()`.
FT | curve_length (const Curve_index &curve_index) const
| implements `MeshDomainWithFeatures_3::curve_length()`.
Point_3 | construct_point_on_curve (const Point_3 &starting_point, const Curve_index &curve_index, FT distance) const
| implements `MeshDomainWithFeatures_3::construct_point_on_curve()`.
CGAL::Sign | distance_sign_along_loop (const Point_3 &p, const Point_3 &q, const Point_3 &r, const Curve_index &index) const
| implements `MeshDomainWithFeatures_3::distance_sign_along_loop()`.
CGAL::Sign | distance_sign (const Point_3 &p, const Point_3 &q, const Curve_index &index) const
| implements `MeshDomainWithFeatures_3::distance_sign()`.
bool | is_loop (const Curve_index &index) const
| implements `MeshDomainWithFeatures_3::is_loop()`.
bool | is_curve_segment_covered (const Curve_index &index, CGAL::Orientation orientation, const Point_3 &c1, const Point_3 &c2, const FT sq_r1, const FT sq_r2) const
| implements `MeshDomainWithFeatures_3::is_curve_segment_covered()`.
Index | index_from_surface_patch_index (const Surface_patch_index &index) const
| Returns the index to be stored in a vertex lying on the surface identified by `index`.
Index | index_from_subdomain_index (const Subdomain_index &index) const
| Returns the index to be stored in a vertex lying in the subdomain identified by `index`.
Index | index_from_curve_index (const Curve_index &index) const
| returns an `Index` from a `Curve_index`
Index | index_from_corner_index (const Corner_index &index) const
| returns an `Index` from a `Corner_index`
Surface_patch_index | surface_patch_index (const Index &index) const
| Returns the `Surface_patch_index` of the surface patch where lies a vertex with dimension 2 and index `index`.
Subdomain_index | subdomain_index (const Index &index) const
| Returns the index of the subdomain containing a vertex with dimension 3 and index `index`.
Curve_index | curve_index (const Index &index) const
| returns a `Curve_index` from an `Index`
Corner_index | corner_index (const Index &index) const
| returns a `Corner_index` from an `Index`

## Creation
template<typename InputPolyhedraIterator , typename InputPairOfSubdomainIndicesIterator >
| Polyhedral_complex_mesh_domain_3 (InputPolyhedraIterator begin, InputPolyhedraIterator end, InputPairOfSubdomainIndicesIterator indices_begin, InputPairOfSubdomainIndicesIterator indices_end)
| constructs a domain defined by a set of polyhedral surfaces, describing a polyhedral complex.

## Additional Inherited Members
Public Types inherited from CGAL::Mesh_domain_with_polyline_features_3< MD >
typedef MD::Surface_patch_index | Surface_patch_index
typedef MD::Subdomain_index | Subdomain_index
typedef int | Curve_index
typedef int | Corner_index
typedef unspecified_type | Index
typedef CGAL::Tag_true | Has_features
typedef MD::R::FT | FT

## Constructor & Destructor Documentation

## ◆ Polyhedral_complex_mesh_domain_3()

template<class IGT , class Polyhedron = typename Mesh_polyhedron_3<IGT>::type>
template<typename InputPolyhedraIterator , typename InputPairOfSubdomainIndicesIterator >

CGAL::Polyhedral_complex_mesh_domain_3< IGT, Polyhedron >::Polyhedral_complex_mesh_domain_3 | ( | InputPolyhedraIterator | begin,
|  | InputPolyhedraIterator | end,
|  | InputPairOfSubdomainIndicesIterator | indices_begin,
|  | InputPairOfSubdomainIndicesIterator | indices_end
| ) |  |

constructs a domain defined by a set of polyhedral surfaces, describing a polyhedral complex.

Parameters

  begin | first iterator on the input polyhedral surfaces
  end | past the end iterator on the input polyhedral surfaces
  indices_begin | first iterator on the pairs of subdomain indices (two subdomain indices per input polyhedral surface), corresponding to the first input polyhedral surface. Each pair should be ordered as follows : the first (resp. second) element is the index of the subdomain that lies on the positively oriented (resp. negatively oriented) side of the corresponding input polyhedral surface.
  indices_end | past the end iterator on the pairs of subdomain indices

Template Parameters

  InputPolyhedraIterator | model of `ForwardIterator`, holding `Polyhedron`'s
  InputPairOfSubdomainIndicesIterator | model of `ForwardIterator`, holding `std::pair<Subdomain_index, Subdomain_index>`

Precondition
  `std::distance(begin, end) == std::distance(indices_begin, indices_end)`

## Member Function Documentation

## ◆ detect_borders()

template<class IGT , class Polyhedron = typename Mesh_polyhedron_3<IGT>::type>

void CGAL::Polyhedral_complex_mesh_domain_3< IGT, Polyhedron >::detect_borders | ( |  | ) |

detects border edges of the polyhedral components of the complex, and inserts them as features of the domain.

This function should only be called alone, and not before or after `detect_features()`.

## ◆ detect_features()

template<class IGT , class Polyhedron = typename Mesh_polyhedron_3<IGT>::type>

void CGAL::Polyhedral_complex_mesh_domain_3< IGT, Polyhedron >::detect_features | ( | FT | angle_bound = `FT(60)` | ) |

detects sharp features and boundaries of the polyhedral components of the complex (including potential internal polyhedra), and inserts them as features of the domain.

`angle_bound` gives the maximum angle (in degrees) between the two normal vectors of adjacent triangles. For an edge of the polyhedron, if the angle between the two normal vectors of its incident facets is bigger than the given bound, then the edge is considered as a feature edge, and inserted as a feature of the domain.