summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/assimp/code/ColladaExporter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/assimp/code/ColladaExporter.h')
-rw-r--r--src/3rdparty/assimp/code/ColladaExporter.h155
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() {}
};