diff options
Diffstat (limited to 'src/3rdparty/assimp/code/ColladaExporter.h')
-rw-r--r-- | src/3rdparty/assimp/code/ColladaExporter.h | 155 |
1 files changed, 90 insertions, 65 deletions
diff --git a/src/3rdparty/assimp/code/ColladaExporter.h b/src/3rdparty/assimp/code/ColladaExporter.h index acd1bad4c..5e73628eb 100644 --- a/src/3rdparty/assimp/code/ColladaExporter.h +++ b/src/3rdparty/assimp/code/ColladaExporter.h @@ -2,11 +2,11 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2016, assimp team All rights reserved. -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above @@ -23,16 +23,16 @@ following conditions are met: derived from this software without specific prior written permission of the assimp team. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- @@ -44,13 +44,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_COLLADAEXPORTER_H_INC #define AI_COLLADAEXPORTER_H_INC -#include "../include/assimp/ai_assert.h" +#include <assimp/ai_assert.h> +#include <assimp/material.h> +#include <assimp/mesh.h> +#include <assimp/light.h> +#include <assimp/Exporter.hpp> #include <sstream> +#include <vector> +#include <map> struct aiScene; struct aiNode; -namespace Assimp +namespace Assimp { /// Helper class to export a given scene to a Collada file. Just for my personal @@ -58,97 +64,116 @@ namespace Assimp class ColladaExporter { public: - /// Constructor for a specific scene to export - ColladaExporter( const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file); + /// Constructor for a specific scene to export + ColladaExporter( const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file); - /// Destructor - virtual ~ColladaExporter(); + /// Destructor + virtual ~ColladaExporter(); protected: - /// Starts writing the contents - void WriteFile(); + /// Starts writing the contents + void WriteFile(); - /// Writes the asset header - void WriteHeader(); + /// Writes the asset header + void WriteHeader(); - /// Writes the embedded textures - void WriteTextures(); + /// Writes the embedded textures + void WriteTextures(); - /// Writes the material setup - void WriteMaterials(); + /// Writes the material setup + void WriteMaterials(); - /// Writes the geometry library - void WriteGeometryLibrary(); + /// Writes the cameras library + void WriteCamerasLibrary(); - /// Writes the given mesh - void WriteGeometry( size_t pIndex); + // Write a camera entry + void WriteCamera(size_t pIndex); - enum FloatDataType { FloatType_Vector, FloatType_TexCoord2, FloatType_TexCoord3, FloatType_Color }; + /// Writes the cameras library + void WriteLightsLibrary(); - /// Writes a float array of the given type - void WriteFloatArray( const std::string& pIdString, FloatDataType pType, const float* pData, size_t pElementCount); + // Write a camera entry + void WriteLight(size_t pIndex); + void WritePointLight(const aiLight *const light); + void WriteDirectionalLight(const aiLight *const light); + void WriteSpotLight(const aiLight *const light); + void WriteAmbienttLight(const aiLight *const light); - /// Writes the scene library - void WriteSceneLibrary(); + /// Writes the geometry library + void WriteGeometryLibrary(); - /// Recursively writes the given node - void WriteNode( const aiNode* pNode); + /// Writes the given mesh + void WriteGeometry( size_t pIndex); - /// Enters a new xml element, which increases the indentation - void PushTag() { startstr.append( " "); } - /// Leaves an element, decreasing the indentation - void PopTag() { ai_assert( startstr.length() > 1); startstr.erase( startstr.length() - 2); } + enum FloatDataType { FloatType_Vector, FloatType_TexCoord2, FloatType_TexCoord3, FloatType_Color }; - /// Creates a mesh ID for the given mesh - std::string GetMeshId( size_t pIndex) const { return std::string( "meshId" ) + boost::lexical_cast<std::string> (pIndex); } + /// Writes a float array of the given type + void WriteFloatArray( const std::string& pIdString, FloatDataType pType, const float* pData, size_t pElementCount); + + /// Writes the scene library + void WriteSceneLibrary(); + + /// Recursively writes the given node + void WriteNode( const aiScene* scene, aiNode* pNode); + + /// Enters a new xml element, which increases the indentation + void PushTag() { startstr.append( " "); } + /// Leaves an element, decreasing the indentation + void PopTag() { ai_assert( startstr.length() > 1); startstr.erase( startstr.length() - 2); } + + /// Creates a mesh ID for the given mesh + std::string GetMeshId( size_t pIndex) const { return std::string( "meshId" ) + std::to_string(pIndex); } public: - /// Stringstream to write all output into - std::stringstream mOutput; + /// Stringstream to write all output into + std::stringstream mOutput; protected: - /// The IOSystem for output - IOSystem* mIOSystem; + /// The IOSystem for output + IOSystem* mIOSystem; - /// Path of the directory where the scene will be exported - const std::string mPath; + /// Path of the directory where the scene will be exported + const std::string mPath; - /// Name of the file (without extension) where the scene will be exported - const std::string mFile; + /// Name of the file (without extension) where the scene will be exported + const std::string mFile; - /// The scene to be written - const aiScene* mScene; - bool mSceneOwned; + /// The scene to be written + const aiScene* mScene; + bool mSceneOwned; - /// current line start string, contains the current indentation for simple stream insertion - std::string startstr; - /// current line end string for simple stream insertion - std::string endstr; + /// current line start string, contains the current indentation for simple stream insertion + std::string startstr; + /// current line end string for simple stream insertion + std::string endstr; // pair of color and texture - texture precedences color - struct Surface - { + struct Surface + { bool exist; - aiColor4D color; - std::string texture; - size_t channel; + aiColor4D color; + std::string texture; + size_t channel; Surface() { exist = false; channel = 0; } }; struct Property { bool exist; - float value; - Property() { exist = false; } + float value; + Property() + : exist(false) + , value(0.0f) + {} }; - // summarize a material in an convinient way. + // summarize a material in an convinient way. struct Material { std::string name; std::string shading_model; Surface ambient, diffuse, specular, emissive, reflective, transparent, normal; - Property shininess, transparency, index_refraction; + Property shininess, transparency, index_refraction; Material() {} }; |