/// \defgroup PkgArrangementOnSurface2Ref 2D Arrangement Reference

/// \defgroup PkgArrangementOnSurface2Concepts Concepts
/// \ingroup PkgArrangementOnSurface2Ref

/// \cgalConceptNamespace
/// The namespace containing concepts specific to Arrangements.
namespace ArrTraits {}

/// \defgroup PkgArrangementOnSurface2ConceptsTopologyTraits Topology Traits Concepts
/// \ingroup PkgArrangementOnSurface2Concepts

/// \defgroup PkgArrangementOnSurface2ConceptsDCEL DCEL Concepts
/// \ingroup PkgArrangementOnSurface2Concepts

/// \defgroup PkgArrangementOnSurface2ConceptsGeometricObjects Geometric Object Concepts
/// \ingroup PkgArrangementOnSurface2Concepts

/// \defgroup PkgArrangementOnSurface2ConceptsFunctionObjects Function Object Concepts
/// \ingroup PkgArrangementOnSurface2Concepts

/// \defgroup PkgArrangementOnSurface2ConceptsTraits Geometry Traits Concepts
/// \ingroup PkgArrangementOnSurface2Concepts

/// \defgroup PkgArrangementOnSurface2TraitsClasses Geometry Traits Classes
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2DCEL DCEL
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2IO I/O
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2op_left_shift operator<<
/// \ingroup PkgArrangementOnSurface2IO

/// \defgroup PkgArrangementOnSurface2op_right_shift operator>>
/// \ingroup PkgArrangementOnSurface2IO

/// \defgroup PkgArrangementOnSurface2PointLocation Point Location
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2Overlay Overlay
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2Funcs Free Functions
/// \ingroup PkgArrangementOnSurface2Ref

/*!
\cgalInclude{CGAL/draw_arrangement_2.h}
*/
/// \defgroup PkgArrangementOnSurface2Draw Drawing
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2Insert CGAL::insert()
/// \ingroup PkgArrangementOnSurface2Funcs

/// \defgroup PkgArrangementOnSurface2Tags Tags
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2Macros Macros
/// \ingroup PkgArrangementOnSurface2Ref

/// \defgroup PkgArrangementOnSurface2Enums Enumerations
/// \ingroup PkgArrangementOnSurface2Ref

