
% halfedge data structure has proven successful.

3D polygon surface mesh data structures based on the concept of
halfedges~\cite{k-ugpdd-99} have been very successful for the design
of general algorithms on meshes. (do we mention it is a standard
building block used for research or industry-strength softwares? we
need adding references if so).

% focus on algorithms, not on data structures.

Although making a preliminary version of a halfedge-based mesh data
structure is as a fairly simple task and is often proposed as a
programming exercice, the time has come where we should not write our
own mesh data structure from scratch anymore. 

I list a bunch of reasons here, and let you reduce/extend them.

Not reinventing the wheel, hence learning how to integrate an existing
tool makes a real added value. Implementing a mesh data structure from
scratch makes a zero added value to your algorithms.

Using a bug-free mesh data structure eases the implementation and
helps focusing on the end-goal, i.e. the algorithms rather than
debugging the underlying data structure.

Using a robust and optimized data structure allows to obtain fast and
robust results. The time has gone where toy examples were sufficient
to illustrate research results (ref. repository of big models
standardly used in graphics). The data structure must scale linearly
with the mesh complexity.

Choose a data structure that adopts the generic programming paradigm.
Generic programming saves time and effort and allows the reuse of
existing data structures and algorithms. (there are many other
argument for generic programming that we should list here - long error
messages are not for example).

Your algorithms on meshes usually needs more than a mesh data
structure, e.g. basic geometric entities such as points, vectors,
planes and simple operations acting upon them (distance,
intersections, orientation).

What you need is a library, flexible enough to let you elaborate your
own algorithm on meshes while reusing all basic geometric computing
components.

Choose one library that has emerged as a standard in a community.
Such kind of libraries usually offer support and discussion lists
(extremely helpful before siggraph deadlines).

CGAL and the demo programs accompanying this tutorial offer a viable
solution that we present here. (we have to compare us with the
OpenMesh project within OpenSG).

% intended audience

The intended audience are researchers, developers or students in the
graphics community developing algorithms around meshes.

% the solution

The solution contains a flexible, powerful and efficient mesh data
structure, examples of algorithms on meshes, such as subdivision
surfaces, (self-) intersection tests, estimation of curvatures,
convenient file IO with Wavefront OBJ and OFF formats, an interactive
visualization program for inspection, debugging, experimenting, and
support for preparing pictures for publications.

% teaser 

\begin{figure}[htb]
    \centering{\includegraphics[width=12.0cm]{figs/teaser}}
    \caption{Demo application running on Windows. A polygon mesh is 
             subdivided using the quad-triangle subdivision 
             scheme~\cite{sl-qts-02}.}
    \label{fig:teaser}
\end{figure}



% open

Open source and contributions are welcome. 



% remainder

Section 2 describes how to declare a polyhedron, read a polygon mesh
from a file, and iterate over all facets for rendering. Example is
shown to enrich a polyhedron with extended primitives (normals,
colors, curvature tensors).

Section 3 illustrates how to write subdivision algorithms for meshes
(since they act on both connectivity and geometry, it is perfect for
our training purpose). Three approaches are shown. First one is sqrt3
subdivision using Euler operators. Second one uses the incremental
builder (originally designed for file IO) with a control mesh as
input. Third one offers a generic design for writing subdivision
algorithms.



% Andy

%program 1: rendering and file io of a default polyhedron 
%   context: a skeleton of a polyhedron program: declaration,
%initialization (inc. builder) and the rendering (iteration on facet and
%circulation of the factes)

%program 2: enriched polyhedron in program 1
%   context: extend a polyhedron: trait, item. hds? Use of the extended
%primitives.

%program 3: subdivision 1 (sqrt3)
%   context: refinement operators. Halfedge trversal (prev(), etc...) and
%circulators. Effect of connectivity edit on iterator and circulator.
%Maintain the correspondence after refinement.

%program 4: subdivision 2 (qt)
%   context: inc builder revisited.

%program 5: subdivisions (templated rules)
%   context: a generic design of subdivisions.

%program 2 is based on program 1 and program 3, 4, 5 are separate library
%functions called by program 2.

%The tutorial will walk though the programs. And a possible structure is
%sect 1: intro
%sect 2: program 1 & 2
%sect 3: program 3 & 4 & 5
%sect 4: conclusion 
        







% introduction to cgal

%The CGAL library is a joint effort between nine European
%institutes~\cite{fgkss-dccga-00}. The goal of CGAL is to make
%available to users in industry and academia some efficient solutions
%to basic geometric problems developed in the area of computational
%geometry in a C++ software library.\\
