Merge branch 'master' into const-tokens

pull/4078/head
krishty 2021-09-15 23:31:00 +02:00 committed by GitHub
commit 8c84afaff0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
130 changed files with 2977 additions and 3522 deletions

View File

@ -56,8 +56,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <memory> #include <memory>
using namespace Assimp;
namespace Assimp { namespace Assimp {
using namespace D3DS; using namespace D3DS;
namespace { namespace {

View File

@ -53,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/light.h> #include <assimp/light.h>
#include <assimp/material.h> #include <assimp/material.h>
#include <assimp/qnan.h> #include <assimp/qnan.h>
#include <stdio.h> //sprintf #include <cstdio> //sprintf
namespace Assimp { namespace Assimp {
namespace D3DS { namespace D3DS {

View File

@ -46,11 +46,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef AI_3DSIMPORTER_H_INC #ifndef AI_3DSIMPORTER_H_INC
#define AI_3DSIMPORTER_H_INC #define AI_3DSIMPORTER_H_INC
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/types.h> #include <assimp/types.h>
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
#include "3DSHelper.h" #include "3DSHelper.h"
#include <assimp/StreamReader.h> #include <assimp/StreamReader.h>
@ -75,14 +75,14 @@ public:
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer* pImp) override;
protected: protected:
@ -90,14 +90,14 @@ protected:
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Converts a temporary material to the outer representation /** Converts a temporary material to the outer representation

View File

@ -40,6 +40,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#pragma once #pragma once
#ifndef ASSIMP_BUILD_NO_EXPORT
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
#include <memory> #include <memory>
#include <sstream> #include <sstream>
#include <vector> #include <vector>
@ -58,8 +61,6 @@ class IOStream;
namespace D3MF { namespace D3MF {
#ifndef ASSIMP_BUILD_NO_EXPORT
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
struct OpcPackageRelationship; struct OpcPackageRelationship;

View File

@ -42,6 +42,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef AI_D3MFLOADER_H_INCLUDED #ifndef AI_D3MFLOADER_H_INCLUDED
#define AI_D3MFLOADER_H_INCLUDED #define AI_D3MFLOADER_H_INCLUDED
#ifndef ASSIMP_BUILD_NO_3MF_IMPORTER
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
namespace Assimp { namespace Assimp {
@ -84,4 +86,6 @@ protected:
} // Namespace Assimp } // Namespace Assimp
#endif // #ifndef ASSIMP_BUILD_NO_3MF_IMPORTER
#endif // AI_D3MFLOADER_H_INCLUDED #endif // AI_D3MFLOADER_H_INCLUDED

View File

@ -51,11 +51,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <assimp/texture.h> #include <assimp/texture.h>
#include "3MFXmlTags.h" #include "3MFXmlTags.h"
#include <algorithm> #include <algorithm>
#include <cassert> #include <cassert>
#include <cstdlib> #include <cstdlib>
#include <map> #include <map>
#include <memory>
#include <vector> #include <vector>
namespace Assimp { namespace Assimp {
@ -186,7 +186,6 @@ D3MFOpcPackage::D3MFOpcPackage(IOSystem *pIOHandler, const std::string &rFile) :
D3MFOpcPackage::~D3MFOpcPackage() { D3MFOpcPackage::~D3MFOpcPackage() {
mZipArchive->Close(mRootStream); mZipArchive->Close(mRootStream);
delete mZipArchive; delete mZipArchive;
mZipArchive = nullptr;
} }
IOStream *D3MFOpcPackage::RootStream() const { IOStream *D3MFOpcPackage::RootStream() const {

View File

@ -42,9 +42,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef D3MFOPCPACKAGE_H #ifndef D3MFOPCPACKAGE_H
#define D3MFOPCPACKAGE_H #define D3MFOPCPACKAGE_H
#include <assimp/IOSystem.hpp>
#include <memory> #include <memory>
#include <string> #include <string>
#include <assimp/IOSystem.hpp>
struct aiTexture; struct aiTexture;

View File

@ -63,7 +63,7 @@ namespace Assimp {
class AC3DImporter : public BaseImporter { class AC3DImporter : public BaseImporter {
public: public:
AC3DImporter(); AC3DImporter();
~AC3DImporter(); ~AC3DImporter() override;
// Represents an AC3D material // Represents an AC3D material
struct Material { struct Material {
@ -185,25 +185,25 @@ public:
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details */ * See #BaseImporter::GetInfo for the details */
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details*/ * See BaseImporter::InternReadFile() for details*/
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list.*/ * basing on the Importer's configuration property list.*/
void SetupProperties(const Importer *pImp); void SetupProperties(const Importer *pImp) override;
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------

View File

@ -267,7 +267,7 @@ public:
AMFImporter() AI_NO_EXCEPT; AMFImporter() AI_NO_EXCEPT;
/// Default destructor. /// Default destructor.
~AMFImporter(); ~AMFImporter() override;
/// Parse AMF file and fill scene graph. The function has no return value. Result can be found by analyzing the generated graph. /// Parse AMF file and fill scene graph. The function has no return value. Result can be found by analyzing the generated graph.
/// Also exception can be thrown if trouble will found. /// Also exception can be thrown if trouble will found.
@ -276,9 +276,9 @@ public:
void ParseFile(const std::string &pFile, IOSystem *pIOHandler); void ParseFile(const std::string &pFile, IOSystem *pIOHandler);
void ParseHelper_Node_Enter(AMFNodeElementBase *child); void ParseHelper_Node_Enter(AMFNodeElementBase *child);
void ParseHelper_Node_Exit(); void ParseHelper_Node_Exit();
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool pCheckSig) const; bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool pCheckSig) const override;
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler); void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
bool Find_NodeElement(const std::string &pID, const AMFNodeElementBase::EType pType, AMFNodeElementBase **pNodeElement) const; bool Find_NodeElement(const std::string &pID, const AMFNodeElementBase::EType pType, AMFNodeElementBase **pNodeElement) const;
bool Find_ConvertedNode(const std::string &pID, NodeArray &nodeArray, aiNode **pNode) const; bool Find_ConvertedNode(const std::string &pID, NodeArray &nodeArray, aiNode **pNode) const;
bool Find_ConvertedMaterial(const std::string &pID, const SPP_Material **pConvertedMaterial) const; bool Find_ConvertedMaterial(const std::string &pID, const SPP_Material **pConvertedMaterial) const;

View File

@ -48,15 +48,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef INCLUDED_AI_AMF_IMPORTER_NODE_H #ifndef INCLUDED_AI_AMF_IMPORTER_NODE_H
#define INCLUDED_AI_AMF_IMPORTER_NODE_H #define INCLUDED_AI_AMF_IMPORTER_NODE_H
// Header files, stdlib. // Header files, Assimp.
#include <assimp/scene.h>
#include <assimp/types.h>
#include <list> #include <list>
#include <string> #include <string>
#include <vector> #include <vector>
// Header files, Assimp.
#include "assimp/scene.h"
#include "assimp/types.h"
/// \class CAMFImporter_NodeElement /// \class CAMFImporter_NodeElement
/// Base class for elements of nodes. /// Base class for elements of nodes.
class AMFNodeElementBase { class AMFNodeElementBase {

View File

@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,

View File

@ -62,42 +62,37 @@ namespace Assimp {
class ASEImporter : public BaseImporter { class ASEImporter : public BaseImporter {
public: public:
ASEImporter(); ASEImporter();
~ASEImporter(); ~ASEImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer* pImp) override;
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Generate normal vectors basing on smoothing groups /** Generate normal vectors basing on smoothing groups
* (in some cases the normal are already contained in the file) * (in some cases the normal are already contained in the file)
@ -106,7 +101,6 @@ private:
*/ */
bool GenerateNormals(ASE::Mesh& mesh); bool GenerateNormals(ASE::Mesh& mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Create valid vertex/normal/UV/color/face lists. /** Create valid vertex/normal/UV/color/face lists.
* All elements are unique, faces have only one set of indices * All elements are unique, faces have only one set of indices
@ -115,51 +109,43 @@ private:
*/ */
void BuildUniqueRepresentation(ASE::Mesh& mesh); void BuildUniqueRepresentation(ASE::Mesh& mesh);
/** Create one-material-per-mesh meshes ;-) /** Create one-material-per-mesh meshes ;-)
* \param mesh Mesh to work with * \param mesh Mesh to work with
* \param Receives the list of all created meshes * \param Receives the list of all created meshes
*/ */
void ConvertMeshes(ASE::Mesh& mesh, std::vector<aiMesh*>& avOut); void ConvertMeshes(ASE::Mesh& mesh, std::vector<aiMesh*>& avOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Convert a material to a aiMaterial object /** Convert a material to a aiMaterial object
* \param mat Input material * \param mat Input material
*/ */
void ConvertMaterial(ASE::Material& mat); void ConvertMaterial(ASE::Material& mat);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Setup the final material indices for each mesh /** Setup the final material indices for each mesh
*/ */
void BuildMaterialIndices(); void BuildMaterialIndices();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build the node graph /** Build the node graph
*/ */
void BuildNodes(std::vector<ASE::BaseNode*>& nodes); void BuildNodes(std::vector<ASE::BaseNode*>& nodes);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build output cameras /** Build output cameras
*/ */
void BuildCameras(); void BuildCameras();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build output lights /** Build output lights
*/ */
void BuildLights(); void BuildLights();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build output animations /** Build output animations
*/ */
void BuildAnimations(const std::vector<ASE::BaseNode*>& nodes); void BuildAnimations(const std::vector<ASE::BaseNode*>& nodes);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Add sub nodes to a node /** Add sub nodes to a node
* \param pcParent parent node to be filled * \param pcParent parent node to be filled
@ -183,7 +169,6 @@ private:
void GenerateDefaultMaterial(); void GenerateDefaultMaterial();
protected: protected:
/** Parser instance */ /** Parser instance */
ASE::Parser* mParser; ASE::Parser* mParser;

View File

@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file AssbinExporter.h /** @file AssbinExporter.h
* ASSBIN Exporter Main Header * ASSBIN Exporter Main Header
*/ */
#pragma once
#ifndef AI_ASSBINEXPORTER_H_INC #ifndef AI_ASSBINEXPORTER_H_INC
#define AI_ASSBINEXPORTER_H_INC #define AI_ASSBINEXPORTER_H_INC

View File

@ -5,7 +5,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -74,17 +73,11 @@ private:
bool compressed; bool compressed;
public: public:
virtual bool CanRead( bool CanRead(const std::string& pFile,
const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
IOSystem* pIOHandler, const aiImporterDesc* GetInfo() const override;
bool checkSig void InternReadFile(
) const; const std::string& pFile,aiScene* pScene,IOSystem* pIOHandler) override;
virtual const aiImporterDesc* GetInfo() const;
virtual void InternReadFile(
const std::string& pFile,
aiScene* pScene,
IOSystem* pIOHandler
);
void ReadHeader(); void ReadHeader();
void ReadBinaryScene( IOStream * stream, aiScene* pScene ); void ReadBinaryScene( IOStream * stream, aiScene* pScene );
void ReadBinaryNode( IOStream * stream, aiNode** mRootNode, aiNode* parent ); void ReadBinaryNode( IOStream * stream, aiNode** mRootNode, aiNode* parent );

View File

@ -69,13 +69,12 @@ void MeshSplitter::UpdateNode(aiNode* pcNode, const std::vector<std::pair<aiMesh
for (unsigned int i = 0, end = pcNode->mNumChildren; i < end;++i) { for (unsigned int i = 0, end = pcNode->mNumChildren; i < end;++i) {
UpdateNode ( pcNode->mChildren[i], source_mesh_map ); UpdateNode ( pcNode->mChildren[i], source_mesh_map );
} }
return;
} }
#define WAS_NOT_COPIED 0xffffffff static const unsigned int WAS_NOT_COPIED = 0xffffffff;
typedef std::pair <unsigned int,float> PerVertexWeight; using PerVertexWeight = std::pair <unsigned int,float>;
typedef std::vector <PerVertexWeight> VertexWeightTable; using VertexWeightTable = std::vector <PerVertexWeight>;
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) { VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) {
@ -89,7 +88,7 @@ VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) {
aiBone* bone = pMesh->mBones[i]; aiBone* bone = pMesh->mBones[i];
for (unsigned int a = 0; a < bone->mNumWeights;++a) { for (unsigned int a = 0; a < bone->mNumWeights;++a) {
const aiVertexWeight& weight = bone->mWeights[a]; const aiVertexWeight& weight = bone->mWeights[a];
avPerVertexWeights[weight.mVertexId].push_back( std::make_pair(i,weight.mWeight) ); avPerVertexWeights[weight.mVertexId].emplace_back(i,weight.mWeight);
} }
} }
return avPerVertexWeights; return avPerVertexWeights;
@ -100,7 +99,7 @@ void MeshSplitter :: SplitMesh(unsigned int a, aiMesh* in_mesh, std::vector<std:
// TODO: should better use std::(multi)set for source_mesh_map. // TODO: should better use std::(multi)set for source_mesh_map.
if (in_mesh->mNumVertices <= LIMIT) { if (in_mesh->mNumVertices <= LIMIT) {
source_mesh_map.push_back(std::make_pair(in_mesh,a)); source_mesh_map.emplace_back(in_mesh,a);
return; return;
} }
@ -187,7 +186,7 @@ void MeshSplitter :: SplitMesh(unsigned int a, aiMesh* in_mesh, std::vector<std:
break; break;
} }
vFaces.push_back(aiFace()); vFaces.emplace_back();
aiFace& rFace = vFaces.back(); aiFace& rFace = vFaces.back();
// setup face type and number of indices // setup face type and number of indices

View File

@ -24,10 +24,9 @@ struct aiNode;
/** Splits meshes of unique vertices into meshes with no more vertices than /** Splits meshes of unique vertices into meshes with no more vertices than
* a given, configurable threshold value. * a given, configurable threshold value.
*/ */
class MeshSplitter class MeshSplitter {
{
public: public:
unsigned int LIMIT;
void SetLimit(unsigned int l) { void SetLimit(unsigned int l) {
LIMIT = l; LIMIT = l;
@ -37,8 +36,6 @@ public:
return LIMIT; return LIMIT;
} }
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Executes the post processing step on the given imported data. /** Executes the post processing step on the given imported data.
* At the moment a process is not supposed to fail. * At the moment a process is not supposed to fail.
@ -46,16 +43,10 @@ public:
*/ */
void Execute(aiScene *pScene); void Execute(aiScene *pScene);
private: private:
void UpdateNode(aiNode *pcNode, const std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map); void UpdateNode(aiNode *pcNode, const std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map);
void SplitMesh(unsigned int index, aiMesh *mesh, std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map); void SplitMesh(unsigned int index, aiMesh *mesh, std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map);
public:
unsigned int LIMIT;
}; };
#endif // INCLUDED_MESH_SPLITTER #endif // INCLUDED_MESH_SPLITTER

View File

@ -43,6 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file AssxmlExporter.h /** @file AssxmlExporter.h
* ASSXML Exporter Main Header * ASSXML Exporter Main Header
*/ */
#pragma once
#ifndef AI_ASSXMLEXPORTER_H_INC #ifndef AI_ASSXMLEXPORTER_H_INC
#define AI_ASSXMLEXPORTER_H_INC #define AI_ASSXMLEXPORTER_H_INC

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file AssxmlFileWriter.h /** @file AssxmlFileWriter.h
* @brief Declaration of Assxml file writer. * @brief Declaration of Assxml file writer.
*/ */
#pragma once
#ifndef AI_ASSXMLFILEWRITER_H_INC #ifndef AI_ASSXMLFILEWRITER_H_INC
#define AI_ASSXMLFILEWRITER_H_INC #define AI_ASSXMLFILEWRITER_H_INC

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -40,8 +39,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
/** @file Definition of the .b3d importer class. */ /**
* @file Definition of the .b3d importer class.
*/
#pragma once
#ifndef AI_B3DIMPORTER_H_INC #ifndef AI_B3DIMPORTER_H_INC
#define AI_B3DIMPORTER_H_INC #define AI_B3DIMPORTER_H_INC
@ -62,14 +63,12 @@ namespace Assimp{
class B3DImporter : public BaseImporter{ class B3DImporter : public BaseImporter{
public: public:
B3DImporter() = default; B3DImporter() = default;
virtual ~B3DImporter(); ~B3DImporter() override;
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const;
protected: protected:
const aiImporterDesc* GetInfo () const override;
virtual const aiImporterDesc* GetInfo () const; void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
private: private:
@ -113,7 +112,6 @@ private:
void ReadBB3D( aiScene *scene ); void ReadBB3D( aiScene *scene );
size_t _pos; size_t _pos;
// unsigned _size;
std::vector<unsigned char> _buf; std::vector<unsigned char> _buf;
std::vector<size_t> _stack; std::vector<size_t> _stack;

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file BlenderLoader.h /** @file BlenderLoader.h
* @brief Declaration of the Blender 3D (*.blend) importer class. * @brief Declaration of the Blender 3D (*.blend) importer class.
*/ */
#pragma once
#ifndef INCLUDED_AI_BLEND_LOADER_H #ifndef INCLUDED_AI_BLEND_LOADER_H
#define INCLUDED_AI_BLEND_LOADER_H #define INCLUDED_AI_BLEND_LOADER_H
@ -60,15 +60,19 @@ namespace Assimp {
// TinyFormatter.h // TinyFormatter.h
namespace Formatter { namespace Formatter {
template <typename T,typename TR, typename A> class basic_formatter;
template <typename T, typename TR, typename A>
class basic_formatter;
typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format; typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format;
}
} // namespace Formatter
// BlenderDNA.h // BlenderDNA.h
namespace Blender { namespace Blender {
class FileDatabase; class FileDatabase;
struct ElemBase; struct ElemBase;
} } // namespace Blender
// BlenderScene.h // BlenderScene.h
namespace Blender { namespace Blender {
@ -80,38 +84,36 @@ namespace Assimp {
struct MTex; struct MTex;
struct Image; struct Image;
struct Material; struct Material;
} } // namespace Blender
// BlenderIntermediate.h // BlenderIntermediate.h
namespace Blender { namespace Blender {
struct ConversionData; struct ConversionData;
template <template <typename,typename> class TCLASS, typename T> struct TempArray; template <template <typename, typename> class TCLASS, typename T>
} struct TempArray;
} // namespace Blender
// BlenderModifier.h // BlenderModifier.h
namespace Blender { namespace Blender {
class BlenderModifierShowcase; class BlenderModifierShowcase;
class BlenderModifier; class BlenderModifier;
} } // namespace Blender
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
/** Load blenders official binary format. The actual file structure (the `DNA` how they /** Load blenders official binary format. The actual file structure (the `DNA` how they
* call it is outsourced to BlenderDNA.cpp/BlenderDNA.h. This class only performs the * call it is outsourced to BlenderDNA.cpp/BlenderDNA.h. This class only performs the
* conversion from intermediate format to aiScene. */ * conversion from intermediate format to aiScene. */
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
class BlenderImporter : public BaseImporter, public LogFunctions<BlenderImporter> class BlenderImporter : public BaseImporter, public LogFunctions<BlenderImporter> {
{
public: public:
BlenderImporter(); BlenderImporter();
~BlenderImporter(); ~BlenderImporter() override;
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
protected: protected:
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer *pImp) override;
void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
void ParseBlendFile(Blender::FileDatabase &out, std::shared_ptr<IOStream> stream); void ParseBlendFile(Blender::FileDatabase &out, std::shared_ptr<IOStream> stream);
void ExtractScene(Blender::Scene &out, const Blender::FileDatabase &file); void ExtractScene(Blender::Scene &out, const Blender::FileDatabase &file);
void ConvertBlendFile(aiScene *out, const Blender::Scene &in, const Blender::FileDatabase &file); void ConvertBlendFile(aiScene *out, const Blender::Scene &in, const Blender::FileDatabase &file);
@ -120,52 +122,46 @@ private:
aiNode *ConvertNode(const Blender::Scene &in, aiNode *ConvertNode(const Blender::Scene &in,
const Blender::Object *obj, const Blender::Object *obj,
Blender::ConversionData &conv_info, Blender::ConversionData &conv_info,
const aiMatrix4x4& parentTransform const aiMatrix4x4 &parentTransform);
);
// -------------------- // --------------------
void ConvertMesh(const Blender::Scene &in, void ConvertMesh(const Blender::Scene &in,
const Blender::Object *obj, const Blender::Object *obj,
const Blender::Mesh *mesh, const Blender::Mesh *mesh,
Blender::ConversionData &conv_data, Blender::ConversionData &conv_data,
Blender::TempArray<std::vector,aiMesh>& temp Blender::TempArray<std::vector, aiMesh> &temp);
);
// -------------------- // --------------------
aiLight *ConvertLight(const Blender::Scene &in, aiLight *ConvertLight(const Blender::Scene &in,
const Blender::Object *obj, const Blender::Object *obj,
const Blender::Lamp *mesh, const Blender::Lamp *mesh,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// -------------------- // --------------------
aiCamera *ConvertCamera(const Blender::Scene &in, aiCamera *ConvertCamera(const Blender::Scene &in,
const Blender::Object *obj, const Blender::Object *obj,
const Blender::Camera *mesh, const Blender::Camera *mesh,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// -------------------- // --------------------
void BuildDefaultMaterial( void BuildDefaultMaterial(
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// --------------------
void AddBlendParams( void AddBlendParams(
aiMaterial *result, aiMaterial *result,
const Blender::Material* source const Blender::Material *source);
);
// --------------------
void BuildMaterials( void BuildMaterials(
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// -------------------- // --------------------
void ResolveTexture( void ResolveTexture(
aiMaterial *out, aiMaterial *out,
const Blender::Material *mat, const Blender::Material *mat,
const Blender::MTex *tex, const Blender::MTex *tex,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// -------------------- // --------------------
void ResolveImage( void ResolveImage(
@ -173,31 +169,25 @@ private:
const Blender::Material *mat, const Blender::Material *mat,
const Blender::MTex *tex, const Blender::MTex *tex,
const Blender::Image *img, const Blender::Image *img,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// --------------------
void AddSentinelTexture( void AddSentinelTexture(
aiMaterial *out, aiMaterial *out,
const Blender::Material *mat, const Blender::Material *mat,
const Blender::MTex *tex, const Blender::MTex *tex,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
private: // static stuff, mostly logging and error reporting. private: // static stuff, mostly logging and error reporting.
// -------------------- // --------------------
static void CheckActualType(const Blender::ElemBase *dt, static void CheckActualType(const Blender::ElemBase *dt,
const char* check const char *check);
);
// -------------------- // --------------------
static void NotSupportedObjectType(const Blender::Object *obj, static void NotSupportedObjectType(const Blender::Object *obj,
const char* type const char *type);
);
private: private:
Blender::BlenderModifierShowcase *modifier_cache; Blender::BlenderModifierShowcase *modifier_cache;
}; // !class BlenderImporter }; // !class BlenderImporter

View File

@ -56,46 +56,44 @@ namespace Assimp {
// TinyFormatter.h // TinyFormatter.h
namespace Formatter { namespace Formatter {
template <typename T,typename TR, typename A> class basic_formatter; template <typename T, typename TR, typename A>
class basic_formatter;
typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format; typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format;
} } // namespace Formatter
// COBScene.h // COBScene.h
namespace COB { namespace COB {
struct ChunkInfo; struct ChunkInfo;
struct Node; struct Node;
struct Scene; struct Scene;
} } // namespace COB
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
/** Importer class to load TrueSpace files (cob,scn) up to v6. /** Importer class to load TrueSpace files (cob,scn) up to v6.
* *
* Currently relatively limited, loads only ASCII files and needs more test coverage. */ * Currently relatively limited, loads only ASCII files and needs more test coverage. */
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
class COBImporter : public BaseImporter class COBImporter : public BaseImporter {
{
public: public:
COBImporter(); COBImporter();
~COBImporter(); ~COBImporter() override;
// -------------------- // --------------------
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// --------------------
const aiImporterDesc *GetInfo() const override;
// -------------------- // --------------------
const aiImporterDesc* GetInfo () const; void SetupProperties(const Importer *pImp) override;
// --------------------
void SetupProperties(const Importer* pImp);
// -------------------- // --------------------
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Prepend 'COB: ' and throw msg.*/ /** Prepend 'COB: ' and throw msg.*/
AI_WONT_RETURN static void ThrowException(const std::string &msg) AI_WONT_RETURN_SUFFIX; AI_WONT_RETURN static void ThrowException(const std::string &msg) AI_WONT_RETURN_SUFFIX;
@ -113,7 +111,6 @@ private:
void ReadBinaryFile(COB::Scene &out, StreamReaderLE *stream); void ReadBinaryFile(COB::Scene &out, StreamReaderLE *stream);
// Conversion to Assimp output format // Conversion to Assimp output format
aiNode *BuildNodes(const COB::Node &root, const COB::Scene &scin, aiScene *fill); aiNode *BuildNodes(const COB::Node &root, const COB::Scene &scin, aiScene *fill);
private: private:
@ -122,7 +119,8 @@ private:
void UnsupportedChunk_Ascii(LineSplitter &splitter, const COB::ChunkInfo &nfo, const char *name); void UnsupportedChunk_Ascii(LineSplitter &splitter, const COB::ChunkInfo &nfo, const char *name);
void ReadChunkInfo_Ascii(COB::ChunkInfo &out, const LineSplitter &splitter); void ReadChunkInfo_Ascii(COB::ChunkInfo &out, const LineSplitter &splitter);
void ReadBasicNodeInfo_Ascii(COB::Node &msh, LineSplitter &splitter, const COB::ChunkInfo &nfo); void ReadBasicNodeInfo_Ascii(COB::Node &msh, LineSplitter &splitter, const COB::ChunkInfo &nfo);
template <typename T> void ReadFloat3Tuple_Ascii(T& fill, const char** in); template <typename T>
void ReadFloat3Tuple_Ascii(T &fill, const char **in);
void ReadPolH_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo); void ReadPolH_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
void ReadBitM_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo); void ReadBitM_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
@ -134,7 +132,6 @@ private:
void ReadUnit_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo); void ReadUnit_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
void ReadChan_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo); void ReadChan_Ascii(COB::Scene &out, LineSplitter &splitter, const COB::ChunkInfo &nfo);
// Binary file support // Binary file support
void UnsupportedChunk_Binary(StreamReaderLE &reader, const COB::ChunkInfo &nfo, const char *name); void UnsupportedChunk_Binary(StreamReaderLE &reader, const COB::ChunkInfo &nfo, const char *name);
@ -149,7 +146,6 @@ private:
void ReadGrou_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo); void ReadGrou_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
void ReadUnit_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo); void ReadUnit_Binary(COB::Scene &out, StreamReaderLE &reader, const COB::ChunkInfo &nfo);
}; // !class COBImporter }; // !class COBImporter
} // end of namespace Assimp } // end of namespace Assimp

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,16 +42,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file COBScene.h /** @file COBScene.h
* @brief Utilities for the COB importer. * @brief Utilities for the COB importer.
*/ */
#pragma once
#ifndef INCLUDED_AI_COB_SCENE_H #ifndef INCLUDED_AI_COB_SCENE_H
#define INCLUDED_AI_COB_SCENE_H #define INCLUDED_AI_COB_SCENE_H
#include <memory>
#include <deque>
#include <map>
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/material.h> #include <assimp/material.h>
#include <deque>
#include <map>
namespace Assimp { namespace Assimp {
namespace COB { namespace COB {

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -59,35 +58,32 @@ namespace Assimp {
* Link to file format specification: * Link to file format specification:
* <max_8_dvd>\samples\Motion\Docs\CSM.rtf * <max_8_dvd>\samples\Motion\Docs\CSM.rtf
*/ */
class CSMImporter : public BaseImporter class CSMImporter : public BaseImporter {
{
public: public:
CSMImporter(); CSMImporter();
~CSMImporter(); ~CSMImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// -------------------------------------------------------------------
const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
const aiImporterDesc* GetInfo () const; void SetupProperties(const Importer *pImp) override;
// -------------------------------------------------------------------
void SetupProperties(const Importer* pImp);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
private: private:
bool noSkeletonMesh; bool noSkeletonMesh;
}; // end of class CSMImporter }; // end of class CSMImporter
} // end of namespace Assimp } // end of namespace Assimp
#endif // AI_AC3DIMPORTER_H_INC #endif // AI_AC3DIMPORTER_H_INC

View File

@ -47,7 +47,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "ColladaParser.h" #include "ColladaParser.h"
#include <assimp/ColladaMetaData.h> #include <assimp/ColladaMetaData.h>
#include <assimp/CreateAnimMesh.h> #include <assimp/CreateAnimMesh.h>
#include <assimp/Defines.h>
#include <assimp/ParsingUtils.h> #include <assimp/ParsingUtils.h>
#include <assimp/SkeletonMeshBuilder.h> #include <assimp/SkeletonMeshBuilder.h>
#include <assimp/ZipArchiveIOSystem.h> #include <assimp/ZipArchiveIOSystem.h>

View File

@ -43,6 +43,7 @@
* @brief Defines the parser helper class for the collada loader * @brief Defines the parser helper class for the collada loader
*/ */
#pragma once
#ifndef AI_COLLADAPARSER_H_INC #ifndef AI_COLLADAPARSER_H_INC
#define AI_COLLADAPARSER_H_INC #define AI_COLLADAPARSER_H_INC

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file DXFLoader.h /** @file DXFLoader.h
* @brief Declaration of the .dxf importer class. * @brief Declaration of the .dxf importer class.
*/ */
#pragma once
#ifndef AI_DXFLOADER_H_INCLUDED #ifndef AI_DXFLOADER_H_INCLUDED
#define AI_DXFLOADER_H_INCLUDED #define AI_DXFLOADER_H_INCLUDED
@ -59,7 +59,7 @@ namespace DXF {
struct Block; struct Block;
struct InsertBlock; struct InsertBlock;
typedef std::map<std::string, const DXF::Block*> BlockMap; using BlockMap = std::map<std::string, const DXF::Block*>;
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -69,29 +69,26 @@ namespace DXF {
class DXFImporter : public BaseImporter { class DXFImporter : public BaseImporter {
public: public:
DXFImporter(); DXFImporter();
~DXFImporter(); ~DXFImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details*/ * See #BaseImporter::GetInfo for the details*/
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details */ * See BaseImporter::InternReadFile() for details */
void InternReadFile( const std::string& pFile, void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
aiScene* pScene,
IOSystem* pIOHandler);
private: private:
// ----------------------------------------------------- // -----------------------------------------------------
void SkipSection(DXF::LineReader& reader); void SkipSection(DXF::LineReader& reader);

View File

@ -70,28 +70,29 @@ typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>
class FBXImporter : public BaseImporter, public LogFunctions<FBXImporter> { class FBXImporter : public BaseImporter, public LogFunctions<FBXImporter> {
public: public:
FBXImporter(); FBXImporter();
virtual ~FBXImporter(); ~FBXImporter() override;
// -------------------- // --------------------
bool CanRead(const std::string &pFile, bool CanRead(const std::string &pFile,
IOSystem *pIOHandler, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// -------------------- // --------------------
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// -------------------- // --------------------
void SetupProperties(const Importer *pImp); void SetupProperties(const Importer *pImp) override;
// -------------------- // --------------------
void InternReadFile(const std::string &pFile, void InternReadFile(const std::string &pFile,
aiScene *pScene, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
private: private:
FBX::ImportSettings settings; FBX::ImportSettings settings;
}; // !class FBXImporter }; // !class FBXImporter
} // end of namespace Assimp } // end of namespace Assimp
#endif // !INCLUDED_AI_FBX_IMPORTER_H #endif // !INCLUDED_AI_FBX_IMPORTER_H

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -42,15 +41,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file HMPLoader.h /** @file HMPLoader.h
* @brief Declaration of the HMP importer class * @brief Declaration of the HMP importer class
*/ */
#pragma once
#ifndef AI_HMPLOADER_H_INCLUDED #ifndef AI_HMPLOADER_H_INCLUDED
#define AI_HMPLOADER_H_INCLUDED #define AI_HMPLOADER_H_INCLUDED
// internal headers
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include "AssetLib/MDL/MDLLoader.h" // internal headers
#include "AssetLib/HMP/HMPFileData.h" #include "AssetLib/HMP/HMPFileData.h"
#include "AssetLib/MDL/MDLLoader.h"
namespace Assimp { namespace Assimp {
using namespace HMP; using namespace HMP;
@ -58,39 +57,31 @@ using namespace HMP;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Used to load 3D GameStudio HMP files (terrains) /** Used to load 3D GameStudio HMP files (terrains)
*/ */
class HMPImporter : public MDLImporter class HMPImporter : public MDLImporter {
{
public: public:
HMPImporter(); HMPImporter();
~HMPImporter(); ~HMPImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Import a HMP4 file /** Import a HMP4 file
@ -142,12 +133,8 @@ protected:
*/ */
void ReadFirstSkin(unsigned int iNumSkins, const unsigned char *szCursor, void ReadFirstSkin(unsigned int iNumSkins, const unsigned char *szCursor,
const unsigned char **szCursorOut); const unsigned char **szCursorOut);
private:
}; };
} // end of namespace Assimp } // end of namespace Assimp
#endif // AI_HMPIMPORTER_H_INC #endif // AI_HMPIMPORTER_H_INC

View File

@ -48,7 +48,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "Common/PolyTools.h" #include "Common/PolyTools.h"
#include "PostProcessing/ProcessHelper.h" #include "PostProcessing/ProcessHelper.h"
#include <assimp/Defines.h>
#include <iterator> #include <iterator>
#include <tuple> #include <tuple>

View File

@ -53,14 +53,18 @@ namespace Assimp {
// TinyFormatter.h // TinyFormatter.h
namespace Formatter { namespace Formatter {
template <typename T,typename TR, typename A> class basic_formatter;
template <typename T, typename TR, typename A>
class basic_formatter;
typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format; typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format;
}
} // namespace Formatter
namespace STEP { namespace STEP {
class DB;
}
class DB;
}
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
/** Load the IFC format, which is an open specification to describe building and construction /** Load the IFC format, which is an open specification to describe building and construction
@ -69,52 +73,12 @@ namespace Assimp {
See http://en.wikipedia.org/wiki/Industry_Foundation_Classes See http://en.wikipedia.org/wiki/Industry_Foundation_Classes
*/ */
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
class IFCImporter : public BaseImporter, public LogFunctions<IFCImporter> class IFCImporter : public BaseImporter, public LogFunctions<IFCImporter> {
{
public: public:
IFCImporter();
~IFCImporter();
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 // loader settings, publicly accessible via their corresponding AI_CONFIG constants
struct Settings struct Settings {
{ Settings() :
Settings() skipSpaceRepresentations(), useCustomTriangulation(), skipAnnotations(), conicSamplingAngle(10.f), cylindricalTessellation(32) {}
: skipSpaceRepresentations()
, useCustomTriangulation()
, skipAnnotations()
, conicSamplingAngle(10.f)
, cylindricalTessellation(32)
{}
bool skipSpaceRepresentations; bool skipSpaceRepresentations;
bool useCustomTriangulation; bool useCustomTriangulation;
@ -123,9 +87,27 @@ public:
int cylindricalTessellation; int cylindricalTessellation;
}; };
IFCImporter();
~IFCImporter() override;
// --------------------
bool CanRead(const std::string &pFile,
IOSystem *pIOHandler,
bool checkSig) const override;
protected:
// --------------------
const aiImporterDesc *GetInfo() const override;
// --------------------
void SetupProperties(const Importer *pImp) override;
// --------------------
void InternReadFile(const std::string &pFile,
aiScene *pScene,
IOSystem *pIOHandler) override;
private: private:
Settings settings; Settings settings;
}; // !class IFCImporter }; // !class IFCImporter

View File

@ -49,7 +49,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "AssetLib/IFC/IFCUtil.h" #include "AssetLib/IFC/IFCUtil.h"
#include "Common/PolyTools.h" #include "Common/PolyTools.h"
#include "PostProcessing/ProcessHelper.h" #include "PostProcessing/ProcessHelper.h"
#include <assimp/Defines.h>
namespace Assimp { namespace Assimp {
namespace IFC { namespace IFC {

View File

@ -65,22 +65,21 @@ namespace Assimp {
class IRRImporter : public BaseImporter, public IrrlichtBase { class IRRImporter : public BaseImporter, public IrrlichtBase {
public: public:
IRRImporter(); IRRImporter();
~IRRImporter(); ~IRRImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer* pImp) override;
private: private:
/** Data structure for a scene-graph node animator /** Data structure for a scene-graph node animator
*/ */
struct Animator { struct Animator {

View File

@ -63,28 +63,28 @@ namespace Assimp {
class IRRMeshImporter : public BaseImporter, public IrrlichtBase { class IRRMeshImporter : public BaseImporter, public IrrlichtBase {
public: public:
IRRMeshImporter(); IRRMeshImporter();
~IRRMeshImporter(); ~IRRMeshImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
}; };
} // end of namespace Assimp } // end of namespace Assimp

View File

@ -9,7 +9,7 @@
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/XmlParser.h> #include <assimp/XmlParser.h>
#include <stdint.h> #include <cstdint>
struct aiMaterial; struct aiMaterial;

View File

@ -41,15 +41,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
/** @file Declaration of the LWO importer class. */ /** @file Declaration of the LWO importer class. */
#pragma once
#ifndef AI_LWOLOADER_H_INCLUDED #ifndef AI_LWOLOADER_H_INCLUDED
#define AI_LWOLOADER_H_INCLUDED #define AI_LWOLOADER_H_INCLUDED
#include <assimp/types.h>
#include <assimp/material.h>
#include <assimp/DefaultLogger.hpp>
#include "LWOFileData.h" #include "LWOFileData.h"
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/material.h>
#include <assimp/DefaultLogger.hpp>
#include <map> #include <map>
@ -70,41 +69,38 @@ using namespace LWO;
* they aren't specific to one format version * they aren't specific to one format version
*/ */
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
class LWOImporter : public BaseImporter class LWOImporter : public BaseImporter {
{
public: public:
LWOImporter(); LWOImporter();
~LWOImporter(); ~LWOImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer *pImp) override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Get list of supported extensions // Get list of supported extensions
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Loads a LWO file in the older LWOB format (LW < 6) /** Loads a LWO file in the older LWOB format (LW < 6)
*/ */
@ -115,7 +111,6 @@ private:
*/ */
void LoadLWO2File(); void LoadLWO2File();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Parsing functions used for all file format versions /** Parsing functions used for all file format versions
*/ */
@ -125,7 +120,6 @@ private:
inline uint16_t GetU2(); inline uint16_t GetU2();
inline uint8_t GetU1(); inline uint8_t GetU1();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Loads a surface chunk from an LWOB file /** Loads a surface chunk from an LWOB file
* @param size Maximum size to be read, in bytes. * @param size Maximum size to be read, in bytes.
@ -270,7 +264,6 @@ private:
*/ */
void ConvertMaterial(const LWO::Surface &surf, aiMaterial *pcMat); void ConvertMaterial(const LWO::Surface &surf, aiMaterial *pcMat);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Get a list of all UV/VC channels required by a specific surface. /** Get a list of all UV/VC channels required by a specific surface.
* *
@ -337,7 +330,6 @@ private:
void ComputeNormals(aiMesh *mesh, const std::vector<unsigned int> &smoothingGroups, void ComputeNormals(aiMesh *mesh, const std::vector<unsigned int> &smoothingGroups,
const LWO::Surface &surface); const LWO::Surface &surface);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Setup a new texture after the corresponding chunk was /** Setup a new texture after the corresponding chunk was
* encountered in the file. * encountered in the file.
@ -349,7 +341,6 @@ private:
unsigned int size); unsigned int size);
protected: protected:
/** true if the file is a LWO2 file*/ /** true if the file is a LWO2 file*/
bool mIsLWO2; bool mIsLWO2;
@ -400,10 +391,8 @@ protected:
bool hasNamedLayer; bool hasNamedLayer;
}; };
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
inline inline float LWOImporter::GetF4() {
float LWOImporter::GetF4() {
float f; float f;
::memcpy(&f, mFileBuffer, 4); ::memcpy(&f, mFileBuffer, 4);
mFileBuffer += 4; mFileBuffer += 4;
@ -412,8 +401,7 @@ float LWOImporter::GetF4() {
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
inline uint32_t LWOImporter::GetU4() inline uint32_t LWOImporter::GetU4() {
{
uint32_t f; uint32_t f;
::memcpy(&f, mFileBuffer, 4); ::memcpy(&f, mFileBuffer, 4);
mFileBuffer += 4; mFileBuffer += 4;
@ -422,8 +410,7 @@ inline uint32_t LWOImporter::GetU4()
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
inline uint16_t LWOImporter::GetU2() inline uint16_t LWOImporter::GetU2() {
{
uint16_t f; uint16_t f;
::memcpy(&f, mFileBuffer, 2); ::memcpy(&f, mFileBuffer, 2);
mFileBuffer += 2; mFileBuffer += 2;
@ -432,43 +419,40 @@ inline uint16_t LWOImporter::GetU2()
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
inline uint8_t LWOImporter::GetU1() inline uint8_t LWOImporter::GetU1() {
{
return *mFileBuffer++; return *mFileBuffer++;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
inline int LWOImporter::ReadVSizedIntLWO2(uint8_t*& inout) inline int LWOImporter::ReadVSizedIntLWO2(uint8_t *&inout) {
{
int i; int i;
int c = *inout;inout++; int c = *inout;
if(c != 0xFF) inout++;
{ if (c != 0xFF) {
i = c << 8; i = c << 8;
c = *inout;inout++; c = *inout;
inout++;
i |= c; i |= c;
} } else {
else c = *inout;
{ inout++;
c = *inout;inout++;
i = c << 16; i = c << 16;
c = *inout;inout++; c = *inout;
inout++;
i |= c << 8; i |= c << 8;
c = *inout;inout++; c = *inout;
inout++;
i |= c; i |= c;
} }
return i; return i;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
inline void LWOImporter::GetS0(std::string& out,unsigned int max) inline void LWOImporter::GetS0(std::string &out, unsigned int max) {
{
unsigned int iCursor = 0; unsigned int iCursor = 0;
const char *sz = (const char *)mFileBuffer; const char *sz = (const char *)mFileBuffer;
while (*mFileBuffer) while (*mFileBuffer) {
{ if (++iCursor > max) {
if (++iCursor > max)
{
ASSIMP_LOG_WARN("LWO: Invalid file, string is is too long"); ASSIMP_LOG_WARN("LWO: Invalid file, string is is too long");
break; break;
} }
@ -479,8 +463,6 @@ inline void LWOImporter::GetS0(std::string& out,unsigned int max)
mFileBuffer += (len & 0x1 ? 1 : 2); mFileBuffer += (len & 0x1 ? 1 : 2);
} }
} // end of namespace Assimp } // end of namespace Assimp
#endif // AI_LWOIMPORTER_H_INCLUDED #endif // AI_LWOIMPORTER_H_INCLUDED

View File

@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file LWSLoader.h /** @file LWSLoader.h
* @brief Declaration of the LightWave scene importer class. * @brief Declaration of the LightWave scene importer class.
*/ */
#pragma once
#ifndef AI_LWSLOADER_H_INCLUDED #ifndef AI_LWSLOADER_H_INCLUDED
#define AI_LWSLOADER_H_INCLUDED #define AI_LWSLOADER_H_INCLUDED
@ -53,6 +54,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
struct aiImporterDesc; struct aiImporterDesc;
namespace Assimp { namespace Assimp {
class BatchLoader; class BatchLoader;
class Importer; class Importer;
class IOSystem; class IOSystem;
@ -172,26 +174,26 @@ struct NodeDesc {
class LWSImporter : public BaseImporter { class LWSImporter : public BaseImporter {
public: public:
LWSImporter(); LWSImporter();
~LWSImporter(); ~LWSImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Check whether we can read a specific file // Check whether we can read a specific file
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Get list of supported extensions // Get list of supported extensions
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Import file into given scene data structure // Import file into given scene data structure
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Setup import properties // Setup import properties
void SetupProperties(const Importer *pImp); void SetupProperties(const Importer *pImp) override;
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
@ -226,9 +228,7 @@ private:
private: private:
bool configSpeedFlag; bool configSpeedFlag;
IOSystem *io; IOSystem *io;
double first, last, fps; double first, last, fps;
bool noSkeletonMesh; bool noSkeletonMesh;
}; };

View File

@ -65,21 +65,20 @@ class M3DImporter : public BaseImporter {
public: public:
/// \brief Default constructor /// \brief Default constructor
M3DImporter(); M3DImporter();
~M3DImporter() override {}
public:
/// \brief Returns whether the class can handle the format of the given file. /// \brief Returns whether the class can handle the format of the given file.
/// \remark See BaseImporter::CanRead() for details. /// \remark See BaseImporter::CanRead() for details.
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const; bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
private:
aiScene *mScene = nullptr; // the scene to import to
protected:
//! \brief Appends the supported extension. //! \brief Appends the supported extension.
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
//! \brief File import implementation. //! \brief File import implementation.
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler); void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
private:
void importMaterials(const M3DWrapper &m3d); void importMaterials(const M3DWrapper &m3d);
void importTextures(const M3DWrapper &m3d); void importTextures(const M3DWrapper &m3d);
void importMeshes(const M3DWrapper &m3d); void importMeshes(const M3DWrapper &m3d);
@ -94,6 +93,9 @@ private:
void populateMesh(const M3DWrapper &m3d, aiMesh *pMesh, std::vector<aiFace> *faces, std::vector<aiVector3D> *verteces, void populateMesh(const M3DWrapper &m3d, aiMesh *pMesh, std::vector<aiFace> *faces, std::vector<aiVector3D> *verteces,
std::vector<aiVector3D> *normals, std::vector<aiVector3D> *texcoords, std::vector<aiColor4D> *colors, std::vector<aiVector3D> *normals, std::vector<aiVector3D> *texcoords, std::vector<aiColor4D> *colors,
std::vector<unsigned int> *vertexids); std::vector<unsigned int> *vertexids);
private:
aiScene *mScene = nullptr; // the scene to import to
}; };
} // Namespace Assimp } // Namespace Assimp

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,13 +42,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file MD2Loader.h /** @file MD2Loader.h
* @brief Declaration of the .MD2 importer class. * @brief Declaration of the .MD2 importer class.
*/ */
#pragma once
#ifndef AI_MD2LOADER_H_INCLUDED #ifndef AI_MD2LOADER_H_INCLUDED
#define AI_MD2LOADER_H_INCLUDED #define AI_MD2LOADER_H_INCLUDED
#include <assimp/BaseImporter.h>
#include <assimp/types.h>
#include <assimp/ByteSwapper.h>
#include "MD2FileData.h" #include "MD2FileData.h"
#include <assimp/BaseImporter.h>
#include <assimp/ByteSwapper.h>
#include <assimp/types.h>
struct aiNode; struct aiNode;
@ -60,44 +60,37 @@ using namespace MD2;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Importer class for MD2 /** Importer class for MD2
*/ */
class MD2Importer : public BaseImporter class MD2Importer : public BaseImporter {
{
public: public:
MD2Importer(); MD2Importer();
~MD2Importer(); ~MD2Importer() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer *pImp) override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Validate the header of the file /** Validate the header of the file
@ -105,7 +98,6 @@ protected:
void ValidateHeader(); void ValidateHeader();
protected: protected:
/** Configuration option: frame to be loaded */ /** Configuration option: frame to be loaded */
unsigned int configFrameID; unsigned int configFrameID;

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -46,9 +45,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef AI_MD3LOADER_H_INCLUDED #ifndef AI_MD3LOADER_H_INCLUDED
#define AI_MD3LOADER_H_INCLUDED #define AI_MD3LOADER_H_INCLUDED
#include "MD3FileData.h"
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/ByteSwapper.h> #include <assimp/ByteSwapper.h>
#include "MD3FileData.h"
#include <assimp/StringComparison.h> #include <assimp/StringComparison.h>
#include <assimp/types.h> #include <assimp/types.h>
@ -58,18 +57,15 @@ struct aiMaterial;
namespace Assimp { namespace Assimp {
using namespace MD3; using namespace MD3;
namespace Q3Shader { namespace Q3Shader {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Tiny utility data structure to hold the data of a .skin file /** @brief Tiny utility data structure to hold the data of a .skin file
*/ */
struct SkinData struct SkinData {
{
//! A single entry in texture list //! A single entry in texture list
struct TextureEntry : public std::pair<std::string,std::string> struct TextureEntry : public std::pair<std::string, std::string> {
{
// did we resolve this texture entry? // did we resolve this texture entry?
bool resolved; bool resolved;
@ -88,8 +84,7 @@ struct SkinData
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Specifies cull modi for Quake shader files. /** @brief Specifies cull modi for Quake shader files.
*/ */
enum ShaderCullMode enum ShaderCullMode {
{
CULL_NONE, CULL_NONE,
CULL_CW, CULL_CW,
CULL_CCW CULL_CCW
@ -98,8 +93,7 @@ enum ShaderCullMode
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Specifies alpha blend modi (src + dest) for Quake shader files /** @brief Specifies alpha blend modi (src + dest) for Quake shader files
*/ */
enum BlendFunc enum BlendFunc {
{
BLEND_NONE, BLEND_NONE,
BLEND_GL_ONE, BLEND_GL_ONE,
BLEND_GL_ZERO, BLEND_GL_ZERO,
@ -112,8 +106,7 @@ enum BlendFunc
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Specifies alpha test modi for Quake texture maps /** @brief Specifies alpha test modi for Quake texture maps
*/ */
enum AlphaTestFunc enum AlphaTestFunc {
{
AT_NONE, AT_NONE,
AT_GT0, AT_GT0,
AT_LT128, AT_LT128,
@ -123,13 +116,11 @@ enum AlphaTestFunc
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Tiny utility data structure to hold a .shader map data block /** @brief Tiny utility data structure to hold a .shader map data block
*/ */
struct ShaderMapBlock struct ShaderMapBlock {
{
ShaderMapBlock() AI_NO_EXCEPT ShaderMapBlock() AI_NO_EXCEPT
: blend_src (BLEND_NONE) : blend_src(BLEND_NONE),
, blend_dest (BLEND_NONE) blend_dest(BLEND_NONE),
, alpha_test (AT_NONE) alpha_test(AT_NONE) {}
{}
//! Name of referenced map //! Name of referenced map
std::string name; std::string name;
@ -138,7 +129,6 @@ struct ShaderMapBlock
BlendFunc blend_src, blend_dest; BlendFunc blend_src, blend_dest;
AlphaTestFunc alpha_test; AlphaTestFunc alpha_test;
//! For std::find() //! For std::find()
bool operator==(const std::string &o) const { bool operator==(const std::string &o) const {
return !ASSIMP_stricmp(o, name); return !ASSIMP_stricmp(o, name);
@ -148,11 +138,9 @@ struct ShaderMapBlock
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Tiny utility data structure to hold a .shader data block /** @brief Tiny utility data structure to hold a .shader data block
*/ */
struct ShaderDataBlock struct ShaderDataBlock {
{
ShaderDataBlock() AI_NO_EXCEPT ShaderDataBlock() AI_NO_EXCEPT
: cull (CULL_CW) : cull(CULL_CW) {}
{}
//! Name of referenced data element //! Name of referenced data element
std::string name; std::string name;
@ -163,7 +151,6 @@ struct ShaderDataBlock
//! Maps defined in the shader //! Maps defined in the shader
std::list<ShaderMapBlock> maps; std::list<ShaderMapBlock> maps;
//! For std::find() //! For std::find()
bool operator==(const std::string &o) const { bool operator==(const std::string &o) const {
return !ASSIMP_stricmp(o, name); return !ASSIMP_stricmp(o, name);
@ -173,8 +160,7 @@ struct ShaderDataBlock
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Tiny utility data structure to hold the data of a .shader file /** @brief Tiny utility data structure to hold the data of a .shader file
*/ */
struct ShaderData struct ShaderData {
{
//! Shader data blocks //! Shader data blocks
std::list<ShaderDataBlock> blocks; std::list<ShaderDataBlock> blocks;
}; };
@ -190,7 +176,6 @@ struct ShaderData
*/ */
bool LoadShader(ShaderData &fill, const std::string &file, IOSystem *io); bool LoadShader(ShaderData &fill, const std::string &file, IOSystem *io);
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Convert a Q3Shader to an aiMaterial /** @brief Convert a Q3Shader to an aiMaterial
* *
@ -210,48 +195,42 @@ void ConvertShaderToMaterial(aiMaterial* out, const ShaderDataBlock& shader);
*/ */
bool LoadSkin(SkinData &fill, const std::string &file, IOSystem *io); bool LoadSkin(SkinData &fill, const std::string &file, IOSystem *io);
} // ! namespace Q3SHader } // namespace Q3Shader
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Importer class to load MD3 files /** @brief Importer class to load MD3 files
*/ */
class MD3Importer : public BaseImporter class MD3Importer : public BaseImporter {
{
public: public:
MD3Importer(); MD3Importer();
~MD3Importer(); ~MD3Importer() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer *pImp) override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Validate offsets in the header /** Validate offsets in the header
@ -287,7 +266,6 @@ protected:
std::string &out) const; std::string &out) const;
protected: protected:
/** Configuration option: frame to be loaded */ /** Configuration option: frame to be loaded */
unsigned int configFrameID; unsigned int configFrameID;

View File

@ -43,12 +43,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* @brief Definition of the .MD5 importer class. * @brief Definition of the .MD5 importer class.
* http://www.modwiki.net/wiki/MD5_(file_format) * http://www.modwiki.net/wiki/MD5_(file_format)
*/ */
#pragma once
#ifndef AI_MD5LOADER_H_INCLUDED #ifndef AI_MD5LOADER_H_INCLUDED
#define AI_MD5LOADER_H_INCLUDED #define AI_MD5LOADER_H_INCLUDED
#include "MD5Parser.h" #include "MD5Parser.h"
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/types.h> #include <assimp/types.h>
struct aiNode; struct aiNode;
@ -65,35 +65,35 @@ using namespace Assimp::MD5;
class MD5Importer : public BaseImporter { class MD5Importer : public BaseImporter {
public: public:
MD5Importer(); MD5Importer();
~MD5Importer(); ~MD5Importer() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer *pImp); void SetupProperties(const Importer *pImp) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Load a *.MD5MESH file. /** Load a *.MD5MESH file.

View File

@ -48,8 +48,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/types.h> #include <assimp/types.h>
#include <assimp/BaseImporter.h>
#include "MDCFileData.h" #include "MDCFileData.h"
#include <assimp/BaseImporter.h>
#include <assimp/ByteSwapper.h> #include <assimp/ByteSwapper.h>
namespace Assimp { namespace Assimp {
@ -59,45 +59,37 @@ using namespace MDC;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Importer class to load the RtCW MDC file format /** Importer class to load the RtCW MDC file format
*/ */
class MDCImporter : public BaseImporter class MDCImporter : public BaseImporter {
{
public: public:
MDCImporter(); MDCImporter();
~MDCImporter(); ~MDCImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer *pImp) override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Validate the header of the file /** Validate the header of the file
@ -110,8 +102,6 @@ protected:
void ValidateSurfaceHeader(BE_NCONST MDC::Surface *pcSurf); void ValidateSurfaceHeader(BE_NCONST MDC::Surface *pcSurf);
protected: protected:
/** Configuration option: frame to be loaded */ /** Configuration option: frame to be loaded */
unsigned int configFrameID; unsigned int configFrameID;

View File

@ -43,7 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file MDLLoader.h /** @file MDLLoader.h
* @brief Declaration of the loader for MDL files * @brief Declaration of the loader for MDL files
*/ */
#pragma once
#ifndef AI_MDLLOADER_H_INCLUDED #ifndef AI_MDLLOADER_H_INCLUDED
#define AI_MDLLOADER_H_INCLUDED #define AI_MDLLOADER_H_INCLUDED
@ -87,34 +87,34 @@ class MDLImporter : public BaseImporter
{ {
public: public:
MDLImporter(); MDLImporter();
~MDLImporter(); ~MDLImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer* pImp) override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Import a quake 1 MDL file (IDPO) /** Import a quake 1 MDL file (IDPO)

View File

@ -43,10 +43,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef ASSIMP_BUILD_NO_MDL_IMPORTER #ifndef ASSIMP_BUILD_NO_MDL_IMPORTER
// internal headers
#include "MDLDefaultColorMap.h" #include "MDLDefaultColorMap.h"
#include "MDLLoader.h" #include "MDLLoader.h"
#include <assimp/Defines.h>
#include <assimp/StringUtils.h> #include <assimp/StringUtils.h>
#include <assimp/qnan.h> #include <assimp/qnan.h>
#include <assimp/scene.h> #include <assimp/scene.h>

View File

@ -59,19 +59,19 @@ public:
MMDImporter(); MMDImporter();
/// \brief Destructor /// \brief Destructor
~MMDImporter(); ~MMDImporter() override;
public: public:
/// \brief Returns whether the class can handle the format of the given file. /// \brief Returns whether the class can handle the format of the given file.
/// \remark See BaseImporter::CanRead() for details. /// \remark See BaseImporter::CanRead() for details.
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
private: private:
//! \brief Appends the supported extension. //! \brief Appends the supported extension.
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo() const override;
//! \brief File import implementation. //! \brief File import implementation.
void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
//! \brief Create the data from imported content. //! \brief Create the data from imported content.
void CreateDataFromImport(const pmx::PmxModel* pModel, aiScene* pScene); void CreateDataFromImport(const pmx::PmxModel* pModel, aiScene* pScene);

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file MS3DLoader.h /** @file MS3DLoader.h
* @brief Declaration of the MS3D importer class. * @brief Declaration of the MS3D importer class.
*/ */
#pragma once
#ifndef AI_MS3DLOADER_H_INCLUDED #ifndef AI_MS3DLOADER_H_INCLUDED
#define AI_MS3DLOADER_H_INCLUDED #define AI_MS3DLOADER_H_INCLUDED
@ -55,60 +55,48 @@ namespace Assimp {
// ---------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------
/** Milkshape 3D importer implementation */ /** Milkshape 3D importer implementation */
// ---------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------
class MS3DImporter class MS3DImporter : public BaseImporter {
: public BaseImporter
{
public: public:
MS3DImporter(); MS3DImporter();
~MS3DImporter(); ~MS3DImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details */ * See #BaseImporter::GetInfo for the details */
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details */ * See BaseImporter::InternReadFile() for details */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
private: private:
struct TempJoint; struct TempJoint;
void CollectChildJoints(const std::vector<TempJoint> &joints, std::vector<bool> &hadit, aiNode *nd, const aiMatrix4x4 &absTrafo); void CollectChildJoints(const std::vector<TempJoint> &joints, std::vector<bool> &hadit, aiNode *nd, const aiMatrix4x4 &absTrafo);
void CollectChildJoints(const std::vector<TempJoint> &joints, aiNode *nd); void CollectChildJoints(const std::vector<TempJoint> &joints, aiNode *nd);
template<typename T> void ReadComments(StreamReaderLE& stream, std::vector<T>& outp); template <typename T>
private: void ReadComments(StreamReaderLE &stream, std::vector<T> &outp);
private:
aiScene *mScene; aiScene *mScene;
private: private:
struct TempVertex {
struct TempVertex
{
aiVector3D pos; aiVector3D pos;
unsigned int bone_id[4], ref_cnt; unsigned int bone_id[4], ref_cnt;
float weights[4]; float weights[4];
}; };
struct TempTriangle struct TempTriangle {
{
unsigned int indices[3]; unsigned int indices[3];
aiVector3D normals[3]; aiVector3D normals[3];
aiVector2D uv[3]; aiVector2D uv[3];
@ -116,16 +104,14 @@ private:
unsigned int sg, group; unsigned int sg, group;
}; };
struct TempGroup struct TempGroup {
{
char name[33]; // +0 char name[33]; // +0
std::vector<unsigned int> triangles; std::vector<unsigned int> triangles;
unsigned int mat; // 0xff is no material unsigned int mat; // 0xff is no material
std::string comment; std::string comment;
}; };
struct TempMaterial struct TempMaterial {
{
// again, add an extra 0 character to all strings - // again, add an extra 0 character to all strings -
char name[33]; char name[33];
char texture[129]; char texture[129];
@ -136,14 +122,12 @@ private:
std::string comment; std::string comment;
}; };
struct TempKeyFrame struct TempKeyFrame {
{
float time; float time;
aiVector3D value; aiVector3D value;
}; };
struct TempJoint struct TempJoint {
{
char name[33]; char name[33];
char parentName[33]; char parentName[33];
aiVector3D rotation, position; aiVector3D rotation, position;
@ -158,5 +142,5 @@ private:
//}; //};
}; };
} } // namespace Assimp
#endif #endif

View File

@ -44,13 +44,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef INCLUDED_AI_NDO_LOADER_H #ifndef INCLUDED_AI_NDO_LOADER_H
#define INCLUDED_AI_NDO_LOADER_H #define INCLUDED_AI_NDO_LOADER_H
#include <assimp/vector3.h>
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <stdint.h> #include <assimp/vector3.h>
#include <cstdint>
#include <string> #include <string>
#include <vector> #include <vector>
struct aiImporterDesc; struct aiImporterDesc;
struct aiScene; struct aiScene;
@ -64,38 +63,30 @@ namespace Assimp {
* Basing on * Basing on
* <blender>/blender/release/scripts/nendo_import.py by Anthony D'Agostino. * <blender>/blender/release/scripts/nendo_import.py by Anthony D'Agostino.
*/ */
class NDOImporter : public BaseImporter class NDOImporter : public BaseImporter {
{
public: public:
NDOImporter(); NDOImporter();
~NDOImporter(); ~NDOImporter() override;
public:
//! Represents a single edge //! Represents a single edge
struct Edge struct Edge {
{
unsigned int edge[8]; unsigned int edge[8];
unsigned int hard; unsigned int hard;
uint8_t color[8]; uint8_t color[8];
}; };
//! Represents a single face //! Represents a single face
struct Face struct Face {
{
unsigned int elem; unsigned int elem;
}; };
struct Vertex struct Vertex {
{
unsigned int num; unsigned int num;
aiVector3D val; aiVector3D val;
}; };
//! Represents a single object //! Represents a single object
struct Object struct Object {
{
std::string name; std::string name;
std::vector<Edge> edges; std::vector<Edge> edges;
@ -105,22 +96,21 @@ public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// -------------------------------------------------------------------
const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
const aiImporterDesc* GetInfo () const; void SetupProperties(const Importer *pImp) override;
// -------------------------------------------------------------------
void SetupProperties(const Importer* pImp);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
private:
}; // end of class NDOImporter }; // end of class NDOImporter
} // end of namespace Assimp } // end of namespace Assimp
#endif // INCLUDED_AI_NDO_LOADER_H #endif // INCLUDED_AI_NDO_LOADER_H

View File

@ -43,15 +43,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file NFFLoader.h /** @file NFFLoader.h
* @brief Declaration of the NFF importer class. * @brief Declaration of the NFF importer class.
*/ */
#pragma once
#ifndef AI_NFFLOADER_H_INCLUDED #ifndef AI_NFFLOADER_H_INCLUDED
#define AI_NFFLOADER_H_INCLUDED #define AI_NFFLOADER_H_INCLUDED
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/types.h>
#include <assimp/material.h> #include <assimp/material.h>
#include <assimp/types.h>
#include <vector> #include <vector>
namespace Assimp { namespace Assimp {
// ---------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------
@ -61,67 +61,56 @@ namespace Assimp {
* Both are quite different and the loading code is somewhat dirty at * Both are quite different and the loading code is somewhat dirty at
* the moment. Sense8 should be moved to a separate loader. * the moment. Sense8 should be moved to a separate loader.
*/ */
class NFFImporter : public BaseImporter class NFFImporter : public BaseImporter {
{
public: public:
NFFImporter(); NFFImporter();
~NFFImporter(); ~NFFImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
private: private:
// describes face material properties // describes face material properties
struct ShadingInfo struct ShadingInfo {
{ ShadingInfo() :
ShadingInfo() color(0.6f, 0.6f, 0.6f),
: color (0.6f,0.6f,0.6f) diffuse(1.f, 1.f, 1.f),
, diffuse (1.f,1.f,1.f) specular(1.f, 1.f, 1.f),
, specular (1.f,1.f,1.f) ambient(0.f, 0.f, 0.f),
, ambient (0.f,0.f,0.f) emissive(0.f, 0.f, 0.f),
, emissive (0.f,0.f,0.f) refracti(1.f),
, refracti (1.f) twoSided(false), // for NFF2
, twoSided (false) // for NFF2 shaded(true), // for NFF2
, shaded (true) // for NFF2 opacity(1.f),
, opacity (1.f) shininess(0.f),
, shininess (0.f) mapping(aiTextureMapping_UV) {
, mapping (aiTextureMapping_UV) // empty
{} }
aiColor3D color, diffuse, specular, ambient, emissive; aiColor3D color, diffuse, specular, ambient, emissive;
ai_real refracti; ai_real refracti;
std::string texFile; std::string texFile;
bool twoSided; // For NFF2
// For NFF2
bool twoSided;
bool shaded; bool shaded;
ai_real opacity, shininess; ai_real opacity, shininess;
std::string name; std::string name;
// texture mapping to be generated for the mesh - uv is the default // texture mapping to be generated for the mesh - uv is the default
@ -130,8 +119,7 @@ private:
aiTextureMapping mapping; aiTextureMapping mapping;
// shininess is ignored for the moment // shininess is ignored for the moment
bool operator == (const ShadingInfo& other) const bool operator == (const ShadingInfo &other) const {
{
return color == other.color && return color == other.color &&
diffuse == other.diffuse && diffuse == other.diffuse &&
specular == other.specular && specular == other.specular &&
@ -147,35 +135,25 @@ private:
}; };
// describes a NFF light source // describes a NFF light source
struct Light struct Light {
{ Light() :
Light() intensity(1.f), color(1.f, 1.f, 1.f) {}
: intensity (1.f)
, color (1.f,1.f,1.f)
{}
aiVector3D position; aiVector3D position;
ai_real intensity; ai_real intensity;
aiColor3D color; aiColor3D color;
}; };
enum PatchType enum PatchType {
{
PatchType_Simple = 0x0, PatchType_Simple = 0x0,
PatchType_Normals = 0x1, PatchType_Normals = 0x1,
PatchType_UVAndNormals = 0x2 PatchType_UVAndNormals = 0x2
}; };
// describes a NFF mesh // describes a NFF mesh
struct MeshInfo struct MeshInfo {
{ MeshInfo(PatchType _pType, bool bL = false) :
MeshInfo(PatchType _pType, bool bL = false) pType(_pType), bLocked(bL), radius(1.f, 1.f, 1.f), dir(0.f, 1.f, 0.f), matIndex(0) {
: pType (_pType)
, bLocked (bL)
, radius (1.f,1.f,1.f)
, dir (0.f,1.f,0.f)
, matIndex (0)
{
name[0] = '\0'; // by default meshes are unnamed name[0] = '\0'; // by default meshes are unnamed
} }
@ -196,7 +174,6 @@ private:
unsigned int matIndex; unsigned int matIndex;
}; };
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Loads the material table for the NFF2 file format from an /** Loads the material table for the NFF2 file format from an
* external file. * external file.
@ -207,7 +184,6 @@ private:
*/ */
void LoadNFF2MaterialTable(std::vector<ShadingInfo> &output, void LoadNFF2MaterialTable(std::vector<ShadingInfo> &output,
const std::string &path, IOSystem *pIOHandler); const std::string &path, IOSystem *pIOHandler);
}; };
} // end of namespace Assimp } // end of namespace Assimp

View File

@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file OFFLoader.h /** @file OFFLoader.h
* @brief Declaration of the OFF importer class. * @brief Declaration of the OFF importer class.
*/ */
#pragma once
#ifndef AI_OFFLOADER_H_INCLUDED #ifndef AI_OFFLOADER_H_INCLUDED
#define AI_OFFLOADER_H_INCLUDED #define AI_OFFLOADER_H_INCLUDED
@ -55,38 +55,30 @@ namespace Assimp {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Importer class for the Object File Format (.off) /** Importer class for the Object File Format (.off)
*/ */
class OFFImporter : public BaseImporter class OFFImporter : public BaseImporter {
{
public: public:
OFFImporter(); OFFImporter();
~OFFImporter(); ~OFFImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem* pIOHandler); IOSystem *pIOHandler) override;
private:
}; };
} // end of namespace Assimp } // end of namespace Assimp

View File

@ -60,7 +60,7 @@ struct Material;
//! \brief Data structure for a simple obj-face, describes discredit,l.ation and materials //! \brief Data structure for a simple obj-face, describes discredit,l.ation and materials
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
struct Face { struct Face {
typedef std::vector<unsigned int> IndexArray; using IndexArray = std::vector<unsigned int>;
//! Primitive type //! Primitive type
aiPrimitiveType m_PrimitiveType; aiPrimitiveType m_PrimitiveType;
@ -122,7 +122,6 @@ struct Object {
struct Material { struct Material {
//! Name of material description //! Name of material description
aiString MaterialName; aiString MaterialName;
//! Texture names //! Texture names
aiString texture; aiString texture;
aiString textureSpecular; aiString textureSpecular;
@ -237,9 +236,9 @@ struct Mesh {
//! \brief Data structure to store all obj-specific model datas //! \brief Data structure to store all obj-specific model datas
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
struct Model { struct Model {
typedef std::map<std::string, std::vector<unsigned int> *> GroupMap; using GroupMap = std::map<std::string, std::vector<unsigned int> *>;
typedef std::map<std::string, std::vector<unsigned int> *>::iterator GroupMapIt; using GroupMapIt = std::map<std::string, std::vector<unsigned int> *>::iterator;
typedef std::map<std::string, std::vector<unsigned int> *>::const_iterator ConstGroupMapIt; using ConstGroupMapIt = std::map<std::string, std::vector<unsigned int> *>::const_iterator;
//! Model name //! Model name
std::string m_ModelName; std::string m_ModelName;
@ -278,12 +277,12 @@ struct Model {
//! \brief The default class constructor //! \brief The default class constructor
Model() : Model() :
m_ModelName(""), m_ModelName(),
m_pCurrent(nullptr), m_pCurrent(nullptr),
m_pCurrentMaterial(nullptr), m_pCurrentMaterial(nullptr),
m_pDefaultMaterial(nullptr), m_pDefaultMaterial(nullptr),
m_pGroupFaceIDs(nullptr), m_pGroupFaceIDs(nullptr),
m_strActiveGroup(""), m_strActiveGroup(),
m_TextureCoordDim(0), m_TextureCoordDim(0),
m_pCurrentMesh(nullptr) { m_pCurrentMesh(nullptr) {
// empty // empty
@ -291,27 +290,17 @@ struct Model {
//! \brief The class destructor //! \brief The class destructor
~Model() { ~Model() {
// Clear all stored object instances for (auto & it : m_Objects) {
for (std::vector<Object *>::iterator it = m_Objects.begin(); delete it;
it != m_Objects.end(); ++it) {
delete *it;
} }
m_Objects.clear(); for (auto & Meshe : m_Meshes) {
delete Meshe;
// Clear all stored mesh instances
for (std::vector<Mesh *>::iterator it = m_Meshes.begin();
it != m_Meshes.end(); ++it) {
delete *it;
} }
m_Meshes.clear(); for (auto & Group : m_Groups) {
delete Group.second;
for (GroupMapIt it = m_Groups.begin(); it != m_Groups.end(); ++it) {
delete it->second;
} }
m_Groups.clear(); for (auto & it : m_MaterialMap) {
delete it.second;
for (std::map<std::string, Material *>::iterator it = m_MaterialMap.begin(); it != m_MaterialMap.end(); ++it) {
delete it->second;
} }
} }
}; };

View File

@ -38,6 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
#pragma once
#ifndef OBJ_FILE_IMPORTER_H_INC #ifndef OBJ_FILE_IMPORTER_H_INC
#define OBJ_FILE_IMPORTER_H_INC #define OBJ_FILE_IMPORTER_H_INC
@ -65,19 +66,18 @@ public:
ObjFileImporter(); ObjFileImporter();
/// \brief Destructor /// \brief Destructor
~ObjFileImporter(); ~ObjFileImporter() override;
public:
/// \brief Returns whether the class can handle the format of the given file. /// \brief Returns whether the class can handle the format of the given file.
/// \remark See BaseImporter::CanRead() for details. /// \remark See BaseImporter::CanRead() for details.
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const; bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
private: protected:
//! \brief Appends the supported extension. //! \brief Appends the supported extension.
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
//! \brief File import implementation. //! \brief File import implementation.
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler); void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
//! \brief Create the data from imported content. //! \brief Create the data from imported content.
void CreateDataFromImport(const ObjFile::Model *pModel, aiScene *pScene); void CreateDataFromImport(const ObjFile::Model *pModel, aiScene *pScene);

View File

@ -61,9 +61,9 @@ struct Material;
class ObjFileMtlImporter { class ObjFileMtlImporter {
public: public:
static const size_t BUFFERSIZE = 2048; static const size_t BUFFERSIZE = 2048;
typedef std::vector<char> DataArray; using DataArray = std::vector<char>;
typedef std::vector<char>::iterator DataArrayIt; using DataArrayIt = std::vector<char>::iterator;
typedef std::vector<char>::const_iterator ConstDataArrayIt; using ConstDataArrayIt = std::vector<char>::const_iterator;
//! \brief The class default constructor //! \brief The class default constructor
ObjFileMtlImporter(std::vector<char> &buffer, const std::string &strAbsPath, ObjFileMtlImporter(std::vector<char> &buffer, const std::string &strAbsPath,

View File

@ -73,7 +73,6 @@ public:
typedef std::vector<char>::iterator DataArrayIt; typedef std::vector<char>::iterator DataArrayIt;
typedef std::vector<char>::const_iterator ConstDataArrayIt; typedef std::vector<char>::const_iterator ConstDataArrayIt;
public:
/// @brief The default constructor. /// @brief The default constructor.
ObjFileParser(); ObjFileParser();
/// @brief Constructor with data array. /// @brief Constructor with data array.

View File

@ -81,11 +81,11 @@ bool OgreImporter::CanRead(const std::string &pFile, Assimp::IOSystem *pIOHandle
if (EndsWith(pFile, ".mesh.xml", false)) { if (EndsWith(pFile, ".mesh.xml", false)) {
static const char * const tokens[] = { "<mesh>" }; static const char * const tokens[] = { "<mesh>" };
return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1); return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1);
} else { }
/// @todo Read and validate first header chunk? /// @todo Read and validate first header chunk?
return EndsWith(pFile, ".mesh", false); return EndsWith(pFile, ".mesh", false);
} }
}
void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Assimp::IOSystem *pIOHandler) { void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Assimp::IOSystem *pIOHandler) {
// Open source file // Open source file
@ -110,9 +110,9 @@ void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Ass
// Convert to Assimp // Convert to Assimp
mesh->ConvertToAssimpScene(pScene); mesh->ConvertToAssimpScene(pScene);
return;
} }
// XML .mesh.xml import // XML .mesh.xml import
else {
/// @note XmlReader does not take ownership of f, hence the scoped ptr. /// @note XmlReader does not take ownership of f, hence the scoped ptr.
std::unique_ptr<IOStream> scopedFile(f); std::unique_ptr<IOStream> scopedFile(f);
XmlParser xmlParser; XmlParser xmlParser;
@ -132,7 +132,6 @@ void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Ass
// Convert to Assimp // Convert to Assimp
mesh->ConvertToAssimpScene(pScene); mesh->ConvertToAssimpScene(pScene);
} }
}
} // namespace Ogre } // namespace Ogre
} // namespace Assimp } // namespace Assimp

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -39,42 +38,39 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
#pragma once
#ifndef AI_OGREIMPORTER_H_INC #ifndef AI_OGREIMPORTER_H_INC
#define AI_OGREIMPORTER_H_INC #define AI_OGREIMPORTER_H_INC
#ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include "OgreStructs.h"
#include "OgreParsingUtils.h"
#include <assimp/material.h> #include <assimp/material.h>
namespace Assimp #include "OgreParsingUtils.h"
{ #include "OgreStructs.h"
namespace Ogre
{ namespace Assimp {
namespace Ogre {
/** Importer for Ogre mesh, skeleton and material formats. /** Importer for Ogre mesh, skeleton and material formats.
@todo Support vertex colors. @todo Support vertex colors.
@todo Support poses/animations from the mesh file. @todo Support poses/animations from the mesh file.
Currently only skeleton file animations are supported. */ Currently only skeleton file animations are supported. */
class OgreImporter : public BaseImporter class OgreImporter : public BaseImporter {
{
public: public:
/// BaseImporter override. /// BaseImporter override.
virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const; virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
protected:
/// BaseImporter override.
virtual void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
/// BaseImporter override. /// BaseImporter override.
virtual void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler); virtual const aiImporterDesc *GetInfo() const override;
/// BaseImporter override. /// BaseImporter override.
virtual const aiImporterDesc *GetInfo() const; virtual void SetupProperties(const Importer *pImp) override;
/// BaseImporter override.
virtual void SetupProperties(const Importer *pImp);
private: private:
/// Read materials referenced by the @c mesh to @c pScene. /// Read materials referenced by the @c mesh to @c pScene.
@ -90,13 +86,13 @@ private:
bool ReadPass(const std::string &passName, std::stringstream &ss, aiMaterial *material); bool ReadPass(const std::string &passName, std::stringstream &ss, aiMaterial *material);
bool ReadTextureUnit(const std::string &textureUnitName, std::stringstream &ss, aiMaterial *material); bool ReadTextureUnit(const std::string &textureUnitName, std::stringstream &ss, aiMaterial *material);
private:
std::string m_userDefinedMaterialLibFile; std::string m_userDefinedMaterialLibFile;
bool m_detectTextureTypeFromFilename; bool m_detectTextureTypeFromFilename;
std::map<aiTextureType, unsigned int> m_textures; std::map<aiTextureType, unsigned int> m_textures;
}; };
} // Ogre } // namespace Ogre
} // Assimp } // namespace Assimp
#endif // ASSIMP_BUILD_NO_OGRE_IMPORTER #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
#endif // AI_OGREIMPORTER_H_INC #endif // AI_OGREIMPORTER_H_INC

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -39,6 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
#pragma once
#ifndef AI_OPENGEX_EXPORTER_H #ifndef AI_OPENGEX_EXPORTER_H
#define AI_OPENGEX_EXPORTER_H #define AI_OPENGEX_EXPORTER_H

View File

@ -47,14 +47,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/StringComparison.h> #include <assimp/StringComparison.h>
#include <assimp/StringUtils.h> #include <assimp/StringUtils.h>
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>
#include <assimp/ai_assert.h> #include <assimp/ai_assert.h>
#include <assimp/importerdesc.h> #include <assimp/importerdesc.h>
#include <assimp/scene.h> #include <assimp/scene.h>
#include <openddlparser/OpenDDLParser.h> #include <openddlparser/OpenDDLParser.h>
#include <vector>
static const aiImporterDesc desc = { static const aiImporterDesc desc = {
"Open Game Engine Exchange", "Open Game Engine Exchange",
"", "",
@ -290,7 +287,6 @@ OpenGEXImporter::OpenGEXImporter() :
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
OpenGEXImporter::~OpenGEXImporter() { OpenGEXImporter::~OpenGEXImporter() {
m_ctx = nullptr;
} }
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------

View File

@ -39,6 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
#pragma once
#ifndef AI_OPENGEX_IMPORTER_H #ifndef AI_OPENGEX_IMPORTER_H
#define AI_OPENGEX_IMPORTER_H #define AI_OPENGEX_IMPORTER_H
@ -96,21 +97,21 @@ public:
OpenGEXImporter(); OpenGEXImporter();
/// The class destructor. /// The class destructor.
virtual ~OpenGEXImporter(); ~OpenGEXImporter() override;
/// BaseImporter override. /// BaseImporter override.
virtual bool CanRead( const std::string &file, IOSystem *pIOHandler, bool checkSig ) const; bool CanRead( const std::string &file, IOSystem *pIOHandler, bool checkSig ) const override;
/// BaseImporter override.
virtual void InternReadFile( const std::string &file, aiScene *pScene, IOSystem *pIOHandler );
/// BaseImporter override.
virtual const aiImporterDesc *GetInfo() const;
/// BaseImporter override.
virtual void SetupProperties( const Importer *pImp );
protected: protected:
/// BaseImporter override.
void InternReadFile( const std::string &file, aiScene *pScene, IOSystem *pIOHandler ) override;
/// BaseImporter override.
virtual const aiImporterDesc *GetInfo() const override;
/// BaseImporter override.
virtual void SetupProperties( const Importer *pImp ) override;
void handleNodes( ODDLParser::DDLNode *node, aiScene *pScene ); void handleNodes( ODDLParser::DDLNode *node, aiScene *pScene );
void handleMetricNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleMetricNode( ODDLParser::DDLNode *node, aiScene *pScene );
void handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene ); void handleNameNode( ODDLParser::DDLNode *node, aiScene *pScene );
@ -176,15 +177,15 @@ private:
}; };
struct ChildInfo { struct ChildInfo {
typedef std::list<aiNode*> NodeList; using NodeList = std::list<aiNode*>;
std::list<aiNode*> m_children; std::list<aiNode*> m_children;
}; };
ChildInfo *m_root; ChildInfo *m_root;
typedef std::map<aiNode*, std::unique_ptr<ChildInfo> > NodeChildMap; using NodeChildMap = std::map<aiNode*, std::unique_ptr<ChildInfo> >;
NodeChildMap m_nodeChildMap; NodeChildMap m_nodeChildMap;
std::vector<std::unique_ptr<aiMesh> > m_meshCache; std::vector<std::unique_ptr<aiMesh> > m_meshCache;
typedef std::map<std::string, size_t> ReferenceMap; using ReferenceMap = std::map<std::string, size_t>;
std::map<std::string, size_t> m_mesh2refMap; std::map<std::string, size_t> m_mesh2refMap;
std::map<std::string, size_t> m_material2refMap; std::map<std::string, size_t> m_material2refMap;

View File

@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file PLYLoader.h /** @file PLYLoader.h
* @brief Declaration of the .ply importer class. * @brief Declaration of the .ply importer class.
*/ */
#pragma once
#ifndef AI_PLYLOADER_H_INCLUDED #ifndef AI_PLYLOADER_H_INCLUDED
#define AI_PLYLOADER_H_INCLUDED #define AI_PLYLOADER_H_INCLUDED
@ -64,14 +65,14 @@ using namespace PLY;
class PLYImporter : public BaseImporter { class PLYImporter : public BaseImporter {
public: public:
PLYImporter(); PLYImporter();
~PLYImporter(); ~PLYImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Extract a vertex from the DOM /** Extract a vertex from the DOM
@ -88,14 +89,14 @@ protected:
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Extract a material list from the DOM /** Extract a material list from the DOM

View File

@ -48,8 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/IOStreamBuffer.h> #include <assimp/IOStreamBuffer.h>
#include <vector> #include <vector>
namespace Assimp namespace Assimp {
{
//pre-declaration //pre-declaration
class PLYImporter; class PLYImporter;

View File

@ -146,9 +146,6 @@ Q3BSPFileImporter::Q3BSPFileImporter() :
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Destructor. // Destructor.
Q3BSPFileImporter::~Q3BSPFileImporter() { Q3BSPFileImporter::~Q3BSPFileImporter() {
m_pCurrentMesh = nullptr;
m_pCurrentFace = nullptr;
// Clear face-to-material map // Clear face-to-material map
for (FaceMap::iterator it = m_MaterialLookupMap.begin(); it != m_MaterialLookupMap.end(); ++it) { for (FaceMap::iterator it = m_MaterialLookupMap.begin(); it != m_MaterialLookupMap.end(); ++it) {
const std::string &matName = it->first; const std::string &matName = it->first;
@ -156,7 +153,6 @@ Q3BSPFileImporter::~Q3BSPFileImporter() {
delete it->second; delete it->second;
} }
} }
m_MaterialLookupMap.clear();
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -71,19 +70,19 @@ public:
Q3BSPFileImporter(); Q3BSPFileImporter();
/// @brief Destructor. /// @brief Destructor.
~Q3BSPFileImporter(); ~Q3BSPFileImporter() override;
/// @brief Returns whether the class can handle the format of the given file. /// @brief Returns whether the class can handle the format of the given file.
/// @remark See BaseImporter::CanRead() for details. /// @remark See BaseImporter::CanRead() for details.
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const; bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const override;
protected: protected:
typedef std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*> FaceMap; using FaceMap = std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*>;
typedef std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>* >::iterator FaceMapIt; using FaceMapIt = std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>* >::iterator;
typedef std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*>::const_iterator FaceMapConstIt; using FaceMapConstIt = std::map<std::string, std::vector<Q3BSP::sQ3BSPFace*>*>::const_iterator;
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
void separateMapName( const std::string &rImportName, std::string &rArchiveName, std::string &rMapName ); void separateMapName( const std::string &rImportName, std::string &rArchiveName, std::string &rMapName );
bool findFirstMapInArchive(ZipArchiveIOSystem &rArchive, std::string &rMapName ); bool findFirstMapInArchive(ZipArchiveIOSystem &rArchive, std::string &rMapName );
void CreateDataFromImport( const Q3BSP::Q3BSPModel *pModel, aiScene* pScene, ZipArchiveIOSystem *pArchive ); void CreateDataFromImport( const Q3BSP::Q3BSPModel *pModel, aiScene* pScene, ZipArchiveIOSystem *pArchive );

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -78,7 +77,6 @@ Q3BSPFileParser::Q3BSPFileParser( const std::string &mapName, ZipArchiveIOSystem
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
Q3BSPFileParser::~Q3BSPFileParser() { Q3BSPFileParser::~Q3BSPFileParser() {
delete m_pModel; delete m_pModel;
m_pModel = nullptr;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -57,9 +56,9 @@ namespace Q3BSP
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/// @brief This class implements th Q3DSP file parsing.
// ------------------------------------------------------------------- // -------------------------------------------------------------------
class Q3BSPFileParser class Q3BSPFileParser {
{
public: public:
Q3BSPFileParser( const std::string &rMapName, ZipArchiveIOSystem *pZipArchive ); Q3BSPFileParser( const std::string &rMapName, ZipArchiveIOSystem *pZipArchive );
~Q3BSPFileParser(); ~Q3BSPFileParser();

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -36,80 +35,66 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
/** @file Q3DLoader.h /** @file Q3DLoader.h
* @brief Declaration of the Q3D importer class. * @brief Declaration of the Q3D importer class.
*/ */
#pragma once
#ifndef AI_Q3DLOADER_H_INCLUDED #ifndef AI_Q3DLOADER_H_INCLUDED
#define AI_Q3DLOADER_H_INCLUDED #define AI_Q3DLOADER_H_INCLUDED
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/types.h> #include <assimp/types.h>
#include <vector> #include <vector>
#include <stdint.h> #include <cstdint>
namespace Assimp { namespace Assimp {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Importer class for the Quick3D Object and Scene formats. /** Importer class for the Quick3D Object and Scene formats.
*/ */
class Q3DImporter : public BaseImporter class Q3DImporter : public BaseImporter {
{
public: public:
Q3DImporter(); Q3DImporter();
~Q3DImporter(); ~Q3DImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
private: private:
struct Material {
struct Material Material() : diffuse(0.6f,0.6f,0.6f), transparency(0.f), texIdx(UINT_MAX) {
{ // empty
Material() }
: diffuse (0.6f,0.6f,0.6f)
, transparency (0.f)
, texIdx (UINT_MAX)
{}
aiString name; aiString name;
aiColor3D ambient, diffuse, specular; aiColor3D ambient, diffuse, specular;
float transparency; float transparency;
unsigned int texIdx; unsigned int texIdx;
}; };
struct Face struct Face {
{ explicit Face(unsigned int s) : indices(s), uvindices(s), mat(0) {
explicit Face(unsigned int s) // empty
: indices (s)
, uvindices (s)
, mat (0)
{
} }
std::vector<unsigned int> indices; std::vector<unsigned int> indices;
@ -117,14 +102,11 @@ private:
unsigned int mat; unsigned int mat;
}; };
struct Mesh struct Mesh {
{
std::vector<aiVector3D> verts; std::vector<aiVector3D> verts;
std::vector<aiVector3D> normals; std::vector<aiVector3D> normals;
std::vector<aiVector3D> uv; std::vector<aiVector3D> uv;
std::vector<Face> faces; std::vector<Face> faces;
uint32_t prevUVIdx; uint32_t prevUVIdx;
}; };
}; };

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file RAWLoader.h /** @file RAWLoader.h
* @brief Declaration of the RAW importer class. * @brief Declaration of the RAW importer class.
*/ */
#pragma once
#ifndef AI_RAWLOADER_H_INCLUDED #ifndef AI_RAWLOADER_H_INCLUDED
#define AI_RAWLOADER_H_INCLUDED #define AI_RAWLOADER_H_INCLUDED
@ -55,59 +55,46 @@ namespace Assimp {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Importer class for the PovRay RAW triangle format /** Importer class for the PovRay RAW triangle format
*/ */
class RAWImporter : public BaseImporter class RAWImporter : public BaseImporter {
{
public: public:
RAWImporter(); RAWImporter();
~RAWImporter(); ~RAWImporter();
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
private: private:
struct MeshInformation {
struct MeshInformation explicit MeshInformation(const std::string& _name) : name(_name) {
{
explicit MeshInformation(const std::string& _name)
: name(_name)
{
vertices.reserve(100); vertices.reserve(100);
colors.reserve(100); colors.reserve(100);
} }
std::string name; std::string name;
std::vector<aiVector3D> vertices; std::vector<aiVector3D> vertices;
std::vector<aiColor4D> colors; std::vector<aiColor4D> colors;
}; };
struct GroupInformation struct GroupInformation {
{ explicit GroupInformation(const std::string& _name) : name(_name) {
explicit GroupInformation(const std::string& _name)
: name(_name)
{
meshes.reserve(10); meshes.reserve(10);
} }

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file SIBImporter.h /** @file SIBImporter.h
* @brief Declaration of the SIB importer class. * @brief Declaration of the SIB importer class.
*/ */
#pragma once
#ifndef AI_SIBIMPORTER_H_INCLUDED #ifndef AI_SIBIMPORTER_H_INCLUDED
#define AI_SIBIMPORTER_H_INCLUDED #define AI_SIBIMPORTER_H_INCLUDED
@ -55,55 +55,46 @@ namespace Assimp {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Importer class for the Nevercenter Silo SIB scene format /** Importer class for the Nevercenter Silo SIB scene format
*/ */
class ASSIMP_API SIBImporter : public BaseImporter class ASSIMP_API SIBImporter : public BaseImporter {
{
public: public:
SIBImporter(); SIBImporter();
~SIBImporter(); ~SIBImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
private: private:
struct MeshInformation struct MeshInformation {
{ explicit MeshInformation(const std::string& _name) : name(_name) {
explicit MeshInformation(const std::string& _name)
: name(_name)
{
vertices.reserve(100); vertices.reserve(100);
colors.reserve(100); colors.reserve(100);
} }
std::string name; std::string name;
std::vector<aiVector3D> vertices; std::vector<aiVector3D> vertices;
std::vector<aiColor4D> colors; std::vector<aiColor4D> colors;
}; };
struct GroupInformation struct GroupInformation {
{ explicit GroupInformation(const std::string& _name) : name(_name) {
explicit GroupInformation(const std::string& _name)
: name(_name)
{
meshes.reserve(10); meshes.reserve(10);
} }

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -44,24 +43,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* @brief Definition of the Valve SMD file format * @brief Definition of the Valve SMD file format
*/ */
#pragma once
#ifndef AI_SMDLOADER_H_INCLUDED #ifndef AI_SMDLOADER_H_INCLUDED
#define AI_SMDLOADER_H_INCLUDED #define AI_SMDLOADER_H_INCLUDED
// internal headers
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/ParsingUtils.h> #include <assimp/ParsingUtils.h>
// public Assimp headers
#include <assimp/types.h> #include <assimp/types.h>
#include <assimp/texture.h> #include <assimp/texture.h>
#include <assimp/anim.h> #include <assimp/anim.h>
#include <assimp/material.h> #include <assimp/material.h>
struct aiNode;
// STL headers
#include <vector> #include <vector>
struct aiNode;
namespace Assimp { namespace Assimp {
namespace SMD { namespace SMD {
@ -69,8 +65,7 @@ namespace SMD {
/** Data structure for a vertex in a SMD file /** Data structure for a vertex in a SMD file
*/ */
struct Vertex { struct Vertex {
Vertex() AI_NO_EXCEPT Vertex() AI_NO_EXCEPT : iParentNode(UINT_MAX) {
: iParentNode(UINT_MAX) {
// empty // empty
} }
@ -91,9 +86,8 @@ struct Vertex {
/** Data structure for a face in a SMD file /** Data structure for a face in a SMD file
*/ */
struct Face { struct Face {
Face() AI_NO_EXCEPT Face() AI_NO_EXCEPT :
: iTexture(0x0) iTexture(0x0), avVertices{} {
, avVertices{} {
// empty // empty
} }
@ -109,17 +103,10 @@ struct Face {
*/ */
struct Bone { struct Bone {
//! Default constructor //! Default constructor
Bone() AI_NO_EXCEPT Bone() AI_NO_EXCEPT : iParent(UINT_MAX), bIsUsed(false) {
: iParent(UINT_MAX)
, bIsUsed(false) {
// empty // empty
} }
//! Destructor
~Bone()
{
}
//! Name of the bone //! Name of the bone
std::string mName; std::string mName;
@ -129,14 +116,12 @@ struct Bone {
//! Animation of the bone //! Animation of the bone
struct Animation { struct Animation {
//! Public default constructor //! Public default constructor
Animation() AI_NO_EXCEPT Animation() AI_NO_EXCEPT : iFirstTimeKey() {
: iFirstTimeKey() {
asKeys.reserve(20); asKeys.reserve(20);
} }
//! Data structure for a matrix key //! Data structure for a matrix key
struct MatrixKey struct MatrixKey {
{
//! Matrix at this time //! Matrix at this time
aiMatrix4x4 matrix; aiMatrix4x4 matrix;
@ -174,46 +159,38 @@ struct Bone {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Used to load Half-life 1 and 2 SMD models /** Used to load Half-life 1 and 2 SMD models
*/ */
class ASSIMP_API SMDImporter : public BaseImporter class ASSIMP_API SMDImporter : public BaseImporter {
{
public: public:
SMDImporter(); SMDImporter();
~SMDImporter(); ~SMDImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer* pImp) override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Parse the SMD file and create the output scene /** Parse the SMD file and create the output scene
@ -405,7 +382,7 @@ private:
*/ */
bool bHasUVs; bool bHasUVs;
/** Current line numer /** Current line number
*/ */
unsigned int iLineNumber; unsigned int iLineNumber;

View File

@ -43,6 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file STLExporter.h /** @file STLExporter.h
* Declares the exporter class to write a scene to a Stereolithography (STL) file * Declares the exporter class to write a scene to a Stereolithography (STL) file
*/ */
#pragma once
#ifndef AI_STLEXPORTER_H_INC #ifndef AI_STLEXPORTER_H_INC
#define AI_STLEXPORTER_H_INC #define AI_STLEXPORTER_H_INC
@ -57,13 +58,12 @@ namespace Assimp {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
/** Helper class to export a given scene to a STL file. */ /** Helper class to export a given scene to a STL file. */
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
class STLExporter class STLExporter {
{
public: public:
/// Constructor for a specific scene to export /// Constructor for a specific scene to export
STLExporter(const char *filename, const aiScene *pScene, bool exportPOintClouds, bool binary = false); STLExporter(const char *filename, const aiScene *pScene, bool exportPOintClouds, bool binary = false);
/// public stringstreams to write all output into /// public string-streams to write all output into
std::ostringstream mOutput; std::ostringstream mOutput;
private: private:
@ -72,13 +72,10 @@ private:
void WriteMeshBinary(const aiMesh *m); void WriteMeshBinary(const aiMesh *m);
private: private:
const std::string filename; const std::string filename;
// this endl() doesn't flush() the stream
const std::string endl; const std::string endl;
}; };
} } // namespace Assimp
#endif #endif

View File

@ -43,7 +43,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef ASSIMP_BUILD_NO_STL_IMPORTER #ifndef ASSIMP_BUILD_NO_STL_IMPORTER
// internal headers
#include "STLLoader.h" #include "STLLoader.h"
#include <assimp/ParsingUtils.h> #include <assimp/ParsingUtils.h>
#include <assimp/fast_atof.h> #include <assimp/fast_atof.h>
@ -146,7 +145,9 @@ bool STLImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool c
if (extension == "stl") { if (extension == "stl") {
return true; return true;
} else if (!extension.length() || checkSig) { }
if (!extension.length() || checkSig) {
if (!pIOHandler) { if (!pIOHandler) {
return true; return true;
} }

View File

@ -53,7 +53,6 @@ struct aiNode;
namespace Assimp { namespace Assimp {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** /**
* @brief Importer class for the sterolithography STL file format. * @brief Importer class for the sterolithography STL file format.
@ -68,13 +67,13 @@ public:
/** /**
* @brief The class destructor. * @brief The class destructor.
*/ */
~STLImporter(); ~STLImporter() override;
/** /**
* @brief Returns whether the class can handle the format of the given file. * @brief Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
protected: protected:
@ -82,14 +81,14 @@ protected:
* @brief Return importer meta information. * @brief Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
/** /**
* @brief Imports the given file into the given scene structure. * @brief Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
/** /**
* @brief Loads a binary .stl file * @brief Loads a binary .stl file

View File

@ -69,11 +69,15 @@ static const aiImporterDesc desc = {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Constructor to be privately used by Importer // Constructor to be privately used by Importer
TerragenImporter::TerragenImporter() : TerragenImporter::TerragenImporter() :
configComputeUVs(false) {} configComputeUVs(false) {
// empty
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Destructor, private as well // Destructor, private as well
TerragenImporter::~TerragenImporter() {} TerragenImporter::~TerragenImporter() {
// empty
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Returns whether the class can handle the format of the given file. // Returns whether the class can handle the format of the given file.

View File

@ -42,10 +42,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file TerragenLoader.h /** @file TerragenLoader.h
* @brief Declaration of the .ter importer class. * @brief Declaration of the .ter importer class.
*/ */
#pragma once
#ifndef INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H #ifndef INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H
#define INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H #define INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
namespace Assimp { namespace Assimp {
// Magic strings // Magic strings
@ -71,23 +73,22 @@ namespace Assimp {
class TerragenImporter : public BaseImporter { class TerragenImporter : public BaseImporter {
public: public:
TerragenImporter(); TerragenImporter();
~TerragenImporter(); ~TerragenImporter() override;
public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
void SetupProperties(const Importer *pImp); void SetupProperties(const Importer *pImp) override;
private: private:
bool configComputeUVs; bool configComputeUVs;

View File

@ -60,7 +60,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <assimp/Importer.hpp> #include <assimp/Importer.hpp>
#include <stdint.h> #include <cstdint>
#include <memory> #include <memory>
using namespace Assimp; using namespace Assimp;

View File

@ -50,7 +50,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace Assimp { namespace Assimp {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** @brief Importer class to load UNREAL files (*.3d) /**
* @brief Importer class to load UNREAL files (*.3d)
*/ */
class UnrealImporter : public BaseImporter { class UnrealImporter : public BaseImporter {
public: public:
@ -62,23 +63,22 @@ public:
* *
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
**/ **/
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
bool checkSig) const;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** @brief Called by Importer::GetExtensionList() /** @brief Called by Importer::GetExtensionList()
* *
* See #BaseImporter::GetInfo for the details * @see #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** @brief Setup properties for the importer /** @brief Setup properties for the importer
* *
* See BaseImporter::SetupProperties() for details * See BaseImporter::SetupProperties() for details
*/ */
void SetupProperties(const Importer *pImp); void SetupProperties(const Importer *pImp) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** @brief Imports the given file into the given scene structure. /** @brief Imports the given file into the given scene structure.
@ -86,7 +86,7 @@ protected:
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
private: private:
//! frame to be loaded //! frame to be loaded

View File

@ -40,20 +40,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
/** @file Defines the helper data structures for importing XFiles */ /** @file Defines the helper data structures for importing XFiles */
#ifndef AI_XFILEHELPER_H_INC #ifndef AI_XFILEHELPER_H_INC
#define AI_XFILEHELPER_H_INC #define AI_XFILEHELPER_H_INC
#include <cstdint>
#include <string> #include <string>
#include <vector> #include <vector>
#include <stdint.h>
#include <assimp/types.h>
#include <assimp/quaternion.h>
#include <assimp/mesh.h>
#include <assimp/anim.h> #include <assimp/anim.h>
#include <assimp/Defines.h> #include <assimp/mesh.h>
#include <assimp/quaternion.h>
#include <assimp/types.h>
namespace Assimp { namespace Assimp {
namespace XFile { namespace XFile {
@ -68,14 +66,13 @@ struct TexEntry {
std::string mName; std::string mName;
bool mIsNormalMap; // true if the texname was specified in a NormalmapFilename tag bool mIsNormalMap; // true if the texname was specified in a NormalmapFilename tag
TexEntry() AI_NO_EXCEPT TexEntry() AI_NO_EXCEPT :
: mName() mName(),
, mIsNormalMap(false) { mIsNormalMap(false) {
// empty // empty
} }
TexEntry(const std::string& pName, bool pIsNormalMap = false) TexEntry(const std::string &pName, bool pIsNormalMap = false) :
: mName(pName) mName(pName), mIsNormalMap(pIsNormalMap) {
, mIsNormalMap(pIsNormalMap) {
// empty // empty
} }
}; };
@ -91,10 +88,10 @@ struct Material {
std::vector<TexEntry> mTextures; std::vector<TexEntry> mTextures;
size_t sceneIndex; ///< the index under which it was stored in the scene's material list size_t sceneIndex; ///< the index under which it was stored in the scene's material list
Material() AI_NO_EXCEPT Material() AI_NO_EXCEPT :
: mIsReference(false) mIsReference(false),
, mSpecularExponent() mSpecularExponent(),
, sceneIndex(SIZE_MAX) { sceneIndex(SIZE_MAX) {
// empty // empty
} }
}; };
@ -106,8 +103,7 @@ struct BoneWeight {
}; };
/** Helper structure to represent a bone in a mesh */ /** Helper structure to represent a bone in a mesh */
struct Bone struct Bone {
{
std::string mName; std::string mName;
std::vector<BoneWeight> mWeights; std::vector<BoneWeight> mWeights;
aiMatrix4x4 mOffsetMatrix; aiMatrix4x4 mOffsetMatrix;
@ -131,18 +127,18 @@ struct Mesh {
std::vector<Bone> mBones; std::vector<Bone> mBones;
explicit Mesh(const std::string &pName = std::string()) AI_NO_EXCEPT explicit Mesh(const std::string &pName = std::string()) AI_NO_EXCEPT
: mName( pName ) : mName(pName),
, mPositions() mPositions(),
, mPosFaces() mPosFaces(),
, mNormals() mNormals(),
, mNormFaces() mNormFaces(),
, mNumTextures(0) mNumTextures(0),
, mTexCoords{} mTexCoords{},
, mNumColorSets(0) mNumColorSets(0),
, mColors{} mColors{},
, mFaceMaterials() mFaceMaterials(),
, mMaterials() mMaterials(),
, mBones() { mBones() {
// empty // empty
} }
}; };
@ -156,19 +152,15 @@ struct Node {
std::vector<Mesh *> mMeshes; std::vector<Mesh *> mMeshes;
Node() AI_NO_EXCEPT Node() AI_NO_EXCEPT
: mName() : mName(),
, mTrafoMatrix() mTrafoMatrix(),
, mParent(nullptr) mParent(nullptr),
, mChildren() mChildren(),
, mMeshes() { mMeshes() {
// empty // empty
} }
explicit Node( Node* pParent) explicit Node(Node *pParent) :
: mName() mName(), mTrafoMatrix(), mParent(pParent), mChildren(), mMeshes() {
, mTrafoMatrix()
, mParent(pParent)
, mChildren()
, mMeshes() {
// empty // empty
} }
@ -197,21 +189,18 @@ struct AnimBone {
}; };
/** Helper structure to represent an animation set in a XFile */ /** Helper structure to represent an animation set in a XFile */
struct Animation struct Animation {
{
std::string mName; std::string mName;
std::vector<AnimBone *> mAnims; std::vector<AnimBone *> mAnims;
~Animation() ~Animation() {
{
for (unsigned int a = 0; a < mAnims.size(); a++) for (unsigned int a = 0; a < mAnims.size(); a++)
delete mAnims[a]; delete mAnims[a];
} }
}; };
/** Helper structure analogue to aiScene */ /** Helper structure analogue to aiScene */
struct Scene struct Scene {
{
Node *mRootNode; Node *mRootNode;
std::vector<Mesh *> mGlobalMeshes; // global meshes found outside of any frames std::vector<Mesh *> mGlobalMeshes; // global meshes found outside of any frames
@ -221,10 +210,10 @@ struct Scene
unsigned int mAnimTicksPerSecond; unsigned int mAnimTicksPerSecond;
Scene() AI_NO_EXCEPT Scene() AI_NO_EXCEPT
: mRootNode(nullptr) : mRootNode(nullptr),
, mGlobalMeshes() mGlobalMeshes(),
, mGlobalMaterials() mGlobalMaterials(),
, mAnimTicksPerSecond(0) { mAnimTicksPerSecond(0) {
// empty // empty
} }
~Scene() { ~Scene() {

View File

@ -49,7 +49,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "PostProcessing/ConvertToLHProcess.h" #include "PostProcessing/ConvertToLHProcess.h"
#include <assimp/TinyFormatter.h> #include <assimp/TinyFormatter.h>
#include <assimp/Defines.h>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <assimp/scene.h> #include <assimp/scene.h>
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file XFileImporter.h /** @file XFileImporter.h
* @brief Definition of the XFile importer class. * @brief Definition of the XFile importer class.
*/ */
#pragma once
#ifndef AI_XFILEIMPORTER_H_INC #ifndef AI_XFILEIMPORTER_H_INC
#define AI_XFILEIMPORTER_H_INC #define AI_XFILEIMPORTER_H_INC
@ -69,28 +69,27 @@ namespace XFile {
class XFileImporter : public BaseImporter { class XFileImporter : public BaseImporter {
public: public:
XFileImporter(); XFileImporter();
~XFileImporter(); ~XFileImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool CheckSig) const; bool CheckSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Constructs the return data structure out of the imported data. /** Constructs the return data structure out of the imported data.
@ -140,7 +139,7 @@ protected:
void ConvertMaterials( aiScene* pScene, std::vector<XFile::Material>& pMaterials); void ConvertMaterials( aiScene* pScene, std::vector<XFile::Material>& pMaterials);
protected: protected:
/** Buffer to hold the loaded file */ /// Buffer to hold the loaded file
std::vector<char> mBuffer; std::vector<char> mBuffer;
}; };

View File

@ -100,7 +100,6 @@ XGLImporter::XGLImporter() :
// Destructor, private as well // Destructor, private as well
XGLImporter::~XGLImporter() { XGLImporter::~XGLImporter() {
delete mXmlParser; delete mXmlParser;
mXmlParser = nullptr;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -115,12 +114,14 @@ bool XGLImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool c
if (extension == "xgl" || extension == "zgl") { if (extension == "xgl" || extension == "zgl") {
return true; return true;
} else if (extension == "xml" || checkSig) { }
ai_assert(pIOHandler != NULL);
if (extension == "xml" || checkSig) {
ai_assert(pIOHandler != nullptr);
static const char * const tokens[] = { "<world>", "<World>", "<WORLD>" }; static const char * const tokens[] = { "<world>", "<World>", "<WORLD>" };
return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 3); return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 3);
} }
return false; return false;
} }
@ -454,12 +455,12 @@ aiMesh *XGLImporter::ToOutputMesh(const TempMaterialMesh &m) {
mesh->mVertices = new aiVector3D[mesh->mNumVertices]; mesh->mVertices = new aiVector3D[mesh->mNumVertices];
std::copy(m.positions.begin(), m.positions.end(), mesh->mVertices); std::copy(m.positions.begin(), m.positions.end(), mesh->mVertices);
if (m.normals.size()) { if (!m.normals.empty()) {
mesh->mNormals = new aiVector3D[mesh->mNumVertices]; mesh->mNormals = new aiVector3D[mesh->mNumVertices];
std::copy(m.normals.begin(), m.normals.end(), mesh->mNormals); std::copy(m.normals.begin(), m.normals.end(), mesh->mNormals);
} }
if (m.uvs.size()) { if (!m.uvs.empty()) {
mesh->mNumUVComponents[0] = 2; mesh->mNumUVComponents[0] = 2;
mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices]; mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices];
@ -595,7 +596,7 @@ bool XGLImporter::ReadMesh(XmlNode &node, TempScope &scope) {
} }
// finally extract output meshes and add them to the scope // finally extract output meshes and add them to the scope
typedef std::pair<const unsigned int, TempMaterialMesh> pairt; using pairt = std::pair<const unsigned int, TempMaterialMesh>;
for (const pairt &p : bymat) { for (const pairt &p : bymat) {
aiMesh *const m = ToOutputMesh(p.second); aiMesh *const m = ToOutputMesh(p.second);
scope.meshes_linear.push_back(m); scope.meshes_linear.push_back(m);
@ -620,7 +621,7 @@ unsigned int XGLImporter::ResolveMaterialRef(XmlNode &node, TempScope &scope) {
const int id = ReadIndexFromText(node); const int id = ReadIndexFromText(node);
std::map<unsigned int, aiMaterial *>::iterator it = scope.materials.find(id), end = scope.materials.end(); auto it = scope.materials.find(id), end = scope.materials.end();
if (it == end) { if (it == end) {
ThrowException("<matref> index out of range"); ThrowException("<matref> index out of range");
} }
@ -644,7 +645,7 @@ unsigned int XGLImporter::ResolveMaterialRef(XmlNode &node, TempScope &scope) {
void XGLImporter::ReadMaterial(XmlNode &node, TempScope &scope) { void XGLImporter::ReadMaterial(XmlNode &node, TempScope &scope) {
const unsigned int mat_id = ReadIDAttr(node); const unsigned int mat_id = ReadIDAttr(node);
aiMaterial *mat(new aiMaterial); auto *mat(new aiMaterial);
for (XmlNode &child : node.children()) { for (XmlNode &child : node.children()) {
const std::string &s = ai_stdStrToLower(child.name()); const std::string &s = ai_stdStrToLower(child.name());
if (s == "amb") { if (s == "amb") {

View File

@ -70,25 +70,25 @@ namespace Assimp {
class XGLImporter : public BaseImporter, public LogFunctions<XGLImporter> { class XGLImporter : public BaseImporter, public LogFunctions<XGLImporter> {
public: public:
XGLImporter(); XGLImporter();
~XGLImporter(); ~XGLImporter() override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. */ * See BaseImporter::CanRead() for details. */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details */ * See #BaseImporter::GetInfo for the details */
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details */ * See BaseImporter::InternReadFile() for details */
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
private: private:
struct TempScope { struct TempScope {

View File

@ -51,14 +51,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_IMPORTER) #if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_IMPORTER)
#include "glTFCommon.h"
#include <assimp/Exceptional.h> #include <assimp/Exceptional.h>
#include <map>
#include <string>
#include <list>
#include <vector>
#include <algorithm> #include <algorithm>
#include <list>
#include <map>
#include <stdexcept> #include <stdexcept>
#include <string>
#include <vector>
// clang-format off
#if (__GNUC__ == 8 && __GNUC_MINOR__ >= 0) #if (__GNUC__ == 8 && __GNUC_MINOR__ >= 0)
#pragma GCC diagnostic push #pragma GCC diagnostic push
@ -99,16 +101,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# endif # endif
#endif #endif
// clang-format on
#include "AssetLib/glTF/glTFCommon.h" #include "AssetLib/glTF/glTFCommon.h"
namespace glTF namespace glTF {
{
using glTFCommon::shared_ptr; using glTFCommon::IOStream;
using glTFCommon::IOSystem; using glTFCommon::IOSystem;
using glTFCommon::IOStream; using glTFCommon::Nullable;
using glTFCommon::Ref;
using glTFCommon::shared_ptr;
using rapidjson::Value;
using rapidjson::Document; using rapidjson::Document;
using rapidjson::Value;
class Asset; class Asset;
class AssetWriter; class AssetWriter;
@ -118,21 +124,22 @@ namespace glTF
struct Light; struct Light;
struct Skin; struct Skin;
using glTFCommon::mat4;
using glTFCommon::vec3; using glTFCommon::vec3;
using glTFCommon::vec4; using glTFCommon::vec4;
using glTFCommon::mat4;
//! Magic number for GLB files //! Magic number for GLB files
#define AI_GLB_MAGIC_NUMBER "glTF" #define AI_GLB_MAGIC_NUMBER "glTF"
// clang-format off
#ifdef ASSIMP_API #ifdef ASSIMP_API
# include <assimp/Compiler/pushpack1.h> # include <assimp/Compiler/pushpack1.h>
#endif #endif
// clang-format on
//! For the KHR_binary_glTF extension (binary .glb file) //! For the KHR_binary_glTF extension (binary .glb file)
//! 20-byte header (+ the JSON + a "body" data section) //! 20-byte header (+ the JSON + a "body" data section)
struct GLB_Header struct GLB_Header {
{
uint8_t magic[4]; //!< Magic number: "glTF" uint8_t magic[4]; //!< Magic number: "glTF"
uint32_t version; //!< Version number (always 1 as of the last update) uint32_t version; //!< Version number (always 1 as of the last update)
uint32_t length; //!< Total length of the Binary glTF, including header, scene, and body, in bytes uint32_t length; //!< Total length of the Binary glTF, including header, scene, and body, in bytes
@ -140,20 +147,19 @@ namespace glTF
uint32_t sceneFormat; //!< Specifies the format of the glTF scene (see the SceneFormat enum) uint32_t sceneFormat; //!< Specifies the format of the glTF scene (see the SceneFormat enum)
} PACK_STRUCT; } PACK_STRUCT;
// clang-format off
#ifdef ASSIMP_API #ifdef ASSIMP_API
# include <assimp/Compiler/poppack1.h> # include <assimp/Compiler/poppack1.h>
#endif #endif
// clang-format on
//! Values for the GLB_Header::sceneFormat field //! Values for the GLB_Header::sceneFormat field
enum SceneFormat enum SceneFormat {
{
SceneFormat_JSON = 0 SceneFormat_JSON = 0
}; };
//! Values for the mesh primitive modes //! Values for the mesh primitive modes
enum PrimitiveMode enum PrimitiveMode {
{
PrimitiveMode_POINTS = 0, PrimitiveMode_POINTS = 0,
PrimitiveMode_LINES = 1, PrimitiveMode_LINES = 1,
PrimitiveMode_LINE_LOOP = 2, PrimitiveMode_LINE_LOOP = 2,
@ -164,8 +170,7 @@ namespace glTF
}; };
//! Values for the Accessor::componentType field //! Values for the Accessor::componentType field
enum ComponentType enum ComponentType {
{
ComponentType_BYTE = 5120, ComponentType_BYTE = 5120,
ComponentType_UNSIGNED_BYTE = 5121, ComponentType_UNSIGNED_BYTE = 5121,
ComponentType_SHORT = 5122, ComponentType_SHORT = 5122,
@ -174,8 +179,7 @@ namespace glTF
ComponentType_FLOAT = 5126 ComponentType_FLOAT = 5126
}; };
inline unsigned int ComponentTypeSize(ComponentType t) inline unsigned int ComponentTypeSize(ComponentType t) {
{
switch (t) { switch (t) {
case ComponentType_SHORT: case ComponentType_SHORT:
case ComponentType_UNSIGNED_SHORT: case ComponentType_UNSIGNED_SHORT:
@ -196,23 +200,20 @@ namespace glTF
} }
//! Values for the BufferView::target field //! Values for the BufferView::target field
enum BufferViewTarget enum BufferViewTarget {
{
BufferViewTarget_NONE = 0, BufferViewTarget_NONE = 0,
BufferViewTarget_ARRAY_BUFFER = 34962, BufferViewTarget_ARRAY_BUFFER = 34962,
BufferViewTarget_ELEMENT_ARRAY_BUFFER = 34963 BufferViewTarget_ELEMENT_ARRAY_BUFFER = 34963
}; };
//! Values for the Sampler::magFilter field //! Values for the Sampler::magFilter field
enum SamplerMagFilter enum SamplerMagFilter {
{
SamplerMagFilter_Nearest = 9728, SamplerMagFilter_Nearest = 9728,
SamplerMagFilter_Linear = 9729 SamplerMagFilter_Linear = 9729
}; };
//! Values for the Sampler::minFilter field //! Values for the Sampler::minFilter field
enum SamplerMinFilter enum SamplerMinFilter {
{
SamplerMinFilter_Nearest = 9728, SamplerMinFilter_Nearest = 9728,
SamplerMinFilter_Linear = 9729, SamplerMinFilter_Linear = 9729,
SamplerMinFilter_Nearest_Mipmap_Nearest = 9984, SamplerMinFilter_Nearest_Mipmap_Nearest = 9984,
@ -222,16 +223,14 @@ namespace glTF
}; };
//! Values for the Sampler::wrapS and Sampler::wrapT field //! Values for the Sampler::wrapS and Sampler::wrapT field
enum SamplerWrap enum SamplerWrap {
{
SamplerWrap_Clamp_To_Edge = 33071, SamplerWrap_Clamp_To_Edge = 33071,
SamplerWrap_Mirrored_Repeat = 33648, SamplerWrap_Mirrored_Repeat = 33648,
SamplerWrap_Repeat = 10497 SamplerWrap_Repeat = 10497
}; };
//! Values for the Texture::format and Texture::internalFormat fields //! Values for the Texture::format and Texture::internalFormat fields
enum TextureFormat enum TextureFormat {
{
TextureFormat_ALPHA = 6406, TextureFormat_ALPHA = 6406,
TextureFormat_RGB = 6407, TextureFormat_RGB = 6407,
TextureFormat_RGBA = 6408, TextureFormat_RGBA = 6408,
@ -240,40 +239,42 @@ namespace glTF
}; };
//! Values for the Texture::target field //! Values for the Texture::target field
enum TextureTarget enum TextureTarget {
{
TextureTarget_TEXTURE_2D = 3553 TextureTarget_TEXTURE_2D = 3553
}; };
//! Values for the Texture::type field //! Values for the Texture::type field
enum TextureType enum TextureType {
{
TextureType_UNSIGNED_BYTE = 5121, TextureType_UNSIGNED_BYTE = 5121,
TextureType_UNSIGNED_SHORT_5_6_5 = 33635, TextureType_UNSIGNED_SHORT_5_6_5 = 33635,
TextureType_UNSIGNED_SHORT_4_4_4_4 = 32819, TextureType_UNSIGNED_SHORT_4_4_4_4 = 32819,
TextureType_UNSIGNED_SHORT_5_5_5_1 = 32820 TextureType_UNSIGNED_SHORT_5_5_5_1 = 32820
}; };
//! Values for the Accessor::type field (helper class) //! Values for the Accessor::type field (helper class)
class AttribType class AttribType {
{
public: public:
enum Value enum Value { SCALAR,
{ SCALAR, VEC2, VEC3, VEC4, MAT2, MAT3, MAT4 }; VEC2,
VEC3,
VEC4,
MAT2,
MAT3,
MAT4 };
private: private:
static const size_t NUM_VALUES = static_cast<size_t>(MAT4) + 1; static const size_t NUM_VALUES = static_cast<size_t>(MAT4) + 1;
struct Info struct Info {
{ const char* name; unsigned int numComponents; }; const char *name;
unsigned int numComponents;
};
template<int N> struct data template <int N>
{ static const Info infos[NUM_VALUES]; }; struct data { static const Info infos[NUM_VALUES]; };
public: public:
inline static Value FromString(const char* str) inline static Value FromString(const char *str) {
{
for (size_t i = 0; i < NUM_VALUES; ++i) { for (size_t i = 0; i < NUM_VALUES; ++i) {
if (strcmp(data<0>::infos[i].name, str) == 0) { if (strcmp(data<0>::infos[i].name, str) == 0) {
return static_cast<Value>(i); return static_cast<Value>(i);
@ -282,25 +283,23 @@ namespace glTF
return SCALAR; return SCALAR;
} }
inline static const char* ToString(Value type) inline static const char *ToString(Value type) {
{
return data<0>::infos[static_cast<size_t>(type)].name; return data<0>::infos[static_cast<size_t>(type)].name;
} }
inline static unsigned int GetNumComponents(Value type) inline static unsigned int GetNumComponents(Value type) {
{
return data<0>::infos[static_cast<size_t>(type)].numComponents; return data<0>::infos[static_cast<size_t>(type)].numComponents;
} }
}; };
// must match the order of the AttribTypeTraits::Value enum! // must match the order of the AttribTypeTraits::Value enum!
template<int N> const AttribType::Info template <int N>
const AttribType::Info
AttribType::data<N>::infos[AttribType::NUM_VALUES] = { AttribType::data<N>::infos[AttribType::NUM_VALUES] = {
{ "SCALAR", 1 }, { "VEC2", 2 }, { "VEC3", 3 }, { "VEC4", 4 }, { "MAT2", 4 }, { "MAT3", 9 }, { "MAT4", 16 } { "SCALAR", 1 }, { "VEC2", 2 }, { "VEC3", 3 }, { "VEC4", 4 }, { "MAT2", 4 }, { "MAT3", 9 }, { "MAT4", 16 }
}; };
/*
//! A reference to one top-level object, which is valid //! A reference to one top-level object, which is valid
//! until the Asset instance is destroyed //! until the Asset instance is destroyed
template<class T> template<class T>
@ -324,35 +323,20 @@ namespace glTF
T& operator*() T& operator*()
{ return *((*vector)[index]); } { return *((*vector)[index]); }
}; };*/
//! Helper struct to represent values that might not be present
template<class T>
struct Nullable
{
T value;
bool isPresent;
Nullable() : isPresent(false) {}
Nullable(T& val) : value(val), isPresent(true) {}
};
//! Base class for all glTF top-level objects //! Base class for all glTF top-level objects
struct Object struct Object {
{
std::string id; //!< The globally unique ID used to reference this object std::string id; //!< The globally unique ID used to reference this object
std::string name; //!< The user-defined name of this object std::string name; //!< The user-defined name of this object
//! Objects marked as special are not exported (used to emulate the binary body buffer) //! Objects marked as special are not exported (used to emulate the binary body buffer)
virtual bool IsSpecial() const virtual bool IsSpecial() const { return false; }
{ return false; }
virtual ~Object() {} virtual ~Object() {}
//! Maps special IDs to another ID, where needed. Subclasses may override it (statically) //! Maps special IDs to another ID, where needed. Subclasses may override it (statically)
static const char* TranslateId(Asset& /*r*/, const char* id) static const char *TranslateId(Asset & /*r*/, const char *id) { return id; }
{ return id; }
}; };
// //
@ -362,8 +346,7 @@ namespace glTF
//! A typed view into a BufferView. A BufferView contains raw binary data. //! A typed view into a BufferView. A BufferView contains raw binary data.
//! An accessor provides a typed view into a BufferView or a subset of a BufferView //! An accessor provides a typed view into a BufferView or a subset of a BufferView
//! similar to how WebGL's vertexAttribPointer() defines an attribute in a buffer. //! similar to how WebGL's vertexAttribPointer() defines an attribute in a buffer.
struct Accessor : public Object struct Accessor : public Object {
{
Ref<BufferView> bufferView; //!< The ID of the bufferView. (required) Ref<BufferView> bufferView; //!< The ID of the bufferView. (required)
unsigned int byteOffset; //!< The offset relative to the start of the bufferView in bytes. (required) unsigned int byteOffset; //!< The offset relative to the start of the bufferView in bytes. (required)
unsigned int byteStride; //!< The stride, in bytes, between attributes referenced by this accessor. (default: 0) unsigned int byteStride; //!< The stride, in bytes, between attributes referenced by this accessor. (default: 0)
@ -385,8 +368,7 @@ namespace glTF
void WriteData(size_t count, const void *src_buffer, size_t src_stride); void WriteData(size_t count, const void *src_buffer, size_t src_stride);
//! Helper class to iterate the data //! Helper class to iterate the data
class Indexer class Indexer {
{
friend struct Accessor; friend struct Accessor;
// This field is reported as not used, making it protectd is the easiest way to work around it without going to the bottom of what the problem is: // This field is reported as not used, making it protectd is the easiest way to work around it without going to the bottom of what the problem is:
@ -401,25 +383,21 @@ namespace glTF
Indexer(Accessor &acc); Indexer(Accessor &acc);
public: public:
//! Accesses the i-th value as defined by the accessor //! Accesses the i-th value as defined by the accessor
template <class T> template <class T>
T GetValue(int i); T GetValue(int i);
//! Accesses the i-th value as defined by the accessor //! Accesses the i-th value as defined by the accessor
inline unsigned int GetUInt(int i) inline unsigned int GetUInt(int i) {
{
return GetValue<unsigned int>(i); return GetValue<unsigned int>(i);
} }
inline bool IsValid() const inline bool IsValid() const {
{
return data != 0; return data != 0;
} }
}; };
inline Indexer GetIndexer() inline Indexer GetIndexer() {
{
return Indexer(*this); return Indexer(*this);
} }
@ -428,21 +406,17 @@ namespace glTF
}; };
//! A buffer points to binary geometry, animation, or skins. //! A buffer points to binary geometry, animation, or skins.
struct Buffer : public Object struct Buffer : public Object {
{
/********************* Types *********************/ /********************* Types *********************/
public: public:
enum Type {
enum Type
{
Type_arraybuffer, Type_arraybuffer,
Type_text Type_text
}; };
/// \struct SEncodedRegion /// \struct SEncodedRegion
/// Descriptor of encoded region in "bufferView". /// Descriptor of encoded region in "bufferView".
struct SEncodedRegion struct SEncodedRegion {
{
const size_t Offset; ///< Offset from begin of "bufferView" to encoded region, in bytes. const size_t Offset; ///< Offset from begin of "bufferView" to encoded region, in bytes.
const size_t EncodedData_Length; ///< Size of encoded region, in bytes. const size_t EncodedData_Length; ///< Size of encoded region, in bytes.
uint8_t *const DecodedData; ///< Cached encoded data. uint8_t *const DecodedData; ///< Cached encoded data.
@ -495,7 +469,6 @@ namespace glTF
SEncodedRegion *EncodedRegion_Current; SEncodedRegion *EncodedRegion_Current;
private: private:
shared_ptr<uint8_t> mData; //!< Pointer to the data shared_ptr<uint8_t> mData; //!< Pointer to the data
bool mIsSpecial; //!< Set to true for special cases (e.g. the body buffer) bool mIsSpecial; //!< Set to true for special cases (e.g. the body buffer)
size_t capacity = 0; //!< The capacity of the buffer in bytes. (default: 0) size_t capacity = 0; //!< The capacity of the buffer in bytes. (default: 0)
@ -506,7 +479,6 @@ namespace glTF
/******************* Functions *******************/ /******************* Functions *******************/
public: public:
Buffer(); Buffer();
~Buffer(); ~Buffer();
@ -540,24 +512,19 @@ namespace glTF
size_t AppendData(uint8_t *data, size_t length); size_t AppendData(uint8_t *data, size_t length);
void Grow(size_t amount); void Grow(size_t amount);
uint8_t* GetPointer() uint8_t *GetPointer() { return mData.get(); }
{ return mData.get(); }
void MarkAsSpecial() void MarkAsSpecial() { mIsSpecial = true; }
{ mIsSpecial = true; }
bool IsSpecial() const bool IsSpecial() const { return mIsSpecial; }
{ return mIsSpecial; }
std::string GetURI() std::string GetURI() { return std::string(this->id) + ".bin"; }
{ return std::string(this->id) + ".bin"; }
static const char *TranslateId(Asset &r, const char *id); static const char *TranslateId(Asset &r, const char *id);
}; };
//! A view into a buffer generally representing a subset of the buffer. //! A view into a buffer generally representing a subset of the buffer.
struct BufferView : public Object struct BufferView : public Object {
{
Ref<Buffer> buffer; //! The ID of the buffer. (required) Ref<Buffer> buffer; //! The ID of the buffer. (required)
size_t byteOffset; //! The offset into the buffer in bytes. (required) size_t byteOffset; //! The offset into the buffer in bytes. (required)
size_t byteLength; //! The length of the bufferView in bytes. (default: 0) size_t byteLength; //! The length of the bufferView in bytes. (default: 0)
@ -567,18 +534,15 @@ namespace glTF
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
struct Camera : public Object struct Camera : public Object {
{ enum Type {
enum Type
{
Perspective, Perspective,
Orthographic Orthographic
}; };
Type type; Type type;
union union {
{
struct { struct {
float aspectRatio; //!<The floating - point aspect ratio of the field of view. (0 = undefined = use the canvas one) float aspectRatio; //!<The floating - point aspect ratio of the field of view. (0 = undefined = use the canvas one)
float yfov; //!<The floating - point vertical field of view in radians. (required) float yfov; //!<The floating - point vertical field of view in radians. (required)
@ -598,10 +562,8 @@ namespace glTF
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
//! Image data used to create a texture. //! Image data used to create a texture.
struct Image : public Object struct Image : public Object {
{
std::string uri; //! The uri of the image, that can be a file path, a data URI, etc.. (required) std::string uri; //! The uri of the image, that can be a file path, a data URI, etc.. (required)
Ref<BufferView> bufferView; Ref<BufferView> bufferView;
@ -615,18 +577,14 @@ namespace glTF
size_t mDataLength; size_t mDataLength;
public: public:
Image(); Image();
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
inline bool HasData() const inline bool HasData() const { return mDataLength > 0; }
{ return mDataLength > 0; }
inline size_t GetDataLength() const inline size_t GetDataLength() const { return mDataLength; }
{ return mDataLength; }
inline const uint8_t* GetData() const inline const uint8_t *GetData() const { return mData.get(); }
{ return mData.get(); }
inline uint8_t *StealData(); inline uint8_t *StealData();
@ -634,21 +592,18 @@ namespace glTF
}; };
//! Holds a material property that can be a texture or a color //! Holds a material property that can be a texture or a color
struct TexProperty struct TexProperty {
{
Ref<Texture> texture; Ref<Texture> texture;
vec4 color; vec4 color;
}; };
//! The material appearance of a primitive. //! The material appearance of a primitive.
struct Material : public Object struct Material : public Object {
{
//Ref<Sampler> source; //!< The ID of the technique. //Ref<Sampler> source; //!< The ID of the technique.
//std::gltf_unordered_map<std::string, std::string> values; //!< A dictionary object of parameter values. //std::gltf_unordered_map<std::string, std::string> values; //!< A dictionary object of parameter values.
//! Techniques defined by KHR_materials_common //! Techniques defined by KHR_materials_common
enum Technique enum Technique {
{
Technique_undefined = 0, Technique_undefined = 0,
Technique_BLINN, Technique_BLINN,
Technique_PHONG, Technique_PHONG,
@ -674,12 +629,10 @@ namespace glTF
}; };
//! A set of primitives to be rendered. A node can contain one or more meshes. A node's transform places the mesh in the scene. //! A set of primitives to be rendered. A node can contain one or more meshes. A node's transform places the mesh in the scene.
struct Mesh : public Object struct Mesh : public Object {
{
typedef std::vector<Ref<Accessor>> AccessorList; typedef std::vector<Ref<Accessor>> AccessorList;
struct Primitive struct Primitive {
{
PrimitiveMode mode; PrimitiveMode mode;
struct Attributes { struct Attributes {
@ -693,12 +646,10 @@ namespace glTF
/// \struct SExtension /// \struct SExtension
/// Extension used for mesh. /// Extension used for mesh.
struct SExtension struct SExtension {
{
/// \enum EType /// \enum EType
/// Type of extension. /// Type of extension.
enum EType enum EType {
{
#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC #ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC
Compression_Open3DGC, ///< Compression of mesh data using Open3DGC algorithm. Compression_Open3DGC, ///< Compression of mesh data using Open3DGC algorithm.
#endif #endif
@ -711,9 +662,8 @@ namespace glTF
/// \fn SExtension /// \fn SExtension
/// Constructor. /// Constructor.
/// \param [in] pType - type of extension. /// \param [in] pType - type of extension.
SExtension(const EType pType) SExtension(const EType pType) :
: Type(pType) Type(pType) {}
{}
virtual ~SExtension() { virtual ~SExtension() {
// empty // empty
@ -723,8 +673,7 @@ namespace glTF
#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC #ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC
/// \struct SCompression_Open3DGC /// \struct SCompression_Open3DGC
/// Compression of mesh data using Open3DGC algorithm. /// Compression of mesh data using Open3DGC algorithm.
struct SCompression_Open3DGC : public SExtension struct SCompression_Open3DGC : public SExtension {
{
using SExtension::Type; using SExtension::Type;
std::string Buffer; ///< ID of "buffer" used for storing compressed data. std::string Buffer; ///< ID of "buffer" used for storing compressed data.
@ -738,8 +687,8 @@ namespace glTF
/// \fn SCompression_Open3DGC /// \fn SCompression_Open3DGC
/// Constructor. /// Constructor.
SCompression_Open3DGC() SCompression_Open3DGC() :
: SExtension(Compression_Open3DGC) { SExtension(Compression_Open3DGC) {
// empty // empty
} }
@ -756,7 +705,11 @@ namespace glTF
/// \fn ~Mesh() /// \fn ~Mesh()
/// Destructor. /// Destructor.
~Mesh() { for(std::list<SExtension*>::iterator it = Extension.begin(), it_end = Extension.end(); it != it_end; it++) { delete *it; }; } ~Mesh() {
for (std::list<SExtension *>::iterator it = Extension.begin(), it_end = Extension.end(); it != it_end; it++) {
delete *it;
};
}
/// \fn void Read(Value& pJSON_Object, Asset& pAsset_Root) /// \fn void Read(Value& pJSON_Object, Asset& pAsset_Root)
/// Get mesh data from JSON-object and place them to root asset. /// Get mesh data from JSON-object and place them to root asset.
@ -773,8 +726,7 @@ namespace glTF
#endif #endif
}; };
struct Node : public Object struct Node : public Object {
{
std::vector<Ref<Node>> children; std::vector<Ref<Node>> children;
std::vector<Ref<Mesh>> meshes; std::vector<Ref<Mesh>> meshes;
@ -796,15 +748,12 @@ namespace glTF
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
struct Program : public Object struct Program : public Object {
{
Program() {} Program() {}
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
struct Sampler : public Object {
struct Sampler : public Object
{
SamplerMagFilter magFilter; //!< The texture magnification filter. (required) SamplerMagFilter magFilter; //!< The texture magnification filter. (required)
SamplerMinFilter minFilter; //!< The texture minification filter. (required) SamplerMinFilter minFilter; //!< The texture minification filter. (required)
SamplerWrap wrapS; //!< The texture wrapping in the S direction. (required) SamplerWrap wrapS; //!< The texture wrapping in the S direction. (required)
@ -815,22 +764,19 @@ namespace glTF
void SetDefaults(); void SetDefaults();
}; };
struct Scene : public Object struct Scene : public Object {
{
std::vector<Ref<Node>> nodes; std::vector<Ref<Node>> nodes;
Scene() {} Scene() {}
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
struct Shader : public Object struct Shader : public Object {
{
Shader() {} Shader() {}
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
struct Skin : public Object struct Skin : public Object {
{
Nullable<mat4> bindShapeMatrix; //!< Floating-point 4x4 transformation matrix stored in column-major order. Nullable<mat4> bindShapeMatrix; //!< Floating-point 4x4 transformation matrix stored in column-major order.
Ref<Accessor> inverseBindMatrices; //!< The ID of the accessor containing the floating-point 4x4 inverse-bind matrices. Ref<Accessor> inverseBindMatrices; //!< The ID of the accessor containing the floating-point 4x4 inverse-bind matrices.
std::vector<Ref<Node>> jointNames; //!< Joint names of the joints (nodes with a jointName property) in this skin. std::vector<Ref<Node>> jointNames; //!< Joint names of the joints (nodes with a jointName property) in this skin.
@ -840,21 +786,14 @@ namespace glTF
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
struct Technique : public Object struct Technique : public Object {
{ struct Parameters {
struct Parameters
{
}; };
struct States struct States {
{
}; };
struct Functions struct Functions {
{
}; };
Technique() {} Technique() {}
@ -862,8 +801,7 @@ namespace glTF
}; };
//! A texture and its sampler. //! A texture and its sampler.
struct Texture : public Object struct Texture : public Object {
{
Ref<Sampler> sampler; //!< The ID of the sampler used by this texture. (required) Ref<Sampler> sampler; //!< The ID of the sampler used by this texture. (required)
Ref<Image> source; //!< The ID of the image used by this texture. (required) Ref<Image> source; //!< The ID of the image used by this texture. (required)
@ -877,12 +815,9 @@ namespace glTF
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
//! A light (from KHR_materials_common extension) //! A light (from KHR_materials_common extension)
struct Light : public Object struct Light : public Object {
{ enum Type {
enum Type
{
Type_undefined, Type_undefined,
Type_ambient, Type_ambient,
Type_directional, Type_directional,
@ -906,8 +841,7 @@ namespace glTF
void SetDefaults(); void SetDefaults();
}; };
struct Animation : public Object struct Animation : public Object {
{
struct AnimSampler { struct AnimSampler {
std::string id; //!< The ID of this sampler. std::string id; //!< The ID of this sampler.
std::string input; //!< The ID of a parameter in this animation to use as key-frame input. std::string input; //!< The ID of a parameter in this animation to use as key-frame input.
@ -943,10 +877,8 @@ namespace glTF
void Read(Value &obj, Asset &r); void Read(Value &obj, Asset &r);
}; };
//! Base class for LazyDict that acts as an interface //! Base class for LazyDict that acts as an interface
class LazyDictBase class LazyDictBase {
{
public: public:
virtual ~LazyDictBase() {} virtual ~LazyDictBase() {}
@ -958,7 +890,6 @@ namespace glTF
#endif #endif
}; };
template <class T> template <class T>
class LazyDict; class LazyDict;
@ -966,12 +897,10 @@ namespace glTF
template <class T> template <class T>
void WriteLazyDict(LazyDict<T> &d, AssetWriter &w); void WriteLazyDict(LazyDict<T> &d, AssetWriter &w);
//! Manages lazy loading of the glTF top-level objects, and keeps a reference to them by ID //! Manages lazy loading of the glTF top-level objects, and keeps a reference to them by ID
//! It is the owner the loaded objects, so when it is destroyed it also deletes them //! It is the owner the loaded objects, so when it is destroyed it also deletes them
template <class T> template <class T>
class LazyDict : public LazyDictBase class LazyDict : public LazyDictBase {
{
friend class Asset; friend class Asset;
friend class AssetWriter; friend class AssetWriter;
@ -988,8 +917,7 @@ namespace glTF
void DetachFromDocument(); void DetachFromDocument();
#if !defined(ASSIMP_BUILD_NO_EXPORT) #if !defined(ASSIMP_BUILD_NO_EXPORT)
void WriteObjects(AssetWriter& writer) void WriteObjects(AssetWriter &writer) { WriteLazyDict<T>(*this, writer); }
{ WriteLazyDict<T>(*this, writer); }
#endif #endif
Ref<T> Add(T *obj); Ref<T> Add(T *obj);
@ -1003,20 +931,14 @@ namespace glTF
Ref<T> Get(const std::string &pID) { return Get(pID.c_str()); } Ref<T> Get(const std::string &pID) { return Get(pID.c_str()); }
Ref<T> Create(const char *id); Ref<T> Create(const char *id);
Ref<T> Create(const std::string& id) Ref<T> Create(const std::string &id) { return Create(id.c_str()); }
{ return Create(id.c_str()); }
inline unsigned int Size() const inline unsigned int Size() const { return unsigned(mObjs.size()); }
{ return unsigned(mObjs.size()); }
inline T& operator[](size_t i)
{ return *mObjs[i]; }
inline T &operator[](size_t i) { return *mObjs[i]; }
}; };
struct AssetMetadata {
struct AssetMetadata
{
std::string copyright; //!< A copyright message suitable for display to credit the content creator. std::string copyright; //!< A copyright message suitable for display to credit the content creator.
std::string generator; //!< Tool that generated this glTF model.Useful for debugging. std::string generator; //!< Tool that generated this glTF model.Useful for debugging.
bool premultipliedAlpha; //!< Specifies if the shaders were generated with premultiplied alpha. (default: false) bool premultipliedAlpha; //!< Specifies if the shaders were generated with premultiplied alpha. (default: false)
@ -1030,10 +952,8 @@ namespace glTF
void Read(Document &doc); void Read(Document &doc);
AssetMetadata() AssetMetadata() :
: premultipliedAlpha(false) premultipliedAlpha(false), version() {
, version()
{
} }
}; };
@ -1042,8 +962,7 @@ namespace glTF
// //
//! Root object for a glTF asset //! Root object for a glTF asset
class Asset class Asset {
{
typedef std::gltf_unordered_map<std::string, int> IdMap; typedef std::gltf_unordered_map<std::string, int> IdMap;
template <class T> template <class T>
@ -1071,10 +990,8 @@ namespace glTF
Asset &operator=(const Asset &); Asset &operator=(const Asset &);
public: public:
//! Keeps info about the enabled extensions //! Keeps info about the enabled extensions
struct Extensions struct Extensions {
{
bool KHR_binary_glTF; bool KHR_binary_glTF;
bool KHR_materials_common; bool KHR_materials_common;
@ -1082,7 +999,6 @@ namespace glTF
AssetMetadata asset; AssetMetadata asset;
// Dictionaries for each type of object // Dictionaries for each type of object
LazyDict<Accessor> accessors; LazyDict<Accessor> accessors;
@ -1107,27 +1023,19 @@ namespace glTF
Ref<Scene> scene; Ref<Scene> scene;
public: public:
Asset(IOSystem* io = 0) Asset(IOSystem *io = 0) :
: mIOSystem(io) mIOSystem(io), asset(), accessors(*this, "accessors"), animations(*this, "animations"), buffers(*this, "buffers"), bufferViews(*this, "bufferViews"), cameras(*this, "cameras"), images(*this, "images"), materials(*this, "materials"), meshes(*this, "meshes"), nodes(*this, "nodes")
, asset()
, accessors (*this, "accessors")
, animations (*this, "animations")
, buffers (*this, "buffers")
, bufferViews (*this, "bufferViews")
, cameras (*this, "cameras")
, images (*this, "images")
, materials (*this, "materials")
, meshes (*this, "meshes")
, nodes (*this, "nodes")
//, programs (*this, "programs") //, programs (*this, "programs")
, samplers (*this, "samplers") ,
, scenes (*this, "scenes") samplers(*this, "samplers"),
scenes(*this, "scenes")
//, shaders (*this, "shaders") //, shaders (*this, "shaders")
, skins (*this, "skins") ,
skins(*this, "skins")
//, techniques (*this, "techniques") //, techniques (*this, "techniques")
, textures (*this, "textures") ,
, lights (*this, "lights", "KHR_materials_common") textures(*this, "textures"),
{ lights(*this, "lights", "KHR_materials_common") {
memset(&extensionsUsed, 0, sizeof(extensionsUsed)); memset(&extensionsUsed, 0, sizeof(extensionsUsed));
} }
@ -1140,8 +1048,7 @@ namespace glTF
//! Search for an available name, starting from the given strings //! Search for an available name, starting from the given strings
std::string FindUniqueID(const std::string &str, const char *suffix); std::string FindUniqueID(const std::string &str, const char *suffix);
Ref<Buffer> GetBodyBuffer() Ref<Buffer> GetBodyBuffer() { return mBodyBuffer; }
{ return mBodyBuffer; }
private: private:
void ReadBinaryHeader(IOStream &stream); void ReadBinaryHeader(IOStream &stream);
@ -1151,7 +1058,7 @@ namespace glTF
IOStream *OpenFile(const std::string &path, const char *mode, bool absolute = false); IOStream *OpenFile(const std::string &path, const char *mode, bool absolute = false);
}; };
} } // namespace glTF
// Include the implementation of the methods // Include the implementation of the methods
#include "glTFAsset.inl" #include "glTFAsset.inl"

View File

@ -56,130 +56,11 @@ using namespace glTFCommon;
namespace glTF { namespace glTF {
namespace {
#if _MSC_VER #if _MSC_VER
# pragma warning(push) # pragma warning(push)
# pragma warning(disable : 4706) # pragma warning(disable : 4706)
#endif // _MSC_VER #endif // _MSC_VER
//
// JSON Value reading helpers
//
template <class T>
struct ReadHelper {
static bool Read(Value &val, T &out) {
return val.IsInt() ? out = static_cast<T>(val.GetInt()), true : false;
}
};
template <>
struct ReadHelper<bool> {
static bool Read(Value &val, bool &out) {
return val.IsBool() ? out = val.GetBool(), true : false;
}
};
template <>
struct ReadHelper<float> {
static bool Read(Value &val, float &out) {
return val.IsNumber() ? out = static_cast<float>(val.GetDouble()), true : false;
}
};
template <unsigned int N>
struct ReadHelper<float[N]> {
static bool Read(Value &val, float (&out)[N]) {
if (!val.IsArray() || val.Size() != N) return false;
for (unsigned int i = 0; i < N; ++i) {
if (val[i].IsNumber())
out[i] = static_cast<float>(val[i].GetDouble());
}
return true;
}
};
template <>
struct ReadHelper<const char *> {
static bool Read(Value &val, const char *&out) {
return val.IsString() ? (out = val.GetString(), true) : false;
}
};
template <>
struct ReadHelper<std::string> {
static bool Read(Value &val, std::string &out) {
return val.IsString() ? (out = std::string(val.GetString(), val.GetStringLength()), true) : false;
}
};
template <class T>
struct ReadHelper<Nullable<T>> {
static bool Read(Value &val, Nullable<T> &out) {
return out.isPresent = ReadHelper<T>::Read(val, out.value);
}
};
template <>
struct ReadHelper<uint64_t> {
static bool Read(Value &val, uint64_t &out) {
return val.IsUint64() ? out = val.GetUint64(), true : false;
}
};
template <>
struct ReadHelper<int64_t> {
static bool Read(Value &val, int64_t &out) {
return val.IsInt64() ? out = val.GetInt64(), true : false;
}
};
template <class T>
inline static bool ReadValue(Value &val, T &out) {
return ReadHelper<T>::Read(val, out);
}
template <class T>
inline static bool ReadMember(Value &obj, const char *id, T &out) {
Value::MemberIterator it = obj.FindMember(id);
if (it != obj.MemberEnd()) {
return ReadHelper<T>::Read(it->value, out);
}
return false;
}
template <class T>
inline static T MemberOrDefault(Value &obj, const char *id, T defaultValue) {
T out;
return ReadMember(obj, id, out) ? out : defaultValue;
}
inline Value *FindMember(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd()) ? &it->value : 0;
}
inline Value *FindString(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsString()) ? &it->value : 0;
}
inline Value *FindNumber(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsNumber()) ? &it->value : 0;
}
inline Value *FindArray(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsArray()) ? &it->value : 0;
}
inline Value *FindObject(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsObject()) ? &it->value : 0;
}
} // namespace
// //
// LazyDict methods // LazyDict methods

View File

@ -56,6 +56,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <rapidjson/error/en.h> #include <rapidjson/error/en.h>
#include <rapidjson/rapidjson.h> #include <rapidjson/rapidjson.h>
// clang-format off
#ifdef ASSIMP_API #ifdef ASSIMP_API
# include <assimp/ByteSwapper.h> # include <assimp/ByteSwapper.h>
# include <assimp/DefaultIOSystem.h> # include <assimp/DefaultIOSystem.h>
@ -80,9 +82,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# define gltf_unordered_map unordered_map # define gltf_unordered_map unordered_map
# endif # endif
#endif #endif
// clang-format on
namespace glTFCommon { namespace glTFCommon {
using rapidjson::Document;
using rapidjson::Value;
#ifdef ASSIMP_API #ifdef ASSIMP_API
using Assimp::IOStream; using Assimp::IOStream;
using Assimp::IOSystem; using Assimp::IOSystem;
@ -193,7 +200,6 @@ inline void CopyValue(const glTFCommon::mat4 &v, aiMatrix4x4 &o) {
#endif // _MSC_VER #endif // _MSC_VER
inline std::string getCurrentAssetDir(const std::string &pFile) { inline std::string getCurrentAssetDir(const std::string &pFile) {
std::string path = pFile;
int pos = std::max(int(pFile.rfind('/')), int(pFile.rfind('\\'))); int pos = std::max(int(pFile.rfind('/')), int(pFile.rfind('\\')));
if (pos == int(std::string::npos)) { if (pos == int(std::string::npos)) {
return std::string(); return std::string();
@ -262,6 +268,284 @@ void EncodeBase64(const uint8_t *in, size_t inLength, std::string &out);
#define CHECK_EXT(EXT) \ #define CHECK_EXT(EXT) \
if (exts.find(#EXT) != exts.end()) extensionsUsed.EXT = true; if (exts.find(#EXT) != exts.end()) extensionsUsed.EXT = true;
//! Helper struct to represent values that might not be present
template <class T>
struct Nullable {
T value;
bool isPresent;
Nullable() :
isPresent(false) {}
Nullable(T &val) :
value(val),
isPresent(true) {}
};
//! A reference to one top-level object, which is valid
//! until the Asset instance is destroyed
template <class T>
class Ref {
std::vector<T *> *vector;
unsigned int index;
public:
Ref() :
vector(0),
index(0) {}
Ref(std::vector<T *> &vec, unsigned int idx) :
vector(&vec),
index(idx) {}
inline unsigned int GetIndex() const { return index; }
operator bool() const { return vector != 0; }
T *operator->() { return (*vector)[index]; }
T &operator*() { return *((*vector)[index]); }
};
//
// JSON Value reading helpers
//
template <class T>
struct ReadHelper {
static bool Read(Value &val, T &out) {
return val.IsInt() ? out = static_cast<T>(val.GetInt()), true : false;
}
};
template <>
struct ReadHelper<bool> {
static bool Read(Value &val, bool &out) {
return val.IsBool() ? out = val.GetBool(), true : false;
}
};
template <>
struct ReadHelper<float> {
static bool Read(Value &val, float &out) {
return val.IsNumber() ? out = static_cast<float>(val.GetDouble()), true : false;
}
};
template <unsigned int N>
struct ReadHelper<float[N]> {
static bool Read(Value &val, float (&out)[N]) {
if (!val.IsArray() || val.Size() != N) return false;
for (unsigned int i = 0; i < N; ++i) {
if (val[i].IsNumber())
out[i] = static_cast<float>(val[i].GetDouble());
}
return true;
}
};
template <>
struct ReadHelper<const char *> {
static bool Read(Value &val, const char *&out) {
return val.IsString() ? (out = val.GetString(), true) : false;
}
};
template <>
struct ReadHelper<std::string> {
static bool Read(Value &val, std::string &out) {
return val.IsString() ? (out = std::string(val.GetString(), val.GetStringLength()), true) : false;
}
};
template <class T>
struct ReadHelper<Nullable<T>> {
static bool Read(Value &val, Nullable<T> &out) {
return out.isPresent = ReadHelper<T>::Read(val, out.value);
}
};
template <>
struct ReadHelper<uint64_t> {
static bool Read(Value &val, uint64_t &out) {
return val.IsUint64() ? out = val.GetUint64(), true : false;
}
};
template <>
struct ReadHelper<int64_t> {
static bool Read(Value &val, int64_t &out) {
return val.IsInt64() ? out = val.GetInt64(), true : false;
}
};
template <class T>
inline static bool ReadValue(Value &val, T &out) {
return ReadHelper<T>::Read(val, out);
}
template <class T>
inline static bool ReadMember(Value &obj, const char *id, T &out) {
if (!obj.IsObject()) {
return false;
}
Value::MemberIterator it = obj.FindMember(id);
if (it != obj.MemberEnd()) {
return ReadHelper<T>::Read(it->value, out);
}
return false;
}
template <class T>
inline static T MemberOrDefault(Value &obj, const char *id, T defaultValue) {
T out;
return ReadMember(obj, id, out) ? out : defaultValue;
}
inline Value *FindMember(Value &val, const char *id) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd()) ? &it->value : nullptr;
}
template <int N>
inline void throwUnexpectedTypeError(const char (&expectedTypeName)[N], const char *memberId, const char *context, const char *extraContext) {
std::string fullContext = context;
if (extraContext && (strlen(extraContext) > 0)) {
fullContext = fullContext + " (" + extraContext + ")";
}
throw DeadlyImportError("Member \"", memberId, "\" was not of type \"", expectedTypeName, "\" when reading ", fullContext);
}
// Look-up functions with type checks. Context and extra context help the user identify the problem if there's an error.
inline Value *FindStringInContext(Value &val, const char *memberId, const char *context, const char *extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsString()) {
throwUnexpectedTypeError("string", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindNumberInContext(Value &val, const char *memberId, const char *context, const char *extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsNumber()) {
throwUnexpectedTypeError("number", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindUIntInContext(Value &val, const char *memberId, const char *context, const char *extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsUint()) {
throwUnexpectedTypeError("uint", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindArrayInContext(Value &val, const char *memberId, const char *context, const char *extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsArray()) {
throwUnexpectedTypeError("array", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindObjectInContext(Value &val, const char *memberId, const char *context, const char *extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsObject()) {
throwUnexpectedTypeError("object", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindExtensionInContext(Value &val, const char *extensionId, const char *context, const char *extraContext = nullptr) {
if (Value *extensionList = FindObjectInContext(val, "extensions", context, extraContext)) {
if (Value *extension = FindObjectInContext(*extensionList, extensionId, context, extraContext)) {
return extension;
}
}
return nullptr;
}
// Overloads when the value is the document.
inline Value *FindString(Document &doc, const char *memberId) {
return FindStringInContext(doc, memberId, "the document");
}
inline Value *FindNumber(Document &doc, const char *memberId) {
return FindNumberInContext(doc, memberId, "the document");
}
inline Value *FindUInt(Document &doc, const char *memberId) {
return FindUIntInContext(doc, memberId, "the document");
}
inline Value *FindArray(Document &val, const char *memberId) {
return FindArrayInContext(val, memberId, "the document");
}
inline Value *FindObject(Document &doc, const char *memberId) {
return FindObjectInContext(doc, memberId, "the document");
}
inline Value *FindExtension(Value &val, const char *extensionId) {
return FindExtensionInContext(val, extensionId, "the document");
}
inline Value *FindString(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsString()) ? &it->value : 0;
}
inline Value *FindObject(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsObject()) ? &it->value : 0;
}
inline Value *FindArray(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsArray()) ? &it->value : 0;
}
inline Value *FindNumber(Value &val, const char *id) {
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd() && it->value.IsNumber()) ? &it->value : 0;
}
} // namespace glTFCommon } // namespace glTFCommon
#endif // ASSIMP_BUILD_NO_GLTF_IMPORTER #endif // ASSIMP_BUILD_NO_GLTF_IMPORTER

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -43,35 +42,37 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file GltfExporter.h /** @file GltfExporter.h
* Declares the exporter class to write a scene to a gltf/glb file * Declares the exporter class to write a scene to a gltf/glb file
*/ */
#pragma once
#ifndef AI_GLTFEXPORTER_H_INC #ifndef AI_GLTFEXPORTER_H_INC
#define AI_GLTFEXPORTER_H_INC #define AI_GLTFEXPORTER_H_INC
#if !defined(ASSIMP_BUILD_NO_GLTF_EXPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_EXPORTER) #if !defined(ASSIMP_BUILD_NO_GLTF_EXPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_EXPORTER)
#include <assimp/types.h>
#include <assimp/material.h> #include <assimp/material.h>
#include <assimp/types.h>
#include <sstream>
#include <vector>
#include <map> #include <map>
#include <memory> #include <memory>
#include <sstream>
#include <vector>
struct aiScene; struct aiScene;
struct aiNode; struct aiNode;
struct aiMaterial;
namespace glTF namespace glTFCommon {
{
template <class T> template <class T>
class Ref; class Ref;
}
namespace glTF {
class Asset; class Asset;
struct TexProperty; struct TexProperty;
struct Node; struct Node;
}
namespace Assimp } // namespace glTF
{
namespace Assimp {
class IOSystem; class IOSystem;
class IOStream; class IOStream;
class ExportProperties; class ExportProperties;
@ -79,15 +80,13 @@ namespace Assimp
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
/** Helper class to export a given scene to an glTF file. */ /** Helper class to export a given scene to an glTF file. */
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
class glTFExporter class glTFExporter {
{
public: public:
/// Constructor for a specific scene to export /// Constructor for a specific scene to export
glTFExporter(const char *filename, IOSystem *pIOSystem, const aiScene *pScene, glTFExporter(const char *filename, IOSystem *pIOSystem, const aiScene *pScene,
const ExportProperties *pProperties, bool binary); const ExportProperties *pProperties, bool binary);
private: private:
const char *mFilename; const char *mFilename;
IOSystem *mIOSystem; IOSystem *mIOSystem;
std::shared_ptr<const aiScene> mScene; std::shared_ptr<const aiScene> mScene;
@ -107,12 +106,12 @@ namespace Assimp
void ExportMaterials(); void ExportMaterials();
void ExportMeshes(); void ExportMeshes();
unsigned int ExportNodeHierarchy(const aiNode *n); unsigned int ExportNodeHierarchy(const aiNode *n);
unsigned int ExportNode(const aiNode* node, glTF::Ref<glTF::Node>& parent); unsigned int ExportNode(const aiNode *node, glTFCommon::Ref<glTF::Node> & parent);
void ExportScene(); void ExportScene();
void ExportAnimations(); void ExportAnimations();
}; };
} } // namespace Assimp
#endif // ASSIMP_BUILD_NO_GLTF_EXPORTER #endif // ASSIMP_BUILD_NO_GLTF_EXPORTER

View File

@ -39,6 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
#pragma once
#ifndef AI_GLTFIMPORTER_H_INC #ifndef AI_GLTFIMPORTER_H_INC
#define AI_GLTFIMPORTER_H_INC #define AI_GLTFIMPORTER_H_INC
@ -47,10 +48,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
struct aiNode; struct aiNode;
namespace glTF {
namespace glTF
{
class Asset; class Asset;
} }
namespace Assimp { namespace Assimp {
@ -62,21 +62,14 @@ namespace Assimp {
class glTFImporter : public BaseImporter { class glTFImporter : public BaseImporter {
public: public:
glTFImporter(); glTFImporter();
virtual ~glTFImporter(); ~glTFImporter() override;
virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const; bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
protected: protected:
virtual const aiImporterDesc* GetInfo() const; const aiImporterDesc *GetInfo() const override;
virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler ); void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
private: private:
std::vector<unsigned int> meshOffsets;
std::vector<int> embeddedTexIdxs;
aiScene* mScene;
void ImportEmbeddedTextures(glTF::Asset &a); void ImportEmbeddedTextures(glTF::Asset &a);
void ImportMaterials(glTF::Asset &a); void ImportMaterials(glTF::Asset &a);
void ImportMeshes(glTF::Asset &a); void ImportMeshes(glTF::Asset &a);
@ -84,9 +77,13 @@ private:
void ImportLights(glTF::Asset &a); void ImportLights(glTF::Asset &a);
void ImportNodes(glTF::Asset &a); void ImportNodes(glTF::Asset &a);
void ImportCommonMetadata(glTF::Asset &a); void ImportCommonMetadata(glTF::Asset &a);
private:
std::vector<unsigned int> meshOffsets;
std::vector<int> embeddedTexIdxs;
aiScene *mScene;
}; };
} // Namespace assimp } // namespace Assimp
#endif // AI_GLTFIMPORTER_H_INC #endif // AI_GLTFIMPORTER_H_INC

View File

@ -65,6 +65,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <string> #include <string>
#include <vector> #include <vector>
// clang-format off
#if (__GNUC__ == 8 && __GNUC_MINOR__ >= 0) #if (__GNUC__ == 8 && __GNUC_MINOR__ >= 0)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wclass-memaccess" #pragma GCC diagnostic ignored "-Wclass-memaccess"
@ -106,6 +107,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# define gltf_unordered_set unordered_set # define gltf_unordered_set unordered_set
# endif # endif
#endif #endif
// clang-format on
#include <assimp/StringUtils.h> #include <assimp/StringUtils.h>
@ -113,6 +115,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace glTF2 { namespace glTF2 {
using glTFCommon::Nullable;
using glTFCommon::Ref;
using glTFCommon::IOStream; using glTFCommon::IOStream;
using glTFCommon::IOSystem; using glTFCommon::IOSystem;
using glTFCommon::shared_ptr; using glTFCommon::shared_ptr;
@ -319,44 +323,9 @@ const AttribType::Info
{ "SCALAR", 1 }, { "VEC2", 2 }, { "VEC3", 3 }, { "VEC4", 4 }, { "MAT2", 4 }, { "MAT3", 9 }, { "MAT4", 16 } { "SCALAR", 1 }, { "VEC2", 2 }, { "VEC3", 3 }, { "VEC4", 4 }, { "MAT2", 4 }, { "MAT3", 9 }, { "MAT4", 16 }
}; };
//! A reference to one top-level object, which is valid
//! until the Asset instance is destroyed
template <class T>
class Ref {
std::vector<T *> *vector;
unsigned int index;
public:
Ref() :
vector(0),
index(0) {}
Ref(std::vector<T *> &vec, unsigned int idx) :
vector(&vec),
index(idx) {}
inline unsigned int GetIndex() const { return index; }
operator bool() const { return vector != 0; }
T *operator->() { return (*vector)[index]; }
T &operator*() { return *((*vector)[index]); }
};
//! Helper struct to represent values that might not be present
template <class T>
struct Nullable {
T value;
bool isPresent;
Nullable() :
isPresent(false) {}
Nullable(T &val) :
value(val),
isPresent(true) {}
};
struct CustomExtension { struct CustomExtension {
// //
// A struct containing custom extension data added to a glTF2 file // A struct containing custom extension data added to a glTF2 file
// Has to contain Object, Array, String, Double, Uint64, and Int64 at a minimum // Has to contain Object, Array, String, Double, Uint64, and Int64 at a minimum
@ -553,7 +522,7 @@ public:
void MarkAsSpecial() { mIsSpecial = true; } void MarkAsSpecial() { mIsSpecial = true; }
bool IsSpecial() const { return mIsSpecial; } bool IsSpecial() const override { return mIsSpecial; }
std::string GetURI() { return std::string(this->id) + ".bin"; } std::string GetURI() { return std::string(this->id) + ".bin"; }
@ -849,7 +818,7 @@ struct Material : public Object {
//! A set of primitives to be rendered. A node can contain one or more meshes. A node's transform places the mesh in the scene. //! A set of primitives to be rendered. A node can contain one or more meshes. A node's transform places the mesh in the scene.
struct Mesh : public Object { struct Mesh : public Object {
typedef std::vector<Ref<Accessor>> AccessorList; using AccessorList = std::vector<Ref<Accessor>>;
struct Primitive { struct Primitive {
PrimitiveMode mode; PrimitiveMode mode;
@ -880,7 +849,6 @@ struct Mesh : public Object {
Mesh() {} Mesh() {}
/// \fn void Read(Value& pJSON_Object, Asset& pAsset_Root)
/// Get mesh data from JSON-object and place them to root asset. /// Get mesh data from JSON-object and place them to root asset.
/// \param [in] pJSON_Object - reference to pJSON-object from which data are read. /// \param [in] pJSON_Object - reference to pJSON-object from which data are read.
/// \param [out] pAsset_Root - reference to root asset where data will be stored. /// \param [out] pAsset_Root - reference to root asset where data will be stored.
@ -1023,8 +991,8 @@ class LazyDict : public LazyDictBase {
friend class Asset; friend class Asset;
friend class AssetWriter; friend class AssetWriter;
typedef typename std::gltf_unordered_map<unsigned int, unsigned int> Dict; using Dict = typename std::gltf_unordered_map<unsigned int, unsigned int>;
typedef typename std::gltf_unordered_map<std::string, unsigned int> IdDict; using IdDict = typename std::gltf_unordered_map<std::string, unsigned int>;
std::vector<T *> mObjs; //! The read objects std::vector<T *> mObjs; //! The read objects
Dict mObjsByOIndex; //! The read objects accessible by original index Dict mObjsByOIndex; //! The read objects accessible by original index
@ -1087,7 +1055,7 @@ struct AssetMetadata {
//! Root object for a glTF asset //! Root object for a glTF asset
class Asset { class Asset {
typedef std::gltf_unordered_map<std::string, int> IdMap; using IdMap = std::gltf_unordered_map<std::string, int>;
template <class T> template <class T>
friend class LazyDict; friend class LazyDict;

View File

@ -45,6 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/StringUtils.h> #include <assimp/StringUtils.h>
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>
// clang-format off
#ifdef ASSIMP_ENABLE_DRACO #ifdef ASSIMP_ENABLE_DRACO
// Google draco library headers spew many warnings. Bad Google, no cookie // Google draco library headers spew many warnings. Bad Google, no cookie
@ -77,8 +78,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# error glTF: KHR_draco_mesh_compression: draco library must have DRACO_MESH_COMPRESSION_SUPPORTED # error glTF: KHR_draco_mesh_compression: draco library must have DRACO_MESH_COMPRESSION_SUPPORTED
#endif #endif
#endif #endif
// clang-format on
using namespace Assimp; using namespace Assimp;
using namespace glTFCommon;
namespace glTF2 { namespace glTF2 {
@ -88,222 +91,6 @@ namespace {
// JSON Value reading helpers // JSON Value reading helpers
// //
template <class T>
struct ReadHelper {
static bool Read(Value &val, T &out) {
return val.IsInt() ? out = static_cast<T>(val.GetInt()), true : false;
}
};
template <>
struct ReadHelper<bool> {
static bool Read(Value &val, bool &out) {
return val.IsBool() ? out = val.GetBool(), true : false;
}
};
template <>
struct ReadHelper<float> {
static bool Read(Value &val, float &out) {
return val.IsNumber() ? out = static_cast<float>(val.GetDouble()), true : false;
}
};
template <unsigned int N>
struct ReadHelper<float[N]> {
static bool Read(Value &val, float (&out)[N]) {
if (!val.IsArray() || val.Size() != N) return false;
for (unsigned int i = 0; i < N; ++i) {
if (val[i].IsNumber())
out[i] = static_cast<float>(val[i].GetDouble());
}
return true;
}
};
template <>
struct ReadHelper<const char *> {
static bool Read(Value &val, const char *&out) {
return val.IsString() ? (out = val.GetString(), true) : false;
}
};
template <>
struct ReadHelper<std::string> {
static bool Read(Value &val, std::string &out) {
return val.IsString() ? (out = std::string(val.GetString(), val.GetStringLength()), true) : false;
}
};
template <>
struct ReadHelper<uint64_t> {
static bool Read(Value &val, uint64_t &out) {
return val.IsUint64() ? out = val.GetUint64(), true : false;
}
};
template <>
struct ReadHelper<int64_t> {
static bool Read(Value &val, int64_t &out) {
return val.IsInt64() ? out = val.GetInt64(), true : false;
}
};
template <class T>
struct ReadHelper<Nullable<T>> {
static bool Read(Value &val, Nullable<T> &out) {
return out.isPresent = ReadHelper<T>::Read(val, out.value);
}
};
template <class T>
inline static bool ReadValue(Value &val, T &out) {
return ReadHelper<T>::Read(val, out);
}
template <class T>
inline static bool ReadMember(Value &obj, const char *id, T &out) {
if (!obj.IsObject()) {
return false;
}
Value::MemberIterator it = obj.FindMember(id);
if (it != obj.MemberEnd()) {
return ReadHelper<T>::Read(it->value, out);
}
return false;
}
template <class T>
inline static T MemberOrDefault(Value &obj, const char *id, T defaultValue) {
T out;
return ReadMember(obj, id, out) ? out : defaultValue;
}
inline Value *FindMember(Value &val, const char *id) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(id);
return (it != val.MemberEnd()) ? &it->value : nullptr;
}
template<int N>
inline void throwUnexpectedTypeError(const char (&expectedTypeName)[N], const char* memberId, const char* context, const char* extraContext) {
std::string fullContext = context;
if (extraContext && (strlen(extraContext) > 0))
{
fullContext = fullContext + " (" + extraContext + ")";
}
throw DeadlyImportError("Member \"", memberId, "\" was not of type \"", expectedTypeName, "\" when reading ", fullContext);
}
// Look-up functions with type checks. Context and extra context help the user identify the problem if there's an error.
inline Value *FindStringInContext(Value &val, const char *memberId, const char* context, const char* extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsString()) {
throwUnexpectedTypeError("string", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindNumberInContext(Value &val, const char *memberId, const char* context, const char* extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsNumber()) {
throwUnexpectedTypeError("number", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindUIntInContext(Value &val, const char *memberId, const char* context, const char* extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsUint()) {
throwUnexpectedTypeError("uint", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindArrayInContext(Value &val, const char *memberId, const char* context, const char* extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsArray()) {
throwUnexpectedTypeError("array", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindObjectInContext(Value &val, const char *memberId, const char* context, const char* extraContext = nullptr) {
if (!val.IsObject()) {
return nullptr;
}
Value::MemberIterator it = val.FindMember(memberId);
if (it == val.MemberEnd()) {
return nullptr;
}
if (!it->value.IsObject()) {
throwUnexpectedTypeError("object", memberId, context, extraContext);
}
return &it->value;
}
inline Value *FindExtensionInContext(Value &val, const char *extensionId, const char* context, const char* extraContext = nullptr) {
if (Value *extensionList = FindObjectInContext(val, "extensions", context, extraContext)) {
if (Value *extension = FindObjectInContext(*extensionList, extensionId, context, extraContext)) {
return extension;
}
}
return nullptr;
}
// Overloads when the value is the document.
inline Value *FindString(Document &doc, const char *memberId) {
return FindStringInContext(doc, memberId, "the document");
}
inline Value *FindNumber(Document &doc, const char *memberId) {
return FindNumberInContext(doc, memberId, "the document");
}
inline Value *FindUInt(Document &doc, const char *memberId) {
return FindUIntInContext(doc, memberId, "the document");
}
inline Value *FindArray(Document &val, const char *memberId) {
return FindArrayInContext(val, memberId, "the document");
}
inline Value *FindObject(Document &doc, const char *memberId) {
return FindObjectInContext(doc, memberId, "the document");
}
inline Value *FindExtension(Value &val, const char *extensionId) {
return FindExtensionInContext(val, extensionId, "the document");
}
inline CustomExtension ReadExtensions(const char *name, Value &obj) { inline CustomExtension ReadExtensions(const char *name, Value &obj) {
CustomExtension ret; CustomExtension ret;
ret.name = name; ret.name = name;

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -46,21 +45,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "AssetLib/glTF2/glTF2AssetWriter.h" #include "AssetLib/glTF2/glTF2AssetWriter.h"
#include "PostProcessing/SplitLargeMeshes.h" #include "PostProcessing/SplitLargeMeshes.h"
#include <assimp/commonMetaData.h>
#include <assimp/Exceptional.h>
#include <assimp/StringComparison.h>
#include <assimp/ByteSwapper.h> #include <assimp/ByteSwapper.h>
#include <assimp/Exceptional.h>
#include <assimp/SceneCombiner.h> #include <assimp/SceneCombiner.h>
#include <assimp/version.h> #include <assimp/StringComparison.h>
#include <assimp/IOSystem.hpp> #include <assimp/commonMetaData.h>
#include <assimp/Exporter.hpp>
#include <assimp/material.h> #include <assimp/material.h>
#include <assimp/scene.h> #include <assimp/scene.h>
#include <assimp/version.h>
#include <assimp/Exporter.hpp>
#include <assimp/IOSystem.hpp>
// Header files, standard library. // Header files, standard library.
#include <memory> #include <cinttypes>
#include <limits> #include <limits>
#include <inttypes.h> #include <memory>
using namespace rapidjson; using namespace rapidjson;
@ -71,16 +70,14 @@ namespace Assimp {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Worker function for exporting a scene to GLTF. Prototyped and registered in Exporter.cpp // Worker function for exporting a scene to GLTF. Prototyped and registered in Exporter.cpp
void ExportSceneGLTF2(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) void ExportSceneGLTF2(const char *pFile, IOSystem *pIOSystem, const aiScene *pScene, const ExportProperties *pProperties) {
{
// invoke the exporter // invoke the exporter
glTF2Exporter exporter(pFile, pIOSystem, pScene, pProperties, false); glTF2Exporter exporter(pFile, pIOSystem, pScene, pProperties, false);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Worker function for exporting a scene to GLB. Prototyped and registered in Exporter.cpp // Worker function for exporting a scene to GLB. Prototyped and registered in Exporter.cpp
void ExportSceneGLB2(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* pProperties) void ExportSceneGLB2(const char *pFile, IOSystem *pIOSystem, const aiScene *pScene, const ExportProperties *pProperties) {
{
// invoke the exporter // invoke the exporter
glTF2Exporter exporter(pFile, pIOSystem, pScene, pProperties, true); glTF2Exporter exporter(pFile, pIOSystem, pScene, pProperties, true);
} }
@ -88,13 +85,8 @@ namespace Assimp {
} // end of namespace Assimp } // end of namespace Assimp
glTF2Exporter::glTF2Exporter(const char *filename, IOSystem *pIOSystem, const aiScene *pScene, glTF2Exporter::glTF2Exporter(const char *filename, IOSystem *pIOSystem, const aiScene *pScene,
const ExportProperties* pProperties, bool isBinary) const ExportProperties *pProperties, bool isBinary) :
: mFilename(filename) mFilename(filename), mIOSystem(pIOSystem), mScene(pScene), mProperties(pProperties), mAsset(new Asset(pIOSystem)) {
, mIOSystem(pIOSystem)
, mScene(pScene)
, mProperties(pProperties)
, mAsset(new Asset(pIOSystem))
{
// Always on as our triangulation process is aware of this type of encoding // Always on as our triangulation process is aware of this type of encoding
mAsset->extensionsUsed.FB_ngon_encoding = true; mAsset->extensionsUsed.FB_ngon_encoding = true;
@ -118,8 +110,7 @@ glTF2Exporter::glTF2Exporter(const char* filename, IOSystem* pIOSystem, const ai
ExportAnimations(); ExportAnimations();
// export extras // export extras
if(mProperties->HasPropertyCallback("extras")) if (mProperties->HasPropertyCallback("extras")) {
{
std::function<void *(void *)> ExportExtras = mProperties->GetPropertyCallback("extras"); std::function<void *(void *)> ExportExtras = mProperties->GetPropertyCallback("extras");
mAsset->extras = (rapidjson::Value *)ExportExtras(0); mAsset->extras = (rapidjson::Value *)ExportExtras(0);
} }
@ -142,10 +133,22 @@ glTF2Exporter::~glTF2Exporter() {
* Also converts from row-major to column-major storage. * Also converts from row-major to column-major storage.
*/ */
static void CopyValue(const aiMatrix4x4 &v, mat4 &o) { static void CopyValue(const aiMatrix4x4 &v, mat4 &o) {
o[ 0] = v.a1; o[ 1] = v.b1; o[ 2] = v.c1; o[ 3] = v.d1; o[0] = v.a1;
o[ 4] = v.a2; o[ 5] = v.b2; o[ 6] = v.c2; o[ 7] = v.d2; o[1] = v.b1;
o[ 8] = v.a3; o[ 9] = v.b3; o[10] = v.c3; o[11] = v.d3; o[2] = v.c1;
o[12] = v.a4; o[13] = v.b4; o[14] = v.c4; o[15] = v.d4; o[3] = v.d1;
o[4] = v.a2;
o[5] = v.b2;
o[6] = v.c2;
o[7] = v.d2;
o[8] = v.a3;
o[9] = v.b3;
o[10] = v.c3;
o[11] = v.d3;
o[12] = v.a4;
o[13] = v.b4;
o[14] = v.c4;
o[15] = v.d4;
} }
static void CopyValue(const aiMatrix4x4 &v, aiMatrix4x4 &o) { static void CopyValue(const aiMatrix4x4 &v, aiMatrix4x4 &o) {
@ -153,16 +156,27 @@ static void CopyValue(const aiMatrix4x4& v, aiMatrix4x4& o) {
} }
static void IdentityMatrix4(mat4 &o) { static void IdentityMatrix4(mat4 &o) {
o[ 0] = 1; o[ 1] = 0; o[ 2] = 0; o[ 3] = 0; o[0] = 1;
o[ 4] = 0; o[ 5] = 1; o[ 6] = 0; o[ 7] = 0; o[1] = 0;
o[ 8] = 0; o[ 9] = 0; o[10] = 1; o[11] = 0; o[2] = 0;
o[12] = 0; o[13] = 0; o[14] = 0; o[15] = 1; o[3] = 0;
o[4] = 0;
o[5] = 1;
o[6] = 0;
o[7] = 0;
o[8] = 0;
o[9] = 0;
o[10] = 1;
o[11] = 0;
o[12] = 0;
o[13] = 0;
o[14] = 0;
o[15] = 1;
} }
template <typename T> template <typename T>
void SetAccessorRange(Ref<Accessor> acc, void *data, size_t count, void SetAccessorRange(Ref<Accessor> acc, void *data, size_t count,
unsigned int numCompsIn, unsigned int numCompsOut) unsigned int numCompsIn, unsigned int numCompsOut) {
{
ai_assert(numCompsOut <= numCompsIn); ai_assert(numCompsOut <= numCompsIn);
// Allocate and initialize with large values. // Allocate and initialize with large values.
@ -198,8 +212,7 @@ void SetAccessorRange(Ref<Accessor> acc, void* data, size_t count,
} }
inline void SetAccessorRange(ComponentType compType, Ref<Accessor> acc, void *data, inline void SetAccessorRange(ComponentType compType, Ref<Accessor> acc, void *data,
size_t count, unsigned int numCompsIn, unsigned int numCompsOut) size_t count, unsigned int numCompsIn, unsigned int numCompsOut) {
{
switch (compType) { switch (compType) {
case ComponentType_SHORT: case ComponentType_SHORT:
SetAccessorRange<short>(acc, data, count, numCompsIn, numCompsOut); SetAccessorRange<short>(acc, data, count, numCompsIn, numCompsOut);
@ -375,8 +388,7 @@ inline Ref<Accessor> ExportDataSparse(Asset &a, std::string &meshName, Ref<Buffe
return acc; return acc;
} }
inline Ref<Accessor> ExportData(Asset &a, std::string &meshName, Ref<Buffer> &buffer, inline Ref<Accessor> ExportData(Asset &a, std::string &meshName, Ref<Buffer> &buffer,
size_t count, void* data, AttribType::Value typeIn, AttribType::Value typeOut, ComponentType compType, BufferViewTarget target = BufferViewTarget_NONE) size_t count, void *data, AttribType::Value typeIn, AttribType::Value typeOut, ComponentType compType, BufferViewTarget target = BufferViewTarget_NONE) {
{
if (!count || !data) { if (!count || !data) {
return Ref<Accessor>(); return Ref<Accessor>();
} }
@ -417,8 +429,7 @@ inline Ref<Accessor> ExportData(Asset& a, std::string& meshName, Ref<Buffer>& bu
return acc; return acc;
} }
inline void SetSamplerWrap(SamplerWrap& wrap, aiTextureMapMode map) inline void SetSamplerWrap(SamplerWrap &wrap, aiTextureMapMode map) {
{
switch (map) { switch (map) {
case aiTextureMapMode_Clamp: case aiTextureMapMode_Clamp:
wrap = SamplerWrap::Clamp_To_Edge; wrap = SamplerWrap::Clamp_To_Edge;
@ -434,8 +445,7 @@ inline void SetSamplerWrap(SamplerWrap& wrap, aiTextureMapMode map)
}; };
} }
void glTF2Exporter::GetTexSampler(const aiMaterial& mat, Ref<Texture> texture, aiTextureType tt, unsigned int slot) void glTF2Exporter::GetTexSampler(const aiMaterial &mat, Ref<Texture> texture, aiTextureType tt, unsigned int slot) {
{
aiString aId; aiString aId;
std::string id; std::string id;
if (aiGetMaterialString(&mat, AI_MATKEY_GLTF_MAPPINGID(tt, slot), &aId) == AI_SUCCESS) { if (aiGetMaterialString(&mat, AI_MATKEY_GLTF_MAPPINGID(tt, slot), &aId) == AI_SUCCESS) {
@ -476,22 +486,19 @@ void glTF2Exporter::GetTexSampler(const aiMaterial& mat, Ref<Texture> texture, a
} }
} }
void glTF2Exporter::GetMatTexProp(const aiMaterial& mat, unsigned int& prop, const char* propName, aiTextureType tt, unsigned int slot) void glTF2Exporter::GetMatTexProp(const aiMaterial &mat, unsigned int &prop, const char *propName, aiTextureType tt, unsigned int slot) {
{
std::string textureKey = std::string(_AI_MATKEY_TEXTURE_BASE) + "." + propName; std::string textureKey = std::string(_AI_MATKEY_TEXTURE_BASE) + "." + propName;
mat.Get(textureKey.c_str(), tt, slot, prop); mat.Get(textureKey.c_str(), tt, slot, prop);
} }
void glTF2Exporter::GetMatTexProp(const aiMaterial& mat, float& prop, const char* propName, aiTextureType tt, unsigned int slot) void glTF2Exporter::GetMatTexProp(const aiMaterial &mat, float &prop, const char *propName, aiTextureType tt, unsigned int slot) {
{
std::string textureKey = std::string(_AI_MATKEY_TEXTURE_BASE) + "." + propName; std::string textureKey = std::string(_AI_MATKEY_TEXTURE_BASE) + "." + propName;
mat.Get(textureKey.c_str(), tt, slot, prop); mat.Get(textureKey.c_str(), tt, slot, prop);
} }
void glTF2Exporter::GetMatTex(const aiMaterial& mat, Ref<Texture>& texture, unsigned int &texCoord, aiTextureType tt, unsigned int slot = 0) void glTF2Exporter::GetMatTex(const aiMaterial &mat, Ref<Texture> &texture, unsigned int &texCoord, aiTextureType tt, unsigned int slot = 0) {
{
if (mat.GetTextureCount(tt) > 0) { if (mat.GetTextureCount(tt) > 0) {
aiString tex; aiString tex;
@ -528,16 +535,13 @@ void glTF2Exporter::GetMatTex(const aiMaterial& mat, Ref<Texture>& texture, unsi
else if (memcmp(curTex->achFormatHint, "ktx", 3) == 0) { else if (memcmp(curTex->achFormatHint, "ktx", 3) == 0) {
useBasisUniversal = true; useBasisUniversal = true;
mimeType += "ktx"; mimeType += "ktx";
} } else if (memcmp(curTex->achFormatHint, "kx2", 3) == 0) {
else if(memcmp(curTex->achFormatHint, "kx2", 3) == 0) {
useBasisUniversal = true; useBasisUniversal = true;
mimeType += "ktx2"; mimeType += "ktx2";
} } else if (memcmp(curTex->achFormatHint, "bu", 2) == 0) {
else if(memcmp(curTex->achFormatHint, "bu", 2) == 0) {
useBasisUniversal = true; useBasisUniversal = true;
mimeType += "basis"; mimeType += "basis";
} } else
else
mimeType += curTex->achFormatHint; mimeType += curTex->achFormatHint;
texture->source->mimeType = mimeType; texture->source->mimeType = mimeType;
} }
@ -545,12 +549,10 @@ void glTF2Exporter::GetMatTex(const aiMaterial& mat, Ref<Texture>& texture, unsi
// The asset has its own buffer, see Image::SetData // The asset has its own buffer, see Image::SetData
//basisu: "image/ktx2", "image/basis" as is //basisu: "image/ktx2", "image/basis" as is
texture->source->SetData(reinterpret_cast<uint8_t *>(curTex->pcData), curTex->mWidth, *mAsset); texture->source->SetData(reinterpret_cast<uint8_t *>(curTex->pcData), curTex->mWidth, *mAsset);
} } else {
else {
texture->source->uri = path; texture->source->uri = path;
if (texture->source->uri.find(".ktx") != std::string::npos || if (texture->source->uri.find(".ktx") != std::string::npos ||
texture->source->uri.find(".basis")!=std::string::npos) texture->source->uri.find(".basis") != std::string::npos) {
{
useBasisUniversal = true; useBasisUniversal = true;
} }
} }
@ -568,8 +570,7 @@ void glTF2Exporter::GetMatTex(const aiMaterial& mat, Ref<Texture>& texture, unsi
} }
} }
void glTF2Exporter::GetMatTex(const aiMaterial& mat, TextureInfo& prop, aiTextureType tt, unsigned int slot = 0) void glTF2Exporter::GetMatTex(const aiMaterial &mat, TextureInfo &prop, aiTextureType tt, unsigned int slot = 0) {
{
Ref<Texture> &texture = prop.texture; Ref<Texture> &texture = prop.texture;
GetMatTex(mat, texture, prop.texCoord, tt, slot); GetMatTex(mat, texture, prop.texCoord, tt, slot);
@ -579,8 +580,7 @@ void glTF2Exporter::GetMatTex(const aiMaterial& mat, TextureInfo& prop, aiTextur
//} //}
} }
void glTF2Exporter::GetMatTex(const aiMaterial& mat, NormalTextureInfo& prop, aiTextureType tt, unsigned int slot = 0) void glTF2Exporter::GetMatTex(const aiMaterial &mat, NormalTextureInfo &prop, aiTextureType tt, unsigned int slot = 0) {
{
Ref<Texture> &texture = prop.texture; Ref<Texture> &texture = prop.texture;
GetMatTex(mat, texture, prop.texCoord, tt, slot); GetMatTex(mat, texture, prop.texCoord, tt, slot);
@ -591,8 +591,7 @@ void glTF2Exporter::GetMatTex(const aiMaterial& mat, NormalTextureInfo& prop, ai
} }
} }
void glTF2Exporter::GetMatTex(const aiMaterial& mat, OcclusionTextureInfo& prop, aiTextureType tt, unsigned int slot = 0) void glTF2Exporter::GetMatTex(const aiMaterial &mat, OcclusionTextureInfo &prop, aiTextureType tt, unsigned int slot = 0) {
{
Ref<Texture> &texture = prop.texture; Ref<Texture> &texture = prop.texture;
GetMatTex(mat, texture, prop.texCoord, tt, slot); GetMatTex(mat, texture, prop.texCoord, tt, slot);
@ -603,20 +602,21 @@ void glTF2Exporter::GetMatTex(const aiMaterial& mat, OcclusionTextureInfo& prop,
} }
} }
aiReturn glTF2Exporter::GetMatColor(const aiMaterial& mat, vec4& prop, const char* propName, int type, int idx) const aiReturn glTF2Exporter::GetMatColor(const aiMaterial &mat, vec4 &prop, const char *propName, int type, int idx) const {
{
aiColor4D col; aiColor4D col;
aiReturn result = mat.Get(propName, type, idx, col); aiReturn result = mat.Get(propName, type, idx, col);
if (result == AI_SUCCESS) { if (result == AI_SUCCESS) {
prop[0] = col.r; prop[1] = col.g; prop[2] = col.b; prop[3] = col.a; prop[0] = col.r;
prop[1] = col.g;
prop[2] = col.b;
prop[3] = col.a;
} }
return result; return result;
} }
aiReturn glTF2Exporter::GetMatColor(const aiMaterial& mat, vec3& prop, const char* propName, int type, int idx) const aiReturn glTF2Exporter::GetMatColor(const aiMaterial &mat, vec3 &prop, const char *propName, int type, int idx) const {
{
aiColor3D col; aiColor3D col;
aiReturn result = mat.Get(propName, type, idx, col); aiReturn result = mat.Get(propName, type, idx, col);
@ -704,8 +704,7 @@ bool glTF2Exporter::GetMatTransmission(const aiMaterial &mat, glTF2::MaterialTra
return result || transmission.transmissionTexture.texture; return result || transmission.transmissionTexture.texture;
} }
void glTF2Exporter::ExportMaterials() void glTF2Exporter::ExportMaterials() {
{
aiString aiName; aiString aiName;
for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) { for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) {
ai_assert(mScene->mMaterials[i] != nullptr); ai_assert(mScene->mMaterials[i] != nullptr);
@ -752,8 +751,7 @@ void glTF2Exporter::ExportMaterials()
if ( if (
mat.Get(AI_MATKEY_COLOR_SPECULAR, specularColor) == AI_SUCCESS && mat.Get(AI_MATKEY_COLOR_SPECULAR, specularColor) == AI_SUCCESS &&
mat.Get(AI_MATKEY_SHININESS, shininess) == AI_SUCCESS mat.Get(AI_MATKEY_SHININESS, shininess) == AI_SUCCESS) {
) {
// convert specular color to luminance // convert specular color to luminance
float specularIntensity = specularColor[0] * 0.2125f + specularColor[1] * 0.7154f + specularColor[2] * 0.0721f; float specularIntensity = specularColor[0] * 0.2125f + specularColor[1] * 0.7154f + specularColor[2] * 0.0721f;
//normalize shininess (assuming max is 1000) with an inverse exponentional curve //normalize shininess (assuming max is 1000) with an inverse exponentional curve
@ -858,8 +856,7 @@ bool FindMeshNode(Ref<Node> &nodeIn, Ref<Node> &meshNode, const std::string &mes
* until a parent is found that does not have a jointName. * until a parent is found that does not have a jointName.
* Returns the first parent Ref<Node> found that does not have a jointName. * Returns the first parent Ref<Node> found that does not have a jointName.
*/ */
Ref<Node> FindSkeletonRootJoint(Ref<Skin>& skinRef) Ref<Node> FindSkeletonRootJoint(Ref<Skin> &skinRef) {
{
Ref<Node> startNodeRef; Ref<Node> startNodeRef;
Ref<Node> parentNodeRef; Ref<Node> parentNodeRef;
@ -875,8 +872,7 @@ Ref<Node> FindSkeletonRootJoint(Ref<Skin>& skinRef)
return parentNodeRef; return parentNodeRef;
} }
void ExportSkin(Asset& mAsset, const aiMesh* aimesh, Ref<Mesh>& meshRef, Ref<Buffer>& bufferRef, Ref<Skin>& skinRef, std::vector<aiMatrix4x4>& inverseBindMatricesData) void ExportSkin(Asset &mAsset, const aiMesh *aimesh, Ref<Mesh> &meshRef, Ref<Buffer> &bufferRef, Ref<Skin> &skinRef, std::vector<aiMatrix4x4> &inverseBindMatricesData) {
{
if (aimesh->mNumBones < 1) { if (aimesh->mNumBones < 1) {
return; return;
} }
@ -975,8 +971,7 @@ void ExportSkin(Asset& mAsset, const aiMesh* aimesh, Ref<Mesh>& meshRef, Ref<Buf
delete[] vertexJointData; delete[] vertexJointData;
} }
void glTF2Exporter::ExportMeshes() void glTF2Exporter::ExportMeshes() {
{
typedef decltype(aiFace::mNumIndices) IndicesType; typedef decltype(aiFace::mNumIndices) IndicesType;
std::string fname = std::string(mFilename); std::string fname = std::string(mFilename);
@ -1081,11 +1076,14 @@ void glTF2Exporter::ExportMeshes()
switch (aim->mPrimitiveTypes) { switch (aim->mPrimitiveTypes) {
case aiPrimitiveType_POLYGON: case aiPrimitiveType_POLYGON:
p.mode = PrimitiveMode_TRIANGLES; break; // TODO implement this p.mode = PrimitiveMode_TRIANGLES;
break; // TODO implement this
case aiPrimitiveType_LINE: case aiPrimitiveType_LINE:
p.mode = PrimitiveMode_LINES; break; p.mode = PrimitiveMode_LINES;
break;
case aiPrimitiveType_POINT: case aiPrimitiveType_POINT:
p.mode = PrimitiveMode_POINTS; break; p.mode = PrimitiveMode_POINTS;
break;
default: // aiPrimitiveType_TRIANGLE default: // aiPrimitiveType_TRIANGLE
p.mode = PrimitiveMode_TRIANGLES; p.mode = PrimitiveMode_TRIANGLES;
} }
@ -1208,8 +1206,7 @@ void glTF2Exporter::ExportMeshes()
} }
// Merges a node's multiple meshes (with one primitive each) into one mesh with multiple primitives // Merges a node's multiple meshes (with one primitive each) into one mesh with multiple primitives
void glTF2Exporter::MergeMeshes() void glTF2Exporter::MergeMeshes() {
{
for (unsigned int n = 0; n < mAsset->nodes.Size(); ++n) { for (unsigned int n = 0; n < mAsset->nodes.Size(); ++n) {
Ref<Node> node = mAsset->nodes.Get(n); Ref<Node> node = mAsset->nodes.Get(n);
@ -1227,8 +1224,7 @@ void glTF2Exporter::MergeMeshes()
firstMesh->primitives.insert( firstMesh->primitives.insert(
firstMesh->primitives.end(), firstMesh->primitives.end(),
mesh->primitives.begin(), mesh->primitives.begin(),
mesh->primitives.end() mesh->primitives.end());
);
//remove the mesh from the list of meshes //remove the mesh from the list of meshes
unsigned int removedIndex = mAsset->meshes.Remove(mesh->id.c_str()); unsigned int removedIndex = mAsset->meshes.Remove(mesh->id.c_str());
@ -1262,8 +1258,7 @@ void glTF2Exporter::MergeMeshes()
* Export the root node of the node hierarchy. * Export the root node of the node hierarchy.
* Calls ExportNode for all children. * Calls ExportNode for all children.
*/ */
unsigned int glTF2Exporter::ExportNodeHierarchy(const aiNode* n) unsigned int glTF2Exporter::ExportNodeHierarchy(const aiNode *n) {
{
Ref<Node> node = mAsset->nodes.Create(mAsset->FindUniqueID(n->mName.C_Str(), "node")); Ref<Node> node = mAsset->nodes.Create(mAsset->FindUniqueID(n->mName.C_Str(), "node"));
node->name = n->mName.C_Str(); node->name = n->mName.C_Str();
@ -1289,8 +1284,7 @@ unsigned int glTF2Exporter::ExportNodeHierarchy(const aiNode* n)
* Export node and recursively calls ExportNode for all children. * Export node and recursively calls ExportNode for all children.
* Since these nodes are not the root node, we also export the parent Ref<Node> * Since these nodes are not the root node, we also export the parent Ref<Node>
*/ */
unsigned int glTF2Exporter::ExportNode(const aiNode* n, Ref<Node>& parent) unsigned int glTF2Exporter::ExportNode(const aiNode *n, Ref<Node> &parent) {
{
std::string name = mAsset->FindUniqueID(n->mName.C_Str(), "node"); std::string name = mAsset->FindUniqueID(n->mName.C_Str(), "node");
Ref<Node> node = mAsset->nodes.Create(name); Ref<Node> node = mAsset->nodes.Create(name);
@ -1333,9 +1327,7 @@ unsigned int glTF2Exporter::ExportNode(const aiNode* n, Ref<Node>& parent)
return node.GetIndex(); return node.GetIndex();
} }
void glTF2Exporter::ExportScene() {
void glTF2Exporter::ExportScene()
{
// Use the name of the scene if specified // Use the name of the scene if specified
const std::string sceneName = (mScene->mName.length > 0) ? mScene->mName.C_Str() : "defaultScene"; const std::string sceneName = (mScene->mName.length > 0) ? mScene->mName.C_Str() : "defaultScene";
@ -1351,8 +1343,7 @@ void glTF2Exporter::ExportScene()
mAsset->scene = scene; mAsset->scene = scene;
} }
void glTF2Exporter::ExportMetadata() void glTF2Exporter::ExportMetadata() {
{
AssetMetadata &asset = mAsset->asset; AssetMetadata &asset = mAsset->asset;
asset.version = "2.0"; asset.version = "2.0";
@ -1369,13 +1360,11 @@ void glTF2Exporter::ExportMetadata()
} }
} }
inline Ref<Accessor> GetSamplerInputRef(Asset& asset, std::string& animId, Ref<Buffer>& buffer, std::vector<float>& times) inline Ref<Accessor> GetSamplerInputRef(Asset &asset, std::string &animId, Ref<Buffer> &buffer, std::vector<float> &times) {
{
return ExportData(asset, animId, buffer, (unsigned int)times.size(), &times[0], AttribType::SCALAR, AttribType::SCALAR, ComponentType_FLOAT); return ExportData(asset, animId, buffer, (unsigned int)times.size(), &times[0], AttribType::SCALAR, AttribType::SCALAR, ComponentType_FLOAT);
} }
inline void ExtractTranslationSampler(Asset& asset, std::string& animId, Ref<Buffer>& buffer, const aiNodeAnim* nodeChannel, float ticksPerSecond, Animation::Sampler& sampler) inline void ExtractTranslationSampler(Asset &asset, std::string &animId, Ref<Buffer> &buffer, const aiNodeAnim *nodeChannel, float ticksPerSecond, Animation::Sampler &sampler) {
{
const unsigned int numKeyframes = nodeChannel->mNumPositionKeys; const unsigned int numKeyframes = nodeChannel->mNumPositionKeys;
std::vector<float> times(numKeyframes); std::vector<float> times(numKeyframes);
@ -1394,8 +1383,7 @@ inline void ExtractTranslationSampler(Asset& asset, std::string& animId, Ref<Buf
sampler.interpolation = Interpolation_LINEAR; sampler.interpolation = Interpolation_LINEAR;
} }
inline void ExtractScaleSampler(Asset& asset, std::string& animId, Ref<Buffer>& buffer, const aiNodeAnim* nodeChannel, float ticksPerSecond, Animation::Sampler& sampler) inline void ExtractScaleSampler(Asset &asset, std::string &animId, Ref<Buffer> &buffer, const aiNodeAnim *nodeChannel, float ticksPerSecond, Animation::Sampler &sampler) {
{
const unsigned int numKeyframes = nodeChannel->mNumScalingKeys; const unsigned int numKeyframes = nodeChannel->mNumScalingKeys;
std::vector<float> times(numKeyframes); std::vector<float> times(numKeyframes);
@ -1414,8 +1402,7 @@ inline void ExtractScaleSampler(Asset& asset, std::string& animId, Ref<Buffer>&
sampler.interpolation = Interpolation_LINEAR; sampler.interpolation = Interpolation_LINEAR;
} }
inline void ExtractRotationSampler(Asset& asset, std::string& animId, Ref<Buffer>& buffer, const aiNodeAnim* nodeChannel, float ticksPerSecond, Animation::Sampler& sampler) inline void ExtractRotationSampler(Asset &asset, std::string &animId, Ref<Buffer> &buffer, const aiNodeAnim *nodeChannel, float ticksPerSecond, Animation::Sampler &sampler) {
{
const unsigned int numKeyframes = nodeChannel->mNumRotationKeys; const unsigned int numKeyframes = nodeChannel->mNumRotationKeys;
std::vector<float> times(numKeyframes); std::vector<float> times(numKeyframes);
@ -1435,8 +1422,7 @@ inline void ExtractRotationSampler(Asset& asset, std::string& animId, Ref<Buffer
sampler.interpolation = Interpolation_LINEAR; sampler.interpolation = Interpolation_LINEAR;
} }
static void AddSampler(Ref<Animation>& animRef, Ref<Node>& nodeRef, Animation::Sampler& sampler, AnimationPath path) static void AddSampler(Ref<Animation> &animRef, Ref<Node> &nodeRef, Animation::Sampler &sampler, AnimationPath path) {
{
Animation::Channel channel; Animation::Channel channel;
channel.sampler = static_cast<int>(animRef->samplers.size()); channel.sampler = static_cast<int>(animRef->samplers.size());
channel.target.path = path; channel.target.path = path;
@ -1445,8 +1431,7 @@ static void AddSampler(Ref<Animation>& animRef, Ref<Node>& nodeRef, Animation::S
animRef->samplers.push_back(sampler); animRef->samplers.push_back(sampler);
} }
void glTF2Exporter::ExportAnimations() void glTF2Exporter::ExportAnimations() {
{
Ref<Buffer> bufferRef = mAsset->buffers.Get(unsigned(0)); Ref<Buffer> bufferRef = mAsset->buffers.Get(unsigned(0));
for (unsigned int i = 0; i < mScene->mNumAnimations; ++i) { for (unsigned int i = 0; i < mScene->mNumAnimations; ++i) {
@ -1468,22 +1453,19 @@ void glTF2Exporter::ExportAnimations()
Ref<Node> animNode = mAsset->nodes.Get(nodeChannel->mNodeName.C_Str()); Ref<Node> animNode = mAsset->nodes.Get(nodeChannel->mNodeName.C_Str());
if (nodeChannel->mNumPositionKeys > 0) if (nodeChannel->mNumPositionKeys > 0) {
{
Animation::Sampler translationSampler; Animation::Sampler translationSampler;
ExtractTranslationSampler(*mAsset, name, bufferRef, nodeChannel, ticksPerSecond, translationSampler); ExtractTranslationSampler(*mAsset, name, bufferRef, nodeChannel, ticksPerSecond, translationSampler);
AddSampler(animRef, animNode, translationSampler, AnimationPath_TRANSLATION); AddSampler(animRef, animNode, translationSampler, AnimationPath_TRANSLATION);
} }
if (nodeChannel->mNumRotationKeys > 0) if (nodeChannel->mNumRotationKeys > 0) {
{
Animation::Sampler rotationSampler; Animation::Sampler rotationSampler;
ExtractRotationSampler(*mAsset, name, bufferRef, nodeChannel, ticksPerSecond, rotationSampler); ExtractRotationSampler(*mAsset, name, bufferRef, nodeChannel, ticksPerSecond, rotationSampler);
AddSampler(animRef, animNode, rotationSampler, AnimationPath_ROTATION); AddSampler(animRef, animNode, rotationSampler, AnimationPath_ROTATION);
} }
if (nodeChannel->mNumScalingKeys > 0) if (nodeChannel->mNumScalingKeys > 0) {
{
Animation::Sampler scaleSampler; Animation::Sampler scaleSampler;
ExtractScaleSampler(*mAsset, name, bufferRef, nodeChannel, ticksPerSecond, scaleSampler); ExtractScaleSampler(*mAsset, name, bufferRef, nodeChannel, ticksPerSecond, scaleSampler);
AddSampler(animRef, animNode, scaleSampler, AnimationPath_SCALE); AddSampler(animRef, animNode, scaleSampler, AnimationPath_SCALE);
@ -1498,6 +1480,5 @@ void glTF2Exporter::ExportAnimations()
} // End: for-loop mNumAnimations } // End: for-loop mNumAnimations
} }
#endif // ASSIMP_BUILD_NO_GLTF_EXPORTER #endif // ASSIMP_BUILD_NO_GLTF_EXPORTER
#endif // ASSIMP_BUILD_NO_EXPORT #endif // ASSIMP_BUILD_NO_EXPORT

View File

@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -48,23 +47,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_IMPORTER) #if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_IMPORTER)
#include <assimp/types.h>
#include <assimp/material.h> #include <assimp/material.h>
#include <assimp/types.h>
#include <sstream>
#include <vector>
#include <map> #include <map>
#include <memory> #include <memory>
#include <sstream>
#include <vector>
struct aiScene; struct aiScene;
struct aiNode; struct aiNode;
struct aiMaterial; struct aiMaterial;
namespace glTF2 namespace glTFCommon {
{
template <class T> template <class T>
class Ref; class Ref;
}
namespace glTF2 {
class Asset; class Asset;
struct TexProperty; struct TexProperty;
struct TextureInfo; struct TextureInfo;
@ -81,10 +82,9 @@ namespace glTF2
typedef float(vec2)[2]; typedef float(vec2)[2];
typedef float(vec3)[3]; typedef float(vec3)[3];
typedef float(vec4)[4]; typedef float(vec4)[4];
} } // namespace glTF2
namespace Assimp namespace Assimp {
{
class IOSystem; class IOSystem;
class IOStream; class IOStream;
class ExportProperties; class ExportProperties;
@ -101,10 +101,10 @@ namespace Assimp
protected: protected:
void WriteBinaryData(IOStream *outfile, std::size_t sceneLength); void WriteBinaryData(IOStream *outfile, std::size_t sceneLength);
void GetTexSampler(const aiMaterial& mat, glTF2::Ref<glTF2::Texture> texture, aiTextureType tt, unsigned int slot); void GetTexSampler(const aiMaterial &mat, glTFCommon::Ref<glTF2::Texture> texture, aiTextureType tt, unsigned int slot);
void GetMatTexProp(const aiMaterial &mat, unsigned int &prop, const char *propName, aiTextureType tt, unsigned int idx); void GetMatTexProp(const aiMaterial &mat, unsigned int &prop, const char *propName, aiTextureType tt, unsigned int idx);
void GetMatTexProp(const aiMaterial &mat, float &prop, const char *propName, aiTextureType tt, unsigned int idx); void GetMatTexProp(const aiMaterial &mat, float &prop, const char *propName, aiTextureType tt, unsigned int idx);
void GetMatTex(const aiMaterial& mat, glTF2::Ref<glTF2::Texture>& texture, unsigned int &texCoord, aiTextureType tt, unsigned int slot); void GetMatTex(const aiMaterial &mat, glTFCommon::Ref<glTF2::Texture> &texture, unsigned int &texCoord, aiTextureType tt, unsigned int slot);
void GetMatTex(const aiMaterial &mat, glTF2::TextureInfo &prop, aiTextureType tt, unsigned int slot); void GetMatTex(const aiMaterial &mat, glTF2::TextureInfo &prop, aiTextureType tt, unsigned int slot);
void GetMatTex(const aiMaterial &mat, glTF2::NormalTextureInfo &prop, aiTextureType tt, unsigned int slot); void GetMatTex(const aiMaterial &mat, glTF2::NormalTextureInfo &prop, aiTextureType tt, unsigned int slot);
void GetMatTex(const aiMaterial &mat, glTF2::OcclusionTextureInfo &prop, aiTextureType tt, unsigned int slot); void GetMatTex(const aiMaterial &mat, glTF2::OcclusionTextureInfo &prop, aiTextureType tt, unsigned int slot);
@ -119,7 +119,7 @@ namespace Assimp
void ExportMeshes(); void ExportMeshes();
void MergeMeshes(); void MergeMeshes();
unsigned int ExportNodeHierarchy(const aiNode *n); unsigned int ExportNodeHierarchy(const aiNode *n);
unsigned int ExportNode(const aiNode* node, glTF2::Ref<glTF2::Node>& parent); unsigned int ExportNode(const aiNode *node, glTFCommon::Ref<glTF2::Node> &parent);
void ExportScene(); void ExportScene();
void ExportAnimations(); void ExportAnimations();
@ -133,7 +133,7 @@ namespace Assimp
std::vector<unsigned char> mBodyData; std::vector<unsigned char> mBodyData;
}; };
} } // namespace Assimp
#endif // ASSIMP_BUILD_NO_GLTF_IMPORTER #endif // ASSIMP_BUILD_NO_GLTF_IMPORTER

View File

@ -44,6 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "AssetLib/glTF2/glTF2Importer.h" #include "AssetLib/glTF2/glTF2Importer.h"
#include "PostProcessing/MakeVerboseFormat.h" #include "PostProcessing/MakeVerboseFormat.h"
#include "AssetLib/glTF2/glTF2Asset.h" #include "AssetLib/glTF2/glTF2Asset.h"
#if !defined(ASSIMP_BUILD_NO_EXPORT) #if !defined(ASSIMP_BUILD_NO_EXPORT)
#include "AssetLib/glTF2/glTF2AssetWriter.h" #include "AssetLib/glTF2/glTF2AssetWriter.h"
#endif #endif
@ -57,6 +58,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>
#include <assimp/Importer.hpp> #include <assimp/Importer.hpp>
#include <assimp/commonMetaData.h> #include <assimp/commonMetaData.h>
#include <assimp/DefaultIOSystem.h>
#include <memory> #include <memory>
#include <unordered_map> #include <unordered_map>
@ -141,19 +143,23 @@ static aiTextureMapMode ConvertWrappingMode(SamplerWrap gltfWrapMode) {
} }
} }
inline void SetMaterialColorProperty(Asset & /*r*/, vec4 &prop, aiMaterial *mat, const char *pKey, unsigned int type, unsigned int idx) { inline void SetMaterialColorProperty(Asset & /*r*/, vec4 &prop, aiMaterial *mat,
const char *pKey, unsigned int type, unsigned int idx) {
aiColor4D col; aiColor4D col;
CopyValue(prop, col); CopyValue(prop, col);
mat->AddProperty(&col, 1, pKey, type, idx); mat->AddProperty(&col, 1, pKey, type, idx);
} }
inline void SetMaterialColorProperty(Asset & /*r*/, vec3 &prop, aiMaterial *mat, const char *pKey, unsigned int type, unsigned int idx) { inline void SetMaterialColorProperty(Asset & /*r*/, vec3 &prop, aiMaterial *mat,
const char *pKey, unsigned int type, unsigned int idx) {
aiColor4D col; aiColor4D col;
glTFCommon::CopyValue(prop, col); glTFCommon::CopyValue(prop, col);
mat->AddProperty(&col, 1, pKey, type, idx); mat->AddProperty(&col, 1, pKey, type, idx);
} }
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset & /*r*/, glTF2::TextureInfo prop, aiMaterial *mat, aiTextureType texType, unsigned int texSlot = 0) { inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset & /*r*/,
glTF2::TextureInfo prop, aiMaterial *mat, aiTextureType texType,
unsigned int texSlot = 0) {
if (prop.texture && prop.texture->source) { if (prop.texture && prop.texture->source) {
aiString uri(prop.texture->source->uri); aiString uri(prop.texture->source->uri);
@ -218,7 +224,9 @@ inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset
} }
} }
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r, glTF2::NormalTextureInfo &prop, aiMaterial *mat, aiTextureType texType, unsigned int texSlot = 0) { inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r,
NormalTextureInfo &prop, aiMaterial *mat, aiTextureType texType,
unsigned int texSlot = 0) {
SetMaterialTextureProperty(embeddedTexIdxs, r, (glTF2::TextureInfo)prop, mat, texType, texSlot); SetMaterialTextureProperty(embeddedTexIdxs, r, (glTF2::TextureInfo)prop, mat, texType, texSlot);
if (prop.texture && prop.texture->source) { if (prop.texture && prop.texture->source) {
@ -226,7 +234,9 @@ inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset
} }
} }
inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r, glTF2::OcclusionTextureInfo &prop, aiMaterial *mat, aiTextureType texType, unsigned int texSlot = 0) { inline void SetMaterialTextureProperty(std::vector<int> &embeddedTexIdxs, Asset &r,
OcclusionTextureInfo &prop, aiMaterial *mat, aiTextureType texType,
unsigned int texSlot = 0) {
SetMaterialTextureProperty(embeddedTexIdxs, r, (glTF2::TextureInfo)prop, mat, texType, texSlot); SetMaterialTextureProperty(embeddedTexIdxs, r, (glTF2::TextureInfo)prop, mat, texType, texSlot);
if (prop.texture && prop.texture->source) { if (prop.texture && prop.texture->source) {
@ -338,7 +348,7 @@ static aiMaterial *ImportMaterial(std::vector<int> &embeddedTexIdxs, Asset &r, M
} }
} }
void glTF2Importer::ImportMaterials(glTF2::Asset &r) { void glTF2Importer::ImportMaterials(Asset &r) {
const unsigned int numImportedMaterials = unsigned(r.materials.Size()); const unsigned int numImportedMaterials = unsigned(r.materials.Size());
ASSIMP_LOG_DEBUG("Importing ", numImportedMaterials, " materials"); ASSIMP_LOG_DEBUG("Importing ", numImportedMaterials, " materials");
Material defaultMaterial; Material defaultMaterial;
@ -363,7 +373,8 @@ static inline void SetFaceAndAdvance1(aiFace*& face, unsigned int numVertices, u
++face; ++face;
} }
static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b) { static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices,
unsigned int a, unsigned int b) {
if ((a >= numVertices) || (b >= numVertices)) { if ((a >= numVertices) || (b >= numVertices)) {
return; return;
} }
@ -374,7 +385,8 @@ static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices, u
++face; ++face;
} }
static inline void SetFaceAndAdvance3(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b, unsigned int c) { static inline void SetFaceAndAdvance3(aiFace*& face, unsigned int numVertices, unsigned int a,
unsigned int b, unsigned int c) {
if ((a >= numVertices) || (b >= numVertices) || (c >= numVertices)) { if ((a >= numVertices) || (b >= numVertices) || (c >= numVertices)) {
return; return;
} }
@ -401,8 +413,8 @@ static inline bool CheckValidFacesIndices(aiFace *faces, unsigned nFaces, unsign
#endif // ASSIMP_BUILD_DEBUG #endif // ASSIMP_BUILD_DEBUG
template<typename T> template<typename T>
aiColor4D* GetVertexColorsForType(glTF2::Ref<glTF2::Accessor> input) { aiColor4D* GetVertexColorsForType(Ref<Accessor> input) {
float max = std::numeric_limits<T>::max(); constexpr float max = std::numeric_limits<T>::max();
aiColor4t<T>* colors; aiColor4t<T>* colors;
input->ExtractData(colors); input->ExtractData(colors);
auto output = new aiColor4D[input->count]; auto output = new aiColor4D[input->count];
@ -463,19 +475,19 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
Mesh::Primitive::Attributes &attr = prim.attributes; Mesh::Primitive::Attributes &attr = prim.attributes;
if (attr.position.size() > 0 && attr.position[0]) { if (!attr.position.empty() && attr.position[0]) {
aim->mNumVertices = static_cast<unsigned int>(attr.position[0]->count); aim->mNumVertices = static_cast<unsigned int>(attr.position[0]->count);
attr.position[0]->ExtractData(aim->mVertices); attr.position[0]->ExtractData(aim->mVertices);
} }
if (attr.normal.size() > 0 && attr.normal[0]) { if (!attr.normal.empty() && attr.normal[0]) {
if (attr.normal[0]->count != aim->mNumVertices) { if (attr.normal[0]->count != aim->mNumVertices) {
DefaultLogger::get()->warn("Normal count in mesh \"", mesh.name, "\" does not match the vertex count, normals ignored."); DefaultLogger::get()->warn("Normal count in mesh \"", mesh.name, "\" does not match the vertex count, normals ignored.");
} else { } else {
attr.normal[0]->ExtractData(aim->mNormals); attr.normal[0]->ExtractData(aim->mNormals);
// only extract tangents if normals are present // only extract tangents if normals are present
if (attr.tangent.size() > 0 && attr.tangent[0]) { if (!attr.tangent.empty() && attr.tangent[0]) {
if (attr.tangent[0]->count != aim->mNumVertices) { if (attr.tangent[0]->count != aim->mNumVertices) {
DefaultLogger::get()->warn("Tangent count in mesh \"", mesh.name, "\" does not match the vertex count, tangents ignored."); DefaultLogger::get()->warn("Tangent count in mesh \"", mesh.name, "\" does not match the vertex count, tangents ignored.");
} else { } else {
@ -538,7 +550,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
} }
std::vector<Mesh::Primitive::Target> &targets = prim.targets; std::vector<Mesh::Primitive::Target> &targets = prim.targets;
if (targets.size() > 0) { if (!targets.empty()) {
aim->mNumAnimMeshes = (unsigned int)targets.size(); aim->mNumAnimMeshes = (unsigned int)targets.size();
aim->mAnimMeshes = new aiAnimMesh *[aim->mNumAnimMeshes]; aim->mAnimMeshes = new aiAnimMesh *[aim->mNumAnimMeshes];
std::fill(aim->mAnimMeshes, aim->mAnimMeshes + aim->mNumAnimMeshes, nullptr); std::fill(aim->mAnimMeshes, aim->mAnimMeshes + aim->mNumAnimMeshes, nullptr);
@ -797,7 +809,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) {
} }
void glTF2Importer::ImportCameras(glTF2::Asset &r) { void glTF2Importer::ImportCameras(glTF2::Asset &r) {
if (!r.cameras.Size()) return; if (!r.cameras.Size()) {
return;
}
const unsigned int numCameras = r.cameras.Size(); const unsigned int numCameras = r.cameras.Size();
ASSIMP_LOG_DEBUG("Importing ", numCameras, " cameras"); ASSIMP_LOG_DEBUG("Importing ", numCameras, " cameras");
@ -897,7 +911,9 @@ void glTF2Importer::ImportLights(glTF2::Asset &r) {
static void GetNodeTransform(aiMatrix4x4 &matrix, const glTF2::Node &node) { static void GetNodeTransform(aiMatrix4x4 &matrix, const glTF2::Node &node) {
if (node.matrix.isPresent) { if (node.matrix.isPresent) {
CopyValue(node.matrix.value, matrix); CopyValue(node.matrix.value, matrix);
} else { return;
}
if (node.translation.isPresent) { if (node.translation.isPresent) {
aiVector3D trans; aiVector3D trans;
CopyValue(node.translation.value, trans); CopyValue(node.translation.value, trans);
@ -920,7 +936,6 @@ static void GetNodeTransform(aiMatrix4x4 &matrix, const glTF2::Node &node) {
matrix = matrix * s; matrix = matrix * s;
} }
} }
}
static void BuildVertexWeightMapping(Mesh::Primitive &primitive, std::vector<std::vector<aiVertexWeight>> &map) { static void BuildVertexWeightMapping(Mesh::Primitive &primitive, std::vector<std::vector<aiVertexWeight>> &map) {
Mesh::Primitive::Attributes &attr = primitive.attributes; Mesh::Primitive::Attributes &attr = primitive.attributes;
@ -981,21 +996,21 @@ static std::string GetNodeName(const Node &node) {
void ParseExtensions(aiMetadata *metadata, const CustomExtension &extension) { void ParseExtensions(aiMetadata *metadata, const CustomExtension &extension) {
if (extension.mStringValue.isPresent) { if (extension.mStringValue.isPresent) {
metadata->Add(extension.name.c_str(), aiString(extension.mStringValue.value)); metadata->Add(extension.name, aiString(extension.mStringValue.value));
} else if (extension.mDoubleValue.isPresent) { } else if (extension.mDoubleValue.isPresent) {
metadata->Add(extension.name.c_str(), extension.mDoubleValue.value); metadata->Add(extension.name, extension.mDoubleValue.value);
} else if (extension.mUint64Value.isPresent) { } else if (extension.mUint64Value.isPresent) {
metadata->Add(extension.name.c_str(), extension.mUint64Value.value); metadata->Add(extension.name, extension.mUint64Value.value);
} else if (extension.mInt64Value.isPresent) { } else if (extension.mInt64Value.isPresent) {
metadata->Add(extension.name.c_str(), static_cast<int32_t>(extension.mInt64Value.value)); metadata->Add(extension.name, static_cast<int32_t>(extension.mInt64Value.value));
} else if (extension.mBoolValue.isPresent) { } else if (extension.mBoolValue.isPresent) {
metadata->Add(extension.name.c_str(), extension.mBoolValue.value); metadata->Add(extension.name, extension.mBoolValue.value);
} else if (extension.mValues.isPresent) { } else if (extension.mValues.isPresent) {
aiMetadata val; aiMetadata val;
for (auto const & subExtension : extension.mValues.value) { for (auto const & subExtension : extension.mValues.value) {
ParseExtensions(&val, subExtension); ParseExtensions(&val, subExtension);
} }
metadata->Add(extension.name.c_str(), val); metadata->Add(extension.name, val);
} }
} }
@ -1041,7 +1056,9 @@ aiNode *ImportNode(aiScene *pScene, glTF2::Asset &r, std::vector<unsigned int> &
// GLTF files contain at most 1 mesh per node. // GLTF files contain at most 1 mesh per node.
if (node.meshes.size() > 1) if (node.meshes.size() > 1)
{ {
throw DeadlyImportError("GLTF: Invalid input, found ", node.meshes.size(), " meshes in ", getContextForErrorMessages(node.id, node.name), ", but only 1 mesh per node allowed."); throw DeadlyImportError("GLTF: Invalid input, found ", node.meshes.size(),
" meshes in ", getContextForErrorMessages(node.id, node.name),
", but only 1 mesh per node allowed.");
} }
int mesh_idx = node.meshes[0].GetIndex(); int mesh_idx = node.meshes[0].GetIndex();
int count = meshOffsets[mesh_idx + 1] - meshOffsets[mesh_idx]; int count = meshOffsets[mesh_idx + 1] - meshOffsets[mesh_idx];
@ -1284,7 +1301,7 @@ aiNodeAnim *CreateNodeAnim(glTF2::Asset&, Node &node, AnimationSamplers &sampler
} }
aiMeshMorphAnim *CreateMeshMorphAnim(glTF2::Asset&, Node &node, AnimationSamplers &samplers) { aiMeshMorphAnim *CreateMeshMorphAnim(glTF2::Asset&, Node &node, AnimationSamplers &samplers) {
aiMeshMorphAnim *anim = new aiMeshMorphAnim(); auto *anim = new aiMeshMorphAnim();
try { try {
anim->mName = GetNodeName(node); anim->mName = GetNodeName(node);
@ -1432,7 +1449,7 @@ void glTF2Importer::ImportAnimations(glTF2::Asset &r) {
} }
} }
// Use the latest keyframe for the duration of the animation // Use the latest key-frame for the duration of the animation
double maxDuration = 0; double maxDuration = 0;
unsigned int maxNumberOfKeys = 0; unsigned int maxNumberOfKeys = 0;
for (unsigned int j = 0; j < ai_anim->mNumChannels; ++j) { for (unsigned int j = 0; j < ai_anim->mNumChannels; ++j) {
@ -1521,11 +1538,9 @@ void glTF2Importer::ImportEmbeddedTextures(glTF2::Asset &r) {
if (ext) { if (ext) {
if (strcmp(ext, "jpeg") == 0) { if (strcmp(ext, "jpeg") == 0) {
ext = "jpg"; ext = "jpg";
} } else if(strcmp(ext, "ktx2") == 0) { //basisu: ktx remains
else if(strcmp(ext, "ktx2") == 0) { //basisu: ktx remains
ext = "kx2"; ext = "kx2";
} } else if(strcmp(ext, "basis") == 0) { //basisu
else if(strcmp(ext, "basis") == 0) { //basisu
ext = "bu"; ext = "bu";
} }
@ -1563,7 +1578,6 @@ void glTF2Importer::ImportCommonMetadata(glTF2::Asset& a) {
} }
void glTF2Importer::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) { void glTF2Importer::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) {
ASSIMP_LOG_DEBUG("Reading GLTF2 file"); ASSIMP_LOG_DEBUG("Reading GLTF2 file");
// clean all member arrays // clean all member arrays
@ -1579,10 +1593,7 @@ void glTF2Importer::InternReadFile(const std::string &pFile, aiScene *pScene, IO
pScene->mName = asset.scene->name; pScene->mName = asset.scene->name;
} }
//
// Copy the data out // Copy the data out
//
ImportEmbeddedTextures(asset); ImportEmbeddedTextures(asset);
ImportMaterials(asset); ImportMaterials(asset);

View File

@ -43,13 +43,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define AI_GLTF2IMPORTER_H_INC #define AI_GLTF2IMPORTER_H_INC
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/DefaultIOSystem.h>
struct aiNode; struct aiNode;
namespace glTF2 {
namespace glTF2
{
class Asset; class Asset;
} }
@ -62,21 +59,14 @@ namespace Assimp {
class glTF2Importer : public BaseImporter { class glTF2Importer : public BaseImporter {
public: public:
glTF2Importer(); glTF2Importer();
virtual ~glTF2Importer(); ~glTF2Importer() override;
virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const; bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
protected: protected:
virtual const aiImporterDesc* GetInfo() const; const aiImporterDesc *GetInfo() const override;
virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler ); void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
private: private:
std::vector<unsigned int> meshOffsets;
std::vector<int> embeddedTexIdxs;
aiScene* mScene;
void ImportEmbeddedTextures(glTF2::Asset &a); void ImportEmbeddedTextures(glTF2::Asset &a);
void ImportMaterials(glTF2::Asset &a); void ImportMaterials(glTF2::Asset &a);
void ImportMeshes(glTF2::Asset &a); void ImportMeshes(glTF2::Asset &a);
@ -85,9 +75,13 @@ private:
void ImportNodes(glTF2::Asset &a); void ImportNodes(glTF2::Asset &a);
void ImportAnimations(glTF2::Asset &a); void ImportAnimations(glTF2::Asset &a);
void ImportCommonMetadata(glTF2::Asset &a); void ImportCommonMetadata(glTF2::Asset &a);
private:
std::vector<unsigned int> meshOffsets;
std::vector<int> embeddedTexIdxs;
aiScene *mScene;
}; };
} // Namespace assimp } // namespace Assimp
#endif // AI_GLTF2IMPORTER_H_INC #endif // AI_GLTF2IMPORTER_H_INC

View File

@ -51,7 +51,6 @@ CIOStreamWrapper::~CIOStreamWrapper() {
/* Various places depend on this destructor to close the file */ /* Various places depend on this destructor to close the file */
if (mFile) { if (mFile) {
mIO->mFileSystem->CloseProc(mIO->mFileSystem, mFile); mIO->mFileSystem->CloseProc(mIO->mFileSystem, mFile);
mFile = nullptr;
} }
} }

View File

@ -69,7 +69,6 @@ SET( PUBLIC_HEADERS
${HEADER_PATH}/ColladaMetaData.h ${HEADER_PATH}/ColladaMetaData.h
${HEADER_PATH}/commonMetaData.h ${HEADER_PATH}/commonMetaData.h
${HEADER_PATH}/defs.h ${HEADER_PATH}/defs.h
${HEADER_PATH}/Defines.h
${HEADER_PATH}/cfileio.h ${HEADER_PATH}/cfileio.h
${HEADER_PATH}/light.h ${HEADER_PATH}/light.h
${HEADER_PATH}/material.h ${HEADER_PATH}/material.h

View File

@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -54,11 +52,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace Assimp { namespace Assimp {
void Bitmap::Save(aiTexture *texture, IOStream *file) { bool Bitmap::Save(aiTexture *texture, IOStream *file) {
if (file != nullptr) { if (file == nullptr) {
return false;
}
Header header; Header header;
DIB dib; DIB dib;
dib.size = DIB::dib_size; dib.size = DIB::dib_size;
dib.width = texture->mWidth; dib.width = texture->mWidth;
dib.height = texture->mHeight; dib.height = texture->mHeight;
@ -80,7 +80,8 @@ void Bitmap::Save(aiTexture *texture, IOStream *file) {
WriteHeader(header, file); WriteHeader(header, file);
WriteDIB(dib, file); WriteDIB(dib, file);
WriteData(texture, file); WriteData(texture, file);
}
return true;
} }
template <typename T> template <typename T>

View File

@ -82,7 +82,6 @@ inline int select_fseek<8>(FILE *file, int64_t offset, int origin) {
DefaultIOStream::~DefaultIOStream() { DefaultIOStream::~DefaultIOStream() {
if (mFile) { if (mFile) {
::fclose(mFile); ::fclose(mFile);
mFile = nullptr;
} }
} }

View File

@ -47,7 +47,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <assimp/StandardShapes.h> #include <assimp/StandardShapes.h>
#include <assimp/Defines.h>
#include <assimp/StringComparison.h> #include <assimp/StringComparison.h>
#include <assimp/mesh.h> #include <assimp/mesh.h>

View File

@ -352,7 +352,6 @@ ZipArchiveIOSystem::Implement::Implement(IOSystem *pIOHandler, const char *pFile
ZipArchiveIOSystem::Implement::~Implement() { ZipArchiveIOSystem::Implement::~Implement() {
if (m_ZipFileHandle != nullptr) { if (m_ZipFileHandle != nullptr) {
unzClose(m_ZipFileHandle); unzClose(m_ZipFileHandle);
m_ZipFileHandle = nullptr;
} }
} }

View File

@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -55,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endif #endif
#include "defs.h" #include "defs.h"
#include <stdint.h> #include <cstdint>
#include <cstddef> #include <cstddef>
struct aiTexture; struct aiTexture;
@ -64,6 +62,10 @@ namespace Assimp {
class IOStream; class IOStream;
// ---------------------------------------------------------------------------
/**
* This class is used to store and write bitmap information.
*/
class ASSIMP_API Bitmap { class ASSIMP_API Bitmap {
protected: protected:
@ -114,7 +116,11 @@ protected:
static constexpr std::size_t mBytesPerPixel = 4; static constexpr std::size_t mBytesPerPixel = 4;
public: public:
static void Save(aiTexture* texture, IOStream* file); /// @brief Will save an aiTexture instance as a bitmap.
/// @param texture The pointer to the texture instance
/// @param file The filename to save into.
/// @return true if successfully saved, false if not.
static bool Save(aiTexture* texture, IOStream* file);
protected: protected:
static void WriteHeader(Header& header, IOStream* file); static void WriteHeader(Header& header, IOStream* file);

View File

@ -5,8 +5,6 @@ Open Asset Import Library (assimp)
Copyright (c) 2006-2021, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -44,14 +42,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file Provides cheat implementations for IOSystem and IOStream to /** @file Provides cheat implementations for IOSystem and IOStream to
* redirect exporter output to a blob chain.*/ * redirect exporter output to a blob chain.*/
#pragma once
#ifndef AI_BLOBIOSYSTEM_H_INCLUDED #ifndef AI_BLOBIOSYSTEM_H_INCLUDED
#define AI_BLOBIOSYSTEM_H_INCLUDED #define AI_BLOBIOSYSTEM_H_INCLUDED
#ifdef __GNUC__
#pragma GCC system_header
#endif
#include <assimp/cexport.h> #include <assimp/cexport.h>
#include <stdint.h>
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>
#include <assimp/IOStream.hpp> #include <assimp/IOStream.hpp>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <cstdint>
#include <set> #include <set>
#include <vector> #include <vector>
@ -63,6 +66,10 @@ class BlobIOSystem;
// -------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------
class BlobIOStream : public IOStream { class BlobIOStream : public IOStream {
public: public:
/// @brief The class constructor with all needed parameters
/// @param creator Pointer to the creator instance
/// @param file The filename
/// @param initial The initial size
BlobIOStream(BlobIOSystem *creator, const std::string &file, size_t initial = 4096) : BlobIOStream(BlobIOSystem *creator, const std::string &file, size_t initial = 4096) :
buffer(), buffer(),
cur_size(), cur_size(),
@ -74,7 +81,8 @@ public:
// empty // empty
} }
virtual ~BlobIOStream(); /// @brief The class destructor.
~BlobIOStream() override;
public: public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
@ -89,16 +97,12 @@ public:
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual size_t Read(void *, size_t Read(void *, size_t, size_t) override {
size_t,
size_t) {
return 0; return 0;
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual size_t Write(const void *pvBuffer, size_t Write(const void *pvBuffer, size_t pSize, size_t pCount) override {
size_t pSize,
size_t pCount) {
pSize *= pCount; pSize *= pCount;
if (cursor + pSize > cur_size) { if (cursor + pSize > cur_size) {
Grow(cursor + pSize); Grow(cursor + pSize);
@ -112,8 +116,7 @@ public:
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual aiReturn Seek(size_t pOffset, aiReturn Seek(size_t pOffset, aiOrigin pOrigin) override {
aiOrigin pOrigin) {
switch (pOrigin) { switch (pOrigin) {
case aiOrigin_CUR: case aiOrigin_CUR:
cursor += pOffset; cursor += pOffset;
@ -136,21 +139,22 @@ public:
} }
file_size = std::max(cursor, file_size); file_size = std::max(cursor, file_size);
return AI_SUCCESS; return AI_SUCCESS;
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual size_t Tell() const { size_t Tell() const override {
return cursor; return cursor;
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual size_t FileSize() const { size_t FileSize() const override {
return file_size; return file_size;
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual void Flush() { void Flush() override {
// ignore // ignore
} }
@ -196,15 +200,19 @@ class BlobIOSystem : public IOSystem {
public: public:
/// @brief The default class constructor.
BlobIOSystem() : BlobIOSystem() :
baseName{AI_BLOBIO_MAGIC} { baseName{AI_BLOBIO_MAGIC} {
} }
/// @brief The class constructor with the base name.
/// @param baseName The base name.
BlobIOSystem(const std::string &baseName) : BlobIOSystem(const std::string &baseName) :
baseName(baseName) { baseName(baseName) {
// empty
} }
virtual ~BlobIOSystem() { ~BlobIOSystem() override {
for (BlobEntry &blobby : blobs) { for (BlobEntry &blobby : blobs) {
delete blobby.second; delete blobby.second;
} }
@ -263,18 +271,17 @@ public:
public: public:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual bool Exists(const char *pFile) const { bool Exists(const char *pFile) const override {
return created.find(std::string(pFile)) != created.end(); return created.find(std::string(pFile)) != created.end();
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual char getOsSeparator() const { char getOsSeparator() const override {
return '/'; return '/';
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual IOStream *Open(const char *pFile, IOStream *Open(const char *pFile, const char *pMode) override {
const char *pMode) {
if (pMode[0] != 'w') { if (pMode[0] != 'w') {
return nullptr; return nullptr;
} }
@ -284,7 +291,7 @@ public:
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
virtual void Close(IOStream *pFile) { void Close(IOStream *pFile) override {
delete pFile; delete pFile;
} }
@ -294,7 +301,7 @@ private:
// we don't know in which the files are closed, so we // we don't know in which the files are closed, so we
// can't reliably say that the first must be the master // can't reliably say that the first must be the master
// file ... // file ...
blobs.push_back(BlobEntry(filename, child->GetBlob())); blobs.emplace_back(filename, child->GetBlob());
} }
private: private:
@ -305,7 +312,9 @@ private:
// -------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------
BlobIOStream::~BlobIOStream() { BlobIOStream::~BlobIOStream() {
if (nullptr != creator) {
creator->OnDestruct(file, this); creator->OnDestruct(file, this);
}
delete[] buffer; delete[] buffer;
} }

Some files were not shown because too many files have changed in this diff Show More