TAPs 0.7.7.3
TAPsFace.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsFace.hpp
00003 
00004 Face class is a class for 3D Face with normal direction (a plane normal), 
00005 and texture coordinates.
00006 It should contain a set of pointers to its vertices in CCW order.
00007 Example:
00008           2-------1
00009            \       \
00010             \       \
00011              \       0
00012               \     /
00013                \   /
00014                 \ /
00015                  3
00016 
00017 SUKITTI PUNAK   (10/29/2004)
00018 UPDATE          (04/04/2005)
00019 ******************************************************************************/
00020 #ifndef TAPs_FACE_HPP
00021 #define TAPs_FACE_HPP
00022 
00023 #include "../Core/TAPsVector3.hpp"
00024 
00025 BEGIN_NAMESPACE_TAPs
00026 //=============================================================================
00027 template <typename T>
00028 class Face {
00029 //=============================================================================
00030 protected:
00031     int *       m_iVertexList;      
00032     int         m_iNoVertices;      
00033     Vector3<T>  m_v3N;              
00034     T *         m_pt2DTexCoords;    
00035     int         m_iNo2DTexCoords;   
00036 
00037 #ifdef  TAPs_SUPPORT_ASE_FORMAT
00038     unsigned char   m_iSubmatID;    
00039 #endif//TAPs_SUPPORT_ASE_FORMAT
00040 
00046 #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00047     int *   m_iVertexColorList;     
00048 #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00049 
00055 #ifdef  TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00056     int *   m_iVertexTextureList;   
00057 #endif//TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00058 
00059 //=============================================================================
00060 public:
00061     // DEBUG
00062     int     ID;
00063     //-------------------------------------------------------------------------
00064     // Output Operator <<
00065     friend std::ostream & operator<< ( std::ostream &output, Face<T> const &f )
00066     {
00067         output  << "Face<" << typeid(T).name() << "> has "
00068                 << f.m_iNoVertices << " vertices:";
00069         //------------------------------------------------------------
00070         // Output vertex list
00071         for ( int i = 0; i < f.m_iNoVertices; ++i )
00072         {
00073             output << "  " << f.m_iVertexList[i];
00074 
00075             #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00076             output << " (vcolor: " << f.m_iVertexColorList[i] << ")";
00077             #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00078 
00079             #ifdef  TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00080             output << " (vtexture: " << f.m_iVertexTextureList[i] << ")";
00081             #endif//TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00082         }
00083         //------------------------------------------------------------
00084         // Output normal
00085         output << "  with Normal:" << f.m_v3N;
00086         //------------------------------------------------------------
00087         // Output texture coordinates
00088         output << "\n  and 2-D Texture Coordinates (" << f.m_iNo2DTexCoords << "):";
00089         for ( int i = 0; i < f.m_iNo2DTexCoords*2; ++i )
00090         {
00091             output << "  " << f.m_pt2DTexCoords[i];
00092         }
00093         return output;
00094     }
00095     //-------------------------------------------------------------------------
00096     // Constructors and destructor
00097     Face ( Vector3<T> normal = Vector3<T>() );  // default constructor
00098     Face ( int *vList, int n, 
00099             Vector3<T> normal = Vector3<T>() ); // construct from vertex list
00100     Face ( Face<T> const &f );                  // copy ctor
00101     virtual ~Face ();
00102     //-------------------------------------------------------------------------
00103     // Fn(s) for Normal
00104     inline void SetNormal( Vector3<T> normal )  { m_v3N = normal; }
00105     inline void SetNormal( T x, T y, T z )  { m_v3N.SetXYZ( x, y, z ); }
00106     inline Vector3<T> const & GetNormal() const { return m_v3N; }
00107     //-------------------------------------------------------------------------
00108     // Member Access for Vertex List
00109     inline int  GetNoVertices() const;
00110     inline void SetNoVertices( int n );
00111     inline int  GetNumVertices() const      { return GetNoVertices(); }
00112     inline void SetNumVertices( int n )     { SetNoVertices( n ); }
00113     inline int  GetVertexNo( int i ) const;
00114     inline void SetVertexNo( int i, int vNo );
00115 
00116 #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00117     inline int  GetVertexColorNo( int i ) const;
00118     inline void SetVertexColorNo( int i, int vNo );
00119 #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00120 
00121 #ifdef  TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00122     inline int  GetVertexTextureNo( int i ) const;
00123     inline void SetVertexTextureNo( int i, int vNo );
00124 #endif//TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00125 
00126     //-------------------------------------------------------------------------
00127     // Member Access for Texture Coordinates
00128     inline int  GetNoTexCoords() const;
00129     inline int  GetNumTexCoords() const     { return GetNoTexCoords(); }
00130     inline void SetNoTexCoords( int n );
00131     inline void SetNumTexCoords( int n )    { SetNoTexCoords( n ); }
00132     inline T    GetTexCoordNoS( int i ) const;
00133     inline T    GetTexCoordNoT( int i ) const;
00134     inline void GetTexCoordNoS( int i, T &s ) const;
00135     inline void GetTexCoordNoT( int i, T &t ) const;
00136     inline void SetTexCoordNoS( int i, T s );
00137     inline void SetTexCoordNoT( int i, T t );
00138     inline void GetTexCoordNo( int i, T &s, T &t ) const;
00139     inline void SetTexCoordNo( int i, T s, T t );
00140     inline T    GetTexCoordHalfNo( int i ) const;
00141     inline void GetTexCoordHalfNo( int i, T &v ) const;
00142     inline void SetTexCoordHalfNo( int i, T v );
00143     //inline void RemoveTexCoordNo( int i );
00144     //inline void InsertTexCoordNo( int i, T s, T t );
00145     //inline void AppendTexCoord( T s, T t );
00146     //-------------------------------------------------------------------------
00147 #ifdef  TAPs_SUPPORT_ASE_FORMAT
00148 
00149     inline void          SetMaterialID ( unsigned char id ) { m_iSubmatID = id; }
00151     inline unsigned char GetMaterialID () const             { return m_iSubmatID; }
00152 #endif//TAPs_SUPPORT_ASE_FORMAT
00153     //-------------------------------------------------------------------------
00154     // Assignment Operator
00155     inline Face<T> & operator= ( Face<T> const &f );
00156     //-------------------------------------------------------------------------
00157 }; // END CLASS Face
00158 //=============================================================================
00159 END_NAMESPACE_TAPs
00160 //-----------------------------------------------------------------------------
00161 // Include definition if TAPs_USE_EXPORT is not defined
00162 //#if !defined( TAPs_USE_EXPORT )
00163     #include "TAPsFace.cpp"
00164 //#endif
00165 //-----------------------------------------------------------------------------
00166 #endif
00167 //345678901234567890123456789012345678901234567890123456789012345678901234567890
00168 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
00169 
00170 
00171 /*
00172 // Test Face class
00173 #include "../GeometricDataStructure/TAPsVertex.hpp"
00174 #include "../GeometricDataStructure/TAPsFace.hpp"
00175 using namespace TAPs;
00176 using namespace std;
00177 int main()
00178 {
00179     Vertexd dVertex = new Vertexd[4];
00180     dVertex[0] = new Vertexd( 4, 0, 0 );
00181     dVertex[1] = new Vertexd( 6, 2, 3 );
00182     dVertex[2] = new Vertexd( 3, 4, 3 );
00183     dVertex[3] = new Vertexd( 0, 1, 0 );
00184     cout << "dVertex[0] = " << dVertex[0] << endl;
00185     cout << "dVertex[1] = " << dVertex[1] << endl;
00186     cout << "dVertex[2] = " << dVertex[2] << endl;
00187     cout << "dVertex[3] = " << dVertex[3] << endl;
00188     int vList = new int[4];
00189     vList[0] = 0;
00190     vList[1] = 1;
00191     vList[2] = 2;
00192     vList[3] = 3;
00193     Face  F( vList, 4 );
00194     cout << Face << endl;
00195     return 0;
00196 }
00197 */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines