mirror of https://github.com/CGAL/cgal
91 lines
4.0 KiB
TeX
91 lines
4.0 KiB
TeX
|
|
\chapter{Introduction}
|
|
|
|
\cgal, the {\em Computational Geometry Algorithms Library}, is written in
|
|
\CC\ and consists of three parts.
|
|
The first part is the kernel, which consists of constant size non-modifiable
|
|
geometric primitive objects and operations on these objects.
|
|
The objects are parameterized by a representation class, which specifies
|
|
the coordinate representation and the underlying number types used for
|
|
calculations.
|
|
The second part is a collection of basic geometric data structures and
|
|
algorithms.
|
|
These algorithms and data structures are parameterized by traits classes
|
|
defining the interface and encapsulating the interaction between data structure
|
|
or algorithm and the types and primitive operations it uses.
|
|
%These algorithms and data structures are parameterized by traits classes that define the
|
|
%interface between the data structure or algorithm, and the primitives they use.
|
|
The third part consists of non-geometric support facilities, such as
|
|
`circulators', random sources, I/O support for debugging and for interfacing
|
|
\cgal\ to various visualization tools.
|
|
|
|
\section{Organization}
|
|
This part of the Reference Manual gives information that is relevant to
|
|
all three parts of the library.
|
|
Part~1 of this Reference Manual covers the kernel, part~2 the basic
|
|
library, and part~3 the support library.
|
|
|
|
Additional documents accompanying the {\cgal} distribution are
|
|
the `Installation Guide',
|
|
`The Use of STL and STL Extensions in {\cgal}', and
|
|
`Getting Started with {\cgal}'.
|
|
The second document gives a manual style introduction to STL constructs such
|
|
as iterators and containers, as well an extension, called circulator, used
|
|
in many places in {\cgal}.
|
|
The third document gives an introduction in {\cgal} programming for the
|
|
novice user.
|
|
|
|
\begin{ccAdvanced}
|
|
Some functionality is considered more advanced.
|
|
Such functionality is described in sections like this one, bounded by
|
|
horizontal brackets.
|
|
\end{ccAdvanced}
|
|
|
|
\section{Namespace CGAL}
|
|
All names introduced by \cgal, especially those documented in these manuals,
|
|
are in a namespace called \ccc{CGAL}, which is in global scope.\footnote{Removing
|
|
prefix \ccc{CGAL_} and introducing namespace \ccc{CGAL} is the major difference
|
|
between releases 1.2 and 2.0}
|
|
A user can either qualify names from \cgal\ by adding \ccc{CGAL::}, e.g.\
|
|
\ccc{CGAL::Point_2< CGAL::Homogeneous< int> >}, make a single name from
|
|
\cgal\ visible in a scope via a \ccc{using} statement, e.g.\
|
|
\ccc{using CGAL::Cartesian;}, and then use this name unqualified in this
|
|
scope, or even make all names from namespace \ccc{CGAL} visible in a scope
|
|
with \ccc{using namespace CGAL;}. The latter, however, is likely to give
|
|
raise to name conflicts and is therefore not recommended.
|
|
|
|
\section{Inclusion Order of Header files}
|
|
Not all compilers fully support standard header names. \cgal\ provides
|
|
workarounds for these problems in \ccc{CGAL/basic.h}. Consequently, as a
|
|
golden rule, you should always inlcude \ccc{CGAL/basic.h} first in your
|
|
programs (or \ccc{CGAL/Cartesian.h}, or \ccc{CGAL/Homogeneous.h}, since they
|
|
include \ccc{CGAL/basic.h} first).
|
|
|
|
|
|
%%\section{Naming conventions}
|
|
%%
|
|
%%The use of representation classes not only avoids problems, it
|
|
%%also makes all \cgal\ classes very uniform. They {\bf always} consist of:
|
|
%%\begin{enumerate}
|
|
%%\begin{ccTexOnly}
|
|
%%\itemsep0pt\topsep0pt\partopsep0pt\parskip0pt\parsep0pt
|
|
%%\end{ccTexOnly}
|
|
%%
|
|
%%%\item The {\em name space prefix} \ccStyle{}. This avoids name
|
|
%%% clashes. It will be dropped as soon as \CC\ compilers support the
|
|
%%% concept of name spaces as a feature of the programming language.
|
|
%%
|
|
%%\item The {\em capitalized base name} of the geometric object, such as
|
|
%% \ccStyle{Point}, \ccStyle{Segment}, \ccStyle{Triangle}.
|
|
%%
|
|
%%\item An {\em underscore} followed by the {\em dimension} of the object,
|
|
%% for example $\_2$, $\_3$ or $\_d$.
|
|
%%
|
|
%%\item A {\em representation class} as parameter, which itself is
|
|
%% parameterized with a number type, such as \ccStyle{Cartesian<double>}
|
|
%% or \ccStyle{Homogeneous<leda_integer>}.
|
|
%%\end{enumerate}
|
|
|
|
|
|
|