CGAL 5.0.2 - 3D Mesh Generation
MeshDomainWithFeatures_3 Concept Reference

## Definition

The concept MeshDomainWithFeatures_3 refines the concept MeshDomain_3. While the concept MeshDomain_3 only exposes the 2-dimensional and 3-dimensional features of the domain through different queries, the concept MeshDomainWithFeatures_3 also exposes 0 and 1-dimensional features. The exposed features of the domain are respectively called subdomains, surface patches, curves and corners according to their respective dimensions 3, 2, 1, and 0.

Each curve is assumed to be bounded, with only one connected component, and without auto-intersections. Each curve is also assumed to be oriented. Therefore it is possible to define the signed geodesic distance between two ordered points on the same curve.

Refines:
MeshDomain_3
Has Models:

CGAL::Mesh_domain_with_polyline_features_3<MeshDomain_3>

CGAL::Polyhedral_mesh_domain_with_features_3<IGT>

MeshDomain_3

## Types

typedef CGAL::Tag_true Has_features
A type to distinguish MeshDomain_3 models from MeshDomainWithFeatures_3 models.

typedef unspecified_type FT
Numerical type.

typedef unspecified_type Point_3
Point type.

typedef unspecified_type Curve_index
Type of indices for curves (i.e. More...

typedef unspecified_type Corner_index
Type of indices for corners (i.e. More...

## Operations

Point_3 construct_point_on_curve (const Point_3 &p, const Curve_index &ci, FT d) const
Returns a point on the curve with index ci at signed geodesic distance d from point p. More...

## Queries

FT curve_segment_length (const Point_3 &p, const Point_3 &q, const Curve_index &curve_index, CGAL::Orientation orientation) const
Returns the length of the curve segment from p to q, on the curve with index curve_index. More...

CGAL::Sign distance_sign_along_loop (const Point_3 &p, const Point_3 &q, const Point_3 &r, const Curve_index &ci) const
Returns CGAL::POSITIVE if the signed geodesic distance from p to q on the way through r along loop with index ci is positive, CGAL::NEGATIVE if the distance is negative. More...

CGAL::Sign distance_sign (const Point_3 &p, const Point_3 &q, const Curve_index &ci) const
Returns the sign of the geodesic distance from p to q, on the curve with index ci. More...

FT curve_length (const Curve_index &curve_index) const
Returns the length of curve with index curve_index.

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
Returns true if the portion of the curve of index index, between the points c1 and c2, is covered by the spheres of centers c1 and c2 and squared radii sq_r1 and sq_r2 respectively. More...

bool is_loop (const Curve_index &ci) const
Returns true if the curve ci is a loop.

## Retrieval of the input features

template<typename OutputIterator >
OutputIterator get_corners (OutputIterator corners) const
Fills corners with the corners of the input domain. More...

template<typename OutputIterator >
OutputIterator get_curves (OutputIterator curves) const
Fills curves with the curves of the input domain. More...

## Indices converters

Index index_from_curve_index (const Curve_index &curve_index) const
Returns the index to be stored at a vertex lying on the curve identified by curve_index.

Curve_index curve_index (const Index &index) const
Returns the Curve_index of the curve where lies a vertex with dimension 1 and index index.

Index index_from_corner_index (const Corner_index &corner_index) const
Returns the index to be stored at a vertex lying on the corner identified by corner_index.

Corner_index corner_index (const Index &index) const
Returns the Corner_index of the corner where lies a vertex with dimension 0 and index index.

## ◆ Corner_index

Type of indices for corners (i.e.

$$0$$–dimensional features) of the input domain. Must be a model of CopyConstructible, Assignable, DefaultConstructible and LessThanComparable.

## ◆ Curve_index

Type of indices for curves (i.e.

$$1$$-dimensional features) of the input domain. Must be a model of CopyConstructible, Assignable, DefaultConstructible and LessThanComparable. The default constructed value must be the value of an edge which does not approximate a 1-dimensional feature of the input domain.

## ◆ construct_point_on_curve()

 Point_3 MeshDomainWithFeatures_3::construct_point_on_curve ( const Point_3 & p, const Curve_index & ci, FT d ) const

Returns a point on the curve with index ci at signed geodesic distance d from point p.

Precondition
Point p is supposed to be on curve ci. If d > 0, the signed geodesic distance from p to the endpoint of ci should be greater than d. If d < 0, the signed geodesic distance from p to the origin of the curve should be less than d.

## ◆ curve_segment_length()

 FT MeshDomainWithFeatures_3::curve_segment_length ( const Point_3 & p, const Point_3 & q, const Curve_index & curve_index, CGAL::Orientation orientation ) const

Returns the length of the curve segment from p to q, on the curve with index curve_index.

If the curve with index curve_index is a loop, the orientation identifies which portion of the loop corresponds to the curve segment, otherwise orientation must be compatible with the orientation of p and q on the curve.

## ◆ distance_sign()

 CGAL::Sign MeshDomainWithFeatures_3::distance_sign ( const Point_3 & p, const Point_3 & q, const Curve_index & ci ) const

Returns the sign of the geodesic distance from p to q, on the curve with index ci.

If the curve with index ci is a loop, the function distance_sign_along_loop() must be used instead.

## ◆ distance_sign_along_loop()

 CGAL::Sign MeshDomainWithFeatures_3::distance_sign_along_loop ( const Point_3 & p, const Point_3 & q, const Point_3 & r, const Curve_index & ci ) const

Returns CGAL::POSITIVE if the signed geodesic distance from p to q on the way through r along loop with index ci is positive, CGAL::NEGATIVE if the distance is negative.

Precondition
p != q && p != r && r != q

## ◆ get_corners()

template<typename OutputIterator >
 OutputIterator MeshDomainWithFeatures_3::get_corners ( OutputIterator corners ) const

Fills corners with the corners of the input domain.

The value type of corners must be std::pair<Corner_index,Point_3>.

## ◆ get_curves()

template<typename OutputIterator >
 OutputIterator MeshDomainWithFeatures_3::get_curves ( OutputIterator curves ) const

Fills curves with the curves of the input domain.

curves value type must be std::tuple<Curve_index,std::pair<Point_3,Index>,std::pair<Point_3,Index> >. If the curve corresponding to an entry in curves is not a loop, the pair of associated points should belong to two corners incident to the curve. If it is a loop, then the same Point_3 should be given twice and must be any point on the loop. The Index values associated to the points are their indices w.r.t. their dimension.

## ◆ is_curve_segment_covered()

 bool MeshDomainWithFeatures_3::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

Returns true if the portion of the curve of index index, between the points c1 and c2, is covered by the spheres of centers c1 and c2 and squared radii sq_r1 and sq_r2 respectively.

The points c1 and c2 are assumed to lie on the curve.