![]() |
TAPs 0.7.7.3
|
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 */