diff options
Diffstat (limited to 'src/mesh/assimp-master/code/AssetLib/Ply/PlyParser.h')
-rw-r--r-- | src/mesh/assimp-master/code/AssetLib/Ply/PlyParser.h | 488 |
1 files changed, 0 insertions, 488 deletions
diff --git a/src/mesh/assimp-master/code/AssetLib/Ply/PlyParser.h b/src/mesh/assimp-master/code/AssetLib/Ply/PlyParser.h deleted file mode 100644 index 8634929..0000000 --- a/src/mesh/assimp-master/code/AssetLib/Ply/PlyParser.h +++ /dev/null @@ -1,488 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2022, 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 Defines the helper data structures for importing PLY files */ -#pragma once -#ifndef AI_PLYFILEHELPER_H_INC -#define AI_PLYFILEHELPER_H_INC - -#include <assimp/ParsingUtils.h> -#include <assimp/IOStreamBuffer.h> -#include <vector> - -namespace Assimp { - -//pre-declaration -class PLYImporter; - -// http://local.wasp.uwa.edu.au/~pbourke/dataformats/ply/ -// http://w3.impa.br/~lvelho/outgoing/sossai/old/ViHAP_D4.4.2_PLY_format_v1.1.pdf -// http://www.okino.com/conv/exp_ply.htm -namespace PLY { - -// --------------------------------------------------------------------------------- -/* -name type number of bytes ---------------------------------------- -char character 1 -uchar unsigned character 1 -short short integer 2 -ushort unsigned short integer 2 -int integer 4 -uint unsigned integer 4 -float single-precision float 4 -double double-precision float 8 - -int8 -int16 -uint8 ... forms are also used -*/ -enum EDataType { - EDT_Char = 0x0u, - EDT_UChar, - EDT_Short, - EDT_UShort, - EDT_Int, - EDT_UInt, - EDT_Float, - EDT_Double, - - // Marks invalid entries - EDT_INVALID -}; - -// --------------------------------------------------------------------------------- -/** \brief Specifies semantics for PLY element properties - * - * Semantics define the usage of a property, e.g. x coordinate -*/ -enum ESemantic { - //! vertex position x coordinate - EST_XCoord = 0x0u, - //! vertex position x coordinate - EST_YCoord, - //! vertex position x coordinate - EST_ZCoord, - - //! vertex normal x coordinate - EST_XNormal, - //! vertex normal y coordinate - EST_YNormal, - //! vertex normal z coordinate - EST_ZNormal, - - //! u texture coordinate - EST_UTextureCoord, - //! v texture coordinate - EST_VTextureCoord, - - //! vertex colors, red channel - EST_Red, - //! vertex colors, green channel - EST_Green, - //! vertex colors, blue channel - EST_Blue, - //! vertex colors, alpha channel - EST_Alpha, - - //! vertex index list - EST_VertexIndex, - - //! texture index - EST_TextureIndex, - - //! texture coordinates (stored as element of a face) - EST_TextureCoordinates, - - //! material index - EST_MaterialIndex, - - //! ambient color, red channel - EST_AmbientRed, - //! ambient color, green channel - EST_AmbientGreen, - //! ambient color, blue channel - EST_AmbientBlue, - //! ambient color, alpha channel - EST_AmbientAlpha, - - //! diffuse color, red channel - EST_DiffuseRed, - //! diffuse color, green channel - EST_DiffuseGreen, - //! diffuse color, blue channel - EST_DiffuseBlue, - //! diffuse color, alpha channel - EST_DiffuseAlpha, - - //! specular color, red channel - EST_SpecularRed, - //! specular color, green channel - EST_SpecularGreen, - //! specular color, blue channel - EST_SpecularBlue, - //! specular color, alpha channel - EST_SpecularAlpha, - - //! specular power for phong shading - EST_PhongPower, - - //! opacity between 0 and 1 - EST_Opacity, - - //! Marks invalid entries - EST_INVALID -}; - -// --------------------------------------------------------------------------------- -/** \brief Specifies semantics for PLY elements - * - * Semantics define the usage of an element, e.g. vertex or material -*/ -enum EElementSemantic { - //! The element is a vertex - EEST_Vertex = 0x0u, - - //! The element is a face description (index table) - EEST_Face, - - //! The element is a triangle-strip description (index table) - EEST_TriStrip, - - //! The element is an edge description (ignored) - EEST_Edge, - - //! The element is a material description - EEST_Material, - - //! texture path - EEST_TextureFile, - - //! Marks invalid entries - EEST_INVALID -}; - -// --------------------------------------------------------------------------------- -/** \brief Helper class for a property in a PLY file. - * - * This can e.g. be a part of the vertex declaration - */ -class Property { -public: - //! Default constructor - Property() AI_NO_EXCEPT - : eType (EDT_Int) - , Semantic() - , bIsList(false) - , eFirstType(EDT_UChar) { - // empty - } - - //! Data type of the property - EDataType eType; - - //! Semantical meaning of the property - ESemantic Semantic; - - //! Of the semantic of the property could not be parsed: - //! Contains the semantic specified in the file - std::string szName; - - //! Specifies whether the data type is a list where - //! the first element specifies the size of the list - bool bIsList; - EDataType eFirstType; - - // ------------------------------------------------------------------- - //! Parse a property from a string. The end of the - //! string is either '\n', '\r' or '\0'. Return value is false - //! if the input string is NOT a valid property (E.g. does - //! not start with the "property" keyword) - static bool ParseProperty(std::vector<char> &buffer, Property* pOut); - - // ------------------------------------------------------------------- - //! Parse a data type from a string - static EDataType ParseDataType(std::vector<char> &buffer); - - // ------------------------------------------------------------------- - //! Parse a semantic from a string - static ESemantic ParseSemantic(std::vector<char> &buffer); -}; - -// --------------------------------------------------------------------------------- -/** \brief Helper class for an element in a PLY file. - * - * This can e.g. be the vertex declaration. Elements contain a - * well-defined number of properties. - */ -class Element { -public: - //! Default constructor - Element() AI_NO_EXCEPT - : eSemantic (EEST_INVALID) - , NumOccur(0) { - // empty - } - - //! List of properties assigned to the element - //! std::vector to support operator[] - std::vector<Property> alProperties; - - //! Semantic of the element - EElementSemantic eSemantic; - - //! Of the semantic of the element could not be parsed: - //! Contains the semantic specified in the file - std::string szName; - - //! How many times will the element occur? - unsigned int NumOccur; - - - // ------------------------------------------------------------------- - //! Parse an element from a string. - //! The function will parse all properties contained in the - //! element, too. - static bool ParseElement(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, Element* pOut); - - // ------------------------------------------------------------------- - //! Parse a semantic from a string - static EElementSemantic ParseSemantic(std::vector<char> &buffer); -}; - -// --------------------------------------------------------------------------------- -/** \brief Instance of a property in a PLY file - */ -class PropertyInstance -{ -public: - - //! Default constructor - PropertyInstance() AI_NO_EXCEPT { - // empty - } - - union ValueUnion - { - - //! uInt32 representation of the property. All - // uint types are automatically converted to uint32 - uint32_t iUInt; - - //! Int32 representation of the property. All - // int types are automatically converted to int32 - int32_t iInt; - - //! Float32 representation of the property - float fFloat; - - //! Float64 representation of the property - double fDouble; - - }; - - // ------------------------------------------------------------------- - //! List of all values parsed. Contains only one value - // for non-list properties - std::vector<ValueUnion> avList; - - // ------------------------------------------------------------------- - //! Parse a property instance - static bool ParseInstance(const char* &pCur, - const Property* prop, PropertyInstance* p_pcOut); - - // ------------------------------------------------------------------- - //! Parse a property instance in binary format - static bool ParseInstanceBinary(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, - const char* &pCur, unsigned int &bufferSize, const Property* prop, PropertyInstance* p_pcOut, bool p_bBE); - - // ------------------------------------------------------------------- - //! Get the default value for a given data type - static ValueUnion DefaultValue(EDataType eType); - - // ------------------------------------------------------------------- - //! Parse a value - static bool ParseValue(const char* &pCur, EDataType eType, ValueUnion* out); - - // ------------------------------------------------------------------- - //! Parse a binary value - static bool ParseValueBinary(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, - const char* &pCur, unsigned int &bufferSize, EDataType eType, ValueUnion* out, bool p_bBE); - - // ------------------------------------------------------------------- - //! Convert a property value to a given type TYPE - template <typename TYPE> - static TYPE ConvertTo(ValueUnion v, EDataType eType); -}; - -// --------------------------------------------------------------------------------- -/** \brief Class for an element instance in a PLY file - */ -class ElementInstance { -public: - //! Default constructor - ElementInstance() AI_NO_EXCEPT - : alProperties() { - // empty - } - - //! List of all parsed properties - std::vector< PropertyInstance > alProperties; - - // ------------------------------------------------------------------- - //! Parse an element instance - static bool ParseInstance(const char* &pCur, - const Element* pcElement, ElementInstance* p_pcOut); - - // ------------------------------------------------------------------- - //! Parse a binary element instance - static bool ParseInstanceBinary(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, - const char* &pCur, unsigned int &bufferSize, const Element* pcElement, ElementInstance* p_pcOut, bool p_bBE); -}; - -// --------------------------------------------------------------------------------- -/** \brief Class for an element instance list in a PLY file - */ -class ElementInstanceList -{ -public: - - //! Default constructor - ElementInstanceList() AI_NO_EXCEPT - : alInstances() { - // empty - } - - //! List of all element instances - std::vector< ElementInstance > alInstances; - - // ------------------------------------------------------------------- - //! Parse an element instance list - static bool ParseInstanceList(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, - const Element* pcElement, ElementInstanceList* p_pcOut, PLYImporter* loader); - - // ------------------------------------------------------------------- - //! Parse a binary element instance list - static bool ParseInstanceListBinary(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, - const char* &pCur, unsigned int &bufferSize, const Element* pcElement, ElementInstanceList* p_pcOut, PLYImporter* loader, bool p_bBE); -}; -// --------------------------------------------------------------------------------- -/** \brief Class to represent the document object model of an ASCII or binary - * (both little and big-endian) PLY file - */ -class DOM -{ -public: - - //! Default constructor - DOM() AI_NO_EXCEPT - : alElements() - , alElementData() { - - } - - - //! Contains all elements of the file format - std::vector<Element> alElements; - //! Contains the real data of each element's instance list - std::vector<ElementInstanceList> alElementData; - - //! Parse the DOM for a PLY file. The input string is assumed - //! to be terminated with zero - static bool ParseInstance(IOStreamBuffer<char> &streamBuffer, DOM* p_pcOut, PLYImporter* loader); - static bool ParseInstanceBinary(IOStreamBuffer<char> &streamBuffer, DOM* p_pcOut, PLYImporter* loader, bool p_bBE); - - //! Skip all comment lines after this - static bool SkipComments(std::vector<char> &buffer); - - static bool SkipSpaces(std::vector<char> &buffer); - - static bool SkipLine(std::vector<char> &buffer); - - static bool TokenMatch(std::vector<char> &buffer, const char* token, unsigned int len); - - static bool SkipSpacesAndLineEnd(std::vector<char> &buffer); - -private: - - // ------------------------------------------------------------------- - //! Handle the file header and read all element descriptions - bool ParseHeader(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, bool p_bBE); - - // ------------------------------------------------------------------- - //! Read in all element instance lists - bool ParseElementInstanceLists(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, PLYImporter* loader); - - // ------------------------------------------------------------------- - //! Read in all element instance lists for a binary file format - bool ParseElementInstanceListsBinary(IOStreamBuffer<char> &streamBuffer, std::vector<char> &buffer, const char* &pCur, unsigned int &bufferSize, PLYImporter* loader, bool p_bBE); -}; - -// --------------------------------------------------------------------------------- -template <typename TYPE> -inline TYPE PLY::PropertyInstance::ConvertTo( - PLY::PropertyInstance::ValueUnion v, PLY::EDataType eType) -{ - switch (eType) - { - case EDT_Float: - return (TYPE)v.fFloat; - case EDT_Double: - return (TYPE)v.fDouble; - - case EDT_UInt: - case EDT_UShort: - case EDT_UChar: - return (TYPE)v.iUInt; - - case EDT_Int: - case EDT_Short: - case EDT_Char: - return (TYPE)v.iInt; - default: ; - }; - return (TYPE)0; -} - -} // Namespace PLY -} // Namespace AssImp - -#endif // !! include guard |