CGAL 5.6.3 - 3D Mesh Generation

Loading...
Searching...
No Matches
List of all members
CGAL::Polyhedral_mesh_domain_with_features_3< IGT > Class Template Reference
3D Mesh Generation Reference » Domain Classes

`#include <CGAL/Polyhedral_mesh_domain_with_features_3.h>`

## Inherits from

CGAL::Mesh_domain_with_polyline_features_3< CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT > >.

## Definition

template<typename IGT>
class CGAL::Polyhedral_mesh_domain_with_features_3< IGT >

The class `Polyhedral_mesh_domain_with_features_3` implements a domain whose boundary is a simplicial polyhedral surface.

This surface must be free of intersection. It can either be closed, included inside another polyhedral surface which is closed and free of intersection, or open. In the latter case, the meshing process will only take care of the quality of the 1D (features and boundaries) and 2D (surfaces) components of the mesh.

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

Template Parameters

  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::Mesh_domain_with_polyline_features_3<MD>`
  `CGAL::Polyhedral_mesh_domain_3<Polyhedron,IGT,TriangleAccessor>`
  `CGAL::Mesh_polyhedron_3<IGT>`

Examples
  Mesh_3/mesh_polyhedral_domain_with_features.cpp, Mesh_3/mesh_polyhedral_domain_with_features_sizing.cpp, Mesh_3/mesh_polyhedral_domain_with_lipschitz_sizing.cpp, Mesh_3/mesh_polyhedral_domain_with_surface_inside.cpp, and Mesh_3/remesh_polyhedral_surface.cpp.

## Types
typedef unspecified_type | FT
| Numerical type.

## Creation
template<typename Polyhedron >
| Polyhedral_mesh_domain_with_features_3 (const Polyhedron &bounding_polyhedron)
| Constructs a `Polyhedral_mesh_domain_with_features_3` from a polyhedral surface of type `Polyhedron`.
template<typename Polyhedron >
| Polyhedral_mesh_domain_with_features_3 (const Polyhedron &polyhedron, const Polyhedron &bounding_polyhedron)
| Constructs a `Polyhedral_mesh_domain_with_features_3` from a polyhedral surface, and a bounding polyhedral surface.
| Polyhedral_mesh_domain_with_features_3 (const std::string &filename)

## Operations
void | detect_features (FT angle_bound=60)
| Detects sharp features and boundaries of the internal bounding polyhedron (and the potential internal polyhedron) and inserts them as features of the domain.
void | detect_borders ()
| Detects border edges of the bounding polyhedron and inserts them as features of the domain.

## Additional Inherited Members
Public Types inherited from CGAL::Mesh_domain_with_polyline_features_3< CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT > >
typedef MeshDomain::Surface_patch_index | Surface_patch_index
typedef MeshDomain::Subdomain_index | Subdomain_index
typedef int | Curve_index
typedef int | Corner_index
typedef unspecified_type | Index
typedef CGAL::Tag_true | Has_features
typedef MeshDomain::R::FT | FT
Public Member Functions inherited from CGAL::Mesh_domain_with_polyline_features_3< CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT > >
| Mesh_domain_with_polyline_features_3 (const T &...o)
| Mesh_domain_with_polyline_features_3 (const Mesh_domain_with_polyline_features_3 &)=default
void | add_features (InputIterator first, InputIterator end)
| Add 1-dimensional features in the domain.
void | add_features_and_incidences (InputIterator first, InputIterator end, PolylinePMap polyline_pmap, IncidentPatchesIndicesPMap incident_patches_indices_pmap)
| Add 1-dimensional features (curves) from the range `[first, end)` in the domain with their incidences with 2-dimensional features (patches) of the domain.
OutputIterator | get_corners (OutputIterator out) const
| Implements `MeshDomainWithFeatures_3::get_corners()`.
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`
Public Member Functions inherited from CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT >
| Polyhedral_mesh_domain_3 (const CGAL::Mesh_polyhedron_3< IGT >::type &bounding_polyhedron)
| Construction from a bounding polyhedral surface which must be closed, and free of intersections.
| Polyhedral_mesh_domain_3 (const CGAL::Mesh_polyhedron_3< IGT >::type &polyhedron, const CGAL::Mesh_polyhedron_3< IGT >::type &bounding_polyhedron)
| Construction from a polyhedral surface, and a bounding polyhedral surface,.

## Constructor & Destructor Documentation

## ◆ Polyhedral_mesh_domain_with_features_3() [1/3]

template<typename IGT >
template<typename Polyhedron >

CGAL::Polyhedral_mesh_domain_with_features_3< IGT >::Polyhedral_mesh_domain_with_features_3 | ( | const Polyhedron & | bounding_polyhedron | ) |

Constructs a `Polyhedral_mesh_domain_with_features_3` from a polyhedral surface of type `Polyhedron`.

The only requirement on type `Polyhedron` is that `CGAL::Mesh_polyhedron_3<IGT>::type` should be constructible from `Polyhedron`. No feature detection is done at this level. Note that a copy of `bounding_polyhedron` will be done. The polyhedron `bounding_polyhedron` has to be closed and free of intersections. Its interior of `bounding_polyhedron` will be meshed.

## ◆ Polyhedral_mesh_domain_with_features_3() [2/3]

template<typename IGT >
template<typename Polyhedron >

CGAL::Polyhedral_mesh_domain_with_features_3< IGT >::Polyhedral_mesh_domain_with_features_3 | ( | const Polyhedron & | polyhedron,
|  | const Polyhedron & | bounding_polyhedron
| ) |  |

Constructs a `Polyhedral_mesh_domain_with_features_3` from a polyhedral surface, and a bounding polyhedral surface.

`CGAL::Mesh_polyhedron_3<IGT>::type` should be constructible from `Polyhedron`. The first polyhedron should be entirely included inside `bounding_polyhedron`, which has to be closed and free of intersections. Using this constructor allows to mesh a polyhedral surface which is not closed, or has holes. The inside of `bounding_polyhedron` will be meshed.

## ◆ Polyhedral_mesh_domain_with_features_3() [3/3]

template<typename IGT >

CGAL::Polyhedral_mesh_domain_with_features_3< IGT >::Polyhedral_mesh_domain_with_features_3 | ( | const std::string & | filename | ) |

Deprecated:
  Constructs a `Polyhedral_mesh_domain_with_features_3` from an off file. No feature detection is done at this level. Users must read the file into a `Polyhedron_3` and call the constructor above.

## Member Function Documentation

## ◆ detect_borders()

template<typename IGT >

void CGAL::Polyhedral_mesh_domain_with_features_3< IGT >::detect_borders | ( |  | ) |

Detects border edges of the bounding polyhedron and inserts them as features of the domain.

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

## ◆ detect_features()

template<typename IGT >

void CGAL::Polyhedral_mesh_domain_with_features_3< IGT >::detect_features | ( | FT | angle_bound = `60` | ) |

Detects sharp features and boundaries of the internal bounding polyhedron (and the potential internal polyhedron) 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.