/* model/asefile.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_MODEL_ASEFILE_H__ #define __INCLUDED_MODEL_ASEFILE_H__ #include "math/vector3f.h" #include "model/model.h" #include "model/triangle.h" #include "filesystem/filestream.h" #include #include namespace model { /// class to parse the .ase file structure and load geometry data into a model class ASEFile { public: /** * @brief load a .ase file into a Model * @param name name of the model to be loaded, without .ase extension or models/ prefix * If the file can not be read, load() returns the NULL-pointer */ static Model *load(std::string const &name); private: typedef std::map VertexList; typedef std::map FaceList; ASEFile(std::string const &name); ~ASEFile(); /** * @brief read *MESH_NORMALS */ bool read_mesh_normals(std::istream &is); /** * @brief read *MESH_FACE_LIST */ bool read_mesh_face_list(std::istream &is); /** * @brief read *MESH_VERTEX_LIST */ bool read_mesh_vertex_list(std::istream &is); /** * @brief read *MESH_TVERTLIST */ bool read_mesh_tvertex_list(std::istream &is); /** * @brief read *MESH_TFACELIST */ bool read_mesh_tface_list(std::istream &is); /** * @brief read *MESH */ bool read_mesh(std::istream &is); /** * @brief read *GEOMOBJECT */ bool read_geom(std::istream &is); /** * @brief read the .ase header */ bool read_header(std::istream &is); /** * @brief read the .ase file */ bool read(); inline const std::string &name() const { return asefile_name; } inline bool is_open() { return asefile_ifs.is_open(); } std::string asefile_name; filesystem::IFileStream asefile_ifs; VertexList ase_vertexlist; VertexList ase_tvertexlist; FaceList ase_facelist; math::Vector3f ase_maxbbox; math::Vector3f ase_minbbox; }; } // namespace model #endif // __INCLUDED_MODEL_ASEFILE_H__