Class names with first letter Uppercase and internal uppercase to separate compound words.
Function members of classes follow the same rule.
Example:
Point3f { public: ScalarType &V(const int i); }
Public Variable members has the first letter lowercase and internal uppercase to separate compound words.
Example:
Private Variable members has an underscore as first char and the first letter lowercase and internal uppercase to separate compound words.
Example:
Point3f { private: ScalarType _v[3]; }
Class Template Arguments all capitalized and with names
remembering where they have been defined.
TypeDefs used for templated Class arguments just like Class Names,
but ending with “Type”
Example:
Point3f::ScalarType
Header filenames and folders always fully lower case. Compound names are separated by '_'.
Example:
#include<vcg/space/point3.h>
Each include file must begin with the standard legal disclamier/license intestation and report in the first line of history the $LOG$ cvs string.
The following automatically ge\nerated history can be, from time to time, compressed/shortened.
Each file of the library has to include all the files that it requires. A include file should relies on the files included by its include files. Example: in vcg/space/box3.h:
#include<vcg/math/base.h> // not necessary because included by point3.h #include<vcg/space/point3.h>
In Class definitions place all the prototypes all together before the inline or templated implementations.
Tabs are equivalent to two spaces.
There are no strict rules for the placement of '{' or indenting.
All basic classes (point3, box3 ecc) must have null constructors. Non null constructors can be added in debug versions.
Implicit casting is disallowed. Write a member Import function for
casting from different integral types and a static.
Construct to build an object from different a integral type.
Example:
Point3f pf(1.0f,0.0f,0.0f); Point3d pd=Point3f::Construct(pf); pf.Import(pd);