- FBX importer: basic interface and importer skeleton. Start tokenizer and parser.
parent
4e9a0bba20
commit
18b2aebcb1
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012, 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
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
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
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
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
|
||||||
|
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
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file FBXCompileConfig.h
|
||||||
|
* @brief FBX importer compile-time switches
|
||||||
|
*/
|
||||||
|
#ifndef INCLUDED_AI_FBX_COMPILECONFIG_H
|
||||||
|
#define INCLUDED_AI_FBX_COMPILECONFIG_H
|
||||||
|
|
||||||
|
//
|
||||||
|
#if _MSC_VER > 1500 || (defined __GNUC___)
|
||||||
|
# define ASSIMP_FBX_USE_UNORDERED_MULTIMAP
|
||||||
|
# else
|
||||||
|
# define fbx_unordered_map map
|
||||||
|
# define fbx_unordered_multimap multimap
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ASSIMP_FBX_USE_UNORDERED_MULTIMAP
|
||||||
|
# include <unordered_map>
|
||||||
|
# if _MSC_VER > 1600
|
||||||
|
# define fbx_unordered_map unordered_map
|
||||||
|
# define fbx_unordered_multimap unordered_multimap
|
||||||
|
# else
|
||||||
|
# define fbx_unordered_map tr1::unordered_map
|
||||||
|
# define fbx_unordered_multimap tr1::unordered_multimap
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,158 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012, 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
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
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
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
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
|
||||||
|
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
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file FBXImporter.cpp
|
||||||
|
* @brief Implementation of the FBX importer.
|
||||||
|
*/
|
||||||
|
#include "AssimpPCH.h"
|
||||||
|
|
||||||
|
#ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
|
||||||
|
|
||||||
|
#include <iterator>
|
||||||
|
#include <boost/tuple/tuple.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
#include "FBXImporter.h"
|
||||||
|
|
||||||
|
#include "FBXTokenizer.h"
|
||||||
|
#include "FBXParser.h"
|
||||||
|
|
||||||
|
#include "StreamReader.h"
|
||||||
|
#include "MemoryIOWrapper.h"
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
|
template<> const std::string LogFunctions<FBXImporter>::log_prefix = "FBX: ";
|
||||||
|
}
|
||||||
|
|
||||||
|
using namespace Assimp;
|
||||||
|
using namespace Assimp::Formatter;
|
||||||
|
using namespace Assimp::FBX;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
static const aiImporterDesc desc = {
|
||||||
|
"Autodesk FBX Importer",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
aiImporterFlags_SupportTextFlavour,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
"fbx"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Constructor to be privately used by #Importer
|
||||||
|
FBXImporter::FBXImporter()
|
||||||
|
{}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Destructor, private as well
|
||||||
|
FBXImporter::~FBXImporter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Returns whether the class can handle the format of the given file.
|
||||||
|
bool FBXImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
|
||||||
|
{
|
||||||
|
const std::string& extension = GetExtension(pFile);
|
||||||
|
if (extension == "fbx") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ((!extension.length() || checkSig) && pIOHandler) {
|
||||||
|
// at least ascii FBX files usually have a 'FBX' somewhere in their head
|
||||||
|
const char* tokens[] = {"FBX"};
|
||||||
|
return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// List all extensions handled by this loader
|
||||||
|
const aiImporterDesc* FBXImporter::GetInfo () const
|
||||||
|
{
|
||||||
|
return &desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Setup configuration properties for the loader
|
||||||
|
void FBXImporter::SetupProperties(const Importer* pImp)
|
||||||
|
{
|
||||||
|
// no tweakables yet
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Imports the given file into the given scene structure.
|
||||||
|
void FBXImporter::InternReadFile( const std::string& pFile,
|
||||||
|
aiScene* pScene, IOSystem* pIOHandler)
|
||||||
|
{
|
||||||
|
boost::scoped_ptr<IOStream> stream(pIOHandler->Open(pFile,"rb"));
|
||||||
|
if (!stream) {
|
||||||
|
ThrowException("Could not open file for reading");
|
||||||
|
}
|
||||||
|
|
||||||
|
// read entire file into memory - no streaming for this, fbx
|
||||||
|
// files can grow large, but the assimp output data structure
|
||||||
|
// then becomes very large, too. Assimp doesn't support
|
||||||
|
// streaming for its output data structures so the net win with
|
||||||
|
// streaming input data would be very low.
|
||||||
|
std::vector<char> contents;
|
||||||
|
contents.resize(stream->FileSize());
|
||||||
|
|
||||||
|
stream->Read(&*contents.begin(),contents.size(),1);
|
||||||
|
const char* const begin = &*contents.begin();
|
||||||
|
|
||||||
|
// broadphase tokenizing pass in which we identify the core
|
||||||
|
// syntax elements of FBX (brackets, commas, key:value mappings)
|
||||||
|
TokenList tokens;
|
||||||
|
Tokenize(tokens,begin);
|
||||||
|
|
||||||
|
// use this information to construct a very rudimentary
|
||||||
|
// parse-tree representing the FBX scope structure
|
||||||
|
Parser parser(tokens);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !ASSIMP_BUILD_NO_FBX_IMPORTER
|
|
@ -0,0 +1,118 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012, 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
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
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
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
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
|
||||||
|
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
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file FBXImporter.h
|
||||||
|
* @brief Declaration of the FBX main importer class
|
||||||
|
*/
|
||||||
|
#ifndef INCLUDED_AI_FBX_IMPORTER_H
|
||||||
|
#define INCLUDED_AI_FBX_IMPORTER_H
|
||||||
|
|
||||||
|
#include "BaseImporter.h"
|
||||||
|
#include "LogAux.h"
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
|
|
||||||
|
// TinyFormatter.h
|
||||||
|
namespace Formatter {
|
||||||
|
template <typename T,typename TR, typename A> class basic_formatter;
|
||||||
|
typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------
|
||||||
|
/** Load the Autodesk FBX file format.
|
||||||
|
|
||||||
|
See http://en.wikipedia.org/wiki/FBX
|
||||||
|
*/
|
||||||
|
// -------------------------------------------------------------------------------------------
|
||||||
|
class FBXImporter : public BaseImporter, public LogFunctions<FBXImporter>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FBXImporter();
|
||||||
|
~FBXImporter();
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// --------------------
|
||||||
|
bool CanRead( const std::string& pFile,
|
||||||
|
IOSystem* pIOHandler,
|
||||||
|
bool checkSig
|
||||||
|
) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// --------------------
|
||||||
|
const aiImporterDesc* GetInfo () const;
|
||||||
|
|
||||||
|
// --------------------
|
||||||
|
void SetupProperties(const Importer* pImp);
|
||||||
|
|
||||||
|
// --------------------
|
||||||
|
void InternReadFile( const std::string& pFile,
|
||||||
|
aiScene* pScene,
|
||||||
|
IOSystem* pIOHandler
|
||||||
|
);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
// loader settings, publicly accessible via their corresponding AI_CONFIG constants
|
||||||
|
struct Settings
|
||||||
|
{
|
||||||
|
Settings()
|
||||||
|
|
||||||
|
{}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Settings settings;
|
||||||
|
|
||||||
|
}; // !class FBXImporter
|
||||||
|
|
||||||
|
} // end of namespace Assimp
|
||||||
|
#endif // !INCLUDED_AI_FBX_IMPORTER_H
|
||||||
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012, 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
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
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
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
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
|
||||||
|
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
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file FBXParser.cpp
|
||||||
|
* @brief Implementation of the FBX parser and the rudimentary DOM that we use
|
||||||
|
*/
|
||||||
|
#include "AssimpPCH.h"
|
||||||
|
|
||||||
|
#ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
|
||||||
|
|
||||||
|
#include "FBXTokenizer.h"
|
||||||
|
#include "FBXParser.h"
|
||||||
|
|
||||||
|
using namespace Assimp;
|
||||||
|
using namespace Assimp::FBX;
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
|
template<> const std::string LogFunctions<Assimp::FBX::Parser>::log_prefix = "FBX-Parse: ";
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Element::Element(Parser& parser)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Element::~Element()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Scope::Scope(Parser& parser)
|
||||||
|
{
|
||||||
|
TokenPtr t = parser.GetNextToken();
|
||||||
|
if (t->Type() != TokenType_OPEN_BRACKET) {
|
||||||
|
parser.ThrowException("Expected open bracket");
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX parse members
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Scope::~Scope()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Parser::Parser (const TokenList& tokens)
|
||||||
|
: tokens(tokens)
|
||||||
|
, cursor(tokens.begin())
|
||||||
|
{
|
||||||
|
root = boost::scoped_ptr<Scope>(new Scope(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Parser::~Parser()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
TokenPtr Parser::GetNextToken()
|
||||||
|
{
|
||||||
|
if (cursor == tokens.end()) {
|
||||||
|
return TokenPtr(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *cursor++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
TokenPtr Parser::PeekNextToken()
|
||||||
|
{
|
||||||
|
if (cursor == tokens.end()) {
|
||||||
|
return TokenPtr(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *cursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,174 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012, 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
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
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
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
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
|
||||||
|
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
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file FBXParser.h
|
||||||
|
* @brief FBX parsing code
|
||||||
|
*/
|
||||||
|
#ifndef INCLUDED_AI_FBX_PARSER_H
|
||||||
|
#define INCLUDED_AI_FBX_PARSER_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
#include "LogAux.h"
|
||||||
|
|
||||||
|
#include "FBXCompileConfig.h"
|
||||||
|
#include "FBXTokenizer.h"
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
|
namespace FBX {
|
||||||
|
|
||||||
|
class Scope;
|
||||||
|
class Parser;
|
||||||
|
class Element;
|
||||||
|
|
||||||
|
// should actually use 0x's unique_ptr for some of those
|
||||||
|
typedef std::vector< boost::shared_ptr<Scope> > ScopeList;
|
||||||
|
typedef std::fbx_unordered_multimap< std::string, boost::shared_ptr<Element> > ElementMap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** FBX data entity that consists of a key:value tuple.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* @verbatim
|
||||||
|
* AnimationCurve: 23, "AnimCurve::", "" {
|
||||||
|
* [..]
|
||||||
|
* }
|
||||||
|
* @endverbatim
|
||||||
|
*
|
||||||
|
* As can be seen in this sample, elements can contain nested #Scope
|
||||||
|
* as their trailing member. **/
|
||||||
|
class Element
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
Element(Parser& parser);
|
||||||
|
~Element();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const std::string& Key() const {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TokenList& Tokens() const {
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
std::string key;
|
||||||
|
TokenList tokens;
|
||||||
|
boost::shared_ptr<Scope> compound;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** FBX data entity that consists of a 'scope', a collection
|
||||||
|
* of not necessarily unique #Element instances.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* @verbatim
|
||||||
|
* GlobalSettings: {
|
||||||
|
* Version: 1000
|
||||||
|
* Properties70:
|
||||||
|
* [...]
|
||||||
|
* }
|
||||||
|
* @endverbatim */
|
||||||
|
class Scope
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Scope(Parser& parser);
|
||||||
|
~Scope();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const ElementMap& Elements() const {
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
ElementMap elements;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** FBX parsing class, takes a list of input tokens and generates a hierarchy
|
||||||
|
* of nested #Scope instances, representing the fbx DOM.*/
|
||||||
|
class Parser : public LogFunctions<Parser>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
Parser (const TokenList& tokens);
|
||||||
|
~Parser();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const Scope& GetRootScope() const {
|
||||||
|
return *root.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
friend class Scope;
|
||||||
|
friend class Element;
|
||||||
|
|
||||||
|
TokenPtr GetNextToken();
|
||||||
|
TokenPtr PeekNextToken();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
const TokenList& tokens;
|
||||||
|
|
||||||
|
TokenList::const_iterator cursor;
|
||||||
|
boost::scoped_ptr<Scope> root;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // ! FBX
|
||||||
|
} // ! Assimp
|
||||||
|
|
||||||
|
#endif // ! INCLUDED_AI_FBX_PARSER_H
|
|
@ -0,0 +1,130 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012, 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
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
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
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
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
|
||||||
|
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
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file FBXTokenizer.cpp
|
||||||
|
* @brief Implementation of the FBX broadphase lexer
|
||||||
|
*/
|
||||||
|
#include "AssimpPCH.h"
|
||||||
|
|
||||||
|
#ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
|
||||||
|
|
||||||
|
#include "FBXTokenizer.h"
|
||||||
|
#include "ParsingUtils.h"
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
|
namespace FBX {
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Token::Token(const char* sbegin, const char* send, TokenType type, unsigned int line, unsigned int column)
|
||||||
|
: sbegin(sbegin)
|
||||||
|
, send(send)
|
||||||
|
, type(type)
|
||||||
|
, line(line)
|
||||||
|
, column(column)
|
||||||
|
{
|
||||||
|
ai_assert(sbegin);
|
||||||
|
ai_assert(send);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
Token::~Token()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void Tokenize(TokenList& output_tokens, const char* input)
|
||||||
|
{
|
||||||
|
ai_assert(input);
|
||||||
|
|
||||||
|
// line and column numbers numbers are one-based
|
||||||
|
unsigned int line = 1;
|
||||||
|
unsigned int column = 1;
|
||||||
|
|
||||||
|
bool comment = false;
|
||||||
|
|
||||||
|
for (const char* cur = input;*cur;++cur,++column) {
|
||||||
|
const char c = *cur;
|
||||||
|
|
||||||
|
if (IsLineEnd(c)) {
|
||||||
|
comment = false;
|
||||||
|
|
||||||
|
column = 0;
|
||||||
|
++line;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(comment) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(c)
|
||||||
|
{
|
||||||
|
case ';':
|
||||||
|
comment = true;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case '{':
|
||||||
|
output_tokens.push_back(boost::make_shared<Token>(cur,cur+1,TokenType_OPEN_BRACKET,line,column));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '}':
|
||||||
|
output_tokens.push_back(boost::make_shared<Token>(cur,cur+1,TokenType_CLOSE_BRACKET,line,column));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ',':
|
||||||
|
output_tokens.push_back(boost::make_shared<Token>(cur,cur+1,TokenType_COMMA,line,column));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (IsSpaceOrNewLine(c)) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
// XXX parse key and data elements
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // !FBX
|
||||||
|
} // !Assimp
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,129 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012, 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
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
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
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
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
|
||||||
|
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
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file FBXTokenizer.h
|
||||||
|
* @brief FBX lexer
|
||||||
|
*/
|
||||||
|
#ifndef INCLUDED_AI_FBX_TOKENIZER_H
|
||||||
|
#define INCLUDED_AI_FBX_TOKENIZER_H
|
||||||
|
|
||||||
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
#include "FBXCompileConfig.h"
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
|
namespace FBX {
|
||||||
|
|
||||||
|
/** Rough classification for text FBX tokens used for constructing the
|
||||||
|
* basic scope hierarchy. */
|
||||||
|
enum TokenType
|
||||||
|
{
|
||||||
|
// {
|
||||||
|
TokenType_OPEN_BRACKET = 0,
|
||||||
|
|
||||||
|
// }
|
||||||
|
TokenType_CLOSE_BRACKET,
|
||||||
|
|
||||||
|
// '"blablubb"', '2', '*14' - very general token class,
|
||||||
|
// further processing happens at a later stage.
|
||||||
|
TokenType_DATA,
|
||||||
|
|
||||||
|
// ,
|
||||||
|
TokenType_COMMA,
|
||||||
|
|
||||||
|
// blubb:
|
||||||
|
TokenType_KEY
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** Represents a single token in a FBX file. Tokens are
|
||||||
|
* classified by the #TokenType enumerated types.
|
||||||
|
*
|
||||||
|
* Offers iterator protocol. Tokens are immutable. */
|
||||||
|
class Token
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Token(const char* sbegin, const char* send, TokenType type, unsigned int line, unsigned int column);
|
||||||
|
~Token();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const char* begin() const {
|
||||||
|
return sbegin;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* end() const {
|
||||||
|
return send;
|
||||||
|
}
|
||||||
|
|
||||||
|
TokenType Type() const {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
const char* const sbegin;
|
||||||
|
const char* const send;
|
||||||
|
const TokenType type;
|
||||||
|
|
||||||
|
const unsigned int line, column;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef boost::shared_ptr<Token> TokenPtr;
|
||||||
|
typedef std::vector< boost::shared_ptr<Token> > TokenList;
|
||||||
|
|
||||||
|
|
||||||
|
/** Main FBX tokenizer function. Transform input buffer into a list of preprocessed tokens.
|
||||||
|
*
|
||||||
|
* Skips over comments and generates line and column numbers.
|
||||||
|
*
|
||||||
|
* @param output_tokens Receives a list of all tokens in the input data.
|
||||||
|
* @param input_buffer Textual input buffer to be processed, 0-terminated. */
|
||||||
|
void Tokenize(TokenList& output_tokens, const char* input);
|
||||||
|
|
||||||
|
|
||||||
|
} // ! FBX
|
||||||
|
} // ! Assimp
|
||||||
|
|
||||||
|
#endif // ! INCLUDED_AI_FBX_PARSER_H
|
||||||
|
|
|
@ -166,6 +166,9 @@ corresponding preprocessor flag to selectively disable formats.
|
||||||
#ifndef ASSIMP_BUILD_NO_XGL_IMPORTER
|
#ifndef ASSIMP_BUILD_NO_XGL_IMPORTER
|
||||||
# include "XGLLoader.h"
|
# include "XGLLoader.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
|
||||||
|
# include "FBXImporter.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
|
||||||
|
@ -291,6 +294,9 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out)
|
||||||
#if ( !defined ASSIMP_BUILD_NO_XGL_IMPORTER )
|
#if ( !defined ASSIMP_BUILD_NO_XGL_IMPORTER )
|
||||||
out.push_back( new XGLImporter() );
|
out.push_back( new XGLImporter() );
|
||||||
#endif
|
#endif
|
||||||
|
#if ( !defined ASSIMP_BUILD_NO_FBX_IMPORTER )
|
||||||
|
out.push_back( new FBXImporter() );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue