CGAL 6.2 - 3D Mesh Generation

Loading...
Searching...
No Matches
List of all members
MeshDomainWithFeatures_3 Concept Reference
Reference Manual » 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, 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<MD>`
  `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 | Point_3
| Point type.
typedef unspecified_type | Curve_index
| Type of indices for curves (i.e., \( 1\)-dimensional features) of the input domain.
typedef unspecified_type | Corner_index
| Type of indices for corners (i.e., \( 0\)–dimensional features) of the input domain.

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

## 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`.
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.
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`.
FT | curve_length (const Curve_index &curve_index) const
| Returns the length of the input curve with index `curve_index`
FT | signed_geodesic_distance (const Point_3 &pa, const Point_3 &pb, const Curve_index &curve_index) const
| Returns the signed geodesic distance between points `pa` and `pb` on the 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.
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.
template<typename OutputIterator >
OutputIterator | get_curves (OutputIterator curves) const
| Fills `curves` with the curves of the input domain.

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

## Member Typedef Documentation

## ◆ Corner_index

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.

## ◆ Curve_index

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

## Member Function Documentation

## ◆ 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.