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 Mesh_2::Face_badness are NOT_BAD, BAD and 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 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 radiusedge ratio bound not less than $$sqrt(2)). Any size criteria that are satisfied by small enough tetrahedra 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 finale mesh in the neighboring of small angles. To achieve termination and the respect of size criteria everywhere, the Is_bad predicate has to return IMPERATIVELY_BAD when size criteria are not satisfied, and 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 lessthan 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 byproduct.
 
Handle to a face of the triangulation.
 
 
Copy constructible, assignable, and lessthan
comparable type.
 
 
Predicate object. Must provide two operators. The
first operator Mesh_2::Face_badness operator()(Face_handle fh, Quality& q) returns NOT_BAD if it satisfies the desired criteria
for mesh triangles, BAD if it does not, and 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 NOT_BAD if q is the quality
of a good triangle, BAD if the q represents a poor quality,
and IMPERATIVELY_BAD if q represents the quality of a bad
triangle that should be refined unconditionally.


