/** \mainpage
The Visualization and Computer Graphics Library (VCG for short) is
a open source portable C++ templated library for manipulation, processing
and displaying with OpenGL of triangle and tetrahedral meshes.
The library, composed by more than 50k lines of code,
is released under the GPL license, and it is the base of most of the
software tools of the Visual Computing Lab of the Italian National Research Council Institute ISTI
(http://vcg.isti.cnr.it), like metro and shadevis.
The VCG library was built to manage triangular meshes, so most of the classes
and algorithms it contains are related to such object. This is especially true
for the things that are in the "mesh" folder of the tree. This document
basically explains how the concept of mesh is implemented, i.e. what the "type"
of a mesh is and how it can be obtained, how the connectivity of the mesh is
stored and how it is used to visit the mesh. This part of the library is self
contained, only standard libraries are included, as STL (which are intensively
used all over the code).
\section Intro Point3 as an example of the style
We won't going through all of the files and classes of the library to show how
it is built. You will find most of the information in the code as comments, and
when understood the implementation flavor, you won't even need the comments.
The definition of class Point3 looks like this:
\code
template class Point3 {
public:
Point3() { }
~Point3() { }
private:
T _v[3];
// ....
// ....
public:
T & X(){return v[0];}
T & Y(){return v[1];}
T & Z(){return v[2];}
// ...... operators
};
\endcode
You will find that most of (if not all of) the classes have some template
parameters. In this case it is used to say which type is used as coordinate
(most of the times it will be float or double, but it can be any type
implementing the operator used in the bodies of Point3 operators). Another
common characteristic is the access method to the data (in this case v[3]),
which are always defined as private member.
\subsection ind Indexing and numbering conventions
Vertex edges, and wedges are ordered according the following convention: face should be seen their vertexes counterclockwise, edge \c i is the one formed by vertex \c i and \c i+1.
\image html img/triord.png "Naming conventions for vertexes and edges"
For a tetrahedrdon we assume that it is \i well-oriented when the vertex \c 0 sees the other vertexes \c 1 2 3 in a counter-clockwise manner
\subsection fft Face-face Topology
With the face-face topology every face has three pointers to Face and three
integers. Given a face with FF topology the pointer \c f.F(i) points to the face that shares the edge \c i with
\c f , and the integer \c f.Z(i) tells the number of edge \c f.i as seen from face
\c f.F(i) (see Figure ).
If the edge \c f.i is on the mesh border, \c f.F(i)==f. The following
proposition holds: \n
\code
(f.F(i)== &f) || (f.F(i))->F(f.Z(i))== &f
\endcode
some text
\image html img/ff.png "Example of face-face topology"
*/