- Main Page
- Namespaces
- Classes
- Files
- Related Pages

# include/obj_loader.hpp

Go to the documentation of this file.

    00001
    00010 #ifndef __OBJ_LOADER_HPP_INCLUDE_GUARD__
    00011 #define __OBJ_LOADER_HPP_INCLUDE_GUARD__
    00012
    00013 #include <iostream>
    00014 #include <fstream>
    00015 #include <vector>
    00016 #include "../gbLib/include/gbException.hpp"
    00017
    00025 class OBJ_Mesh {
    00026 public:
    00029     struct Face {
    00030         int vert1, vert2, vert3;
    00031         int normal1, normal2, normal3;
    00032         int texture1, texture2, texture3;
    00033         int smoothing_group;
    00034     };
    00035 private:
    00036     std::vector<double> m_geometry;
    00037     std::vector<double> m_normals;
    00038     std::vector<double> m_texcoords;
    00039     std::vector<Face>   m_faces;
    00040     char*               m_name;
    00041 public:
    00046     OBJ_Mesh(char const* name);
    00049     ~OBJ_Mesh();
    00053     OBJ_Mesh(OBJ_Mesh const&);
    00058     void SetName(char const* name);
    00062     void SetGeometry(std::vector<double> const& data);
    00067     template<typename T>
    00068     void SetGeometry(T const* data, int n_data);
    00073     template<typename T>
    00074     void AddGeometry(T const* data, int n_data);
    00078     void SetNormals(std::vector<double> const& data);
    00083     template<typename T>
    00084     void SetNormals(T const* data, int n_data);
    00089     template<typename T>
    00090     void AddNormals(T const* data, int n_data);
    00094     void SetTextureData(std::vector<double> const& data);
    00099     template<typename T>
    00100     void SetTextureData(T const* data, int n_data);
    00105     template<typename T>
    00106     void AddTextureData(T const* data, int n_data);
    00110     void SetFaceData(std::vector<Face> const& data);
    00115     void SetFaceData(Face const* data, int n_data);
    00120     void AddFaceData(Face const* data, int n_data);
    00123     void ClearGeometry();
    00126     void ClearNormals();
    00129     void ClearTextureData();
    00132     void ClearFaceData();
    00136     char const* GetName() const;
    00140     int GetNVertices() const;
    00144     int GetNFaces() const;
    00148     int GetNNormals() const;
    00152     int GetNTexture() const;
    00159     template<typename T>
    00160     void GetMeshGeometryUnindexed(T* mesh_geometry, T* mesh_normals, T* mesh_texture, T scale) const;
    00168     template<typename T>
    00169     void GetMeshGeometry(T* mesh_geometry, T* mesh_normals, T* mesh_texture, Face* mesh_faces, T scale) const;
    00174     double const* GetVertexX(int index) const;
    00179     double const* GetVertexY(int index) const;
    00184     double const* GetVertexZ(int index) const;
    00189     double const* GetNormalX(int index) const;
    00194     double const* GetNormalY(int index) const;
    00199     double const* GetNormalZ(int index) const;
    00204     double const* GetTextureX(int index) const;
    00209     double const* GetTextureY(int index) const;
    00214     double const* GetTextureZ(int index) const;
    00219     Face const* GetFace(int index) const;
    00220 private:
    00221     OBJ_Mesh& operator=(OBJ_Mesh const&);
    00222 };
    00223
    00224 #include "../src/obj_loader.impl.hpp"
    00225
    00228 class OBJ_FileLoader {
    00229 private:
    00230     std::vector<OBJ_Mesh*> m_MeshList;
    00231 public:
    00234     OBJ_FileLoader();
    00239     OBJ_FileLoader(const char* fname);
    00242     ~OBJ_FileLoader();
    00246     int GetNMeshes() const;
    00251     OBJ_Mesh const* GetMesh(int index) const;
    00256     void AddMesh(OBJ_Mesh const& mesh);
    00261     void WriteFile(char const* fname) const;
    00262 private:
    00268     void ReadFile(std::ifstream& f);
    00269 };
    00270
    00271 #endif