/** \page tutorial_07 Extending the mesh using traits

This examples shows:

- How to extend the behaviour of entities using traits.

In the previous tutorial we used attributes and changed the type of
the data types \c Point, \c Normal, \c TexCoord, and \c Color. But we
can do even more with traits. We can change the behaviour of the mesh
entities \c Vertex, \c Face, \c Edge, and \c Halfedge. 

One goal in the design was a highly customizable data structure. Using
the traits technique makes it possible. We pick up the smoother again
and show an alternative way to implement it. Now we place the necessary
data and the functions in the vertex itself

\dontinclude 07-traits/smooth.cc
\skipline MyTraits
\until };
\until };

Note the definition of the vertex entity. We use the supplied define
\c VertexTraits (which resolves in a rather inconvenient template
definition). Similary we can use the defines \c FaceTraits, \c
EdgeTraits, and \c HalfedgeTraits to extend these entities. Now we
enhanced the vertex, with the additional member variable \c cog_, and
the get/set-method pair to access the new member.

As before we compute in a first loop the barycenters for all vertices
and store the information at the vertices

\skipline mesh.data(v_it).set_cog

In the second pass we set the new position of each vertex

\skipline mesh.data(v_it).cog

It looks neat, but on the other hand we can't remove the data anymore
as we could do with properties!  By using traits one creates a 'static'
configuration, which can't be changed during runtime.

The complete source looks like this:

\include 07-traits/smooth.cc

*/