Better Doxygen documentation
This commit is contained in:
parent
2bf024cfb7
commit
debbe719dd
|
@ -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>
|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
|
@ -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"
|
||||
*/
|
|
@ -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 &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 “Type”, “Iterator”, “Pointer”, or “Container”.</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<vcg/space/point3.h>
|
||||
</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<vcg/math/base.h> // not necessary because included by point3.h
|
||||
|
||||
#include<vcg/space/point3.h>
|
||||
</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>
|
||||
*/
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue