/// \defgroup PkgBGL CGAL and the Boost Graph Library Reference

/// \defgroup PkgBGLConcepts Concepts
/// \ingroup PkgBGL
///
/// We extend the Boost Graph Library(\sc{Bgl} for short) with a set of new concepts. 
/// The documentation of the concepts lists at the same time the functions
/// related to it. Models of the concept and their related functions
/// must be in the same namespace (they will be found by Koenig lookup).
///
///\dot
///digraph example {
///  node [shape=record, fontname=Helvetica, fontsize=10];
///  rankdir=BT
///
///  "boost Graph" [ URL="http://www.boost.org/libs/graph/doc/Graph.html" ];
///  HalfedgeGraph [ URL="\ref HalfedgeGraph"];
///  HalfedgeListGraph [ URL="\ref HalfedgeListGraph"];
///  MutableHalfedgeGraph [ URL="\ref MutableHalfedgeGraph"];
///  FaceGraph [ URL="\ref FaceGraph"];
///  FaceListGraph [ URL="\ref FaceListGraph"];
///  MutableFaceGraph [ URL="\ref MutableFaceGraph"];
///  
///  MutableHalfedgeGraph -> HalfedgeGraph -> "boost Graph" [ arrowhead="open", label="refines" ];
///  FaceListGraph -> FaceGraph -> HalfedgeGraph [ arrowhead="open", label="refines" ];
///  MutableFaceGraph -> MutableHalfedgeGraph [ arrowhead="open", label="refines" ];
///  MutableFaceGraph -> FaceGraph [ arrowhead="open", label="refines" ];
///  HalfedgeListGraph -> HalfedgeGraph [ arrowhead="open", label="refines" ];
///}
///\enddot

/// The property tags model of the boost concept <a href="http://www.boost.org/libs/graph/doc/PropertyTag.html"><code>PropertyTag</code></a>.
/// These tags are used to retrieve default property maps using the traits class <a href="http://www.boost.org/libs/graph/doc/property_map.html">boost::property_map</a>.
/// \defgroup PkgBGLProperties Properties
/// \ingroup PkgBGL

/// \defgroup PkgBGLHelper Helper Classes
/// \ingroup PkgBGL

/// \defgroup PkgBGLHelperFct Helper Functions
/// \ingroup PkgBGL

/// \defgroup PkgBGLIterators Iterators and Circulators
/// \ingroup PkgBGL

/// \defgroup PkgBGLSelectionFct Selection Functions
/// \ingroup PkgBGL

/*!
\addtogroup PkgBGLIterators

Several iterators and circulators are provided that enable to iterate through the  halfedges incident to a given face or vertex.

Starting at a halfedge `h`, applying several times `next(h,g)` brings us back 
to the halfedge where we started. All halfedges traversed on the way are 
incident to the same face.
Using the composition of the `next(h,g)` and `opposite(h,g)` functions results 
in another cycle, namely the cycle of halfedges which are incident to
the same vertex.
For convenience, two iterator and circulator types enable iterating through all the halfedges
incident to a given face, and all the halfedges having a given vertex as target.
*/

/// \defgroup PkgBGLEulerOperations Euler Operations
/// \ingroup PkgBGL

/*!
\addtogroup PkgBGLTraits



*/


