\( \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 4.8 - 3D Mesh Generation

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
List of all members
MeshDomainWithFeatures_3 Concept Reference
Main Concepts

## 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, curve segments and corners according to their respective dimensions 3,2,1 and 0.

Refines:
  `MeshDomain_3`

Has Models:

  `CGAL::Mesh_domain_with_polyline_features_3<MeshDomain_3>`

  `CGAL::Polyhedral_mesh_domain_with_features_3<IGT>`

See Also
  `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 | Curve_segment_index
| Type of indices for curve segments ( \( 1\)-dimensional features) of the input domain. More...
typedef unspecified_type | Corner_index
| Type of indices for corners (i.e. 0-dimensional features) of the input domain. More...

## Operations
Each connected component of a curve segment is assumed to be oriented. The orientation is defined by the ordering of the two incident corners at the origin and endpoint. Therefore it is possible to defined the signed geodesic distance between two ordered points on the same connected component of a curve segment. A cycle is a connected component of a curve segment incident to 0 or 1 corner. Note `construct_point_on_curve segment` is assumed to return a uniquely defined point. Therefore it is not possible to handle as a single curve segment, a singular curve with several branches incident to the same point.
Point_3 | construct_point_on_curve_segment (const Point_3 &p, const Curve_segment_index &ci, FT d) const
| Returns a point on the curve segment with index `ci` at signed geodesic distance `d` from point `p`. More...

## Queries
FT | geodesic_distance (const Point_3 &p, const Point_3 &q, const Curve_segment_index &ci) const
| Returns the signed geodesic distance between points `p` and `q` along the input curve segment with index `ci`. More...
CGAL::Sign | distance_sign_along_cycle (const Point_3 &p, const Point_3 &q, const Point_3 &r, const Curve_segment_index &ci) const
| Returns `CGAL::POSITIVE` if the signed geodesic distance from `p` to `q` on the way through \( r\) along cycle with index `ci` is positive, `CGAL::NEGATIVE` if the distance is negative, and `CGAL::ZERO` if `(p = q = r)`. More...
bool | is_cycle (const Point_3 &p, const Curve_segment_index &ci) const
| Returns `true` if the connected component of curve segment `ci` including point `p` is a cycle.

## Retrieval of the input features and their incidences
template<typename OutputIterator >
OutputIterator | get_corners (OutputIterator corners) const
| Fills `corners` with the corners of the input domain. More...
template<typename OutputIterator >
OutputIterator | get_curve_segments (OutputIterator curves) const
| Fills `curves` with the curve segments of the input domain. More...
bool | are_incident_surface_patch_curve_segment (Surface_patch_index spi, Curve_segment_index csi)
| Returns `true` if the curve segment with index `csi` is incident to the surface patch with index `spi`.
bool | are_incident_surface_patch_corner (Surface_patch_index spi, Corner_index ci)
| Returns `true` if the corner with index `ci` is incident to the surface patch with index `spi`.

## Indices converters
Index | index_from_curve_segment_index (const Curve_segment_index &curve_segment_index) const
| Returns the index to be stored at a vertex lying on the curve segment identified by `curve_segment_index`.
Curve_segment_index | curve_segment_index (const Index &index) const
| Returns the `Curve_segment_index` of the curve segment 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`.

## Member Typedef Documentation

typedef unspecified_type MeshDomainWithFeatures_3::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.

typedef unspecified_type MeshDomainWithFeatures_3::Curve_segment_index

Type of indices for curve segments ( \( 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.

## Member Function Documentation

Point_3 MeshDomainWithFeatures_3::construct_point_on_curve_segment | ( | const Point_3 & | p,
|  | const Curve_segment_index & | ci,
|  | FT | d
| ) |  | const

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

Precondition
  Point `p` is supposed to be on curve segment `ci`. If `d > 0`, the signed geodesic distance from `p` to the endpoint of the connected component of `ci` including \( p\), should be greater than \( d\). If `d < 0`, the signed geodesic distance from `p` to the origin of the connected component should be less than \( d\) from the origin of the connected component.

CGAL::Sign MeshDomainWithFeatures_3::distance_sign_along_cycle | ( | const Point_3 & | p,
|  | const Point_3 & | q,
|  | const Point_3 & | r,
|  | const Curve_segment_index & | ci
| ) |  | const

Returns `CGAL::POSITIVE` if the signed geodesic distance from `p` to `q` on the way through \( r\) along cycle with index `ci` is positive, `CGAL::NEGATIVE` if the distance is negative, and `CGAL::ZERO` if `(p = q = r)`.

Precondition
  Points `p`, `q` and `r` belongs to the same connected component of curve segment `ci` and this component is a cycle.

FT MeshDomainWithFeatures_3::geodesic_distance | ( | const Point_3 & | p,
|  | const Point_3 & | q,
|  | const Curve_segment_index & | ci
| ) |  | const

Returns the signed geodesic distance between points `p` and `q` along the input curve segment with index `ci`.

Precondition
  Points `p` and `q` belong to the same connected component of the curve segment with index `ci`.

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

template<typename OutputIterator >

OutputIterator MeshDomainWithFeatures_3::get_curve_segments | ( | OutputIterator | curves) |  | const

Fills `curves` with the curve segments of the input domain.

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