CGAL 6.2 - 3D Mesh Generation: CGAL::Polyhedral_mesh_domain_with_features_3< IGT, Polyhedron > Class Template Reference

CGAL 6.2 - 3D Mesh Generation

Loading...
Searching...
No Matches
List of all members
CGAL::Polyhedral_mesh_domain_with_features_3< IGT, Polyhedron > Class Template Reference
Reference Manual » Domain Classes

`#include <CGAL/Polyhedral_mesh_domain_with_features_3.h>`

## Inherits from

CGAL::Mesh_domain_with_polyline_features_3< MD, version >.

## Definition

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

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

This surface must be free of intersections. It can either be closed, included inside another polyhedral surface which is closed and free of intersections, 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).

Note
  When the given surface(s) are not closed, the surface only will be meshed. It is then recommended to use the parameter `parameters::surface_only()` to speedup the meshing process.

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`.
  Polyhedron | stands for the type of the input polyhedral surface(s), model of `FaceListGraph`. It must be a triangle mesh.

Is model of
  `MeshDomainWithFeatures_3`

See also
  `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_domain_with_edge_distance.cpp, Mesh_3/mesh_polyhedral_domain_with_features.cpp, Mesh_3/mesh_polyhedral_domain_with_features_sizing.cpp, Mesh_3/mesh_polyhedral_domain_with_features_sm.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.

## Creation
| Polyhedral_mesh_domain_with_features_3 (const Polyhedron &polyhedron)
| Constructor from a polyhedral surface.
| Polyhedral_mesh_domain_with_features_3 (const Polyhedron &polyhedron, const Polyhedron &bounding_polyhedron)
| Constructor from a polyhedral surface, and a bounding polyhedral surface.
template<typename InputPolyhedraPtrIterator >
| Polyhedral_mesh_domain_with_features_3 (InputPolyhedraPtrIterator begin, InputPolyhedraPtrIterator end)
| Constructor from a sequence of polyhedral surfaces, without a bounding surface.
template<typename InputPolyhedraPtrIterator >
| Polyhedral_mesh_domain_with_features_3 (InputPolyhedraPtrIterator begin, InputPolyhedraPtrIterator end, const Polyhedron &bounding_polyhedron)
| Constructor from a sequence of polyhedral surfaces, and a bounding polyhedral surface.

## Operations
void | detect_features (FT angle_bound=FT(60))
| detects sharp features and boundaries of the internal bounding polyhedron (and the potential internal polyhedra) 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< MD, version >
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
Public Member Functions inherited from CGAL::Mesh_domain_with_polyline_features_3< MD, version >
| Mesh_domain_with_polyline_features_3 (const MD &base_domain)
template<typename Other_MD , API_version other_version, typename = std::enable_if_t<std::is_same_v<MD, Other_MD> && (other_version != version)>>
| Mesh_domain_with_polyline_features_3 (const Mesh_domain_with_polyline_features_3< Other_MD, other_version > &)=delete
| 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_segment_length (const Point_3 &p, const Point_3 q, const Position_on_curve p_it, const Position_on_curve q_it, const Curve_index &curve_index, CGAL::Orientation orientation) const
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()`.
Point_and_position | construct_point_on_curve (const Point_3 &starting_point, const Curve_index &curve_index, FT distance, Position_on_curve starting_point_it) 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_along_loop (const Point_3 &p, const Point_3 &q, const Point_3 &r, const Curve_index &index, Position_on_curve pit, Position_on_curve qit, Position_on_curve rit) const
CGAL::Sign | distance_sign (const Point_3 &p, const Point_3 &q, const Curve_index &index) const
| implements `MeshDomainWithFeatures_3::distance_sign()`.
CGAL::Sign | distance_sign (const Point_3 &p, const Point_3 &q, const Curve_index &index, Position_on_curve pit, Position_on_curve qit) const
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()`.
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 Position_on_curve c1_it, const Position_on_curve c2_it) const
Position_on_curve | locate_corner (const Curve_index &curve_index, const Point_3 &p) const
| locates the corner point `p` on the curve identified by `curve_index`
Position_on_curve | locate_point (const Curve_index &curve_index, const Point_3 &p) const
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`

## Constructor & Destructor Documentation

## ◆ Polyhedral_mesh_domain_with_features_3() [1/4]

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

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

Constructor from a polyhedral surface.

No feature detection is done at this level. Note that a copy of `polyhedron` will be made. The polyhedron `polyhedron` must be free of intersections. If `polyhedron` is closed, its inside will be meshed, otherwise there will be no interior and only the surface will be meshed.

## ◆ Polyhedral_mesh_domain_with_features_3() [2/4]

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

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

Constructor from a polyhedral surface, and a bounding polyhedral surface.

The first polyhedron should be entirely included inside `bounding_polyhedron`, which has to be closed and free of intersections. Using this constructor enables 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/4]

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

CGAL::Polyhedral_mesh_domain_with_features_3< IGT, Polyhedron >::Polyhedral_mesh_domain_with_features_3 | ( | InputPolyhedraPtrIterator | begin,
|  | InputPolyhedraPtrIterator | end
| ) |  |

Constructor from a sequence of polyhedral surfaces, without a bounding surface.

The domain will always answer `false` to `is_in_domain()` queries.

Template Parameters

  InputPolyhedraPtrIterator | must be a model of `ForwardIterator` with value type `Polyhedron*`

Parameters

  begin | iterator for a sequence of pointers to polyhedra
  end | iterator for a sequence of pointers to polyhedra

## ◆ Polyhedral_mesh_domain_with_features_3() [4/4]

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

CGAL::Polyhedral_mesh_domain_with_features_3< IGT, Polyhedron >::Polyhedral_mesh_domain_with_features_3 | ( | InputPolyhedraPtrIterator | begin,
|  | InputPolyhedraPtrIterator | end,
|  | const Polyhedron & | bounding_polyhedron
| ) |  |

Constructor from a sequence of polyhedral surfaces, and a bounding polyhedral surface.

Template Parameters

  InputPolyhedraPtrIterator | must be a model of `ForwardIterator` with value type `Polyhedron*`

Parameters

  begin | iterator for a sequence of pointers to polyhedra
  end | iterator for a sequence of pointers to polyhedra
  bounding_polyhedron | the bounding surface

## Member Function Documentation

## ◆ detect_borders()

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

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

detects border edges of the bounding polyhedron 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_mesh_domain_with_features_3< IGT, Polyhedron >::detect_features | ( | FT | angle_bound = `FT(60)` | ) |

detects sharp features and boundaries of the internal bounding polyhedron (and the potential internal polyhedra) and inserts them as features of the domain.

Parameters

  angle_bound | gives the maximum angle (in degrees) between the two normal vectors of adjacent triangles. For an edge of a 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.