\( \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 5.0.1 - 3D Mesh Generation
CGAL::Polyhedral_mesh_domain_with_features_3< IGT > Class Template Reference

#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

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
IGTstands 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_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. More...
 
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. More...
 
 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. More...
 
void detect_borders ()
 Detects border edges of the bounding polyhedron and inserts them as features of the domain. More...
 

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 CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT > ::Surface_patch_index Surface_patch_index
 
typedef CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT > ::Subdomain_index Subdomain_index
 
typedef int Curve_index
 
typedef int Corner_index
 
typedef Mesh_3::internal::Index_generator_with_features< typename CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT > ::Subdomain_index, Surface_patch_index, Curve_index, Corner_index >::type Index
 
typedef CGAL::Tag_true Has_features
 
typedef CGAL::Polyhedral_mesh_domain_3< CGAL::Mesh_polyhedron_3< IGT >::type, IGT > ::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 ()
 
 Mesh_domain_with_polyline_features_3 (const T1 &o1, typename boost::disable_if< boost::is_same< T1, Self >, CGAL::Tag_false >::type *=0)
 
 Mesh_domain_with_polyline_features_3 (const T1 &o1, const T2 &o2, const T &...o)
 
void add_features (InputIterator first, InputIterator end)
 Add 1-dimensional features in the domain. More...
 
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. More...
 
OutputIterator get_corners (OutputIterator out) const
 Implements MeshDomainWithFeatures_3::get_corners(). More...
 
OutputIterator get_curves (OutputIterator out) const
 Implements MeshDomainWithFeatures_3::get_curves(). More...
 
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 bouding polyhedral surface which must be closed, and free of intersections. More...
 
 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,. More...
 

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.