diff options
Diffstat (limited to 'src/3rdparty/assimp/code/AMFImporter_Node.hpp')
-rw-r--r-- | src/3rdparty/assimp/code/AMFImporter_Node.hpp | 400 |
1 files changed, 400 insertions, 0 deletions
diff --git a/src/3rdparty/assimp/code/AMFImporter_Node.hpp b/src/3rdparty/assimp/code/AMFImporter_Node.hpp new file mode 100644 index 000000000..522e6ccca --- /dev/null +++ b/src/3rdparty/assimp/code/AMFImporter_Node.hpp @@ -0,0 +1,400 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2017, assimp team + + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ + +/// \file AMFImporter_Node.hpp +/// \brief Elements of scene graph. +/// \date 2016 +/// \author smal.root@gmail.com + +#pragma once +#ifndef INCLUDED_AI_AMF_IMPORTER_NODE_H +#define INCLUDED_AI_AMF_IMPORTER_NODE_H + +// Header files, stdlib. +#include <list> +#include <string> +#include <vector> + +// Header files, Assimp. +#include "assimp/types.h" +#include "assimp/scene.h" + +/// \class CAMFImporter_NodeElement +/// Base class for elements of nodes. +class CAMFImporter_NodeElement { + +public: + /// Define what data type contain node element. + enum EType { + ENET_Color, ///< Color element: <color>. + ENET_Constellation,///< Grouping element: <constellation>. + ENET_Coordinates, ///< Coordinates element: <coordinates>. + ENET_Edge, ///< Edge element: <edge>. + ENET_Instance, ///< Grouping element: <constellation>. + ENET_Material, ///< Material element: <material>. + ENET_Metadata, ///< Metadata element: <metadata>. + ENET_Mesh, ///< Metadata element: <mesh>. + ENET_Object, ///< Element which hold object: <object>. + ENET_Root, ///< Root element: <amf>. + ENET_Triangle, ///< Triangle element: <triangle>. + ENET_TexMap, ///< Texture coordinates element: <texmap> or <map>. + ENET_Texture, ///< Texture element: <texture>. + ENET_Vertex, ///< Vertex element: <vertex>. + ENET_Vertices, ///< Vertex element: <vertices>. + ENET_Volume, ///< Volume element: <volume>. + + ENET_Invalid ///< Element has invalid type and possible contain invalid data. + }; + + const EType Type;///< Type of element. + std::string ID;///< ID of element. + CAMFImporter_NodeElement* Parent;///< Parent element. If nullptr then this node is root. + std::list<CAMFImporter_NodeElement*> Child;///< Child elements. + +public: /// Destructor, virtual.. + virtual ~CAMFImporter_NodeElement() { + // empty + } + +private: + /// Disabled copy constructor. + CAMFImporter_NodeElement(const CAMFImporter_NodeElement& pNodeElement); + + /// Disabled assign operator. + CAMFImporter_NodeElement& operator=(const CAMFImporter_NodeElement& pNodeElement); + + /// Disabled default constructor. + CAMFImporter_NodeElement(); + +protected: + /// In constructor inheritor must set element type. + /// \param [in] pType - element type. + /// \param [in] pParent - parent element. + CAMFImporter_NodeElement(const EType pType, CAMFImporter_NodeElement* pParent) + : Type(pType) + , ID() + , Parent(pParent) + , Child() { + // empty + } +};// class IAMFImporter_NodeElement + +/// \struct CAMFImporter_NodeElement_Constellation +/// A collection of objects or constellations with specific relative locations. +struct CAMFImporter_NodeElement_Constellation : public CAMFImporter_NodeElement +{ + /// \fn CAMFImporter_NodeElement_Constellation(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Constellation(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Constellation, pParent) + {} + +};// struct CAMFImporter_NodeElement_Constellation + +/// \struct CAMFImporter_NodeElement_Instance +/// Part of constellation. +struct CAMFImporter_NodeElement_Instance : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + std::string ObjectID;///< ID of object for instantiation. + /// \var Delta - The distance of translation in the x, y, or z direction, respectively, in the referenced object's coordinate system, to + /// create an instance of the object in the current constellation. + aiVector3D Delta; + + /// \var Rotation - The rotation, in degrees, to rotate the referenced object about its x, y, and z axes, respectively, to create an + /// instance of the object in the current constellation. Rotations shall be executed in order of x first, then y, then z. + aiVector3D Rotation; + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_Instance(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Instance(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Instance, pParent) + {} + +};// struct CAMFImporter_NodeElement_Instance + +/// \struct CAMFImporter_NodeElement_Metadata +/// Structure that define metadata node. +struct CAMFImporter_NodeElement_Metadata : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + std::string Type;///< Type of "Value". + std::string Value;///< Value. + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_Metadata(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Metadata(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Metadata, pParent) + {} + +};// struct CAMFImporter_NodeElement_Metadata + +/// \struct CAMFImporter_NodeElement_Root +/// Structure that define root node. +struct CAMFImporter_NodeElement_Root : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + std::string Unit;///< The units to be used. May be "inch", "millimeter", "meter", "feet", or "micron". + std::string Version;///< Version of format. + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_Root(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Root(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Root, pParent) + {} + +};// struct CAMFImporter_NodeElement_Root + +/// \struct CAMFImporter_NodeElement_Color +/// Structure that define object node. +struct CAMFImporter_NodeElement_Color : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + bool Composed;///< Type of color stored: if true then look for formula in \ref Color_Composed[4], else - in \ref Color. + std::string Color_Composed[4];///< By components formulas of composed color. [0..3] => RGBA. + aiColor4D Color;///< Constant color. + std::string Profile;///< The ICC color space used to interpret the three color channels <r>, <g> and <b>.. + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_Color(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Color(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Color, pParent) + {} + +};// struct CAMFImporter_NodeElement_Color + +/// \struct CAMFImporter_NodeElement_Material +/// Structure that define material node. +struct CAMFImporter_NodeElement_Material : public CAMFImporter_NodeElement +{ + /// \fn CAMFImporter_NodeElement_Material(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Material(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Material, pParent) + {} + +};// struct CAMFImporter_NodeElement_Material + +/// \struct CAMFImporter_NodeElement_Object +/// Structure that define object node. +struct CAMFImporter_NodeElement_Object : public CAMFImporter_NodeElement +{ + /// \fn CAMFImporter_NodeElement_Object(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Object(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Object, pParent) + {} + +};// struct CAMFImporter_NodeElement_Object + +/// \struct CAMFImporter_NodeElement_Mesh +/// Structure that define mesh node. +struct CAMFImporter_NodeElement_Mesh : public CAMFImporter_NodeElement +{ + /// \fn CAMFImporter_NodeElement_Mesh(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Mesh(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Mesh, pParent) + {} + +};// struct CAMFImporter_NodeElement_Mesh + +/// \struct CAMFImporter_NodeElement_Vertex +/// Structure that define vertex node. +struct CAMFImporter_NodeElement_Vertex : public CAMFImporter_NodeElement +{ + /// \fn CAMFImporter_NodeElement_Vertex(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Vertex(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Vertex, pParent) + {} + +};// struct CAMFImporter_NodeElement_Vertex + +/// \struct CAMFImporter_NodeElement_Edge +/// Structure that define edge node. +struct CAMFImporter_NodeElement_Edge : public CAMFImporter_NodeElement +{ + /// \fn CAMFImporter_NodeElement_Edge(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Edge(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Edge, pParent) + {} + +};// struct CAMFImporter_NodeElement_Vertex + +/// \struct CAMFImporter_NodeElement_Vertices +/// Structure that define vertices node. +struct CAMFImporter_NodeElement_Vertices : public CAMFImporter_NodeElement +{ + /// \fn CAMFImporter_NodeElement_Vertices(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Vertices(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Vertices, pParent) + {} + +};// struct CAMFImporter_NodeElement_Vertices + +/// \struct CAMFImporter_NodeElement_Volume +/// Structure that define volume node. +struct CAMFImporter_NodeElement_Volume : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + std::string MaterialID;///< Which material to use. + std::string Type;///< What this volume describes can be “region” or “support”. If none specified, “object” is assumed. + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_Volume(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Volume(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Volume, pParent) + {} + +};// struct CAMFImporter_NodeElement_Volume + +/// \struct CAMFImporter_NodeElement_Coordinates +/// Structure that define coordinates node. +struct CAMFImporter_NodeElement_Coordinates : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + aiVector3D Coordinate;///< Coordinate. + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_Coordinates(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Coordinates(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Coordinates, pParent) + {} + +};// struct CAMFImporter_NodeElement_Coordinates + +/// \struct CAMFImporter_NodeElement_TexMap +/// Structure that define texture coordinates node. +struct CAMFImporter_NodeElement_TexMap : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + aiVector3D TextureCoordinate[3];///< Texture coordinates. + std::string TextureID_R;///< Texture ID for red color component. + std::string TextureID_G;///< Texture ID for green color component. + std::string TextureID_B;///< Texture ID for blue color component. + std::string TextureID_A;///< Texture ID for alpha color component. + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_TexMap(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_TexMap(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_TexMap, pParent) + {} + +};// struct CAMFImporter_NodeElement_TexMap + +/// \struct CAMFImporter_NodeElement_Triangle +/// Structure that define triangle node. +struct CAMFImporter_NodeElement_Triangle : public CAMFImporter_NodeElement +{ + /****************** Variables ******************/ + + size_t V[3];///< Triangle vertices. + + /****************** Functions ******************/ + + /// \fn CAMFImporter_NodeElement_Triangle(CAMFImporter_NodeElement* pParent) + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Triangle(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Triangle, pParent) + {} + +};// struct CAMFImporter_NodeElement_Triangle + +/// Structure that define texture node. +struct CAMFImporter_NodeElement_Texture : public CAMFImporter_NodeElement { + size_t Width, Height, Depth;///< Size of the texture. + std::vector<uint8_t> Data;///< Data of the texture. + bool Tiled; + + /// Constructor. + /// \param [in] pParent - pointer to parent node. + CAMFImporter_NodeElement_Texture(CAMFImporter_NodeElement* pParent) + : CAMFImporter_NodeElement(ENET_Texture, pParent) + , Width( 0 ) + , Height( 0 ) + , Depth( 0 ) + , Data() + , Tiled( false ){ + // empty + } +};// struct CAMFImporter_NodeElement_Texture + +#endif // INCLUDED_AI_AMF_IMPORTER_NODE_H |