mirror of https://github.com/CGAL/cgal
202 lines
8.4 KiB
TeX
202 lines
8.4 KiB
TeX
\chapter{Example and Demo Programs}
|
|
\label{chap:examples_and_demos}
|
|
\ccIndexMainItemBegin{example programs}
|
|
\ccIndexMainItemBegin{demo programs}
|
|
|
|
The best way to illustrate the functionality provided by the library
|
|
is through programs that users can compile, run, copy and modify to
|
|
their hearts' content. Thus every package should contain some of
|
|
these programs. In \cgal\ we distinguish between two types of
|
|
programs: those that provided graphical output (demos) and those that
|
|
do not (examples).
|
|
|
|
In this chapter we provide guidelines for the development
|
|
of these programs and their inclusion in the documentation. See
|
|
Sections~\ref{sec:examples_subdirectory} and~\ref{sec:demo_subdirectory}
|
|
for a description of the directory structure required for example and
|
|
demo programs, respectively. Note in particular that each directory
|
|
should contain a \texttt{README} file that explains what the programs do and
|
|
how one interacts with them.
|
|
|
|
\section{Coding conventions}
|
|
\label{sec:ex_and_demo_coding}
|
|
\ccIndexSubitem{example programs}{coding conventions}
|
|
\ccIndexSubitem{demo programs}{coding conventions}
|
|
|
|
Remember that these programs are likely to be a user's first introduction
|
|
to the library, so you should be careful to follow our coding conventions
|
|
(Chapter~\ref{chap:code_format}) and good programming practice in these
|
|
programs. In particular:
|
|
|
|
\begin{itemize}
|
|
\item Include a comment that gives the name of the file relative to
|
|
the \texttt{CGALROOT} directory, such as:
|
|
\begin{verbatim}
|
|
//
|
|
// file : examples/Generator/random_polygon_ex.C
|
|
//
|
|
\end{verbatim}
|
|
\item Do \textbf{not} use the commands
|
|
\begin{verbatim}
|
|
using namespace CGAL;
|
|
using namespace std;
|
|
\end{verbatim}
|
|
\ccIndexSubitem{\tt using}{in examples and demos}
|
|
We discourage the use of these as they introduce more names than
|
|
are necessary and may lead to more conflicts than are necessary.
|
|
\item As of release 2.3, you can include only the kernel include file
|
|
(\eg, \texttt{Cartesian.h} or \texttt{Homogeneous.h}) to get all
|
|
kernel classes as well as the \texttt{basic.h} file. All example
|
|
and demo programs should do this. For exmaple, you should have
|
|
simply:
|
|
\begin{verbatim}
|
|
#include <CGAL/Cartesian.h>
|
|
\end{verbatim}
|
|
instead of:
|
|
\begin{verbatim}
|
|
#include <basic.h>
|
|
#include <CGAL/Cartesian.h>
|
|
#include <CGAL/Point_2.h>
|
|
#include <CGAL/Triangle_2.h>
|
|
#include <CGAL/Segment_3.h>
|
|
// etc.
|
|
\end{verbatim}
|
|
\item Types should be declared using the following syntax:
|
|
\begin{verbatim}
|
|
typedef CGAL::Cartesian<double> Kernel;
|
|
typedef Kernel::Point_2 Point_2;
|
|
typedef Kernel::Triangle_3 Triangle_3;
|
|
\end{verbatim}
|
|
instead of this syntax:
|
|
\begin{verbatim}
|
|
typedef CGAL::Cartesian<double> Kernel;
|
|
typedef Point_2<Kernel> Point_2;
|
|
typedef Triangle_3<Kernel> Triangle_3;
|
|
\end{verbatim}
|
|
Although both will work, the former is to be preferred since
|
|
it reflects that the types are actually part of the kernel and
|
|
also reflects the new (as of release 2.3) kernel design that allows
|
|
types to be easily exchanged and adapted.
|
|
|
|
Note also that the typedef used above is
|
|
\begin{verbatim}
|
|
typedef CGAL::Cartesian<double> Kernel;
|
|
\end{verbatim}
|
|
instead of
|
|
\begin{verbatim}
|
|
typedef CGAL::Cartesian<double> R; // for representation
|
|
\end{verbatim}
|
|
This also reflects the new design, where the kernel classes are
|
|
kernels containing objects and predicates not just representation
|
|
classes for the objects.
|
|
\end{itemize}
|
|
|
|
\section{The Programs}
|
|
\label{sec:ex_and_demo_content}
|
|
\ccIndexSubitem{example programs}{content}
|
|
\ccIndexSubitem{demo programs}{content}
|
|
|
|
The following guidelines should be followed to the greatest extent possible
|
|
when writing the example and demo programs.
|
|
\begin{itemize}
|
|
\item Provide simple programs with which a beginner can get started.
|
|
\item Provide more involved programs that illustrate the power of the
|
|
software.
|
|
\item Provide programs that truly exercise the data structure. Though you
|
|
may have some canned programs that work on fixed data sets to
|
|
illustrate specific things, you should also have one (or more)
|
|
programs that work on
|
|
\ccAnchor{http://www.cgal.org/Manual/doc_html/support_lib/Generator/Chapter_generators.html}{randomly generated} or user-generated data.
|
|
This illustrates confidence in the software (and can also build
|
|
confidence by highlighting bugs).
|
|
\item Take some care to design a good interface to the program;
|
|
the packaging of a product does make a difference.
|
|
\end{itemize}
|
|
|
|
\section{Including programs in documentation}
|
|
\label{sec:programs_in_doc}
|
|
\ccIndexSubitem{example programs}{in manuals}
|
|
|
|
All programs included in the documentation should be included in either
|
|
the \texttt{examples} or the \texttt{demo} directory to ensure that:
|
|
\begin{itemize}
|
|
\item[(a)] the programs will be included in the test suite and
|
|
\item[(b)] the user can more easily use the example program
|
|
\end{itemize}
|
|
The macro to do this inclusion is \verb|\ccIncludeExampleCode|.
|
|
See Chapter~\ref{chap:specification} and the documentation of the
|
|
\ccAnchor{http://www.cgal.org/Members/Manual_tools}{Manual tools} for more
|
|
details.
|
|
|
|
The reverse statement, that all programs in the \texttt{examples}
|
|
and \texttt{demo} directory should be included in the documentation,
|
|
is not necessarily true. Ideally the programs included in the documentation
|
|
will be a proper (non-empty) subset of the programs included in the
|
|
distribution.
|
|
|
|
\section{Demo programs on the web}
|
|
\label{sec:demos_web_page}
|
|
\ccIndexSubitem{demo programs}{on the web}
|
|
|
|
We maintain a \ccAnchor{http://www.cgal.org/demos_frame.html}{page of demo
|
|
programs} on the cgal web site
|
|
\lcTex{ (\path|http://www.cgal.org/demos.html|)}. For each demo on
|
|
the page, we have a screen shot of the demo in action, a link to the source
|
|
code, and a precompiled executable for the Windows platform.
|
|
|
|
If you have other demos you would like to add to the page (and the more
|
|
here the better), you should do the following:
|
|
\begin{enumerate}
|
|
\item Compile the demo and create a screen shot (as a \texttt{.gif} or
|
|
\texttt{.jpg} file) and then create a smaller version of this
|
|
(approx $235 \times 280$) that can be used as a ``thumbnail''
|
|
(admittedly for a rather large thumb) on the page. These names of
|
|
the image files should be as follows:
|
|
\centerline{\ccc{<program>_}\texttt{[big|small].[gif|jpg]}},
|
|
where \textit{$<$prog\_name$>$} is the name of the program from which
|
|
the screen shots were made (an nice menmonic name like
|
|
\ccc{alpha_shapes_2} or \ccc{hull_of_int_points_2}).
|
|
|
|
\item Create the \texttt{.exe} file for use under Windows (probably with the
|
|
Borland compiler with optimization flags turned on)
|
|
\item \texttt{gzip} the \texttt{.exe} file
|
|
\item Package these together with the source code using the following structure:
|
|
\begin{verbatim}
|
|
images/demo/<program>_big.[gif|jpg]
|
|
demo/<program>.exe
|
|
demo/<subdir>/<program>.C
|
|
\end{verbatim}
|
|
where \ccc{<subdir>} is the name of the subdirectory in which the program
|
|
is (or will be) found in the distribution. \ccc{<program>} should be a
|
|
name that is self-explanatory (\eg, \texttt{demo.C} is a bad name here).
|
|
|
|
\item Send the package to \ccAnchor{mailto:kettner@mpi-sb.mpg.de}{the web page
|
|
maintainer} together with a one-paragraph description similar to the
|
|
ones on the page already.
|
|
\end{enumerate}
|
|
|
|
\InternalOnly{
|
|
|
|
\section{Requirements and recommendations}
|
|
\label{sec:ex_and_demos_req_and_rec}
|
|
|
|
\noindent
|
|
Requirements:
|
|
\begin{itemize}
|
|
\item Follow the coding conventions outlined in
|
|
Section~\ref{sec:ex_and_demo_coding}.
|
|
\item Include all example and demo programs from the documentation in
|
|
the \texttt{examples} or \texttt{demo} directories.
|
|
\end{itemize}
|
|
|
|
\noindent
|
|
Recommendations:
|
|
\begin{itemize}
|
|
\item Place a demo of your package on the web site.
|
|
\end{itemize}
|
|
|
|
}
|
|
|
|
\ccIndexMainItemEnd{example programs}
|
|
\ccIndexMainItemEnd{demo programs}
|