Written some documentation and added to the space module

This commit is contained in:
Paolo Cignoni 2004-03-10 21:38:40 +00:00
parent b84e4c7460
commit c735627fae
4 changed files with 69 additions and 63 deletions

View File

@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.1 2004/02/15 23:34:04 cignoni
Initial commit
****************************************************************************/ ****************************************************************************/
@ -35,23 +38,24 @@ $Log: not supported by cvs2svn $
#include <vcg/space/point3> #include <vcg/space/point3>
namespace vcg { namespace vcg {
/** \addtogroup space */
/*@{*/
template <class T> /**
/** @name Box2 Templated class for a 2D bounding box. It is stored just as two Point2
Class Box2. @param BoxScalarType (Template Parameter) Specifies the scalar field.
This is the class for definition of a bounding box in 2D space.
@param T (Templete Parameter) Specifies the scalar field.
*/ */
template <class BoxScalarType>
class Box2 class Box2
{ {
public: public:
/// The scalar type /// The scalar type
typedef T scalar_type; typedef BoxScalarType ScalarType;
/// min coordinate point /// min coordinate point
Point2<T> min; Point2<BoxScalarType> min;
/// max coordinate point /// max coordinate point
Point2<T> max; Point2<BoxScalarType> max;
/// Standard constructor /// Standard constructor
inline Box2() { min.x()= 1; max.x()= -1; min.y()= 1; max.y()= -1; } inline Box2() { min.x()= 1; max.x()= -1; min.y()= 1; max.y()= -1; }
/// Copy constructor /// Copy constructor
@ -63,28 +67,13 @@ public:
{ {
return min==p.min && max==p.max; return min==p.min && max==p.max;
} }
/** Varia le dimensioni del bounding box scalandole rispetto al parametro scalare. /// Initializing the bounding box with a point
@param s Valore scalare che indica di quanto deve variare il bounding box void Set( const Point2<BoxScalarType> & p )
*/
void Inflate( const T s )
{
Inflate( (max-min)*s );
}
/** Varia le dimensioni del bounding box del valore fornito attraverso il parametro.
@param delta Point in 2D space
*/
void Inflate( const Point2<T> & delta )
{
min -= delta;
max += delta;
}
/// Initializing the bounding box with a point
void Set( const Point2<T> & p )
{ {
min = max = p; min = max = p;
} }
// Initializing with the values // Initializing with the values
inline void Set( T minx, T miny, T maxx, T maxy ) inline void Set( BoxScalarType minx, BoxScalarType miny, BoxScalarType maxx, BoxScalarType maxy )
{ {
min[0] = minx; min[0] = minx;
min[1] = miny; min[1] = miny;
@ -119,7 +108,7 @@ public:
cade fuori da esso. cade fuori da esso.
@param p The point 2D @param p The point 2D
*/ */
void Add( const Point2<T> & p ) void Add( const Point2<BoxScalarType> & p )
{ {
if(IsNull()) Set(p); if(IsNull()) Set(p);
else else
@ -148,7 +137,7 @@ public:
/** Trasla il bounding box di un valore definito dal parametro. /** Trasla il bounding box di un valore definito dal parametro.
@param p Il bounding box trasla sulla x e sulla y in base alle coordinate del parametro @param p Il bounding box trasla sulla x e sulla y in base alle coordinate del parametro
*/ */
void Translate( const Point2<T> & p ) void Translate( const Point2<BoxScalarType> & p )
{ {
min += p; min += p;
max += p; max += p;
@ -157,7 +146,7 @@ public:
@param p The point 2D @param p The point 2D
@return True se p appartiene al bounding box, false altrimenti @return True se p appartiene al bounding box, false altrimenti
*/ */
bool IsIn( Point2<T> const & p ) const bool IsIn( Point2<BoxScalarType> const & p ) const
{ {
return ( return (
min.v[0] <= p.v[0] && p.v[0] <= max.v[0] && min.v[0] <= p.v[0] && p.v[0] <= max.v[0] &&
@ -168,7 +157,7 @@ public:
@param p The point 2D @param p The point 2D
@return True se p appartiene al bounding box, false altrimenti @return True se p appartiene al bounding box, false altrimenti
*/ */
bool IsInEx( Point2<T> const & p ) const bool IsInEx( Point2<BoxScalarType> const & p ) const
{ {
return ( return (
min.v[0] <= p.v[0] && p.v[0] < max.v[0] && min.v[0] <= p.v[0] && p.v[0] < max.v[0] &&
@ -199,26 +188,26 @@ public:
*/ */
inline bool IsEmpty() const { return min==max; } inline bool IsEmpty() const { return min==max; }
/// Restituisce la lunghezza della diagonale del bounding box. /// Restituisce la lunghezza della diagonale del bounding box.
T Diag() const BoxScalarType Diag() const
{ {
return Distance(min,max); return Distance(min,max);
} }
/// Calcola il centro del bounding box. /// Calcola il centro del bounding box.
Point2<T> Center() const Point2<BoxScalarType> Center() const
{ {
return (min+max)/2; return (min+max)/2;
} }
/// Calcola l'area del Bounding box. /// Calcola l'area del Bounding box.
inline T Area() const inline BoxScalarType Area() const
{ {
return (max.v[0]-min.v[0])*(max.v[1]-min.v[1]); return (max.v[0]-min.v[0])*(max.v[1]-min.v[1]);
} }
/// Calcola la dimensione del bounding box sulla x. /// Calcola la dimensione del bounding box sulla x.
inline T DimX() const { return max.v[0]-min.v[0]; } inline BoxScalarType DimX() const { return max.v[0]-min.v[0]; }
/// Calcola la dimensione del bounding box sulla y. /// Calcola la dimensione del bounding box sulla y.
inline T DimY() const { return max.v[1]-min.v[1]; } inline BoxScalarType DimY() const { return max.v[1]-min.v[1]; }
inline void Normalize( Point2<T> & p ) inline void Normalize( Point2<BoxScalarType> & p )
{ {
p -= min; p -= min;
p[0] /= max[0]-min[0]; p[0] /= max[0]-min[0];
@ -227,17 +216,6 @@ public:
}; // end class definition }; // end class definition
#ifdef __GL_H__
/// Funzione di utilita' per la visualizzazione in OpenGL (short)
inline void glBox( Box2<short > const & b ) { glRectsv(b.min.v,b.max.v); }
/// Funzione di utilita' per la visualizzazione in OpenGL (int)
inline void glBox( Box2<int > const & b ) { glRectiv(b.min.v,b.max.v); }
/// Funzione di utilita' per la visualizzazione in OpenGL (float)
inline void glBox( Box2<float > const & b ) { glRectfv(b.min.v,b.max.v); }
/// Funzione di utilita' per la visualizzazione in OpenGL (double)
inline void glBox( Box2<double> const & b ) { glRectdv(b.min.v,b.max.v); }
#endif
/// Specificazione di box of short /// Specificazione di box of short
typedef Box2<short> Box2s; typedef Box2<short> Box2s;
/// Specificazione di box of int /// Specificazione di box of int
@ -247,6 +225,7 @@ typedef Box2<float> Box2f;
/// Specificazione di box of double /// Specificazione di box of double
typedef Box2<double> Box2d; typedef Box2<double> Box2d;
/*@}*/
} // end namespace } // end namespace

View File

@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.2 2004/03/10 00:35:01 cignoni
Removed a wrong (?) copy constructor
Revision 1.1 2004/02/10 01:11:28 cignoni Revision 1.1 2004/02/10 01:11:28 cignoni
Edited Comments and GPL license Edited Comments and GPL license
@ -35,6 +38,14 @@ Edited Comments and GPL license
#include <vcg/space/point4.h> #include <vcg/space/point4.h>
namespace vcg { namespace vcg {
/** \addtogroup space */
/*@{*/
/**
The templated class for representing 4 entity color.
The class is templated over the ScalarType. class that is used to represent color with float or with unsigned chars. All the usual
operator overloading (* + - ...) is present.
*/
template <class T> template <class T>
class Color4 : public Point4<T> class Color4 : public Point4<T>
{ {
@ -134,12 +145,12 @@ inline void SetGrayShade(float f)
} }
// Given an integer returns a well ordering of colors /** Given an integer returns a well ordering of colors
// so that every color differs as much as possible form the previous one // so that every color differs as much as possible form the previous one
// params: // params:
// n is the maximum expected value (max of the range) // n is the maximum expected value (max of the range)
// v is the requested position // v is the requested position
*/
inline static Color4 Scatter(int n, int a,float Sat=.3f,float Val=.9f) inline static Color4 Scatter(int n, int a,float Sat=.3f,float Val=.9f)
{ {
int b, k, m=n; int b, k, m=n;
@ -246,6 +257,9 @@ inline Color4<float>::Color4<float>(Color4<float>::ColorConstant cc)
typedef Color4<unsigned char> Color4b; typedef Color4<unsigned char> Color4b;
typedef Color4<float> Color4f; typedef Color4<float> Color4f;
/*@}*/
} // end of NameSpace } // end of NameSpace
#endif #endif

View File

@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.2 2004/03/10 00:35:24 cignoni
added a math namespace reference
Revision 1.1 2004/02/10 01:11:28 cignoni Revision 1.1 2004/02/10 01:11:28 cignoni
Edited Comments and GPL license Edited Comments and GPL license
@ -36,8 +39,13 @@ Edited Comments and GPL license
namespace vcg { namespace vcg {
/** \addtogroup space */
/*@{*/
/**
The templated class for representing a point in 4D space.
The class is templated over the ScalarType class that is used to represent coordinates. All the usual
operator overloading (* + - ...) is present. This class is also the base for vcg::Color4
*/
template <class T> class Point4 template <class T> class Point4
{ {
protected: protected:
@ -286,6 +294,7 @@ typedef Point4<int> Point4i;
typedef Point4<float> Point4f; typedef Point4<float> Point4f;
typedef Point4<double> Point4d; typedef Point4<double> Point4d;
/*@}*/
} // end namespace } // end namespace
#endif #endif

View File

@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.1 2004/02/13 00:44:53 cignoni
First commit...
****************************************************************************/ ****************************************************************************/
@ -33,9 +36,16 @@ $Log: not supported by cvs2svn $
#include <vcg/space/point2.h> #include <vcg/space/point2.h>
namespace vcg { namespace vcg {
/** \addtogroup space */
/*@{*/
/**
Templated class for a set of 2D texture coord. It for each is templated over two parameters:
the type of the tex coord and the number of texcoord to be stored. This class is intended to be used when many textures
id are shared over the same surface, so for each coord the id of the texture is stored. If no id is needed see the vcg::TCoord2Simple class.
*/
template<class T = float,int N = 1> template<class T = float, int N = 1>
class TCoord2 class TCoord2
{ {
private: private:
@ -73,9 +83,11 @@ public:
enum { n_coords=N}; enum { n_coords=N};
}; };
/**
Templated class for a set of 2D texture coord. It for each is templated over two
*/
template<class T = float> template<class T = float>
class TCoordSimple class TCoord2Simple
{ {
private: private:
Point2<T> _t; Point2<T> _t;
@ -118,15 +130,7 @@ public:
}; };
#ifdef __GL_H__ /*@}*/
//inline void glTexCoord(TCoord2<int> const & p) { glTexCoord3iv(p.v);}
//inline void glTexCoord(Point3<short> const & p) { glTexCoord3sv(p.v);}
//inline void glTexCoord(Point3<float> const & p) { glTexCoord3fv(p.v);}
//inline void glTexCoord(Point3<double> const & p){ glTexCoord3dv(p.v);}
#endif
} }