## GeneralPolygonSetTraits_2

### Definition

This concept defines the minimal set of geometric predicates needed to perform the Boolean-set operations. It refines the directional x-monotone arrangement-traits concept. In addition to the Point_2 and X_monotone_curve_2 types defined in the generalized concept, it defines a type that represents a general polygon and another one that represents general polygon with holes. It also requires operations that operate on these types.

### Refines

ArrangementDirectionalXMonotoneTraits_2

### Types

 GeneralPolygonSetTraits_2::Polygon_2 represents a general polygon. GeneralPolygonSetTraits_2::Polygon_with_holes_2 represents a general polygon with holes. GeneralPolygonSetTraits_2::Curve_const_iterator A const iterator of curves. Its value type is const X_monotone_curve_2.

### Functor Types

 GeneralPolygonSetTraits_2::Construct_polygon_2 a functor that constructs a general polygon from a range of x-monotone curves. It uses the operator void operator() (InputIterator begin, Input iterator end, Polygon_2 & pgn), parameterized by the InputIterator type. GeneralPolygonSetTraits_2::Construct_curves_2 a functor that returns a pair that consists of the begin and past-the-end iterators of the x monotone curves of the boundary of a given general polygon. It uses the operator std:pair operator() (const Polygon_2 & pgn). GeneralPolygonSetTraits_2::Is_valid_2 provides the operators : bool operator() (Polygon_2 & pgn) which returns true if the pgn is valid, and false otherwise; and : bool operator() (Polygon_with_holes_2 & pgn_with_holes) which returns true if pgn_with_holes is valid, and false otherwise. A polygon of type Polygon_2 is valid, if it is strictly simple and oriented counterclockwise. A polygon of type Polygon_with_holes_2 is valid, if its outer boundary is simple and oriented counterclockwise, and each one of its holes is a strictly simple polygon that oriented clockwise, contained inside its outer boundary, and they are all together pairwise disjoint, except perhaps at the vertices. This functionality is used to verify precondition of some of the operations.

### Creation

 GeneralPolygonSetTraits_2 traits; default constructor. GeneralPolygonSetTraits_2 traits ( other); copy constructor
 GeneralPolygonSetTraits_2 traits = other assignment operator.

### Accessing Functor Objects

 Construct_polygon_2 traits.construct_polygon_2_object () returns a functor that constructs a polygon. Construct_curves_2 traits.construct_curves_2_object () returns a functor that obtains the curves of a polygon. Is_valid_2 traits.is_valid_2_object () returns a functor that checks the validity of a polygon.

### Has Models

CGAL::Gps_segment_traits_2<Kernel,Container,ArrSegmentTraits>
CGAL::Gps_circle_segment_traits_2<Kernel>
CGAL::Gps_traits_2<ArrTraits,GeneralPolygon>