diff options
Diffstat (limited to 'src/3rdparty/assimp/code/ObjFileParser.h')
-rw-r--r-- | src/3rdparty/assimp/code/ObjFileParser.h | 192 |
1 files changed, 104 insertions, 88 deletions
diff --git a/src/3rdparty/assimp/code/ObjFileParser.h b/src/3rdparty/assimp/code/ObjFileParser.h index f6473a11e..f1be764f0 100644 --- a/src/3rdparty/assimp/code/ObjFileParser.h +++ b/src/3rdparty/assimp/code/ObjFileParser.h @@ -2,11 +2,11 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2016, assimp team All rights reserved. -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above @@ -23,16 +23,16 @@ following conditions are met: derived from this software without specific prior written permission of the assimp team. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- @@ -43,98 +43,114 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <vector> #include <string> #include <map> - -namespace Assimp -{ - -namespace ObjFile -{ -struct Model; -struct Object; -struct Material; -struct Point3; -struct Point2; +#include <assimp/vector2.h> +#include <assimp/vector3.h> +#include <assimp/mesh.h> + +namespace Assimp { + +namespace ObjFile { + struct Model; + struct Object; + struct Material; + struct Point3; + struct Point2; } + class ObjFileImporter; class IOSystem; +class ProgressHandler; -/// \class ObjFileParser -/// \brief Parser for a obj waveform file -class ObjFileParser -{ +/// \class ObjFileParser +/// \brief Parser for a obj waveform file +class ObjFileParser { public: - static const size_t BUFFERSIZE = 4096; - typedef std::vector<char> DataArray; - typedef std::vector<char>::iterator DataArrayIt; - typedef std::vector<char>::const_iterator ConstDataArrayIt; + static const size_t Buffersize = 4096; + typedef std::vector<char> DataArray; + typedef std::vector<char>::iterator DataArrayIt; + typedef std::vector<char>::const_iterator ConstDataArrayIt; public: - /// \brief Constructor with data array. - ObjFileParser(std::vector<char> &Data,const std::string &strModelName, IOSystem* io); - /// \brief Destructor - ~ObjFileParser(); - /// \brief Model getter. - ObjFile::Model *GetModel() const; + /// \brief Constructor with data array. + ObjFileParser(std::vector<char> &Data, const std::string &strModelName, IOSystem* io, ProgressHandler* progress, const std::string &originalObjFileName); + /// \brief Destructor + ~ObjFileParser(); + /// \brief Model getter. + ObjFile::Model *GetModel() const; private: - /// Parse the loaded file - void parseFile(); - /// Method to copy the new delimited word in the current line. - void copyNextWord(char *pBuffer, size_t length); - /// Method to copy the new line. - void copyNextLine(char *pBuffer, size_t length); - /// Stores the vector + /// Parse the loaded file + void parseFile(); + /// Method to copy the new delimited word in the current line. + void copyNextWord(char *pBuffer, size_t length); + /// Method to copy the new line. + void copyNextLine(char *pBuffer, size_t length); + /// Stores the vector void getVector( std::vector<aiVector3D> &point3d_array ); - /// Stores the following 3d vector. - void getVector3( std::vector<aiVector3D> &point3d_array ); - /// Stores the following 3d vector. - void getVector2(std::vector<aiVector2D> &point2d_array); - /// Stores the following face. - void getFace(aiPrimitiveType type); - /// Reads the material description. + /// Stores the following 3d vector. + void getVector3( std::vector<aiVector3D> &point3d_array ); + /// Stores the following two 3d vectors on the line. + void getTwoVectors3( std::vector<aiVector3D> &point3d_array_a, std::vector<aiVector3D> &point3d_array_b ); + /// Stores the following 3d vector. + void getVector2(std::vector<aiVector2D> &point2d_array); + /// Stores the following face. + void getFace(aiPrimitiveType type); + /// Reads the material description. void getMaterialDesc(); - /// Gets a comment. - void getComment(); - /// Gets a a material library. - void getMaterialLib(); - /// Creates a new material. - void getNewMaterial(); - /// Gets the group name from file. - void getGroupName(); - /// Gets the group number from file. - void getGroupNumber(); - /// Gets the group number and resolution from file. - void getGroupNumberAndResolution(); - /// Returns the index of the material. Is -1 if not material was found. - int getMaterialIndex( const std::string &strMaterialName ); - /// Parse object name - void getObjectName(); - /// Creates a new object. - void createObject(const std::string &strObjectName); - /// Creates a new mesh. - void createMesh(); - /// Returns true, if a new mesh instance must be created. - bool needsNewMesh( const std::string &rMaterialName ); - /// Error report in token - void reportErrorTokenInFace(); + /// Gets a comment. + void getComment(); + /// Gets a a material library. + void getMaterialLib(); + /// Creates a new material. + void getNewMaterial(); + /// Gets the group name from file. + void getGroupName(); + /// Gets the group number from file. + void getGroupNumber(); + /// Gets the group number and resolution from file. + void getGroupNumberAndResolution(); + /// Returns the index of the material. Is -1 if not material was found. + int getMaterialIndex( const std::string &strMaterialName ); + /// Parse object name + void getObjectName(); + /// Creates a new object. + void createObject( const std::string &strObjectName ); + /// Creates a new mesh. + void createMesh( const std::string &meshName ); + /// Returns true, if a new mesh instance must be created. + bool needsNewMesh( const std::string &rMaterialName ); + /// Error report in token + void reportErrorTokenInFace(); + /// Get the number of components in a line. + size_t getNumComponentsInLine(); private: - /// Default material name - static const std::string DEFAULT_MATERIAL; - //! Iterator to current position in buffer - DataArrayIt m_DataIt; - //! Iterator to end position of buffer - DataArrayIt m_DataItEnd; - //! Pointer to model instance - ObjFile::Model *m_pModel; - //! Current line (for debugging) - unsigned int m_uiLine; - //! Helper buffer - char m_buffer[BUFFERSIZE]; - /// Pointer to IO system instance. - IOSystem *m_pIO; + // Copy and assignment constructor should be private + // because the class contains pointer to allocated memory + ObjFileParser(const ObjFileParser& rhs); + ObjFileParser& operator=(const ObjFileParser& rhs); + + /// Default material name + static const std::string DEFAULT_MATERIAL; + //! Iterator to current position in buffer + DataArrayIt m_DataIt; + //! Iterator to end position of buffer + DataArrayIt m_DataItEnd; + //! Pointer to model instance + ObjFile::Model *m_pModel; + //! Current line (for debugging) + unsigned int m_uiLine; + //! Helper buffer + char m_buffer[Buffersize]; + /// Pointer to IO system instance. + IOSystem *m_pIO; + //! Pointer to progress handler + ProgressHandler* m_progress; + /// Path to the current model + // name of the obj file where the buffer comes from + const std::string& m_originalObjFileName; }; -} // Namespace Assimp +} // Namespace Assimp #endif |