Better Doxygen documentation

This commit is contained in:
Paolo Cignoni 2004-09-28 10:10:19 +00:00
parent 2bf024cfb7
commit debbe719dd
7 changed files with 425 additions and 0 deletions

4
docs/Doxygen/footer.html Normal file
View File

@ -0,0 +1,4 @@
<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 27 08:13:16 2004 for <a href="http://vcg.sf.net"> VCG Library </a> by
<a href="http://www.doxygen.org/index.html"> doxygen 1.3.7 </a> </small></address>
</body>
</html>

BIN
docs/Doxygen/img/ff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
docs/Doxygen/img/figure.xar Normal file

Binary file not shown.

BIN
docs/Doxygen/img/triord.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

81
docs/Doxygen/index.dxy Normal file
View File

@ -0,0 +1,81 @@
/** \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 <b>Visual Computing Lab</b> 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 T> 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"
*/

115
docs/Doxygen/style.dxy Normal file
View File

@ -0,0 +1,115 @@
/**
\page profva dd
\section style VCG Library Coding Guide
\subsection naming Naming Rules
<P><B><I>Class names </I></B> with first letter Uppercase and internal
uppercase to separate compound words.\n
<P><B><I>Function members</I></B> of classes follow the same rule.</P>
<P>Example:</P>
\code
Point3f
{
public:
ScalarType &amp;V(const int i);
}
\endcode
<P><B><I>Public Variable members</I></B> has the first letter
lowercase and internal uppercase to separate compound words.</P>
<P>Example:</P>
<pre></pre>
<P><B><I>Private Variable members</I></B> has an underscore as first char and
the first letter lowercase and internal uppercase to separate compound
words.</P>
<P>Example:</P>
<pre>
Point3f
{
private:
ScalarType _v[3];
}
</pre>
<P><B><I>Class Template Arguments</I></B> all capitalized and with names
remembering where they have been defined.<br>
Class TypeDefs used for templated Class arguments or for shortness are just like Class Names,
but ending with &ldquo;Type&rdquo;, &ldquo;Iterator&rdquo;, &ldquo;Pointer&rdquo;, or &ldquo;Container&rdquo;.</P>
<P>Example:</P>
<pre>
typedef typename VertexType::CoordType CoordType;
typedef typename VertContainer::iterator VertexIterator;
</pre>
<H2 >Header Files</H2>
<P>Header filenames and folders always fully lower case. Compound names
are separated by '_'.</P>
<P>Example:</P>
<pre>
#include&lt;vcg/space/point3.h&gt;
</pre>
<P>Each include file must begin with the standard legal
disclamier/license intestation and report in the first line of history
the $LOG$ cvs string.</P>
<P>The following automatically generated history can be, from time to
time, compressed and shortened to save space.</P>
<P>Each file of the library has to include all the files that it
requires. A include file should rely on the files included by its own
include files. Example: in vcg/space/box3.h:</P>
<pre>
#include&lt;vcg/math/base.h&gt; // not necessary because included by point3.h
#include&lt;vcg/space/point3.h&gt;
</pre>
<P>In Class definitions place all the prototypes all together before
the inline or templated implementations.</P>
<H2 >Editing Rules</H2>
<P>Tabs are equivalent to two spaces.</P>
<P>There are no strict rules for the placement of '{' or indenting.</P>
<H2 >Constructors and casting</H2>
<P>All basic classes (point3, box3 ecc) must have null
constructors. Non null constructors can be added in debug
versions.</P>
<P>Implicit casting is disallowed. Write a member Import function for
casting from different integral types and a static.<br>
Construct to build an object from different a integral type.</P>
<P>Example:</P>
<pre>
Point3f pf(1.0f,0.0f,0.0f);
Point3d pd=Point3f::Construct(pf);
pf.Import(pd);
</pre>
<H2 >Comment and documenting</H2>
<P>All the classes, algorithms and functions <B>MUST</B> be documented using Doxygen. Please add a short intro before each class explaining design choices and for non trivial classes give some short usage example. For complex classes try to group similar members under categories. Non trivial algorithms should refer the paper/book where they are explained.</p>
<P> Namespaces and files should be also documented trying to explain how the file/namespace partitioning works.
</P>
</BODY>
</HTML>
*/

