TAPs 0.7.7.3
TAPsReadObj.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsReadObj.hpp
00003 
00004 Create an OpenGL Model Object from a .obj file.
00005 
00006 SUKITTI PUNAK   (10/12/2006)
00007 UPDATE          (10/15/2006)
00008 ******************************************************************************/
00039 #ifndef TAPs_READ_OBJ_HPP
00040 #define TAPs_READ_OBJ_HPP
00041 
00042 // The necessary headers are included in TAPsReadModel.hpp which directly uses
00043 // this header.
00044 #include "Support/TAPsHelpCreateHalfEdgeModel.hpp"
00045 
00046 BEGIN_NAMESPACE_TAPs
00047 //=============================================================================
00048 template <typename T> class ReadModels;
00049 //=============================================================================
00050 template <typename T>
00051 class ReadObj {
00052     friend class ReadModels<T>;
00053 // Member Functions  ----------------------------------------------------------
00054 public:
00055     //-------------------------------------------------------------------------
00056     // Read an input file
00057     //  I/P: fileName
00058     //  O/P: *prModel
00059     // More than one fn per each operation due to the design of Model types;
00060     //   E.g.
00061     //   One for PolygonalModel and its derived classes
00062     //   One for XPolygonalModel and its derived classes
00063     //   One for HalfEdgeModel and its derived classes
00064     //
00065     //   Each pairs are exactly identical (both declaration and definition) 
00066     //   except the passed prModel pointer.
00067     //-------------------------------------------------------------------------
00068     static bool ReadFile ( const char * fileName, 
00069         OpenGL::PolygonalModel<T> * const prModel );
00070     static bool ReadFile ( const char * fileName, 
00071         OpenGL::XPolygonalModel<T> * const prModel );
00072     static bool ReadFile ( const char * fileName, 
00073         OpenGL::HalfEdgeModel<T> * const prModel );
00074     //-------------------------------------------------------------------------
00075 private:
00076     //-------------------------------------------------------------------------
00082     static bool ReadDataFile ( const char * fileName, 
00083         OpenGL::MeshModel<T> * const prModel );
00084     static void SetModelProperties ( OpenGL::MeshModel<T> * const prModel );
00085     static void SetupModel ( OpenGL::PolygonalModel<T> * const prModel );
00086     static void SetupModel ( OpenGL::XPolygonalModel<T> * const prModel );
00087     static void SetupModel ( OpenGL::HalfEdgeModel<T> * const prModel );
00088     //-------------------------------------------------------------------------
00089     // Process Each Line Statement
00090     //-------------------------------------------------------------------------
00096     static void ProcessLineObjectName_o ( 
00097         char * line, OpenGL::MeshModel<T> * const prModel );
00098     //-------------------------------------------------------------------------
00109     static void ProcessLineGroupName_g ( 
00110         char * line, OpenGL::MeshModel<T> * const prModel );
00111     //-------------------------------------------------------------------------
00120     static void ProcessLineMaterialLibrary_mtllib ( 
00121         char * line, OpenGL::MeshModel<T> * const prModel );
00122     //-------------------------------------------------------------------------
00132     static void ProcessLineUseMaterialName_usemtl ( 
00133         char * line, OpenGL::MeshModel<T> * const prModel );
00134     //-------------------------------------------------------------------------
00142     static void ProcessLineVertexPosition_v ( 
00143         char * line, OpenGL::MeshModel<T> * const prModel );
00144     //-------------------------------------------------------------------------
00152     static void ProcessLineVertexTextureCoordinates_vt ( 
00153         char * line, OpenGL::MeshModel<T> * const prModel );
00154     //-------------------------------------------------------------------------
00160     static void ProcessLineVertexNormal_vn ( 
00161         char * line, OpenGL::MeshModel<T> * const prModel );
00162     //-------------------------------------------------------------------------
00185     static void ProcessLineFace_f ( 
00186         char * line, OpenGL::MeshModel<T> * const prModel );
00187     //-------------------------------------------------------------------------
00188 // Data Members ---------------------------------------------------------------
00189 private:
00190     //---------------------------------------------------------------
00191     static FILE * fileIn;
00192     static int faceNo;              // current face number
00193     static int vertexPositionNo;    // current vertex position number
00194     static int vertexTextureCoordNo;    // current vertex texture coordinates number
00195     static int vertexNormalNo;      // current vertex normal number
00196     static MeshData<T> meshData;    // mesh data
00197 };
00198 //=============================================================================
00199 END_NAMESPACE_TAPs
00200 //-----------------------------------------------------------------------------
00201 // Include definition if TAPs_USE_EXPORT is not defined
00202 //#if !defined( TAPs_USE_EXPORT )
00203     #include "TAPsReadObj.cpp"
00204 //#endif
00205 //-----------------------------------------------------------------------------
00206 #endif
00207 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00208 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines