123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /** @file Helper class to parse a XFile into a temporary structure */
- #ifndef AI_XFILEPARSER_H_INC
- #define AI_XFILEPARSER_H_INC
- #include <string>
- #include <vector>
- #include "../include/aiTypes.h"
- namespace Assimp
- {
- namespace XFile
- {
- struct Node;
- struct Mesh;
- struct Scene;
- struct Material;
- struct Animation;
- struct AnimBone;
- }
- /** The XFileParser reads a XFile either in text or binary form and builds a temporary
- * data structure out of it.
- */
- class XFileParser
- {
- public:
- /** Constructor. Creates a data structure out of the XFile given in the memory block.
- * @param pBuffer Memory buffer containing the XFile
- */
- XFileParser( const std::vector<char>& pBuffer);
- /** Destructor. Destroys all imported data along with it */
- ~XFileParser();
- /** Returns the temporary representation of the imported data */
- const XFile::Scene* GetImportedData() const { return mScene; }
- protected:
- void ParseFile();
- void ParseDataObjectTemplate();
- void ParseDataObjectFrame( XFile::Node *pParent);
- void ParseDataObjectTransformationMatrix( aiMatrix4x4& pMatrix);
- void ParseDataObjectMesh( XFile::Mesh* pMesh);
- void ParseDataObjectSkinWeights( XFile::Mesh* pMesh);
- void ParseDataObjectSkinMeshHeader( XFile::Mesh* pMesh);
- void ParseDataObjectMeshNormals( XFile::Mesh* pMesh);
- void ParseDataObjectMeshTextureCoords( XFile::Mesh* pMesh);
- void ParseDataObjectMeshVertexColors( XFile::Mesh* pMesh);
- void ParseDataObjectMeshMaterialList( XFile::Mesh* pMesh);
- void ParseDataObjectMaterial( XFile::Material* pMaterial);
- void ParseDataObjectAnimTicksPerSecond();
- void ParseDataObjectAnimationSet();
- void ParseDataObjectAnimation( XFile::Animation* pAnim);
- void ParseDataObjectAnimationKey( XFile::AnimBone *pAnimBone);
- void ParseDataObjectTextureFilename( std::string& pName);
- void ParseUnknownDataObject();
- //! places pointer to next begin of a token, and ignores comments
- void FindNextNoneWhiteSpace();
- //! returns next parseable token. Returns empty string if no token there
- std::string GetNextToken();
- //! reads header of dataobject including the opening brace.
- //! returns false if error happened, and writes name of object
- //! if there is one
- void readHeadOfDataObject( std::string* poName = NULL);
- //! checks for closing curly brace, throws exception if not there
- void CheckForClosingBrace();
- //! checks for one following semicolon, throws exception if not there
- void CheckForSemicolon();
- //! checks for a separator char, either a ',' or a ';'
- void CheckForSeparator();
- //! reads a x file style string
- void GetNextTokenAsString( std::string& poString);
- void ReadUntilEndOfLine();
- unsigned short ReadBinWord();
- unsigned int ReadBinDWord();
- unsigned int ReadInt();
- float ReadFloat();
- aiVector2D ReadVector2();
- aiVector3D ReadVector3();
- aiColor3D ReadRGB();
- aiColor4D ReadRGBA();
- /** Throws an exception with a line number and the given text. */
- void ThrowException( const std::string& pText);
- /** Filters the imported hierarchy for some degenerated cases that some exporters produce.
- * @param pData The sub-hierarchy to filter
- */
- void FilterHierarchy( XFile::Node* pNode);
- protected:
- unsigned int mMajorVersion, mMinorVersion; ///< version numbers
- bool mIsBinaryFormat; ///< true if the file is in binary, false if it's in text form
- unsigned int mBinaryFloatSize; ///< float size, either 32 or 64 bits
- // counter for number arrays in binary format
- unsigned int mBinaryNumCount;
- const char* P;
- const char* End;
- /// Line number when reading in text format
- unsigned int mLineNumber;
- /// Imported data
- XFile::Scene* mScene;
- };
- }
- #endif // AI_XFILEPARSER_H_INC
|