225
docs/Doxygen/vcg.css Normal file
View File

@ -0,0 +1,225 @@
H1 {
text-align: center;
font-family: Geneva, Arial, Helvetica, sans-serif;
}
H2 {
font-family: Geneva, Arial, Helvetica, sans-serif;
}
H3 {
font-family: Geneva, Arial, Helvetica, sans-serif;
}
CAPTION { font-weight: bold }
DIV.qindex {
font-family: Geneva, Arial, Helvetica, sans-serif;
width: 100%;
background-color: #eeeeff;
border: 1px solid #B0B0B0;
text-align: center;
margin: 2px;
padding: 2px;
line-height: 120%;
}
A.qindex {
text-decoration: none;
font-weight: bold;
color: #1A419D;
padding: 2px;
}
A.qindex:visited {
text-decoration: none;
font-weight: bold;
color: #1A419D
padding: 2px;
}
A.qindex:hover {
text-decoration: none;
background-color: #ddddff;
padding: 2px;
}
A.qindexHL {
text-decoration: none;
font-weight: bold;
background-color: #6666cc;
color: #ffffff;
padding: 2px 6px;
border: 1px double #9295C2;
}
A.qindexHL:hover {
text-decoration: none;
background-color: #6666cc;
color: #ffffff;
padding: 2px 6px;
}
A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
A.el { text-decoration: none; font-weight: bold; font-size: 80%;
}
A.elRef { font-weight: bold }
A.code { text-decoration: none; font-weight: normal; color: #1A419D}
A.codeRef { font-weight: normal; color: #1A419D}
A:hover { text-decoration: none; background-color: #f2f2ff }
DL.el { margin-left: -1cm }
PRE.fragment {
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
margin-top: 4px;
margin-bottom: 4px;
margin-left: 2px;
margin-right: 8px;
padding-left: 6px;
padding-right: 6px;
padding-top: 4px;
padding-bottom: 4px;
}
DIV.fragment {
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
padding: 6px;
}
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
TD.md { background-color: #F4F4FB; font-weight: bold; }
TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
DIV.groupHeader {
margin-left: 16px;
margin-top: 12px;
margin-bottom: 6px;
font-weight: bold;
font-family: Geneva, Arial, Helvetica, sans-serif;
}
DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
BODY {
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 85%;
background: white;
color: black;
margin-right: 20px;
margin-left: 20px;
}
TD.indexkey {
background-color: #eeeeff;
font-weight: bold;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TD.indexvalue {
background-color: #eeeeff;
font-style: italic;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TR.memlist {
background-color: #f0f0f0;
}
P.formulaDsp { text-align: center; }
IMG.formulaDsp { }
IMG.formulaInl { vertical-align: middle; }
SPAN.keyword { color: #008000 }
SPAN.keywordtype { color: #604020 }
SPAN.keywordflow { color: #e08000 }
SPAN.comment { color: #800000 }
SPAN.preprocessor { color: #806020 }
SPAN.stringliteral { color: #002080 }
SPAN.charliteral { color: #008080 }
.mdTable {
border: 1px solid #868686;
background-color: #F4F4FB;
}
.mdRow {
padding: 8px 10px;
}
.mdescLeft {
font-size: smaller;
font-style: italic;
background-color: #FAFAFA;
padding-left: 8px;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
}
.mdescRight {
font-size: smaller;
font-style: italic;
background-color: #FAFAFA;
padding-left: 4px;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
padding-bottom: 0px;
padding-right: 8px;
}
.memItemLeft {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 12px;
}
.memItemRight {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 13px;
}
.search { color: #003399;
font-weight: bold;
}
FORM.search {
margin-bottom: 0px;
margin-top: 0px;
}
INPUT.search { font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #eeeeff;
}
TD.tiny { font-size: 75%;
}
a {
color: #252E78;
}
a:visited {
color: #3D2185;
}