/*!
\addtogroup PkgArrangementOnSurface2Ref
\todo check generated documentation
\cgalPkgDescriptionBegin{2D Arrangements,PkgArrangementOnSurface2}
\cgalPkgPicture{Arrangement_2.png}
\cgalPkgSummaryBegin
\cgalPkgAuthors{Ron Wein, Eric Berberich, Efi Fogel, Dan Halperin, Michael Hemmer, Oren Salzman, and Baruch Zukerman}
\cgalPkgDesc{This package can be used to construct, maintain, alter, and display arrangements in the plane. Once an arrangement is constructed, the package can be used to obtain results of various queries on the arrangement, such as point location. The package also includes generic implementations of two algorithmic frameworks, that are, computing the zone of an arrangement, and line-sweeping the plane, the arrangements is embedded on. These frameworks are used in turn in the implementations of other operations on arrangements. Computing the overlay of two arrangements, for example, is based on the sweep-line framework.   Arrangements and arrangement components can also be extended to store additional data. An important extension stores the construction history of the arrangement, such that it is possible to obtain the originating curve of an arrangement subcurve.}
\cgalPkgManuals{Chapter_2D_Arrangements,PkgArrangementOnSurface2Ref}
\cgalPkgSummaryEnd
\cgalPkgShortInfoBegin
\cgalPkgSince{2.1}
\cgalPkgBib{cgal:wfzh-a2}
\cgalPkgLicense{\ref licensesGPL "GPL"}
\cgalPkgDemo{2D Arrangements,arrangements_2.zip}
\cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd

Given a set \f$ \mathcal{C}\f$ of planar curves, the <I>arrangement</I>
\f$ {\mathcal A}({\mathcal C})\f$ is the subdivision of the plane induced
by the curves in \f$ \mathcal{C}\f$ into maximally connected cells. The cells
can be \f$ 0\f$-dimensional (<I>vertices</I>), \f$ 1\f$-dimensional (<I>edges</I>)
or \f$ 2\f$-dimensional (<I>faces</I>).

The class `Arrangement_2<Traits,Dcel>` encapsulates a data structure
that maintains arrangements of arbitrary bounded planar curves. It comes
with a variety of algorithms that operate on planar arrangement,
such as point-location queries and overlay computations, which are
implemented as peripheral classes or as free (global) functions.

\cgalClassifedRefPages

\cgalCRPSection{Enumerations}

- `CGAL::Arr_parameter_space`
- `CGAL::Arr_curve_end`
- `CGAL::Arr_halfedge_direction`

\cgalCRPSection{Tags}

- `CGAL::Arr_oblivious_side_tag`
- `CGAL::Arr_open_side_tag`
- `CGAL::Arr_closed_side_tag`
- `CGAL::Arr_contracted_side_tag`
- `CGAL::Arr_identified_side_tag`

\cgalCRPSection{Concepts}

- `ArrangementDcel`
- `ArrangementDcelWithRebind`
- `ArrangementDcelVertex`
- `ArrangementDcelHalfedge`
- `ArrangementDcelFace`
- `ArrangementDcelOuterCcb`
- `ArrangementDcelInnerCcb`
- `ArrangementDcelIsolatedVertex`
- `ArrangementBasicTopologyTraits`
- `ArrangementBasicTraits_2`
- `ArrangementConstructXMonotoneCurveTraits_2`
- `ArrangementConstructCurveTraits_2`
- `ArrangementLandmarkTraits_2`
- `ArrangementXMonotoneTraits_2`
- `ArrangementTraits_2`
- `ArrangementHorizontalSideTraits_2`
- `ArrangementVerticalSideTraits_2`
- `ArrangementIdentifiedVerticalTraits_2`
- `ArrangementIdentifiedHorizontalTraits_2`
- `ArrangementOpenBoundaryTraits_2`
- `ArrangementSphericalBoundaryTraits_2`
- `ArrangementInputFormatter`
- `ArrangementOutputFormatter`
- `ArrangementWithHistoryInputFormatter`
- `ArrangementWithHistoryOutputFormatter`
- `ArrangementPointLocation_2`
- `ArrangementVerticalRayShoot_2`
- `ArrangementOpenLeftTraits_2`
- `ArrangementOpenRightTraits_2`
- `ArrangementOpenBottomTraits_2`
- `ArrangementOpenTopTraits_2`
- `ArrangementClosedLeftTraits_2`
- `ArrangementClosedRightTraits_2`
- `ArrangementClosedBottomTraits_2`
- `ArrangementClosedTopTraits_2`
- `ArrangementContractedLeftTraits_2`
- `ArrangementContractedRightTraits_2`
- `ArrangementContractedBottomTraits_2`
- `ArrangementContractedTopTraits_2`
- `ArrangementLeftSideTraits_2`
- `ArrangementRightSideTraits_2`
- `ArrangementBottomSideTraits_2`
- `ArrangementTopSideTraits_2`
- `ArrangementTopologyTraits`

\cgalCRPSection{Geometric Object Concepts}

- `ArrTraits::Point_2`
- `ArrTraits::XMonotoneCurve_2`
- `ArrTraits::Curve_2`

\cgalCRPSection{Function Object Concepts}

- `ArrTraits::CompareX_2`
- `ArrTraits::CompareXy_2`
- `ArrTraits::ConstructMinVertex_2`
- `ArrTraits::ConstructMaxVertex_2`
- `ArrTraits::IsVertical_2`
- `ArrTraits::IsOnXIdentification_2`
- `ArrTraits::IsOnYIdentification_2`
- `ArrTraits::CompareYAtX_2`
- `ArrTraits::CompareYAtXLeft_2`
- `ArrTraits::CompareYAtXRight_2`
- `ArrTraits::Equal_2`
- `ArrTraits::ParameterSpaceInX_2`
- `ArrTraits::ParameterSpaceInY_2`
- `ArrTraits::CompareXOnBoundary_2`
- `ArrTraits::CompareYOnBoundary_2`
- `ArrTraits::CompareXNearBoundary_2`
- `ArrTraits::CompareYNearBoundary_2`
- `ArrTraits::CompareXOnBoundaryOfCurveEnd_2`
- `ArrTraits::Intersect_2`
- `ArrTraits::Split_2`
- `ArrTraits::AreMergeable_2`
- `ArrTraits::Merge_2`
- `ArrTraits::MakeXMonotone_2`
- `ArrTraits::Approximate_2`
- `ArrTraits::ConstructXMonotoneCurve_2`
- `ArrTraits::ConstructCurve_2`

\cgalCRPSection{Classes}

- `CGAL::Arrangement_on_surface_2<GeometryTraits_2,TopologyTraits>`
- `CGAL::Arrangement_on_surface_with_history_2<GeometryTraits_2,TopologyTraits>`
- `CGAL::Arrangement_2<Traits,Dcel>`
- `CGAL::Arrangement_with_history_2<Traits,Dcel>`
- `CGAL::Arrangement_2::Vertex`
- `CGAL::Arrangement_2::Halfedge`
- `CGAL::Arrangement_2::Face`
- `CGAL::Arr_accessor<Arrangement>`
- `CGAL::Arr_algebraic_segment_traits_2<Coefficient>`
- `CGAL::Arr_Bezier_curve_traits_2<RatKernel,AlgKernel,NtTraits>`
- `CGAL::Arr_bounded_planar_topology_traits_2<GeometryTraits_2,Dcel>`
- `CGAL::Arr_circle_segment_traits_2<Kernel>`
- `CGAL::Arr_circular_arc_traits_2<CircularKernel>`
- `CGAL::Arr_circular_line_arc_traits_2<CircularKernel>`
- `CGAL::Arr_conic_traits_2<RatKernel,AlgKernel,NtTraits>`
- `CGAL::Arr_consolidated_curve_data_traits_2<Traits,Data>`
- `CGAL::Arr_counting_traits_2<BaseTraits>`
- `CGAL::Arr_curve_data_traits_2<Tr,XData,Mrg,CData,Cnv>`
- `CGAL::Arr_dcel_base<V,H,F>`
- `CGAL::Arr_dcel<Traits,V,H,F>`
- `CGAL::Arr_default_dcel<Traits>`
- `CGAL::Arr_face_extended_dcel<Traits,FData,V,H,F>`
- `CGAL::Arr_face_index_map<Arrangement>`
- `CGAL::Arr_extended_dcel<Traits,VData,HData,FData,V,H,F>`
- `CGAL::Arr_extended_dcel_text_formatter<Arrangement>`
- `CGAL::Arr_face_extended_text_formatter<Arrangement>`
- `CGAL::Arr_geodesic_arc_on_sphere_traits_2<Kernel,x,y>`
- `CGAL::Arr_landmarks_point_location<Arrangement,Generator>`
- `CGAL::Arr_line_arc_traits_2<CircularKernel>`
- `CGAL::Arr_linear_traits_2<Kernel>`
- `CGAL::Arr_naive_point_location<Arrangement>`
- `CGAL::Arr_non_caching_segment_traits_2<Kernel>`
- `CGAL::Arr_observer<Arrangement_2>`
- `CGAL::Arr_polyline_traits_2<SegmentTraits>`
- `CGAL::Arr_point_location_result<Arrangement>`
- `CGAL::Arr_rational_function_traits_2<AlgebraicKernel_d_1>`
- `CGAL::Arr_segment_traits_2<Kernel>`
- `CGAL::Arr_spherical_topology_traits_2<GeometryTraits_2,Dcel>`
- `CGAL::Arr_text_formatter<Arrangement>`
- `CGAL::Arr_tracing_traits_2<BaseTraits>`
- `CGAL::Arr_trapezoid_ric_point_location<Arrangement>`
- `CGAL::Arr_unb_planar_topology_traits_2<GeometryTraits_2,Dcel>`
- `CGAL::Arr_vertex_index_map<Arrangement>`
- `CGAL::Arr_walk_along_line_point_location<Arrangement>`
- `CGAL::Arr_with_history_text_formatter<ArrFormatter>`
- `CGAL::Aos_observer<ArrangementOnSurface_2>`
- `CGAL::CORE_algebraic_number_traits`

\cgalCRPSection{Functions}

- `CGAL::is_valid()`
- `CGAL::insert()`
- `CGAL::insert_non_intersecting_curve()`
- `CGAL::insert_non_intersecting_curves()`
- `CGAL::insert_point()`
- `CGAL::remove_edge()`
- `CGAL::remove_vertex()`
- `CGAL::locate()`
- `CGAL::decompose()`
- `CGAL::overlay()`
- `CGAL::IO::read()`
- `CGAL::IO::write()`
- `CGAL::remove_curve()`
- \link PkgArrangementOnSurface2op_left_shift `CGAL::operator<<` \endlink
- \link PkgArrangementOnSurface2op_right_shift `CGAL::operator<<` \endlink

\cgalCRPSection{Draw an `Arrangemen_2` object}
- \link  PkgArrangementOnSurface2Draw CGAL::draw<>() \endlink

*/
