## ArrangementBasicTraits_2

### Definition

The concept ArrangementBasicTraits_2 defines the minimal set of geometric predicates needed for the constrcution and maintenance of objects of the class Arrangement_2, as well as performing simple queries (such as point-location queries) on such arrangements.

A model of this concept must define nested Point_2 and X_monotone_curve_2 types, which represent planar points and continuous x-monotone curves (a vertical segment is also considered to be weakly x-monotone), respectively. The x-monotone curves are assumed to be pairwise disjoint in their interiors, so they do not intersect except at their endpoints.

The x-monotone curves may be unbounded, namely they may have unbounded ends that lie at infinity, or bounded, in which case their have finite endpoints are representable as Point_2 objects. An x-monotone curve may also have one unbounded end and one finite endpoint (e.g. a ray). If unbounded curves are supported, the requirements from the traits class are extended a bit, as described below. In particular, the traits class needs to support comparisons at infinity, where we interpret comparisons at infinity as follows: Suppose we wish to compare the y-position of the hyperbolas y1 = (1)/(x) and y2 = (2)/(x) at x = ∞; than since there exists x0 such that for each finite x > x0 we have y2(x) > y1(x) (in our case we can take x0 = 0), we say that y2 is above y1 at infinity. Similarly, when comparing the x-positions of the vertical line x = 0 and the xy-minimal end of parabola y = (1)/(x) for x > 0 (which has a vertical asymptote at x = 0), we define that the line lies to the left of the hyperbola. Namely, comparing curves at their unbounded ends should return the comparison result EQUAL only if the curves overlap.

### Refines

DefaultConstructible, CopyConstructible, Assignable

### Types

 ArrangementBasicTraits_2::Point_2 models the concept ArrTraits::Point_2. ArrangementBasicTraits_2::X_monotone_curve_2 models the concept ArrTraits::XMonotoneCurve_2.

### Tags

 ArrangementBasicTraits_2::Has_left_category indicates whether the nested functor Compare_at_x_left_2 is provided. ArrangementBasicTraits_2::Has_boundary_category indicates whether the traits class supports unbounded curves.

### Functor Types

 ArrangementBasicTraits_2::Compare_x_2 models the concept ArrTraits::CompareX_2. If the traits class supports unbounded curves (i.e., the Has_boundary_category tag is defined as Tag_true), then the type models the concept ArrTraits::BoundaryCompareX_2. ArrangementBasicTraits_2::Compare_xy_2 models the concept ArrTraits::CompareXy_2. ArrangementBasicTraits_2::Boundary_in_x_2 models the concept ArrTraits::BoundaryInX_2. Required only if the traits class supports unbounded curves (the Has_boundary_category tag is defined as Tag_true). ArrangementBasicTraits_2::Boundary_in_y_2 models the concept ArrTraits::BoundaryInY_2. Required only if the traits class supports unbounded curves (the Has_boundary_category tag is defined as Tag_true). ArrangementBasicTraits_2::Construct_min_vertex_2 models the concept ArrTraits::ConstructMinVertex_2. ArrangementBasicTraits_2::Construct_max_vertex_2 models the concept ArrTraits::ConstructMaxVertex_2. ArrangementBasicTraits_2::Is_vertical_2 models the concept ArrTraits::IsVertical_2. ArrangementBasicTraits_2::Compare_y_at_x_2 models the concept ArrTraits::CompareYAtX_2. If the traits class supports unbounded curves (i.e., the Has_boundary_category tag is defined as Tag_true), then the type models the concept ArrTraits::BoundaryCompareYAtX_2. ArrangementBasicTraits_2::Compare_y_at_x_left_2 models the concept ArrTraits::CompareYAtXLeft_2. Required only if the Has_left_category tag is defined as Tag_true. ArrangementBasicTraits_2::Compare_y_at_x_right_2 models the concept ArrTraits::CompareYAtXRight_2. ArrangementBasicTraits_2::Equal_2 models the concept ArrTraits::Equal_2.

### Accessing Functor Objects

 Compare_x_2 traits.compare_x_2_object () Compare_xy_2 traits.compare_xy_2_object () Boundary_in_x_2 traits.boundary_in_x_2_object () Boundary_in_y_2 traits.boundary_in_y_2_object () Construct_min_vertex_2 traits.construct_min_vertex_2_object () Construct_max_vertex_2 traits.construct_max_vertex_2_object () Is_vertical_2 traits.is_vertical_2_object () Compare_y_at_x_2 traits.compare_y_at_x_2_object () Compare_y_at_x_left_2 traits.compare_y_at_x_left_2_object () Compare_y_at_x_right_2 traits.compare_y_at_x_right_2_object () Equal_2 traits.equal_2_object ()

### Has Models

CGAL::Arr_segment_traits_2<Kernel>
CGAL::Arr_non_caching_segment_basic_traits_2<Kernel>
CGAL::Arr_non_caching_segment_traits_2<Kernel>
CGAL::Arr_polyline_traits_2<SegmentTraits>
CGAL::Arr_circle_segment_traits_2<Kernel>
CGAL::Arr_conic_traits_2<RatKernel,AlgKernel,NtTraits>
CGAL::Arr_rational_arc_traits_2<AlgKernel,NtTraits>
CGAL::Arr_Bezier_curve_traits_2<RatKernel,AlgKernel,NtTraits>
CGAL::Arr_curve_data_traits_2<Tr,XData,Mrg,CData,Cnv>
CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>