vcglib/vcg/space/tcoord2.h

133 lines
4.5 KiB
C++

/****************************************************************************
* VCGLib o o *
* Visual and Computer Graphics Library o o *
* _ O _ *
* Copyright(C) 2004 \/)\/ *
* Visual Computing Lab /\/| *
* ISTI - Italian National Research Council | *
* \ *
* All rights reserved. *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
* for more details. *
* *
****************************************************************************/
/****************************************************************************
History
$Log: not supported by cvs2svn $
****************************************************************************/
#ifndef __VCGLIB_TCOORD2__
#define __VCGLIB_TCOORD2__
#include <vcg/space/point2.h>
namespace vcg {
template<class T = float,int N = 1>
class TCoord2
{
private:
Point2<T> _t[N];
short _n[N];
public:
inline T & u() { return _t[0][0]; }
inline T & v() { return _t[0][1]; }
inline const T & u() const { return _t[0][0]; }
inline const T & v() const { return _t[0][1]; }
inline T & u(const int i) { return _t[i][0]; }
inline T & v(const int i) { return _t[i][1]; }
inline const T & u(const int i) const { return _t[i][0]; }
inline const T & v(const int i) const { return _t[i][1]; }
inline short & n() { return _n[0]; }
inline const short n() const { return _n[0]; }
inline short & n(const int i) { return _n[i]; }
inline const short n(const int i) const { return _n[i]; }
inline Point2<T> & t(const int i) { return _t[i]; }
inline Point2<T> t(const int i) const { return _t[i]; }
inline Point2<T> & t() { return _t[0]; }
inline Point2<T> t() const { return _t[0]; }
inline bool operator == ( TCoord2 const & p ) const
{
for(int i=0;i<N;++i)
if(p._t[i] != _t[i] || p._n[i] != _n[i]) return false;
return true;
}
enum { n_coords=N};
};
template<class T = float>
class TCoordSimple
{
private:
Point2<T> _t;
inline short & static_n() const
{
static short _n = 0;
return _n;
}
public:
inline T & u() { return _t[0]; }
inline T & v() { return _t[1]; }
inline const T & u() const { return _t[0]; }
inline const T & v() const { return _t[1]; }
inline T & u(const int i) { assert(i==0); return _t[0]; }
inline T & v(const int i) { assert(i==0); return _t[1]; }
inline const T & u(const int i) const { assert(i==0); return _t[0]; }
inline const T & v(const int i) const { assert(i==0); return _t[1]; }
inline bool operator == ( TCoordSimple const & p ) const
{
return _t==p._t;
}
inline Point2<T> & t(const int i) { assert(i==0); return _t; }
inline Point2<T> t(const int i) const { assert(i==0); return _t; }
inline Point2<T> & t() { return _t; }
inline Point2<T> t() const { return _t; }
inline short & n() { assert(static_n()==0); return static_n(); }
inline short n() const { assert(static_n()==0); return 0; }
inline short & n(const int i) { assert(i==0); return static_n(); }
inline short n(const int i) const { assert(i==0); return 0; }
enum { n_coords=1};
};
#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
}
#endif