mirror of https://github.com/CGAL/cgal
135 lines
5.5 KiB
TeX
135 lines
5.5 KiB
TeX
% +------------------------------------------------------------------------+
|
|
% | Reference manual chapter: intro.tex (Arrangement)
|
|
% +------------------------------------------------------------------------+
|
|
% |
|
|
% | Package: arr (Arrangement_2)
|
|
% |
|
|
% +------------------------------------------------------------------------+
|
|
|
|
%+---------------------------------------------------------------------------80
|
|
%| update log
|
|
%|
|
|
%| 1 Jun 2003 - Ron Wein
|
|
%| Clear separation of the user manual and the reference manual.
|
|
%|
|
|
%| 21 Jun 2000 - Shai Hirsch
|
|
%| Separated from arr.tex (See previous changes in change log there).
|
|
%|
|
|
%+---------------------------------------------------------------------------80
|
|
|
|
|
|
% +========================================================================+
|
|
% Introduction
|
|
% +========================================================================+
|
|
%\clearpage
|
|
%\section{Reference Pages for 2D Arrangements}
|
|
|
|
\chapter{2D Arrangements}
|
|
|
|
\subsection*{Introduction}
|
|
\ccRefLabel{arr_ref_intro}
|
|
|
|
The arrangement class holds a planar map and a hierarchy tree.
|
|
Vertices, halfedges and faces of the arrangement are derived from
|
|
those of the planar map (with the additional functionality of
|
|
the arrangement), in the same way that the vertices, halfedges and faces
|
|
of the topological map class are derived from those of the Dcel class
|
|
(see Chapter\ref{I1_ChapterTopologicalMap}).
|
|
|
|
\subsection*{The Hierarchy Tree}
|
|
|
|
The hierarchy tree is implemented using the \ccc{In_place_list}
|
|
class (see the chapter on STL Extensions in the Support Library Manual).
|
|
Every level of a curve
|
|
hierarchy is a list of tree nodes.The \ccc{Curve_node} and
|
|
\ccc{Edge_node} of
|
|
the hierarchy derive from \ccc{Subcurve_node}. This enables the
|
|
polymorphic structure of the tree. The \ccc{Subcurve_node} is
|
|
derived from the \ccc{Base_node} which is a template parameter
|
|
of the arrangement. This enables the addition of attributes to the nodes
|
|
of the hierarchy tree by adding them inside the \ccc{Base_node}.
|
|
|
|
\subsection*{Arrangement Dcel}
|
|
The arrangement is parametrized with the interface class \ccc{Dcel}.
|
|
The \ccc{Dcel} is a container class that defines the underlying
|
|
combinatorial data structure used by the planar map. We define the
|
|
concept \ccc{ArrangementDcel_2} \lcTex{(\ccRefPage{ArrangementDcel_2})}
|
|
where the requirements for a \ccc{Dcel} class are defined.
|
|
|
|
As part of the \ccc{Dcel} we define requirements for its vertex, halfedge and
|
|
face constituents. If we consider these constituents as (informally)
|
|
subconcepts of the \ccc{Dcel} concept then we have the following models for
|
|
its constituents.
|
|
%-----------------------------------------------------
|
|
|
|
The \ccStyle{Arr_2_vertex_base<Point>} is a model for the
|
|
Dcel vertex subconcept,
|
|
the \mbox{\ccc{Arr_2_halfedge_base<Base_node>}} is a
|
|
model for the Dcel halfedge subconcept
|
|
and the \mbox{\ccc{Arr_2_face_base}} is a
|
|
model for the Dcel face subconcept.
|
|
|
|
\ccInclude{CGAL/Arr_2_bases.h}
|
|
|
|
The \ccStyle{Arr_2_default_dcel<Traits>} is a model of the Dcel concept
|
|
described above. Its template parameter is the traits class.
|
|
It is a wrapper for \ccStyle{Pm_dcel} instantiated
|
|
with \mbox{\ccc{Arr_2_vertex_base<Traits::Point>}},\\
|
|
\mbox{\ccc{Arr_2_halfedge_base<Arr_base_node<Traits::X_curve> >}} and
|
|
\mbox{\ccStyle{Arr_2_face_base}}.
|
|
|
|
\ccInclude{CGAL/Arr_2_default_dcel.h}
|
|
|
|
\subsection*{Models for an Arrangement Traits Class}
|
|
%-----------------------------------------------
|
|
We supply traits classes that support three families of curves:
|
|
\begin{itemize}
|
|
\item Line segments. We actually have two traits classes for line segments:
|
|
\ccc{Arr_segment_traits_2} that heavily relies on the CGAL
|
|
kernel and \ccc{Arr_segment_cached_traits_2}, which stores
|
|
extra chached information regarding the segments to achieve faster
|
|
running times.
|
|
\item Polylines, which are piecewise linear curves (a sequence of line segments
|
|
where each to neighboring segments share a common endpoint). The
|
|
\ccc{Arr_polyline_traits_2} class is used to construct arrangements
|
|
of polylines.
|
|
\item Conic arcs, or bounded segments of algenraic curves of degree 2 at most
|
|
(such as circles, hyperbolic arcs and line segments). The
|
|
\ccc{Arr_conic_traits_2} supports this family of curves.
|
|
\end{itemize}
|
|
|
|
Since the requirements of the arrangement traits are a superset of the
|
|
requirements of the Planar Map Traits and Planer Map with Intersection Traits,
|
|
any traits class that works with arrangements can work with planar maps as
|
|
well.
|
|
|
|
|
|
\begin{ccTexOnly}
|
|
|
|
\subsection*{Concepts}
|
|
\ccRefConceptPage{ArrangementBaseNode_2}\\
|
|
\ccRefConceptPage{ArrangementDcel_2}\\
|
|
\ccRefConceptPage{ArrangementDcelHalfedge_2}\\
|
|
\ccRefConceptPage{ArrangementTraits_2}\\
|
|
|
|
\subsection*{Classes}
|
|
\ccRefIdfierPage{CGAL::Arrangement_2<Dcel,Traits,Base_node>}\\
|
|
\ccRefIdfierPage{CGAL::Arr_base_node<Curve>}\\
|
|
\ccRefIdfierPage{CGAL::Arrangement_2<Dcel,Traits,Base_node>::Subcurve_node}\\
|
|
\ccRefIdfierPage{CGAL::Arrangement_2<Dcel,Traits,Base_node>::Curve_node}\\
|
|
\ccRefIdfierPage{CGAL::Arrangement_2<Dcel,Traits,Base_node>::Edge_node}\\
|
|
\ccRefIdfierPage{CGAL::Arrangement_2<Dcel,Traits,Base_node>::Halfedge}\\
|
|
|
|
\ccRefIdfierPage{CGAL::Arr_segment_traits_2<Kernel>}\\
|
|
\ccRefIdfierPage{CGAL::Arr_segment_cached_traits_2<Kernel>}\\
|
|
\ccRefIdfierPage{CGAL::Arr_polyline_traits_2<Kernel, Container>}\\
|
|
\ccRefIdfierPage{CGAL::Arr_conic_traits_2<Kernel>}\\
|
|
|
|
\ccRefIdfierPage{CGAL::Arr_file_scanner<Arrangement>}\\
|
|
\ccRefIdfierPage{CGAL::Arr_file_writer<Arrangement>}\\
|
|
|
|
\subsection*{Functions}
|
|
\ccRefIdfierPage{CGAL::write_arr}\\
|
|
|
|
\end{ccTexOnly}
|