\( \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 - 2D Conforming Triangulations and Meshes

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

## Definition

The concept `MeshingCriteria_2` defines the meshing criteria to be used in the algorithm. It provides a predicate `Is_bad` that tests a triangle according to criteria. The return type of `Is_bad` is an enum `Mesh_2::Face_badness`.

The possible values of `CGAL::Mesh_2::Face_badness` are `CGAL::Mesh_2::NOT_BAD`, `CGAL::Mesh_2::BAD` and `CGAL::Mesh_2::IMPERATIVELY_BAD`. If the predicate returns `BAD`, the triangle is marked as bad and the algorithm will try to destroy it. If the predicates returns `CGAL::Mesh_2::IMPERATIVELY_BAD`, the algorithm will destroy the triangle unconditionally during its execution.

The termination of the algorithm is guaranteed when criteria are shape criteria corresponding to a bound on smallest angles not less than \( 20.7\) degrees (this corresponds to a radius-edge ratio bound not less than \( \sqrt{2}\)). Any size criteria that are satisfied by small enough triangle can be added to the set of criteria without compromising the termination.

Note that, in the presence of input angles smaller than \( 60\) degrees, some bad shaped triangles can appear in the final mesh in the neighboring of small angles. To achieve termination and the respect of size criteria everywhere, the `Is_bad` predicate has to return `CGAL::Mesh_2::IMPERATIVELY_BAD` when size criteria are not satisfied, and `CGAL::Mesh_2::BAD` when shape criteria are not satisfied.

`MeshingCriteria_2` also provides a type `Quality` designed to code a quality measure for triangles. The type `Quality` must be less-than comparable as the meshing algorithm will order bad triangles by quality, to split those with smallest quality first. The predicate `Is_bad` computes the quality of the triangle as a by-product.

Has Models:

  `CGAL::Delaunay_mesh_criteria_2<CDT>`

  `CGAL::Delaunay_mesh_size_criteria_2<CDT>`

## Types
typedef unspecified_type | Face_handle
| Handle to a face of the triangulation.
typedef unspecified_type | Quality
| Default constructible, copy constructible, assignable, and less-than comparable type.
typedef unspecified_type | Is_bad
| Predicate object. More...

## Access to predicate and constructor objects
Is_bad | is_bad_object ()

## Member Typedef Documentation

typedef unspecified_type MeshingCriteria_2::Is_bad

Predicate object.

Must provide two operators.

- The first operator `Mesh_2::Face_badness operator()(Face_handle fh, Quality& q)` returns

  - `CGAL::Mesh_2::NOT_BAD` if it satisfies the desired criteria for mesh triangles,
  - `CGAL::Mesh_2::BAD` if it does not, and
  - `CGAL::Mesh_2::IMPERATIVELY_BAD` if it does not and should be refined unconditionally.

  In addition, this operator assigns to `q` a value measuring the quality of the triangle pointed by `fh`.

- The second operator `Mesh_2::Face_badness operator()(Quality q)` returns
  - `CGAL::Mesh_2::NOT_BAD` if `q` is the quality of a good triangle,
  - `CGAL::Mesh_2::BAD` if the `q` represents a poor quality, and
  - `CGAL::Mesh_2::IMPERATIVELY_BAD` if `q` represents the quality of a bad triangle that should be refined unconditionally.