/*!
\addtogroup PkgBGL
\cgalPkgDescriptionBegin{CGAL and the Boost Graph Library,PkgBGLSummary}
\cgalPkgPicture{emst-detail.png}
\cgalPkgSummaryBegin
\cgalPkgAuthors{Andreas Fabri, Fernando Cacciola, Philipp Moeller, and Ron Wein}
\cgalPkgDesc{This package provides a framework for interfacing \cgal data structures with the algorithms of the Boost Graph Library, or \sc{BGL} for short. It allows to run graph algorithms directly on \cgal data structures which are model of the \sc{BGL} graph concepts, for example the shortest path algorithm on a Delaunay triangulation in order to compute the Euclidean minimum spanning tree. Furthermore, it introduces several new graph concepts describing halfedge data structures.}
\cgalPkgManuals{Chapter_CGAL_and_the_Boost_Graph_Library,PkgBGL}
\cgalPkgSummaryEnd
\cgalPkgShortInfoBegin
\cgalPkgSince{3.3}
\cgalPkgBib{cgal:cfw-cbgl}
\cgalPkgLicense{\ref licensesLGPL "LGPL"}
\cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd

\cgalClassifedRefPages

## Concepts ##
- `HalfedgeGraph`
- `HalfedgeListGraph`
- `MutableHalfedgeGraph`
- `FaceGraph`
- `FaceListGraph`
- `MutableFaceGraph`

## Properties ##
- `boost::vertex_index_t`
- `boost::halfedge_index_t`
- `boost::edge_index_t`
- `boost::face_index_t`
- `boost::vertex_point_t`

## %CGAL Classes Adapted for the Graph API ##

Different \cgal types have been adapted as graphs for the \sc{Bgl}. All
adapted types are listed here. The pages document which concepts they
model, the properties they support, and any possible caveats that a
user might encounter.

- \link BGLSMGT  `boost::graph_traits< CGAL::Surface_mesh<P> >` \endlink
- \link BGLPolyGT  `boost::graph_traits< CGAL::Polyhedron_3<T> >` \endlink
- \link BGLT2GT `boost::graph_traits< CGAL::Triangulation_2<GT, TDS> >` \endlink
- \link BGLArgtGT `boost::graph_traits< CGAL::Arrangement_2<T,DC> >` \endlink

## Helper Classes ##
- `CGAL::Triangulation_vertex_base_with_id_2`
- `CGAL::Arr_vertex_index_map`
- `CGAL::Arr_face_index_map`
- `CGAL::HalfedgeDS_vertex_max_base_with_id`
- `CGAL::HalfedgeDS_halfedge_max_base_with_id`
- `CGAL::HalfedgeDS_face_max_base_with_id`
- `CGAL::Polyhedron_items_with_id_3`
- `CGAL::set_halfedgeds_items_id()`

## Helper Functions ##
- `CGAL::is_border()`
- `CGAL::is_border_edge()`
- `CGAL::is_bivalent()`
- `CGAL::is_bivalent_mesh()`
- `CGAL::is_trivalent()`
- `CGAL::is_trivalent_mesh()`
- `CGAL::is_isolated_triangle()`
- `CGAL::is_closed()`

- `CGAL::is_triangle()`
- `CGAL::is_triangle_mesh()`
- `CGAL::is_quad()`
- `CGAL::is_quad_mesh()`
- `CGAL::is_isolated_quad()`

- `CGAL::is_tetrahedron()`
- `CGAL::is_hexahedron()`
- `CGAL::make_triangle()`
- `CGAL::make_tetrahedron()`
- `CGAL::make_quad()`
- `CGAL::make_hexahedron()`

- `CGAL::clear()`

## Iterators ##
- `CGAL::Halfedge_around_source_iterator`
- `CGAL::Halfedge_around_target_iterator`
- `CGAL::Halfedge_around_face_iterator`
- `CGAL::Vertex_around_target_iterator`
- `CGAL::Vertex_around_face_iterator`
- `CGAL::Face_around_face_iterator`
- `CGAL::Face_around_target_iterator`
- `CGAL::halfedges_around_source()`
- `CGAL::halfedges_around_target()`
- `CGAL::halfedges_around_face()`
- `CGAL::faces_around_face()`
- `CGAL::faces_around_target()`
- `CGAL::vertices_around_face()`
- `CGAL::vertices_around_target()`

## Circulators ##
- `CGAL::Halfedge_around_source_circulator`
- `CGAL::Halfedge_around_target_circulator`
- `CGAL::Halfedge_around_face_circulator`
- `CGAL::Vertex_around_target_circulator`
- `CGAL::Face_around_target_circulator`
- `CGAL::Face_around_face_circulator`

## Euler Operations ##

- `CGAL::Euler::add_center_vertex()`
- `CGAL::Euler::add_edge()`
- `CGAL::Euler::add_face()`
- `CGAL::Euler::add_face_to_border()`
- `CGAL::Euler::add_vertex_and_face_to_border()`
- `CGAL::Euler::collapse_edge()`
- `CGAL::Euler::does_satisfy_link_condition()`
- `CGAL::Euler::fill_hole()`
- `CGAL::Euler::flip_edge()`
- `CGAL::Euler::join_face()`
- `CGAL::Euler::join_loop()`
- `CGAL::Euler::join_vertex()`
- `CGAL::Euler::make_hole()`
- `CGAL::Euler::remove_center_vertex()`
- `CGAL::Euler::remove_face()`
- `CGAL::Euler::split_edge()`
- `CGAL::Euler::split_face()`
- `CGAL::Euler::split_loop()`
- `CGAL::Euler::split_vertex()`

## Selection ##
- `CGAL::expand_face_selection()`
- `CGAL::reduce_face_selection()`
- `CGAL::expand_edge_selection()`
- `CGAL::reduce_edge_selection()`
- `CGAL::expand_vertex_selection()`
- `CGAL::reduce_vertex_selection()`
- `CGAL::select_incident_faces()`

## Miscellaneous ##
- `CGAL::split_graph_into_polylines()`

*/

/*!
\addtogroup PkgBGLEulerOperations

We call high level operations that maintain the validity of a halfedge graph <em>%Euler Operations</em>. 


*/


