Improved Doxygen documentation

- better code linking
- optional components
This commit is contained in:
Paolo Cignoni 2013-11-25 10:10:12 +00:00
parent 84c80a1972
commit 0fd6ac2f9c
4 changed files with 63 additions and 18 deletions

View File

@ -679,13 +679,8 @@ INPUT = . \
../../vcg/complex/algorithms/clean.h \
../../vcg/complex/algorithms/refine.h \
../../vcg/complex/algorithms/create/platonic.h \
../../vcg/complex/algorithms/geodesic.h
../../apps/sample/trimesh_base \
../../apps/sample/trimesh_attribute \
../../apps/sample/trimesh_smooth \
../../apps/sample/trimesh_refine \
../../apps/sample/trimesh_inertia \
../../apps/sample/trimesh_sampling
../../vcg/complex/algorithms/geodesic.h \
../../apps/sample/
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@ -711,7 +706,7 @@ FILE_PATTERNS = *.cpp \
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.
RECURSIVE = NO
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
@ -736,7 +731,7 @@ EXCLUDE_SYMLINKS = NO
# against the file with absolute path, so to exclude all test directories
# for example use the pattern */test/*
EXCLUDE_PATTERNS =
EXCLUDE_PATTERNS = moc_*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@ -845,7 +840,7 @@ REFERENCES_RELATION = NO
# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
# link to the source code. Otherwise they will link to the documentation.
REFERENCES_LINK_SOURCE = YES
REFERENCES_LINK_SOURCE = NO
# If the USE_HTAGS tag is set to YES then the references to source code
# will point to the HTML generated by the htags(1) tool instead of doxygen

View File

@ -4,7 +4,7 @@
There are a number of very simple and short examples meant to document the various features of the library.
trimesh_base.cpp
trimesh_optional
trimesh_attribute.cpp
trimesh_normal.cpp

View File

@ -1,12 +1,12 @@
/** \mainpage The VCG Library
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 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 100k lines of code,
is released under the GPL license, and it is the base of most of the
software tools of the <b>Visual Computing Lab</b> of the Italian National Research Council Institute ISTI
(http://vcg.isti.cnr.it), like metro and MeshLab.
is released under the GPL license, and it is the base of most of the
software tools of the <b>Visual Computing Lab</b> of the Italian National Research Council Institute ISTI
(http://vcg.isti.cnr.it), like metro and MeshLab.
The VCG library is tailored to mostly manage triangular meshes:
@ -29,6 +29,7 @@ Documentation
Start from the following pages for basic concepts and examples.
- \subpage install "Installing the VCG Library"
- \subpage basic_concepts "Basic Concepts"
- \subpage optional_component "Optional Component"
- \subpage flags "Bit Flags on mesh elements"
- \subpage adjacency "Adjacency and Topology"
- \subpage allocation "Creating and destroying elements"
@ -38,7 +39,7 @@ Start from the following pages for basic concepts and examples.
- \ref code_sample "Short Examples showing various features of the library"
Notable Applications
-------
-------
A number of applications have been developed using the vcglib:
- <a href="http://meshlab.sourceforge.net">MeshLab</a>: the renowed open source mesh processing is based on this library.
- \subpage metro "Metro, the tool for measuring differences between meshes"

View File

@ -0,0 +1,49 @@
/** \page optional_component
Optional Component
===
There are many cases where some vertex or face attributes (like for example the Face-Face adjacency) are not necessary all the time.
VCG Lib gives you a way to specify optional components, i.e. attributes that are not statically stored within the simplex but can be
dynamically allocated only when you need them. Their use is totally transparent with respect to the standard, statically allocated components.
To 'define' optional component you need to do two things:
- to use a special type of container (derived from std::vector) in the mesh definition
- to specify the right type of component in the simplex definition
An optional component can be used only when it is 'enabled', e.g. when the memory for it has been allocated.
An optional component can be enable by calling the function Enable.
VCG Lib handles optional components with two alternative mechanisms: the first is called 'Ocf' (for Optional Component Fast)
which uses one pointer for each simplex but it makes accessing optional attribute almost as fast as non-optional ones;
the second is called 'Occ' (for Optional Component Compact) which only requires a little extra space for each mesh
(unrelated to its size in terms of number of simplicies) but which can result in a slower access.
In the following, only their use is discussed. The implementation detail can be found here.
Optional Component Fast
---
The following definition of MyMesh specifies that a few components of the vertex and face types are optional.
Note that the special attribute vcg::vertex::InfoOcf and vcg::face::InfoOcf are the first attribute of vertex and face types and that we
use the vcg::vertex::vector_ocf and vcg::face::vector_ocf as containers;
\dontinclude trimesh_optional.cpp
\skip MyVertexOcf
\until MyMeshOcf
Before accessing the data contained in the optional component you must enable that attribute by calling EnableXXX() corresponding function;
afterwards the space for the component will be allocated and accessible until you call again DisableXXXX().
\dontinclude trimesh_optional.cpp
\skip cmof
\until cmof
\skip HasFFAdjacency
\until true
Trying to access the value of a unallocated component before enabling or after disabling the corresponding component
will throw an assertion.
\dontinclude trimesh_optional.cpp
\skip EnableNormal
\until UpdateNormal
\sa trimesh_optional.cpp
*/