TAPs 0.7.7.3
TAPsRead3dsMaxASE.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsRead3dsMaxASE.hpp
00003 
00004 Create an OpenGL Polygonal Model Object from a 3ds Max .ASE file
00005 
00006 SUKITTI PUNAK   (04/28/2005)
00007 ******************************************************************************/
00008 #ifndef TAPs_READ_3DSMAX_ASE_HPP
00009 #define TAPs_READ_3DSMAX_ASE_HPP
00010 
00011 // The necessary headers are included in TAPsReadModel.hpp which directly uses
00012 // this header.
00013 #include "Support/TAPsHelpCreateHalfEdgeModel.hpp"
00014 
00015 BEGIN_NAMESPACE_TAPs
00016 //=============================================================================
00017 template <typename T> class ReadModels;
00018 //=============================================================================
00019 template <typename T>
00020 class Read3dsMaxASE {
00021     friend class ReadModels<T>;
00022 // Member Functions  ----------------------------------------------------------
00023 public:
00024     //-------------------------------------------------------------------------
00025     // Read an input file
00026     //  I/P: fileName
00027     //  O/P: *prModel
00028     // Two fns per each operation due to the design of Model types;
00029     //   One for PolygonalModel and its derived classes
00030     //   The other for XPolygonalModel and its derived classes
00031     //
00032     //   Each pairs are exactly identical (both declaration and definition) 
00033     //   except the passed prModel pointer.
00034     //-------------------------------------------------------------------------
00035     static bool readFile( const char *fileName, OpenGL::PolygonalModel<T> * const prModel );
00036     static bool readFile( const char *fileName, OpenGL::XPolygonalModel<T> * const prModel );
00037     static bool readFile( const char *fileName, OpenGL::HalfEdgeModel<T> * const prModel );
00038     static bool readFile( const char *fileName, OpenGL::MultiMeshModel<T> * const prModel, TAPs::Enum::ModelType eModelType );
00039     //------------------
00040     #if defined(__gl_h_) || defined(__GL_H__)
00041     static bool readFile( const char *fileName, std::vector< OpenGL::OpenGLHETriMeshOneModelMultiParts<T> * > & modelList );
00042     #endif
00043     //-------------------------------------------------------------------------
00044 private:
00045     //-------------------------------------------------------------------------
00046     // Process Each Node
00047     //-------------------------------------------------------------------------
00048     static void ProcessNodeMATERIAL_LIST( char *line );
00049     static void ProcessNodeMATERIAL( char *line, bool isSubmaterialNode = false );
00050     static void ProcessNodeMAP_( char *line );
00051     //-------------------------------------------------------------------------
00052     static void ProcessNodeMATERIAL_LIST( char *line, OpenGL::PolygonalModel<T> * const prModel );
00053     static void ProcessNodeMATERIAL_LIST( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00054     static void ProcessNodeMATERIAL_LIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00055     //-------------------------------------------------------------------------
00056     static void ProcessNodeMATERIAL( char *line, OpenGL::PolygonalModel<T> * const prModel );
00057     static void ProcessNodeMATERIAL( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00058     static void ProcessNodeMATERIAL( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00059     //-------------------------------------------------------------------------
00060     static void ProcessNodeGEOMOBJECT( char *line, OpenGL::PolygonalModel<T> * const prModel );
00061     static void ProcessNodeGEOMOBJECT( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00062     static void ProcessNodeGEOMOBJECT( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00063     //-------------------------------------------------------------------------
00064     static void ProcessNodeNODE_TM( char *line, OpenGL::PolygonalModel<T> * const prModel );
00065     static void ProcessNodeNODE_TM( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00066     static void ProcessNodeNODE_TM( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00067     //-------------------------------------------------------------------------
00068     static void ProcessNodeMESH( char *line, OpenGL::PolygonalModel<T> * const prModel );
00069     static void ProcessNodeMESH( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00070     static void ProcessNodeMESH( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00071     //-------------------------------------------------------------------------
00072     static void ProcessNodeMESH_VERTEX_LIST( char *line, OpenGL::PolygonalModel<T> * const prModel );
00073     static void ProcessNodeMESH_VERTEX_LIST( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00074     static void ProcessNodeMESH_VERTEX_LIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00075     //-------------------------------------------------------------------------
00076     static void ProcessNodeMESH_FACE_LIST( char *line, OpenGL::PolygonalModel<T> * const prModel );
00077     static void ProcessNodeMESH_FACE_LIST( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00078     static void ProcessNodeMESH_FACE_LIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00079     //-------------------------------------------------------------------------
00080 
00081     // OBSOLETE CODE -- WILL BE REMOVED!!!
00082 #if (!defined TAPs_SUPPORT_ASE_FORMAT || (defined TAPs_SUPPORT_ASE_FORMAT && !defined TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES))
00083     static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::PolygonalModel<T> * const prModel, T * UVW );
00084     static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::XPolygonalModel<T> * const prModel, T * UVW );
00085     static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel, T * UVW );
00086     //-------------------------------------------------------------------------
00087     static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::PolygonalModel<T> * const prModel, T * UVW );
00088     static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::XPolygonalModel<T> * const prModel, T * UVW );
00089     static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel, T * UVW );
00090 #endif
00091 
00092     //-------------------------------------------------------------------------
00093     static void ProcessNodeMESH_NORMALS( char *line, OpenGL::PolygonalModel<T> * const prModel );
00094     static void ProcessNodeMESH_NORMALS( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00095     static void ProcessNodeMESH_NORMALS( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00096     //-------------------------------------------------------------------------
00097     static void ProcessNodeMETERIAL_REF( char *line, OpenGL::PolygonalModel<T> * const prModel );
00098     static void ProcessNodeMETERIAL_REF( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00099     static void ProcessNodeMETERIAL_REF( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00100     //-------------------------------------------------------------------------
00101 
00102 #ifdef  TAPs_SUPPORT_ASE_FORMAT
00103     #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00104         static void ProcessNodeMESH_NUMCVERTEX( char *line );
00105         static void ProcessNodeMESH_CVERTLIST( char *line, OpenGL::MeshModel<T> * const prModel );
00106         static void ProcessNodeMESH_NUMCVFACES( char *line );
00107         static void ProcessNodeMESH_CFACELIST( char *line, OpenGL::PolygonalModel<T> * const prModel );
00108         static void ProcessNodeMESH_CFACELIST( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00109         static void ProcessNodeMESH_CFACELIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00110         static int  m_iNumVertexColors;
00111         static int  m_iNumFaceVertexColors;
00112     #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00113 
00114     #ifdef  TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00115         static void ProcessNodeMESH_NUMTVERTEX( char *line );
00116         static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::MeshModel<T> * const prModel );
00117         static void ProcessNodeMESH_NUMTVFACES( char *line );
00118         static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::PolygonalModel<T> * const prModel );
00119         static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::XPolygonalModel<T> * const prModel );
00120         static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel );
00121         static int  m_iNumVertexTextures;
00122         static int  m_iNumFaceVertexTextures;
00123     #endif//TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00124 #endif//TAPs_SUPPORT_ASE_FORMAT
00125 
00126     //-------------------------------------------------------------------------
00127 // Data Members ---------------------------------------------------------------
00128 private:
00129     static int vertexNo;            
00130     static int faceNo;              
00131     static int halfEdgeCounter;     
00132     static FILE *fileIn;
00133     //-------------------------------------------------------------------------
00139            // mat set   // main mat (0) + sub mats (0+i)
00140     static std::vector< std::vector< OpenGL::Material * > > materialList;
00141     static std::vector< OpenGL::Material * > materials;
00142     static void ClearMaterialList ();
00143     static void ClearMaterials ();
00144     static void SetMaterial ( int id, OpenGL::OpenGLModel<T> * prModel );
00145     //-------------------------------------------------------------------------
00146 };
00147 //=============================================================================
00148 END_NAMESPACE_TAPs
00149 //-----------------------------------------------------------------------------
00150 // Include definition if TAPs_USE_EXPORT is not defined
00151 //#if !defined( TAPs_USE_EXPORT )
00152     #include "TAPsRead3dsMaxASE.cpp"
00153 //#endif
00154 //-----------------------------------------------------------------------------
00155 #endif
00156 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00157 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines